Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r49dba1e95bb3763b4c150e7a80b84a65264a7ca8 -r61c515bc5b8a9494ca25dbfcc2394f3a7b7c57e7 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 49dba1e95bb3763b4c150e7a80b84a65264a7ca8) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 61c515bc5b8a9494ca25dbfcc2394f3a7b7c57e7) @@ -83,6 +83,8 @@ static BOOL resumeTreatmentAlarmResponseRequest; ///< Flag indicates user has requested treatment resume. static BOOL initiateRinsebackAlarmResponseRequest; ///< Flag indicates user has requested rinseback. static BOOL endTreatmentAlarmResponseRequest; ///< Flag indicates user has requested treatment end. +static BOOL rinsebackToStoppedRequest; ///< Flag indicates user has requested return to treatment from rinseback workflow. +static BOOL rinsebackToEndTreatmentRequest; ///< Flag indicates user has requested end of treatment from rinseback workflow. static U32 pendingParamChangesTimer; ///< User required to confirm UF volume change within 1 minute. static F32 pendingUFVolumeChange; ///< An ultrafiltration volume change (mL) is pending user confirmation. @@ -91,7 +93,7 @@ // ********** private function prototypes ********** -static void resetAlarmResponseFlags( void ); +static void resetSignalFlags( void ); static void broadcastTreatmentSettingsRanges( void ); static TREATMENT_STATE_T handleTreatmentStartState( void ); static TREATMENT_STATE_T handleTreatmentBloodPrimeState( void ); @@ -125,7 +127,7 @@ presMaxUFVolumeML = 0.0; presUFRate = 0.0; - resetAlarmResponseFlags(); + resetSignalFlags(); pendingParamChangesTimer = 0; pendingUFVolumeChange = 0.0; @@ -135,17 +137,19 @@ /*********************************************************************//** * @brief - * The resetAlarmResponseFlags function resets the alarm response flags. + * The resetSignalFlags function resets all signal flags. * @details Inputs: none - * @details Outputs: flags set to FALSE + * @details Outputs: signal flags set to FALSE * @return none *************************************************************************/ -static void resetAlarmResponseFlags( void ) +static void resetSignalFlags( void ) { alarmStopSignalled = FALSE; resumeTreatmentAlarmResponseRequest = FALSE; initiateRinsebackAlarmResponseRequest = FALSE; endTreatmentAlarmResponseRequest = FALSE; + rinsebackToStoppedRequest = FALSE; + rinsebackToEndTreatmentRequest = FALSE; } /*********************************************************************//** @@ -279,6 +283,32 @@ /*********************************************************************//** * @brief + * The signalRinsebackToStopped function signals that user wants to return + * to treatment from rinseback workflow. + * @details Inputs: none + * @details Outputs: flag + * @return none + *************************************************************************/ +void signalRinsebackToStopped( void ) +{ + rinsebackToStoppedRequest = TRUE; +} + +/*********************************************************************//** + * @brief + * The signalRinsebackToEnd function signals that user wants to end the + * treatment from rinseback workflow. + * @details Inputs: none + * @details Outputs: flag + * @return none + *************************************************************************/ +void signalRinsebackToEnd( void ) +{ + rinsebackToEndTreatmentRequest = TRUE; +} + +/*********************************************************************//** + * @brief * The execTreatmentMode function executes the Treatment Mode state machine. * @details Inputs: currentTreatmentState * @details Outputs: currentTreatmentState @@ -337,7 +367,7 @@ } // Alarm response request flags should be handled at this point, reset in case not handled in current state - resetAlarmResponseFlags(); + resetSignalFlags(); // Broadcast treatment data broadcastTreatmentTimeAndState(); @@ -535,6 +565,19 @@ execRinseback(); + if ( TRUE == rinsebackToStoppedRequest ) + { + rinsebackToStoppedRequest = FALSE; + transitionToTreatmentStop(); + result = TREATMENT_STOP_STATE; + } + else if ( TRUE == rinsebackToEndTreatmentRequest ) + { + rinsebackToEndTreatmentRequest = FALSE; + // TODO - transition to end state + result = TREATMENT_END_STATE; + } + return result; }