Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r0ee5103ebceb698eadac7b18398471361811a151 -rc146cc479309c148f45546b70cca93bc57f7888a --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 0ee5103ebceb698eadac7b18398471361811a151) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision c146cc479309c148f45546b70cca93bc57f7888a) @@ -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_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,18 +204,13 @@ checkInletWaterTemperature(); checkInletWaterPressure(); - // Check if any of the alarms are active - if ( ( TRUE == isAlarmActive( ALARM_ID_DG_INLET_WATER_CONDUCTIVITY_IN_LOW_RANGE ) ) || - ( TRUE == isAlarmActive( ALARM_ID_DG_INLET_WATER_CONDUCTIVITY_IN_HIGH_RANGE ) ) || - ( TRUE == isAlarmActive( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_HIGH_RANGE ) ) || - ( TRUE == isAlarmActive( ALARM_ID_DG_INLET_WATER_TEMPERATURE_IN_LOW_RANGE ) ) || - ( TRUE == isAlarmActive( ALARM_ID_DG_OUTLET_PRIMARY_CONDUCTIVITY_OUT_OF_RANGE ) ) || - ( TRUE == isAlarmActive( ALARM_ID_DG_RO_REJECTION_RATIO_OUT_OF_RANGE ) ) || - ( TRUE == isAlarmActive( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_HIGH_RANGE ) ) || - ( TRUE == isAlarmActive( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_LOW_RANGE ) ) ) - { - status = TRUE; - } + 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_INLET_WATER_PRESSURE_IN_HIGH_RANGE ); + status |= isAlarmConditionActive( ALARM_ID_DG_INLET_WATER_PRESSURE_IN_LOW_RANGE ); } return status; @@ -337,7 +336,6 @@ if ( TRUE == startSampleWaterRequest ) { - startSampleWaterRequest = FALSE; waterSampleStartTime = getMSTimerCount(); setValveState( VPI, VALVE_STATE_OPEN ); setValveState( VSP, VALVE_STATE_OPEN ); @@ -351,6 +349,8 @@ state = DG_STANDBY_MODE_STATE_IDLE; } + startSampleWaterRequest = FALSE; + return state; } @@ -366,7 +366,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; @@ -380,6 +380,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