Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -rb7318644527939f0b8b01bd3999a9c187c64f40e -r75fa3e3a7efa1a2397bd9bb2a06babf9eef33eee --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision b7318644527939f0b8b01bd3999a9c187c64f40e) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 75fa3e3a7efa1a2397bd9bb2a06babf9eef33eee) @@ -56,9 +56,16 @@ static BOOL chemDisinfectStartReqReceived = FALSE; ///< Flag indicates user has requested initiation of chemical disinfect mode. static U32 dataPublishCounter = 0; ///< Disinfects data publish counter. static BOOL hasDisinfectCmdBeenSet = FALSE; ///< Flag indicates that a disinfect command has been set. +static DG_DISINFECT_STATE_T dgDisinfectState; ///< DG disinfect state to be boadcast to UI. // ********** private function prototypes ********** +static HD_STANDBY_STATE_T handleStandbyModeWaitForTreatmentState( void ); +static HD_STANDBY_STATE_T handleStandbyModeWaitForDisinfectState( void ); +static HD_STANDBY_STATE_T handleStandbyModeDGFlushInProgressState( void ); +static HD_STANDBY_STATE_T handleStandbyModeDGHeatDisinfectInProgressState( void ); +static HD_STANDBY_STATE_T handleStandbyModeDGChemDisininfectInProgressState( void ); + static void publishDisinfectData( void ); /*********************************************************************//** @@ -75,6 +82,7 @@ flushStartReqReceived = FALSE; dataPublishCounter = 0; hasDisinfectCmdBeenSet = FALSE; + dgDisinfectState = DG_DISINFECT_NOT_RUNNING; } /*********************************************************************//** @@ -132,83 +140,23 @@ break; case STANDBY_WAIT_FOR_TREATMENT_STATE: - if ( TRUE == treatStartReqReceived ) - { - // Initialize treatment modes before starting a new treatment - initTreatParamsMode(); - initPreTreatmentMode(); - initTreatmentMode(); - initPostTreatmentMode(); - // Start treatment workflow with treatment parameters mode - requestNewOperationMode( MODE_TPAR ); - treatStartReqReceived = FALSE; - } + currentStandbyState = handleStandbyModeWaitForTreatmentState(); break; case STANDBY_WAIT_FOR_DISINFECT_STATE: - if ( TRUE == flushStartReqReceived ) - { - if ( FALSE == hasDisinfectCmdBeenSet ) - { - cmdStartDGFlush(); - hasDisinfectCmdBeenSet = TRUE; - } - else if ( DG_MODE_FLUS == getDGOpMode() ) - { - hasDisinfectCmdBeenSet = FALSE; - currentStandbyState = STANDBY_DG_FLUSH_IN_PROGRESS_STATE; - } - } - else if ( TRUE == heatDisinfectStartReqReceived ) - { - if ( FALSE == hasDisinfectCmdBeenSet ) - { - cmdStartDGHeatDisinfect(); - hasDisinfectCmdBeenSet = TRUE; - } - else if ( DG_MODE_HEAT == getDGOpMode() ) - { - hasDisinfectCmdBeenSet = FALSE; - currentStandbyState = STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE; - } - } - else if ( TRUE == chemDisinfectStartReqReceived ) - { - if ( FALSE == hasDisinfectCmdBeenSet ) - { - cmdStartDGChemicalDisinfect(); - hasDisinfectCmdBeenSet = TRUE; - } - else if ( DG_MODE_CHEM == getDGOpMode() ) - { - hasDisinfectCmdBeenSet = FALSE; - currentStandbyState = STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE; - } - } + currentStandbyState = handleStandbyModeWaitForDisinfectState(); break; case STANDBY_DG_FLUSH_IN_PROGRESS_STATE: - if ( getDGOpMode() != DG_MODE_FLUS ) - { - currentStandbyState = STANDBY_WAIT_FOR_TREATMENT_STATE; - } - publishDisinfectData(); + currentStandbyState = handleStandbyModeDGFlushInProgressState(); break; case STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE: - if ( getDGOpMode() != DG_MODE_HEAT ) - { - currentStandbyState = STANDBY_WAIT_FOR_TREATMENT_STATE; - } - publishDisinfectData(); + currentStandbyState = handleStandbyModeDGHeatDisinfectInProgressState(); break; case STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE: - if ( getDGOpMode() != DG_MODE_CHEM ) - { - currentStandbyState = STANDBY_WAIT_FOR_TREATMENT_STATE; - } - publishDisinfectData(); + currentStandbyState = handleStandbyModeDGChemDisininfectInProgressState(); break; default: @@ -387,8 +335,8 @@ /*********************************************************************//** * @brief - * The signalUserInitiateFlushMode function handles user initiation of flush - * mode. + * The signalUserInitiateFlushMode function handles user initiation of heat + * disinfect mode. * @details Inputs: currentStandbyState * @details Outputs: heatDisinfectStartReqReceived * @return TRUE if signal accepted, FALSE if not @@ -420,7 +368,7 @@ /*********************************************************************//** * @brief * The signalUserInitiateChemicalDisinfectMode function handles user - * initiation of flush mode. + * initiation of chemical disinfect mode. * @details Inputs: currentStandbyState * @details Outputs: chemDisinfectStartReqReceived * @return TRUE if signal accepted, FALSE if not @@ -485,6 +433,160 @@ /*********************************************************************//** * @brief + * The handleStandbyModeWaitForTreatmentState function handles wait for + * treatment state. + * @details Inputs: treatStartReqReceived + * @details Outputs: treatStartReqReceived + * @return next state of the standby mode state machine + *************************************************************************/ +static HD_STANDBY_STATE_T handleStandbyModeWaitForTreatmentState( void ) +{ + HD_STANDBY_STATE_T state = STANDBY_WAIT_FOR_TREATMENT_STATE; + + if ( TRUE == treatStartReqReceived ) + { + // Initialize treatment modes before starting a new treatment + initTreatParamsMode(); + initPreTreatmentMode(); + initTreatmentMode(); + initPostTreatmentMode(); + // Start treatment workflow with treatment parameters mode + requestNewOperationMode( MODE_TPAR ); + treatStartReqReceived = FALSE; + } + + return state; +} + +/*********************************************************************//** + * @brief + * The handleStandbyModeWaitForDisinfectState function handles wait for + * disinfect state. + * @details Inputs: flushStartReqReceived, heatDisinfectStartReqReceived, + * chemDisinfectStartReqReceived, hasDisinfectCmdBeenSet + * @details Outputs: flushStartReqReceived, heatDisinfectStartReqReceived, + * chemDisinfectStartReqReceived, hasDisinfectCmdBeenSet, dgDisinfectState, + * currentStandbyState + * @return next state of the standby mode state machine + *************************************************************************/ +static HD_STANDBY_STATE_T handleStandbyModeWaitForDisinfectState( void ) +{ + HD_STANDBY_STATE_T state = STANDBY_WAIT_FOR_DISINFECT_STATE; + + if ( TRUE == flushStartReqReceived ) + { + if ( FALSE == hasDisinfectCmdBeenSet ) + { + cmdStartDGFlush(); + hasDisinfectCmdBeenSet = TRUE; + } + else if ( DG_MODE_FLUS == getDGOpMode() ) + { + hasDisinfectCmdBeenSet = FALSE; + dgDisinfectState = DG_DISINFECT_FLUSH; + currentStandbyState = STANDBY_DG_FLUSH_IN_PROGRESS_STATE; + } + } + else if ( TRUE == heatDisinfectStartReqReceived ) + { + if ( FALSE == hasDisinfectCmdBeenSet ) + { + cmdStartDGHeatDisinfect(); + hasDisinfectCmdBeenSet = TRUE; + } + else if ( DG_MODE_HEAT == getDGOpMode() ) + { + hasDisinfectCmdBeenSet = FALSE; + dgDisinfectState = DG_DISINFECT_HEAT; + currentStandbyState = STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE; + } + } + else if ( TRUE == chemDisinfectStartReqReceived ) + { + if ( FALSE == hasDisinfectCmdBeenSet ) + { + cmdStartDGChemicalDisinfect(); + hasDisinfectCmdBeenSet = TRUE; + } + else if ( DG_MODE_CHEM == getDGOpMode() ) + { + hasDisinfectCmdBeenSet = FALSE; + dgDisinfectState = DG_DISINFECT_CHEM; + currentStandbyState = STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE; + } + } + + return state; +} + +/*********************************************************************//** + * @brief + * The handleStandbyModeDGFlushInProgressState function handles DG flush + * in progress state. + * @details Inputs: none + * @details Outputs: dgDisinfectState, currentStandbyState + * @return next state of the standby mode state machine + *************************************************************************/ +static HD_STANDBY_STATE_T handleStandbyModeDGFlushInProgressState( void ) +{ + HD_STANDBY_STATE_T state = STANDBY_DG_FLUSH_IN_PROGRESS_STATE; + + if ( getDGOpMode() != DG_MODE_FLUS ) + { + dgDisinfectState = DG_DISINFECT_NOT_RUNNING; + currentStandbyState = STANDBY_WAIT_FOR_TREATMENT_STATE; + } + publishDisinfectData(); + + return state; +} + +/*********************************************************************//** + * @brief + * The handleStandbyModeDGHeatDisinfectInProgressState function handles DG + * heat disinfect in progress state. + * @details Inputs: none + * @details Outputs: dgDisinfectState, currentStandbyState + * @return next state of the standby mode state machine + *************************************************************************/ +static HD_STANDBY_STATE_T handleStandbyModeDGHeatDisinfectInProgressState( void ) +{ + HD_STANDBY_STATE_T state = STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE; + + if ( getDGOpMode() != DG_MODE_HEAT ) + { + dgDisinfectState = DG_DISINFECT_NOT_RUNNING; + currentStandbyState = STANDBY_WAIT_FOR_TREATMENT_STATE; + } + publishDisinfectData(); + + return state; +} + +/*********************************************************************//** + * @brief + * The handleStandbyModeDGChemDisininfectInProgressState function handles + * DG chemical disinfect in progress state. + * @details Inputs: none + * @details Outputs: dgDisinfectState, currentStandbyState + * @return next state of the standby mode state machine + *************************************************************************/ +static HD_STANDBY_STATE_T handleStandbyModeDGChemDisininfectInProgressState( void ) +{ + HD_STANDBY_STATE_T state = STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE; + + if ( getDGOpMode() != DG_MODE_CHEM ) + { + dgDisinfectState = DG_DISINFECT_NOT_RUNNING; + currentStandbyState = STANDBY_WAIT_FOR_TREATMENT_STATE; + } + publishDisinfectData(); + + return state; +} + +/*********************************************************************//** + * @brief * The publishDisinfectData function publishes disinfects data at * the set interval. * @details Inputs: dataPublishCounter @@ -513,7 +615,7 @@ break; } - data.disinfectSubModeHDState = (U32)currentStandbyState; + data.disinfectSubModeHDState = (U32)dgDisinfectState; broadcastDisinfectsData( &data );