Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -rb99fd6c434ba1f927e46f3ab80fec1239d63f28f -r3633c7c348e95b11175dfb4a4a183bdb6cd24478 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision b99fd6c434ba1f927e46f3ab80fec1239d63f28f) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 3633c7c348e95b11175dfb4a4a183bdb6cd24478) @@ -7,8 +7,8 @@ * * @file ModeStandby.c * -* @author (last) Dara Navaei -* @date (last) 15-Jul-2022 +* @author (last) Darren Cox +* @date (last) 29-Aug-2022 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -112,6 +112,8 @@ *************************************************************************/ U32 transitionToStandbyMode( void ) { + HD_OP_MODE_T previousOpMode = getPreviousOperationMode(); + // Re-initialize when transitioning to standby mode initStandbyMode(); initDGInterface(); @@ -138,6 +140,12 @@ setValvePosition( VBA, VALVE_POSITION_A_INSERT_EJECT ); setValvePosition( VBV, VALVE_POSITION_A_INSERT_EJECT ); + // If we just exited Post Treatment Mode, goto disinfect sub state. + if ( MODE_POST == previousOpMode ) + { + currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; + } + return currentStandbyState; } @@ -411,28 +419,49 @@ * initiation of setting the disinfects submode. * @details Inputs: currentStandbyState * @details Outputs: currentStandbyState + * @param cmd initiate (1) or cancel (0) * @return TRUE if signal accepted, FALSE if not *************************************************************************/ -BOOL signalInitiateStandbyDisinfectSubmode( void ) +BOOL signalInitiateStandbyDisinfectSubmode( U32 cmd ) { BOOL result = FALSE; REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; - if ( ( MODE_STAN == getCurrentOperationMode() ) && ( STANDBY_WAIT_FOR_TREATMENT_STATE == currentStandbyState ) ) + if ( cmd == 0 ) { - if ( TRUE == isDGCommunicating() ) + // Cancel Disinfect command + if ( STANDBY_WAIT_FOR_DISINFECT_STATE == currentStandbyState ) { - currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; + currentStandbyState = STANDBY_WAIT_FOR_TREATMENT_STATE; result = TRUE; rejReason = REQUEST_REJECT_REASON_NONE; } else { - rejReason = REQUEST_REJECT_REASON_DG_COMM_LOST; + result = FALSE; + rejReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; } } + else + { + // Initiate Disinfect command + if ( ( MODE_STAN == getCurrentOperationMode() ) && ( STANDBY_WAIT_FOR_TREATMENT_STATE == currentStandbyState ) ) + { + if ( TRUE == isDGCommunicating() ) + { + currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; + result = TRUE; + rejReason = REQUEST_REJECT_REASON_NONE; + } + else + { + result = FALSE; + rejReason = REQUEST_REJECT_REASON_DG_COMM_LOST; + } + } + } - sendDisinfectConfirmResponse( result, rejReason ); + handleSetHDStandbyDisinfectSubmodeResponse( result, rejReason ); return result; } @@ -614,6 +643,7 @@ { dgDisinfectState = DG_DISINFECT_NOT_RUNNING_STATE; state = STANDBY_DG_FLUSH_IN_PROGRESS_STATE; + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_DISINFECT_FLUSH, 0 ); } return state; @@ -635,6 +665,7 @@ { dgDisinfectState = DG_DISINFECT_NOT_RUNNING_STATE; state = STANDBY_WAIT_FOR_TREATMENT_STATE; + clearAlarm( ALARM_ID_HD_DISINFECT_FLUSH ); } publishDisinfectData(); @@ -690,6 +721,7 @@ { dgDisinfectState = DG_DISINFECT_NOT_RUNNING_STATE; state = STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE; + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_DISINFECT_HEAT, 0 ); } return state; @@ -711,6 +743,7 @@ { dgDisinfectState = DG_DISINFECT_NOT_RUNNING_STATE; state = STANDBY_WAIT_FOR_TREATMENT_STATE; + clearAlarm( ALARM_ID_HD_DISINFECT_HEAT ); } publishDisinfectData(); @@ -767,6 +800,7 @@ { dgDisinfectState = DG_DISINFECT_NOT_RUNNING_STATE; state = STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE; + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_DISINFECT_CHEM, 0 ); } return state; @@ -788,6 +822,7 @@ { dgDisinfectState = DG_DISINFECT_NOT_RUNNING_STATE; state = STANDBY_WAIT_FOR_TREATMENT_STATE; + clearAlarm( ALARM_ID_HD_DISINFECT_CHEM ); } publishDisinfectData();