Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -rd26566bb6c761238ae6526ce2284ab689f6abf4d -r4b37115aead2565979d889518c492389757a6346 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision d26566bb6c761238ae6526ce2284ab689f6abf4d) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 4b37115aead2565979d889518c492389757a6346) @@ -78,6 +78,7 @@ static DG_STANDBY_MODE_STATE_T handleStandbyFlushFilterState( void ); static DG_STANDBY_MODE_STATE_T handleStandbyFlushFilterIdleState( void ); static DG_STANDBY_MODE_STATE_T handleStandbySampleWaterState( void ); +static DG_STANDBY_MODE_STATE_T handleStandbyPauseState( void ); /*********************************************************************//** * @brief @@ -149,8 +150,7 @@ if ( TRUE == areInletWaterConditionsAlarmsActive() ) { setValveState( VSP, VALVE_STATE_CLOSED ); - stopSampleWaterRequest = FALSE; - standbyState = DG_STANDBY_MODE_STATE_FLUSH_FILTER_IDLE; + standbyState = DG_STANDBY_MODE_STATE_PAUSE; } // execute current Standby state @@ -172,6 +172,10 @@ standbyState = handleStandbySampleWaterState(); break; + case DG_STANDBY_MODE_STATE_PAUSE: + standbyState = handleStandbyPauseState(); + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_STANDBY_MODE_INVALID_EXEC_STATE, standbyState ) standbyState = DG_STANDBY_MODE_STATE_IDLE; @@ -200,14 +204,14 @@ checkInletWaterTemperature(); checkInletWaterPressure(); - status |= isAlarmActive( ALARM_ID_DG_INLET_WATER_CONDUCTIVITY_IN_LOW_RANGE ); - status |= isAlarmActive( ALARM_ID_DG_INLET_WATER_CONDUCTIVITY_IN_HIGH_RANGE ); - status |= isAlarmActive( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE ); - status |= isAlarmActive( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_LOW_RANGE ); - status |= isAlarmActive( ALARM_ID_DG_OUTLET_PRIMARY_CONDUCTIVITY_OUT_OF_RANGE ); - status |= isAlarmActive( ALARM_ID_DG_RO_REJECTION_RATIO_OUT_OF_RANGE ); - status |= isAlarmActive( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_HIGH_RANGE ); - status |= isAlarmActive( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_LOW_RANGE ); + status |= isAlarmConditionActive( ALARM_ID_DG_INLET_WATER_CONDUCTIVITY_IN_LOW_RANGE ); + status |= isAlarmConditionActive( ALARM_ID_DG_INLET_WATER_CONDUCTIVITY_IN_HIGH_RANGE ); + status |= isAlarmConditionActive( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE ); + status |= isAlarmConditionActive( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_LOW_RANGE ); + status |= isAlarmConditionActive( ALARM_ID_DG_OUTLET_PRIMARY_CONDUCTIVITY_OUT_OF_RANGE ); + status |= isAlarmConditionActive( ALARM_ID_DG_RO_REJECTION_RATIO_OUT_OF_RANGE ); + status |= isAlarmConditionActive( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_HIGH_RANGE ); + status |= isAlarmConditionActive( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_LOW_RANGE ); } return status; @@ -331,9 +335,8 @@ { DG_STANDBY_MODE_STATE_T state = DG_STANDBY_MODE_STATE_FLUSH_FILTER_IDLE; - if ( ( TRUE == startSampleWaterRequest ) && ( FALSE == areInletWaterConditionsAlarmsActive() ) ) + if ( TRUE == startSampleWaterRequest ) { - startSampleWaterRequest = FALSE; waterSampleStartTime = getMSTimerCount(); setValveState( VPI, VALVE_STATE_OPEN ); setValveState( VSP, VALVE_STATE_OPEN ); @@ -347,6 +350,8 @@ state = DG_STANDBY_MODE_STATE_IDLE; } + startSampleWaterRequest = FALSE; + return state; } @@ -362,7 +367,7 @@ { DG_STANDBY_MODE_STATE_T state = DG_STANDBY_MODE_STATE_SAMPLE_WATER; - // After HD requests to stop or 10 seconds has elapsed, close and return to idle state + // After HD requests to stop or 10 seconds has elapsed, close and return to idle state if ( ( TRUE == stopSampleWaterRequest ) || ( TRUE == didTimeout( waterSampleStartTime, MAX_WATER_SAMPLE_TIME_MS ) ) ) { stopSampleWaterRequest = FALSE; @@ -376,6 +381,26 @@ /*********************************************************************//** * @brief + * The handleStandbyPauseState function executes the pause state. + * @details Inputs: none + * @details Outputs: filterFlushStartTime + * @return the next state + *************************************************************************/ +static DG_STANDBY_MODE_STATE_T handleStandbyPauseState( void ) +{ + DG_STANDBY_MODE_STATE_T state = DG_STANDBY_MODE_STATE_PAUSE; + + if ( FALSE == areInletWaterConditionsAlarmsActive() ) + { + filterFlushStartTime = getMSTimerCount(); + state = DG_STANDBY_MODE_STATE_FLUSH_FILTER; + } + + return state; +} + +/*********************************************************************//** + * @brief * The requestWaterSample function handles an HD request to sample water. * @details Inputs: standbyState * @details Outputs: pendingSampleWaterRequest