Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -r7ece7d32eb63fe626a54b1f8d0584e1f0f83eb56 -r031091f5f48c6a096ee954c5ef2633295bc0f3b6 --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 7ece7d32eb63fe626a54b1f8d0584e1f0f83eb56) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 031091f5f48c6a096ee954c5ef2633295bc0f3b6) @@ -601,6 +601,7 @@ setValveState( VPO, VALVE_STATE_FILL_C_TO_NC); setValveState( VRD1, VALVE_STATE_OPEN ); setDrainPumpTargetRPM( DRAIN_PUMP_TARGET_RPM ); + SEND_EVENT_WITH_2_U32_DATA( DG_EVENT_NOCTURNAL_HEAT_DISINFECT_STAUS, (U32)noctHeatDisStatus.isNocturnalHeatDisRqustd, 0 ) return state; } @@ -1741,9 +1742,9 @@ *************************************************************************/ static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectCancelModeWaterPathState( void ) { - DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_CANCEL_WATER_PATH; - U32 drainTimeoutMS = ( CANCELLATION_MODE_COLD == cancellationMode ? RSRVRS_INITIAL_DRAIN_TIMEOUT_MS : RSRVRS_MIX_DRAIN_TIMEOUT_MS ); - BOOL isDrainAllowed = TRUE; + DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_CANCEL_WATER_PATH; + U32 drainTimeoutMS = ( CANCELLATION_MODE_COLD == cancellationMode ? RSRVRS_INITIAL_DRAIN_TIMEOUT_MS : RSRVRS_MIX_DRAIN_TIMEOUT_MS ); + BOOL isTemperatureInRangeForDrain = TRUE; // Set the heat disinfect UI state heatDisinfectUIState = HEAT_DISINFECT_UI_STATE_CANCEL_DISINFECT; @@ -1767,7 +1768,7 @@ { if ( TRUE == noctHeatDisStatus.isNocturnalHeatDisRqustd ) { - isDrainAllowed = FALSE; + isTemperatureInRangeForDrain = FALSE; state = DG_HEAT_DISINFECT_STATE_NOCTURNAL_COOL_IDLE; } else @@ -1783,7 +1784,7 @@ stateTimer = getMSTimerCount(); - if ( TRUE == isDrainAllowed ) + if ( TRUE == isTemperatureInRangeForDrain ) { rsrvr1Status = DG_RESERVOIR_ABOVE_TARGET; rsrvr2Status = DG_RESERVOIR_ABOVE_TARGET; @@ -1802,7 +1803,7 @@ } } - if ( TRUE == isDrainAllowed ) + if ( TRUE == isTemperatureInRangeForDrain ) { // If reservoir 2 is empty, set to drain reservoir 1 if ( DG_RESERVOIR_ABOVE_TARGET == rsrvr2Status ) @@ -1878,9 +1879,16 @@ } else #endif + + if ( FALSE == noctHeatDisStatus.isNocturnalHeatDisRqustd ) { requestNewOperationMode( DG_MODE_HCOL ); } + else + { + // After nocturnal run transition to standby since there is not active cool + requestNewOperationMode( DG_MODE_STAN ); + } return state; } @@ -2236,7 +2244,6 @@ uiData.r82CountdownTimeS = ( 0 == timeStatus[ RSRVR_AT_82_C ].startTimeMS ? 0 : ( timeStatus[ RSRVR_AT_82_C ].targetTimeMS - calcTimeSince( timeStatus[ RSRVR_AT_82_C ].startTimeMS ) ) / 1000 ); data.R1FillLevel = rsrvr1RefVolML; data.R2FillLevel = rsrvr2RefVolML; - data.noctHeatDisinfectStatus = (U32)noctHeatDisStatus.isNocturnalHeatDisRqustd; broadcastData( MSG_ID_DG_HEAT_DISINFECT_DATA, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&data, sizeof( MODE_HEAT_DISINFECT_DATA_T ) ); broadcastData( MSG_ID_DG_HEAT_DISINFECT_TIME_DATA, COMM_BUFFER_OUT_CAN_DG_2_UI, (U08*)&uiData, sizeof( MODE_HEAT_DISINFECT_UI_DATA_T ) ); @@ -2326,13 +2333,24 @@ break; case DG_HEAT_DISINFECT_STATE_NOCTURNAL_COOL_CHECK_WATER_TEMP: - setValveState( VBF, VALVE_STATE_OPEN ); + if ( getLoadCellSmallFilteredWeight( LOAD_CELL_RESERVOIR_1_PRIMARY ) >= RSRVRS_FULL_VOL_ML ) + { + setValveState( VRF, VALVE_STATE_R1_C_TO_NC ); + setValveState( VRO, VALVE_STATE_R1_C_TO_NO ); + setValveState( VRI, VALVE_STATE_R2_C_TO_NC ); + setValveState( VRD1, VALVE_STATE_CLOSED ); + setValveState( VRD2, VALVE_STATE_OPEN ); + } + else if ( getLoadCellSmallFilteredWeight( LOAD_CELL_RESERVOIR_2_PRIMARY ) >= RSRVRS_FULL_VOL_ML ) + { + setValveState( VRF, VALVE_STATE_R2_C_TO_NO ); + setValveState( VRO, VALVE_STATE_R2_C_TO_NC ); + setValveState( VRI, VALVE_STATE_R1_C_TO_NO ); + setValveState( VRD1, VALVE_STATE_OPEN ); + setValveState( VRD2, VALVE_STATE_CLOSED ); + } setValveState( VPO, VALVE_STATE_FILL_C_TO_NC ); - setValveState( VRF, VALVE_STATE_R2_C_TO_NO ); - setValveState( VRO, VALVE_STATE_R2_C_TO_NC ); - setValveState( VRI, VALVE_STATE_R1_C_TO_NO ); - setValveState( VRD1, VALVE_STATE_OPEN ); - setValveState( VRD2, VALVE_STATE_CLOSED ); + setValveState( VBF, VALVE_STATE_OPEN ); setValveState( VDR, VALVE_STATE_RECIRC_C_TO_NC ); setValveState( VRC, VALVE_STATE_RECIRC_C_TO_NC ); setROPumpTargetDutyCycle( HEAT_DISINFECT_TARGET_RO_PUMP_DC );