Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -r264d5853c97ab9550878609c9302e87464078734 -rb8a409a6f04c2912cb20eb4c9191bff573080162 --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 264d5853c97ab9550878609c9302e87464078734) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision b8a409a6f04c2912cb20eb4c9191bff573080162) @@ -196,6 +196,7 @@ static DG_RESERVOIR_STATUS_T getRsrvrDrainStatus( DG_RESERVOIR_ID_T r, U32 drainSteadyStateTimeout, U32 timeout ); static HEAT_DISINFECT_STATUS_T getHeatDisinfectStatus( void ); static void publishHeatDisinfectData( void ); +static void monitorModeHeatDisinfect( void ); /*********************************************************************//** * @brief @@ -248,28 +249,10 @@ *************************************************************************/ U32 transitionToHeatDisinfectMode( void ) { - DG_CMD_RESPONSE_T cmdResponse; - - cmdResponse.commandID = MSG_ID_DG_START_STOP_HEAT_DISINFECT; - cmdResponse.rejected = FALSE; - cmdResponse.rejectCode = DG_CMD_REQUEST_REJECT_REASON_NONE; - deenergizeActuators(); initHeatDisinfectMode(); -#ifndef DISABLE_CAP_SWITCHES - if ( ( STATE_CLOSED == getSwitchStatus( CONCENTRATE_CAP ) ) && ( STATE_CLOSED == getSwitchStatus( DIALYSATE_CAP ) ) ) - { - cmdResponse.rejected = TRUE; - cmdResponse.rejectCode = ( STATE_OPEN == getSwitchStatus( DIALYSATE_CAP ) ? REQUEST_REJECT_REASON_DG_DIALYSATE_CAP_OPEN : - REQUEST_REJECT_REASON_DG_CONCENTRATE_CAP_OPEN ); - stopDGHeatDisinfect(); - } - - sendCommandResponseMsg( &cmdResponse ); -#endif - return heatDisinfectState; } @@ -283,6 +266,8 @@ *************************************************************************/ U32 execHeatDisinfectMode( void ) { + monitorModeHeatDisinfect(); + switch ( heatDisinfectState ) { case DG_HEAT_DISINFECT_STATE_START: @@ -2059,4 +2044,29 @@ } } +/*********************************************************************//** + * @brief + * The monitorModeHeatDisinfect function monitors the status of the caps and + * sets the state of the state machine to water cancellation path if the caps + * are not closed during the run. + * @details Inputs: none + * @details Outputs: prevHeatDisinfectState, heatDisinfectState, + * alarmDetectedPendingTrigger + * @return: none + *************************************************************************/ +static void monitorModeHeatDisinfect( void ) +{ + if ( ( STATE_OPEN == getSwitchStatus( CONCENTRATE_CAP ) ) && ( STATE_OPEN == getSwitchStatus( DIALYSATE_CAP ) ) ) + { + // Set the variables to fail and go to cancel water path. Set the pending alarm to no alarm so the cancel water path + // will not be raising the alarm at end of the cancel water path. The recoverable alarm is raised here in this function + U32 cap = (U32)( STATE_OPEN == getSwitchStatus( CONCENTRATE_CAP ) ? CONCENTRATE_CAP : DIALYSATE_CAP ); + prevHeatDisinfectState = heatDisinfectState; + heatDisinfectState = DG_HEAT_DISINFECT_STATE_CANCEL_WATER_PATH; + alarmDetectedPendingTrigger = ALARM_ID_NO_ALARM; + + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_DG_DIALYSATE_OR_CONC_CAP_NOT_IN_PROPER_POSITION, cap ) + } +} + /**@}*/