Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -r7fe3d2932b501e323a6fb0eb47964b32da6798d9 -r4b37115aead2565979d889518c492389757a6346 --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 7fe3d2932b501e323a6fb0eb47964b32da6798d9) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 4b37115aead2565979d889518c492389757a6346) @@ -350,9 +350,14 @@ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_DRAIN_PUMP_MONITOR ) != SW_CONFIG_ENABLE_VALUE ) #endif { - if ( ( getHardwareConfigStatus() != HW_CONFIG_BETA ) && ( getCurrentOperationMode() != DG_MODE_INIT ) ) +#ifndef _RELEASE_ + if ( getHardwareConfigStatus() != HW_CONFIG_BETA ) +#endif { - checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_DRAIN_PUMP_DIR_HALL_SENSOR, dirHallSensorErrorCount ); + if ( getCurrentOperationMode() != DG_MODE_INIT ) + { + checkFPGAPersistentErrorCountAlarm( FPGA_PERS_ERROR_DRAIN_PUMP_DIR_HALL_SENSOR, dirHallSensorErrorCount ); + } } switch( drainPumpState ) @@ -374,10 +379,15 @@ activateSafetyShutdown(); } - if ( ( getHardwareConfigStatus() != HW_CONFIG_BETA ) && ( getCurrentOperationMode() != DG_MODE_INIT ) ) +#ifndef _RELEASE_ + if ( getHardwareConfigStatus() != HW_CONFIG_BETA ) +#endif { - checkPersistentAlarm( ALARM_ID_DG_DRAIN_PUMP_CURRENT_OUT_OF_RANGE, isOffCurrentOut, currentA, DRAIN_PUMP_MAX_CURRENT_WHEN_OFF_A ); - checkPersistentAlarm( ALARM_ID_DG_DRAIN_PUMP_DIRECTION_INVALID, FALSE, getFPGADrainPumpDirection(), DRAIN_PUMP_FORWARD_DIR ); + if ( getCurrentOperationMode() != DG_MODE_INIT ) + { + checkPersistentAlarm( ALARM_ID_DG_DRAIN_PUMP_CURRENT_OUT_OF_RANGE, isOffCurrentOut, currentA, DRAIN_PUMP_MAX_CURRENT_WHEN_OFF_A ); + checkPersistentAlarm( ALARM_ID_DG_DRAIN_PUMP_DIRECTION_INVALID, FALSE, getFPGADrainPumpDirection(), DRAIN_PUMP_FORWARD_DIR ); + } } } break; @@ -395,7 +405,9 @@ isRPMOutOfRange |= ( rpmHallDiff > MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE ? TRUE : FALSE ); +#ifndef _RELEASE_ if ( getHardwareConfigStatus() != HW_CONFIG_BETA ) +#endif { isRPMOutOfRange |= ( rpmMaxonDiff > MAX_ALLOWED_OPEN_LOOP_RPM_OUT_OF_RANGE ? TRUE : FALSE ); } @@ -415,9 +427,14 @@ U32 direction = getDrainPumpMeasuredDirection(); BOOL isDirInvalid = ( direction != DRAIN_PUMP_FORWARD_DIR ? TRUE : FALSE ); - if ( ( getHardwareConfigStatus() != HW_CONFIG_BETA ) && ( getCurrentOperationMode() != DG_MODE_INIT ) ) +#ifndef _RELEASE_ + if ( getHardwareConfigStatus() != HW_CONFIG_BETA ) +#endif { - checkPersistentAlarm( ALARM_ID_DG_DRAIN_PUMP_DIRECTION_INVALID, isDirInvalid, (F32)direction, DRAIN_PUMP_FORWARD_DIR ); + if ( getCurrentOperationMode() != DG_MODE_INIT ) + { + checkPersistentAlarm( ALARM_ID_DG_DRAIN_PUMP_DIRECTION_INVALID, isDirInvalid, (F32)direction, DRAIN_PUMP_FORWARD_DIR ); + } } } break; @@ -430,12 +447,17 @@ break; } - if ( ( getHardwareConfigStatus() != HW_CONFIG_BETA ) && ( getCurrentOperationMode() != DG_MODE_INIT ) ) +#ifndef _RELEASE_ + if ( getHardwareConfigStatus() != HW_CONFIG_BETA ) +#endif { - // Check the persistent alarm for the maximum drain pump current - BOOL isCurrentOutOfRange = ( currentA > DRAIN_PUMP_MAX_CURRENT_A ? TRUE : FALSE ); + if ( getCurrentOperationMode() != DG_MODE_INIT ) + { + // Check the persistent alarm for the maximum drain pump current + BOOL isCurrentOutOfRange = ( currentA > DRAIN_PUMP_MAX_CURRENT_A ? TRUE : FALSE ); - checkPersistentAlarm( ALARM_ID_DG_DRAIN_PUMP_CURRENT_OUT_OF_RANGE, isCurrentOutOfRange, currentA, DRAIN_PUMP_MAX_CURRENT_A ); + checkPersistentAlarm( ALARM_ID_DG_DRAIN_PUMP_CURRENT_OUT_OF_RANGE, isCurrentOutOfRange, currentA, DRAIN_PUMP_MAX_CURRENT_A ); + } } } @@ -570,20 +592,14 @@ { U32 rpm = 0; - switch ( sensor ) + if ( DRAIN_PUMP_HALL_SNSR_FB == sensor ) { - case DRAIN_PUMP_HALL_SNSR_FB: - rpm = getU32OverrideValue( &drainPumpHallMeasuredRPM ); - break; - - case DRAIN_PUMP_MAXON_SNSR_FB: - rpm = getU32OverrideValue( &drainPumpMaxonMeasuredRPM ); - break; - - default: - // Do nothing. Software fault? - break; + rpm = getU32OverrideValue( &drainPumpHallMeasuredRPM ); } + else if ( DRAIN_PUMP_MAXON_SNSR_FB == sensor ) + { + rpm = getU32OverrideValue( &drainPumpMaxonMeasuredRPM ); + } return rpm; } @@ -973,20 +989,18 @@ // Check if the user is logged in if ( ( TRUE == isTestingActivated() ) && ( (DRAIN_PUMP_SPEED_FB_SNSR_T)sensor < NUM_OF_DRAIN_PUMP_SNSR_FB ) ) { - switch( (DRAIN_PUMP_SPEED_FB_SNSR_T)sensor ) + if ( DRAIN_PUMP_HALL_SNSR_FB == (DRAIN_PUMP_SPEED_FB_SNSR_T)sensor ) { - case DRAIN_PUMP_HALL_SNSR_FB: - drainPumpHallMeasuredRPM.ovData = value; - drainPumpHallMeasuredRPM.override = OVERRIDE_KEY; - drainPumpHallMeasuredRPM.ovInitData = drainPumpHallMeasuredRPM.data; - break; - - case DRAIN_PUMP_MAXON_SNSR_FB: - drainPumpMaxonMeasuredRPM.ovData = value; - drainPumpMaxonMeasuredRPM.override = OVERRIDE_KEY; - drainPumpMaxonMeasuredRPM.ovInitData = drainPumpMaxonMeasuredRPM.data; - break; + drainPumpHallMeasuredRPM.ovData = value; + drainPumpHallMeasuredRPM.override = OVERRIDE_KEY; + drainPumpHallMeasuredRPM.ovInitData = drainPumpHallMeasuredRPM.data; } + else if ( DRAIN_PUMP_MAXON_SNSR_FB == (DRAIN_PUMP_SPEED_FB_SNSR_T)sensor ) + { + drainPumpMaxonMeasuredRPM.ovData = value; + drainPumpMaxonMeasuredRPM.override = OVERRIDE_KEY; + drainPumpMaxonMeasuredRPM.ovInitData = drainPumpMaxonMeasuredRPM.data; + } status = TRUE; } @@ -1010,18 +1024,16 @@ // Check if the user is logged in if ( ( TRUE == isTestingActivated() ) && ( (DRAIN_PUMP_SPEED_FB_SNSR_T)sensor < NUM_OF_DRAIN_PUMP_SNSR_FB ) ) { - switch( (DRAIN_PUMP_SPEED_FB_SNSR_T)sensor ) + if ( DRAIN_PUMP_HALL_SNSR_FB == (DRAIN_PUMP_SPEED_FB_SNSR_T)sensor ) { - case DRAIN_PUMP_HALL_SNSR_FB: - drainPumpHallMeasuredRPM.ovData = drainPumpHallMeasuredRPM.ovInitData; - drainPumpHallMeasuredRPM.override = OVERRIDE_RESET; - break; - - case DRAIN_PUMP_MAXON_SNSR_FB: - drainPumpMaxonMeasuredRPM.ovData = drainPumpMaxonMeasuredRPM.ovInitData; - drainPumpMaxonMeasuredRPM.override = OVERRIDE_RESET; - break; + drainPumpHallMeasuredRPM.ovData = drainPumpHallMeasuredRPM.ovInitData; + drainPumpHallMeasuredRPM.override = OVERRIDE_RESET; } + else if ( DRAIN_PUMP_MAXON_SNSR_FB == (DRAIN_PUMP_SPEED_FB_SNSR_T)sensor ) + { + drainPumpMaxonMeasuredRPM.ovData = drainPumpMaxonMeasuredRPM.ovInitData; + drainPumpMaxonMeasuredRPM.override = OVERRIDE_RESET; + } status = TRUE; } Index: firmware/App/Controllers/Thermistors.c =================================================================== diff -u -r7fe3d2932b501e323a6fb0eb47964b32da6798d9 -r4b37115aead2565979d889518c492389757a6346 --- firmware/App/Controllers/Thermistors.c (.../Thermistors.c) (revision 7fe3d2932b501e323a6fb0eb47964b32da6798d9) +++ firmware/App/Controllers/Thermistors.c (.../Thermistors.c) (revision 4b37115aead2565979d889518c492389757a6346) @@ -245,13 +245,13 @@ thermistorsStatus[ THERMISTOR_POWER_SUPPLY_2 ].rawADCRead = getIntADCReading( INT_ADC_POWER_SUPPLY_1_THERMISTOR ); } else +#endif { thermistorsStatus[ THERMISTOR_ONBOARD_NTC ].rawADCRead = getFPGAOnBoardThermistorCount(); thermistorsStatus[ THERMISTOR_POWER_SUPPLY_1 ].rawADCRead = getIntADCReading( INT_ADC_POWER_SUPPLY_1_THERMISTOR ); thermistorsStatus[ THERMISTOR_POWER_SUPPLY_2 ].rawADCRead = getFPGAPowerSupply2ThermistorCount(); } -#endif // Get all the raw readings in ADC // Zero the counter for the next round of reading 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 Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r71e463fdab06840951ae66ee00f528ae31c2b436 -r4b37115aead2565979d889518c492389757a6346 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 71e463fdab06840951ae66ee00f528ae31c2b436) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 4b37115aead2565979d889518c492389757a6346) @@ -290,6 +290,20 @@ { return isAFlaultAlarmActive; +} + +/*********************************************************************//** + * @brief + * The isAlarmConditionActive function determines whether the condition of + * a given alarm is currently active. + * @details Inputs: alarmConditionIsActive[] + * @details Outputs: none + * @param alarm ID of alarm to check + * @return TRUE if given alarm condition is active, FALSE if not + *************************************************************************/ +BOOL isAlarmConditionActive( ALARM_ID_T alarm ) +{ + return alarmConditionIsActive[ alarm ]; } /*********************************************************************//** Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r9e5ee62245eb2a73b167eabd6c274a71a76a7b0e -r4b37115aead2565979d889518c492389757a6346 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 9e5ee62245eb2a73b167eabd6c274a71a76a7b0e) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 4b37115aead2565979d889518c492389757a6346) @@ -100,6 +100,7 @@ void clearAlarmCondition( ALARM_ID_T alarm ); BOOL isAlarmActive( ALARM_ID_T alarm ); BOOL isDGFaultAlarmActive( void ); +BOOL isAlarmConditionActive( ALARM_ID_T alarm ); void handleResendActiveAlarmsRequest( void ); BOOL testSetAlarmStateOverride( U32 alarmID, BOOL value );