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;