Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -rb9fd6bfd063774f1295a1a84de74a257d7b29640 -r62b13b446d1826f58f423435aff88f490063c6f0 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision b9fd6bfd063774f1295a1a84de74a257d7b29640) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 62b13b446d1826f58f423435aff88f490063c6f0) @@ -71,6 +71,7 @@ static BOOL bloodIsPrimed; ///< Flag indicates whether blood-side circuit has been primed with blood. Set FALSE at init and start of rinseback. Set TRUE at end of blood prime. static BOOL rinsebackDone; ///< Flag indicates whether a rinseback has been completed. Set FALSE at start of blood prime. Set TRUE at init and end of rinseback. +static BOOL treatmentCompleted; ///< Flag indicates whether the treatment has completed. static U32 presTreatmentTimeSecs; ///< Prescribed treatment time (in minutes). static U32 presBloodFlowRate; ///< Prescribed blood flow rate (in mL/min). @@ -123,6 +124,7 @@ currentTreatmentState = TREATMENT_START_STATE; bloodIsPrimed = FALSE; + treatmentCompleted = FALSE; rinsebackDone = TRUE; treatmentTimeMS = 0; @@ -211,6 +213,19 @@ /*********************************************************************//** * @brief + * The isTreatmentCompleted function determines whether the treatment has + * completed (indicating treatment duration has elapsed). + * @details Inputs: treatmentCompleted + * @details Outputs: none + * @return treatmentCompleted + *************************************************************************/ +BOOL isTreatmentCompleted( void ) +{ + return treatmentCompleted; +} + +/*********************************************************************//** + * @brief * The getRinsebackCompleted function determines whether a rinseback has been * completed (indicating blood-side circuit should be primarily saline). * @details Inputs: rinsebackDone @@ -529,6 +544,7 @@ // End treatment if treatment duration has been reached if ( CALC_ELAPSED_TREAT_TIME_IN_SECS() >= presTreatmentTimeSecs ) { + treatmentCompleted = TRUE; stopDialysis(); transitionToTreatmentEnd(); SET_ALARM_WITH_1_U32_DATA( ALARM_ID_END_OF_TREATMENT_WARNING, presTreatmentTimeSecs ); @@ -629,7 +645,6 @@ else if ( TRUE == endTreatmentRequest ) { requestNewOperationMode( MODE_POST ); - result = TREATMENT_STOP_STATE; } return result; @@ -659,7 +674,6 @@ else if ( TRUE == endTreatmentRequest ) { requestNewOperationMode( MODE_POST ); - result = TREATMENT_STOP_STATE; } return result; @@ -700,7 +714,6 @@ else if ( TRUE == endTreatmentRequest ) { requestNewOperationMode( MODE_POST ); - result = TREATMENT_STOP_STATE; } return result; @@ -1117,7 +1130,7 @@ // Broadcast treatment time data at interval if ( ++treatmentTimeBroadcastTimerCtr >= TREATMENT_TIME_DATA_PUB_INTERVAL ) { - if ( elapsedTreatmentTimeInSecs < presTreatmentTimeSecs ) + if ( isTreatmentCompleted() != TRUE ) { U32 timeRemaining = presTreatmentTimeSecs - elapsedTreatmentTimeInSecs; Index: firmware/App/Modes/ModeTreatment.h =================================================================== diff -u -r161a56481d1a194704b63a5fd55d4c5583fa94df -r62b13b446d1826f58f423435aff88f490063c6f0 --- firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision 161a56481d1a194704b63a5fd55d4c5583fa94df) +++ firmware/App/Modes/ModeTreatment.h (.../ModeTreatment.h) (revision 62b13b446d1826f58f423435aff88f490063c6f0) @@ -94,6 +94,7 @@ void signalRinsebackToRecirc( void ); // Rinseback sub-mode is signaling to move on to re-circ sub-mode TREATMENT_STATE_T getTreatmentState( void ); // Determine the current treatment sub-mode (state) +BOOL isTreatmentCompleted( void ); // Determine whether the treatment has completed BOOL getRinsebackCompleted( void ); // Determine whether a rinseback has been completed void setRinsebackIsCompleted( BOOL flag ); // Set whether a rinseback has been completed (T blocks rinseback option) BOOL getBloodIsPrimed( void ); // Determine whether the blood-side circuit of the dialyzer has been primed with blood Index: firmware/App/Modes/Rinseback.c =================================================================== diff -u -rb9fd6bfd063774f1295a1a84de74a257d7b29640 -r62b13b446d1826f58f423435aff88f490063c6f0 --- firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision b9fd6bfd063774f1295a1a84de74a257d7b29640) +++ firmware/App/Modes/Rinseback.c (.../Rinseback.c) (revision 62b13b446d1826f58f423435aff88f490063c6f0) @@ -846,15 +846,19 @@ { BOOL result = FALSE; - if ( RINSEBACK_STOP_STATE == rinsebackState ) // TODO - must not be done w/ treatment + if ( TRUE == isTreatmentCompleted() ) { - result = TRUE; - recircRequested = TRUE; + *rejReason = REQUEST_REJECT_REASON_TREATMENT_IS_COMPLETED; } - else + else if ( RINSEBACK_STOP_STATE != rinsebackState ) { *rejReason = REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE; } + else + { + result = TRUE; + recircRequested = TRUE; + } return result; } @@ -873,15 +877,19 @@ { BOOL result = FALSE; - if ( ( RINSEBACK_STOP_INIT_STATE == rinsebackState ) || ( RINSEBACK_STOP_STATE == rinsebackState ) ) // TODO - must not be done w/ treatment + if ( TRUE == isTreatmentCompleted() ) { - result = TRUE; - backToTreatmentRequested = TRUE; + *rejReason = REQUEST_REJECT_REASON_TREATMENT_IS_COMPLETED; } - else + else if ( ( RINSEBACK_STOP_INIT_STATE != rinsebackState ) && ( RINSEBACK_STOP_STATE != rinsebackState ) ) { *rejReason = REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE; } + else + { + result = TRUE; + backToTreatmentRequested = TRUE; + } return result; } @@ -900,14 +908,14 @@ { BOOL result = FALSE; - if ( ( RINSEBACK_STOP_INIT_STATE == rinsebackState ) || ( RINSEBACK_STOP_STATE == rinsebackState ) ) + if ( ( RINSEBACK_STOP_INIT_STATE != rinsebackState ) && ( RINSEBACK_STOP_STATE != rinsebackState ) ) { - result = TRUE; - endTreatmentRequested = TRUE; + *rejReason = REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE; } else { - *rejReason = REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE; + result = TRUE; + endTreatmentRequested = TRUE; } return result;