Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r9489c5aef10d95e89448d709c82686d13e8d4430 -r01391d9a66d4a2d6266366d0f838c08041d2d18c --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 9489c5aef10d95e89448d709c82686d13e8d4430) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 01391d9a66d4a2d6266366d0f838c08041d2d18c) @@ -88,7 +88,7 @@ static HD_STANDBY_STATE_T handleStandbyModeDGCleaningModeInProgressState( void ); static void handleDisinfectCancel( BOOL stop ); -static void setRequestedCleaningMode( DG_OP_MODE_T opMode ); +static void setRequestedCleaningMode( DG_OP_MODE_T opMode, BOOL isHeatDisPassiveCool ); static void clearCurrentCleaningModeStatus( void ); static void handleChemFlushSampleCollection( void ); static void handleROPermeateSampleCollection( void ); @@ -359,7 +359,7 @@ * The signalUserInitiateFlushMode function handles user initiation of flush * mode. * @details Inputs: currentStandbyState - * @details Outputs: flushStartReqReceived, currentStandbyState + * @details Outputs: currentStandbyState * @return TRUE if signal accepted, FALSE if not *************************************************************************/ BOOL signalUserInitiateFlushMode( void ) @@ -373,7 +373,7 @@ { if ( TRUE == isDGCommunicating() ) { - setRequestedCleaningMode( DG_MODE_FLUS ); + setRequestedCleaningMode( DG_MODE_FLUS, FALSE ); result = TRUE; currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; rejReason = REQUEST_REJECT_REASON_NONE; @@ -392,13 +392,13 @@ /*********************************************************************//** * @brief - * The signalUserInitiateFlushMode function handles user initiation of heat - * disinfect mode. + * The signalUserInitiateHeatDisinfectActiveCoolMode function handles user + * initiation of heat disinfect with active cool mode. * @details Inputs: currentStandbyState - * @details Outputs: heatDisinfectStartReqReceived + * @details Outputs: currentStandbyState * @return TRUE if signal accepted, FALSE if not *************************************************************************/ -BOOL signalUserInitiateHeatDisinfectMode( void ) +BOOL signalUserInitiateHeatDisinfectActiveCoolMode( void ) { BOOL result = FALSE; REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; @@ -409,7 +409,7 @@ { if ( TRUE == isDGCommunicating() ) { - setRequestedCleaningMode( DG_MODE_HEAT ); + setRequestedCleaningMode( DG_MODE_HEAT, FALSE ); result = TRUE; currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; rejReason = REQUEST_REJECT_REASON_NONE; @@ -431,7 +431,7 @@ * The signalUserInitiateChemicalDisinfectMode function handles user * initiation of chemical disinfect mode. * @details Inputs: currentStandbyState - * @details Outputs: chemDisinfectStartReqReceived + * @details Outputs: currentStandbyState * @return TRUE if signal accepted, FALSE if not *************************************************************************/ BOOL signalUserInitiateChemicalDisinfectMode( void ) @@ -447,7 +447,7 @@ { if ( TRUE == isChemDisinfectEnabledInInstitRecord() ) { - setRequestedCleaningMode( DG_MODE_CHEM ); + setRequestedCleaningMode( DG_MODE_CHEM, FALSE ); result = TRUE; currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; rejReason = REQUEST_REJECT_REASON_NONE; @@ -474,7 +474,7 @@ * The signalUserInitiateChemicalDisinfectFlushMode function handles user * initiation of chemical disinfect flush mode. * @details Inputs: currentStandbyState - * @details Outputs: chemDisinfectFlushStartReqReceived, currentStandbyState + * @details Outputs: currentStandbyState * @return TRUE if signal accepted, FALSE if not *************************************************************************/ BOOL signalUserInitiateChemicalDisinfectFlushMode( void ) @@ -490,7 +490,7 @@ { if ( TRUE == isChemDisinfectEnabledInInstitRecord() ) { - setRequestedCleaningMode( DG_MODE_CHFL ); + setRequestedCleaningMode( DG_MODE_CHFL, FALSE ); result = TRUE; currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; rejReason = REQUEST_REJECT_REASON_NONE; @@ -517,7 +517,7 @@ * The signalUserInitiateROPermeateSampleMode function handles user * initiation of RO permeate sample mode. * @details Inputs: currentStandbyState - * @details Outputs: roPermeateSampleStartReqReceived, currentStandbyState + * @details Outputs: currentStandbyState * @return TRUE if signal accepted, FALSE if not *************************************************************************/ BOOL signalUserInitiateROPermeateSampleMode( void ) @@ -531,7 +531,7 @@ { if ( TRUE == isDGCommunicating() ) { - setRequestedCleaningMode( DG_MODE_ROPS ); + setRequestedCleaningMode( DG_MODE_ROPS, FALSE ); result = TRUE; currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; rejReason = REQUEST_REJECT_REASON_NONE; @@ -550,6 +550,79 @@ /*********************************************************************//** * @brief + * The signalUserInitiateHeatDisinfectPassiveCoolMode function handles user + * initiation of passive cool heat disinfect mode. + * @details Inputs: currentStandbyState + * @details Outputs: currentStandbyState + * @return TRUE if signal accepted, FALSE if not + *************************************************************************/ +BOOL signalUserInitiateHeatDisinfectPassiveCoolMode( void ) +{ + BOOL result = FALSE; + REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; + + if ( MODE_STAN == getCurrentOperationMode() ) + { + if ( ( STANDBY_WAIT_FOR_DISINFECT_STATE == currentStandbyState ) || ( STANDBY_WAIT_FOR_TREATMENT_STATE == currentStandbyState ) ) + { + if ( TRUE == isDGCommunicating() ) + { + setRequestedCleaningMode( DG_MODE_HEAT, TRUE ); + result = TRUE; + currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; + rejReason = REQUEST_REJECT_REASON_NONE; + } + else + { + rejReason = REQUEST_REJECT_REASON_DG_COMM_LOST; + } + } + } + + sendDisinfectConfirmResponse( result, rejReason ); + + return result; +} + +/*********************************************************************//** + * @brief + * The signalUserInitiateActiveCoolMode function handles user initiation of + * active cool mode. + * @details Inputs: currentStandbyState + * @details Outputs: currentStandbyState + * @return TRUE if signal accepted, FALSE if not + *************************************************************************/ +BOOL signalUserInitiateActiveCoolMode( void ) +{ + BOOL result = FALSE; + REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; + + if ( MODE_STAN == getCurrentOperationMode() ) + { + if ( ( STANDBY_WAIT_FOR_DISINFECT_STATE == currentStandbyState ) || ( STANDBY_WAIT_FOR_TREATMENT_STATE == currentStandbyState ) ) + { + if ( TRUE == isDGCommunicating() ) + { + setRequestedCleaningMode( DG_MODE_HCOL, FALSE ); + result = TRUE; + currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; + rejReason = REQUEST_REJECT_REASON_NONE; + } + else + { + rejReason = REQUEST_REJECT_REASON_DG_COMM_LOST; + } + } + } + + sendDisinfectConfirmResponse( result, rejReason ); + + return result; +} + + +/*********************************************************************//** + * @brief * The signalInitiateStandbyDisinfectSubmode function handles user * initiation of setting the disinfects submode. * @details Inputs: currentStandbyState @@ -706,7 +779,7 @@ case DG_MODE_CHFL: case DG_MODE_HCOL: case DG_MODE_ROPS: - setRequestedCleaningMode( dgOperationMode ); + setRequestedCleaningMode( dgOperationMode, FALSE ); state = STANDBY_WAIT_FOR_DG_CLEANING_MODE_TO_START_STATE; break; @@ -771,7 +844,14 @@ break; case DG_MODE_HEAT: - cmdStartDGHeatDisinfect(); + if ( DG_CMD_START_HEAT_DISINFECT_ACTIVE_COOL == currentDGCleaningMode.startRequestCmdID ) + { + cmdStartDGHeatDisinfectActiveCool(); + } + else + { + cmdStartDGHeatDisinfectPassiveCool(); + } break; case DG_MODE_CHEM: @@ -785,6 +865,10 @@ case DG_MODE_ROPS: cmdStartDGROPermeateSampleMode(); break; + + case DG_MODE_HCOL: + cmdStartDGActiveCool(); + break; } state = STANDBY_WAIT_FOR_DG_CLEANING_MODE_CMD_RESPONSE_STATE; } @@ -799,7 +883,7 @@ case DG_MODE_ROPS: // This is for the situations that any of the disinfect modes are started using the proxy commands while the HD // is in this state of the Standby Mode. - setRequestedCleaningMode( getDGOpMode() ); + setRequestedCleaningMode( getDGOpMode(), FALSE ); state = STANDBY_WAIT_FOR_DG_CLEANING_MODE_TO_START_STATE; currentDGCleaningMode.startCleaningMode = FALSE; break; @@ -891,6 +975,8 @@ { state = STANDBY_WAIT_FOR_TREATMENT_STATE; clearAlarm( currentDGCleaningMode.alarmID ); + // In case alarm 306 has been triggered, and it was not cleared, clear it upon exiting the disinfection mode. + clearAlarm( ALARM_ID_DG_TURN_OFF_INLET_WATER_VALVES ); clearCurrentCleaningModeStatus(); } @@ -978,9 +1064,11 @@ * @details Inputs: currentDGCleaningMode * @details Outputs: none * @param opMode DG operation mode that has been requested (i.e. heat disinfect) + * @param isHeatDisPassiveCool boolean flag to indicate whether this is a passive + * cool heat disinfect or not. * @return none *************************************************************************/ -static void setRequestedCleaningMode( DG_OP_MODE_T opMode ) +static void setRequestedCleaningMode( DG_OP_MODE_T opMode, BOOL isHeatDisPassiveCool ) { switch ( opMode ) { @@ -995,7 +1083,7 @@ case DG_MODE_HEAT: currentDGCleaningMode.startCleaningMode = TRUE; - currentDGCleaningMode.startRequestCmdID = DG_CMD_START_HEAT_DISINFECT; + currentDGCleaningMode.startRequestCmdID = ( FALSE == isHeatDisPassiveCool ? DG_CMD_START_HEAT_DISINFECT_ACTIVE_COOL : DG_CMD_START_HEAT_DISINFECT_PASSIVE_COOL ); currentDGCleaningMode.dgOpMode = DG_MODE_HEAT; currentDGCleaningMode.sampleRqstTrgrd = FALSE; currentDGCleaningMode.alarmID = ALARM_ID_HD_DISINFECT_HEAT; @@ -1021,9 +1109,8 @@ break; case DG_MODE_HCOL: - // Cannot start active cool from settings in the UI currentDGCleaningMode.startCleaningMode = FALSE; - currentDGCleaningMode.startRequestCmdID = DG_CMD_NONE; + currentDGCleaningMode.startRequestCmdID = DG_CMD_START_ACTIVE_COOL; currentDGCleaningMode.dgOpMode = DG_MODE_HCOL; currentDGCleaningMode.sampleRqstTrgrd = FALSE; currentDGCleaningMode.alarmID = ALARM_ID_HD_DISINFECT_HEAT_COOL;