Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -rfb79cc82233d712817d0c9ff6567253aa65bd622 -r94b2082ddcec6ccb947e67714dc85ae005a2c7b6 --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision fb79cc82233d712817d0c9ff6567253aa65bd622) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision 94b2082ddcec6ccb947e67714dc85ae005a2c7b6) @@ -115,7 +115,7 @@ */ /// ADC to RPM conversion coefficient or RPM to ADC conversion. -static const F32 CONVERSION_COEFF = SEC_PER_MIN / ( TOGGLE_PERIOD_RESOLUTION_SECONDS * ROTATIONAL_TO_TOGGLE_PERIOD_CONVERSION ); +static const F32 CONVERSION_COEFF = SEC_PER_MIN / ( 2 * TOGGLE_PERIOD_RESOLUTION_SECONDS * ROTATIONAL_TO_TOGGLE_PERIOD_CONVERSION ); // ********** private function prototypes ********** @@ -254,6 +254,7 @@ /* TODO: The RPM is not converted properly. There will be a story to work on this issue. * This part of code is commented out until the RPM is calculated from ADC correctly. + * There will be a story to address the RPM conversion. */ // The RPM is only checked in open loop state that the pump is run at a fixed RPM. // The persistent alarm waits for a couple of seconds before raising an alarm, this is supposed to cover @@ -351,13 +352,13 @@ /*********************************************************************//** * @brief - * The getTargetDrainPumpDeltaP function gets the current target drain pump - * delta pressure. + * The getTargetDrainPumpOutletPressure function gets the current target + * drain pump delta pressure. * @details Inputs: targetDrainPumpOutletPressure * @details Outputs: none * @return the current target drain pump outlet pressure. *************************************************************************/ -F32 getTargetDrainPumpOutletP( void ) +F32 getTargetDrainPumpOutletPressure( void ) { return targetDrainPumpOutletPressure; } @@ -423,7 +424,7 @@ if ( ++drainControlTimerCounter >= DRP_CONTROL_INTERVAL ) { F32 outletDrainPressure = getMeasuredDGPressure( PRESSURE_SENSOR_DRAIN_PUMP_OUTLET ); - F32 dac = runPIController( PI_CONTROLLER_ID_DRAIN_PUMP, getTargetDrainPumpOutletP(), outletDrainPressure ); + F32 dac = runPIController( PI_CONTROLLER_ID_DRAIN_PUMP, getTargetDrainPumpOutletPressure(), outletDrainPressure ); // The PI controller sends the DAC out and it is rounded to the nearest offset and is fed to the FPGA drainPumpDACSet = (U32)( dac + FLOAT_TO_INT_ROUNDUP_OFFSET ); @@ -586,7 +587,10 @@ if ( TRUE == isTestingActivated() ) { - result = setDrainPumpTargetRPM( value ); + if ( value >= MIN_DRAIN_PUMP_RPM && value <= MAX_DRAIN_PUMP_RPM ) + { + result = setDrainPumpTargetRPM( value ); + } } return result; Index: firmware/App/Controllers/DrainPump.h =================================================================== diff -u -r3d8b84b8ce7ee9526fbabccb9e51d691a3df6305 -r94b2082ddcec6ccb947e67714dc85ae005a2c7b6 --- firmware/App/Controllers/DrainPump.h (.../DrainPump.h) (revision 3d8b84b8ce7ee9526fbabccb9e51d691a3df6305) +++ firmware/App/Controllers/DrainPump.h (.../DrainPump.h) (revision 94b2082ddcec6ccb947e67714dc85ae005a2c7b6) @@ -61,7 +61,7 @@ U32 getTargetDrainPumpRPM( void ); -F32 getTargetDrainPumpOutletP( void ); +F32 getTargetDrainPumpOutletPressure( void ); BOOL testSetDrainPumpDataPublishIntervalOverride( U32 value ); BOOL testResetDrainPumpDataPublishIntervalOverride( void ); Index: firmware/App/Controllers/Fans.c =================================================================== diff -u -r9ce06772b2f651c57144327e6cbf886e2bc22dee -r94b2082ddcec6ccb947e67714dc85ae005a2c7b6 --- firmware/App/Controllers/Fans.c (.../Fans.c) (revision 9ce06772b2f651c57144327e6cbf886e2bc22dee) +++ firmware/App/Controllers/Fans.c (.../Fans.c) (revision 94b2082ddcec6ccb947e67714dc85ae005a2c7b6) @@ -481,7 +481,7 @@ /*for ( fan = FAN_INLET_1; fan < NUM_OF_FANS_NAMES; fan++ ) { - BOOL const fanRpmOutOfRange = ( fansStatus.rpm[ fan ] >= FANS_MAX_ALLOWED_RPM ) && ( fansStatus.rpm[ fan ] <= FANS_MIN_ALLOWED_RPM ); + BOOL const fanRpmOutOfRange = ( fansStatus.rpm[ fan ] >= FANS_MAX_ALLOWED_RPM ) || ( fansStatus.rpm[ fan ] <= FANS_MIN_ALLOWED_RPM ); checkPersistentAlarm( ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE, fanRpmOutOfRange, fansStatus.rpm[ fan ], FANS_MAX_ALLOWED_RPM ); }*/ Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -rfd5c3cff1d0beac03fb29c19f49f670568bc4178 -r94b2082ddcec6ccb947e67714dc85ae005a2c7b6 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision fd5c3cff1d0beac03fb29c19f49f670568bc4178) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 94b2082ddcec6ccb947e67714dc85ae005a2c7b6) @@ -52,7 +52,8 @@ #define CONTROLLER_CHECK_INTERVAL_COUNT 10U ///< Time interval count to check the PI controller. #define TEMP_SENSORS_INTERVAL_COUNT 10U ///< Temperature sensors interval count. -#define HEATERS_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / ( 2 * TASK_PRIORITY_INTERVAL ) ) ///< Heaters data publish interval. +/// Heaters data publish interval. +#define HEATERS_DATA_PUBLISH_INTERVAL ( MS_PER_SECOND / ( 2 * TASK_PRIORITY_INTERVAL ) ) #define SMALL_PRIMARY_AND_TRIMMER_HEATERS_POST_TARGET_TEMPERATURE 40U ///< Small primary and trimmer heaters target temperature during POST. #define MAIN_PRIMARY_HEATER_POST_TARGET_TEMPERATURE 35U ///< Main primary heater target temperature during POST. @@ -62,7 +63,8 @@ #define MINIMUM_TARGET_TEMPERATURE 10U ///< Minimum allowed target temperature for the heaters. #define MAXIMUM_TARGET_TEMPERATURE 90U ///< Maximum allowed target temperature for the heaters. -#define HEATERS_ON_WITH_NO_FLOW_TIMEOUT_COUNT ( ( 3 * MS_PER_SECOND ) / TASK_PRIORITY_INTERVAL ) ///< Heaters are on but there is no sufficient flow timeout in counts. +/// Heaters are on but there is no sufficient flow timeout in counts. +#define HEATERS_ON_WITH_NO_FLOW_TIMEOUT_COUNT ( ( 3 * MS_PER_SECOND ) / TASK_PRIORITY_INTERVAL ) /// Heaters self-test enums typedef enum heaters_self_test_states Index: firmware/App/Controllers/Heaters.h =================================================================== diff -u -r87acb1655edbf974497e4300f2c18eea62f8acba -r94b2082ddcec6ccb947e67714dc85ae005a2c7b6 --- firmware/App/Controllers/Heaters.h (.../Heaters.h) (revision 87acb1655edbf974497e4300f2c18eea62f8acba) +++ firmware/App/Controllers/Heaters.h (.../Heaters.h) (revision 94b2082ddcec6ccb947e67714dc85ae005a2c7b6) @@ -58,6 +58,8 @@ #pragma pack(pop) +// ********** public function prototypes ********** + void initHeaters( void ); void setPrimaryHeaterTargetTemperature( F32 targetTemp ); Index: firmware/App/Controllers/LoadCell.c =================================================================== diff -u -r64b37cc2955d04bbc77ea41940b1b1b30c06651b -r94b2082ddcec6ccb947e67714dc85ae005a2c7b6 --- firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 64b37cc2955d04bbc77ea41940b1b1b30c06651b) +++ firmware/App/Controllers/LoadCell.c (.../LoadCell.c) (revision 94b2082ddcec6ccb947e67714dc85ae005a2c7b6) @@ -259,7 +259,7 @@ * weight for a given load cell ID. * @details Inputs: load cell filtered weight * @details Outputs: none - * @param loadCellID ID of load cell to get large filtered weight for + * @param loadCellID ID of load cell to get large filtered weight * @return the large filtered load cell weight for the given load cell ID. *************************************************************************/ F32 getLoadCellLargeFilteredWeight( LOAD_CELL_ID_T loadCellID ) Index: firmware/App/Controllers/Pressures.c =================================================================== diff -u -r484b185f0cf4b2ea0ba9de331573952b1b5124b4 -r94b2082ddcec6ccb947e67714dc85ae005a2c7b6 --- firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 484b185f0cf4b2ea0ba9de331573952b1b5124b4) +++ firmware/App/Controllers/Pressures.c (.../Pressures.c) (revision 94b2082ddcec6ccb947e67714dc85ae005a2c7b6) @@ -314,19 +314,6 @@ broadcastPressureSensorsData( roIn, roOut, drainIn, drainOut ); pressuresDataPublicationTimerCounter = 0; -#ifdef DEBUG_ENABLED -#ifdef PRESSURES_DEBUG -{ - // TODO - temporary debug code - remove later - F32 lc1 = getLoadCellFilteredWeight(LOAD_CELL_RESERVOIR_1_PRIMARY); - F32 lc2 = getLoadCellFilteredWeight(LOAD_CELL_B1); - char debugPresStr[ 256 ]; - - sprintf( debugPresStr, "RO: %5d, %5d, Drain: %5d, %5d, Loads: %6d, %6d\n", (S32)roIn, (S32)roOut, (S32)drainIn, (S32)drainOut, (S32)lc1, (S32)lc2 ); - sendDebugData( (U08*)debugPresStr, strlen(debugPresStr) ); -} -#endif -#endif } } Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -rfd5c3cff1d0beac03fb29c19f49f670568bc4178 -r94b2082ddcec6ccb947e67714dc85ae005a2c7b6 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision fd5c3cff1d0beac03fb29c19f49f670568bc4178) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 94b2082ddcec6ccb947e67714dc85ae005a2c7b6) @@ -575,7 +575,11 @@ } } - checkPersistentAlarm( ALARM_ID_TEMPERATURE_SENSORS_FAULT, !isFPGACountChanging || !isFPGAErrorZero, sensorIndex, TEMPERATURE_SENSORS_FPGA_ERROR_PERSISTENT_PERIOD ); + // Check for FPGA errors + if ( ( FALSE == isFPGACountChanging ) || ( FALSE == isFPGAErrorZero ) ) + { + checkPersistentAlarm( ALARM_ID_TEMPERATURE_SENSORS_FAULT, TRUE, sensorIndex, TEMPERATURE_SENSORS_FPGA_ERROR_PERSISTENT_PERIOD ); + } return isADCValid; } Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -rdf70610b0fd07ef4757da8ab504ecc856e178fe1 -r94b2082ddcec6ccb947e67714dc85ae005a2c7b6 --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision df70610b0fd07ef4757da8ab504ecc856e178fe1) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 94b2082ddcec6ccb947e67714dc85ae005a2c7b6) @@ -34,7 +34,7 @@ // ********** private definitions ********** #define TARGET_DRAIN_PUMP_RPM 1800 ///< Target drain pump speed (in RPM). -#define DRAIN_WEIGHT_UNCHANGE_TIMEOUT ( 2 * MS_PER_SECOND ) ///< Time period of unchanged weight during draining before timeout. +#define DRAIN_WEIGHT_UNCHANGE_TIMEOUT ( 2 * MS_PER_SECOND ) ///< Time period of unchanged weight during draining before timeout. #define TARGET_RO_PRESSURE_PSI 130 ///< Target pressure for RO pump. #define TARGET_RO_FLOW_RATE_L 0.3 ///< Target flow rate for RO pump. Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -r263a8e5e9d7314f92def1b5701db2a92cf537542 -r94b2082ddcec6ccb947e67714dc85ae005a2c7b6 --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 263a8e5e9d7314f92def1b5701db2a92cf537542) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 94b2082ddcec6ccb947e67714dc85ae005a2c7b6) @@ -48,11 +48,11 @@ // Drain R1 & R2 states defines #define DRAIN_PUMP_TARGET_RPM 1800 ///< Drain pump target RPM during drain. -#define RSRVRS_INITIAL_DRAIN_TIME_OUT_MS ( 60 * MS_PER_SECOND ) ///< Reservoirs 1 & 2 initial drain time out in milliseconds. +#define RSRVRS_INITIAL_DRAIN_TIME_OUT_MS ( 2* 60 * MS_PER_SECOND ) ///< Reservoirs 1 & 2 initial drain time out in milliseconds. #define DRAIN_WEIGHT_UNCHANGE_TIMEOUT ( 6 * MS_PER_SECOND ) ///< Time period of unchanged weight during draining before timeout. // Flush drain path state defines -#define FLUSH_DRAIN_WAIT_TIME_MS ( 10 * MS_PER_SECOND ) ///< Flush Drain path wait time in milliseconds. TODo original time was 60 seconds +#define FLUSH_DRAIN_WAIT_TIME_MS ( 60 * MS_PER_SECOND ) ///< Flush Drain path wait time in milliseconds. TODo original time was 60 seconds #define MIN_INLET_TEMPERATURE_C 15.0 ///< Minimum water inlet temperature in C. TODO original temperature was 25 C #define MIN_INLET_CONDUCTIVITY_US_PER_CM 0.0 ///< Minimum water inlet conductivity in uS/cm #define MAX_INLET_CONDUCTIVITY_US_PER_CM 2000.0 ///< Maximum water inlet conductivity in us/cm @@ -80,9 +80,9 @@ #define HEAT_DISINFECT_TARGET_RO_FLOW_LPM 0.9 ///< Heat disinfect target RO flow rate in L/min. TODO original value was 0.8 #define HEAT_DISINFECT_MAX_RO_PRESSURE_PSI 30 ///< Heat disinfect maximum RO pressure in psi. #define HEAT_DISINFECT_TARGET_DRAIN_PRES_PSI 10.0 ///< Heat disinfect target drain outlet pressure in psi. -#define HEAT_DISINFECT_TIME_MS ( 5 * 60 * MS_PER_SECOND ) ///< Heat disinfect time for each section in milliseconds. TODO original time was 10 minutes +#define HEAT_DISINFECT_TIME_MS ( 10 * 60 * MS_PER_SECOND ) ///< Heat disinfect time for each section in milliseconds. TODO original time was 10 minutes #define HEAT_DISINFECT_START_TEMP_TIMOUT_MS ( 4 * 60 * 60 * MS_PER_SECOND ) ///< Heat disinfect reaching to minimum temperature timeout in milliseconds. TODO figure out this timeout -#define RSRVRS_TARGET_VOL_OUT_TIMEOUT_MS ( 0.5 * 60 * MS_PER_SECOND ) ///< Reservoirs 1 & 2 maximum volume out of range timeout during heat disnfect. TODO change this to 5 seconds +#define RSRVRS_TARGET_VOL_OUT_TIMEOUT_MS ( 0.5 * 60 * MS_PER_SECOND ) ///< Reservoirs 1 & 2 maximum volume out of range timeout during heat disinfect. TODO change this to 5 seconds #define RSRVRS_MAX_TARGET_VOL_CHANGE_ML 500.0 ///< Reservoirs 1 & 2 maximum allowed volume change when full during heat disinfect. TODO original value is 100 mL #define POST_HEAT_DISINFECT_WAIT_TIME_MS ( 3 * 60 * MS_PER_SECOND ) ///< Heat disinfect final wait time before flushing the system in milliseconds. @@ -166,9 +166,9 @@ static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectFillR2WithHotWaterState( void ); static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectDisinfectR2ToR1State( void ); static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectCoolDownHeatersState( void ); +static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectCoolDownROFilterState( void ); static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectMixDrainR1State( void ); static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectMixDrainR2State( void ); -static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectCoolDownROFilterState( void ); static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectRinseR1ToR2State( void ); static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectRinseR2ToR1AndDrainR1State( void ); static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectRinseCirculationState( void ); @@ -224,6 +224,8 @@ *************************************************************************/ void transitionToHeatDisinfectMode( void ) { + resetActuators(); + initHeatDisinfectMode(); } @@ -295,6 +297,10 @@ heatDisinfectState = handleHeatDisinfectCoolDownHeatersState(); break; + case DG_HEAT_DISINFECT_STATE_COOL_DOWN_RO_FILTER: + heatDisinfectState = handleHeatDisinfectCoolDownROFilterState(); + break; + case DG_HEAT_DISINFECT_STATE_MIX_DRAIN_R1: heatDisinfectState = handleHeatDisinfectMixDrainR1State(); break; @@ -303,10 +309,6 @@ heatDisinfectState = handleHeatDisinfectMixDrainR2State(); break; - case DG_HEAT_DISINFECT_STATE_COOL_DOWN_RO_FILTER: - heatDisinfectState = handleHeatDisinfectCoolDownROFilterState(); - break; - case DG_HEAT_DISINFECT_STATE_RINSE_R1_TO_R2: heatDisinfectState = handleHeatDisinfectRinseR1ToR2State(); break; @@ -358,8 +360,8 @@ /*********************************************************************//** * @brief * The stopDGHeatDisinfect function stops heat disinfect mode. - * @details Inputs: heatDisinfectionState - * @details Outputs: heatDisinfectionState + * @details Inputs: none + * @details Outputs: none * @return none *************************************************************************/ void stopDGHeatDisinfect( void ) @@ -371,7 +373,7 @@ requestNewOperationMode( DG_MODE_STAN ); } -// ********** private function prototypes ********** +// ********** private functions ********** /*********************************************************************//** * @brief @@ -450,7 +452,7 @@ } else if ( rsrvr1Status == RESERVOIR_STATUS_EMPTY ) { - if ( isThisLastDrain ) + if ( TRUE == isThisLastDrain ) { // Done with draining signalDrainPumpHardStop(); @@ -475,9 +477,9 @@ { // Assume reservoir 2 is full and drain it rsrvr2Status = RESERVOIR_STATUS_FULL; - // Set the actuators to drain R2. // Request a tare for reservoir 2 tareReservoir(); + // Set the actuators to drain R2. // NOTE: Drain pump is already on and VDr is already on drain state setValveState( VRD, VALVE_STATE_R2_C_TO_NO ); state = DG_HEAT_DISINFECT_STATE_DRAIN_R2; @@ -511,7 +513,7 @@ } else if ( rsrvr2Status == RESERVOIR_STATUS_EMPTY ) { - if ( isThisLastDrain ) + if ( TRUE == isThisLastDrain ) { setValveState( VRD, VALVE_STATE_R1_C_TO_NC ); rsrvr1Status = RESERVOIR_STATUS_FULL; @@ -560,7 +562,7 @@ stateTrialCounter = 0; state = DG_HEAT_DISINFECT_STATE_FLUSH_CIRCULATION; } - // If the failure is still in range, reset the timer and start over + // If the number of failures have not exceeded the limit, try again. else if ( ++stateTrialCounter < MAX_ALLOWED_STATE_TRIALS ) { stateTimer = getMSTimerCount(); @@ -609,7 +611,7 @@ BOOL isTD2Out = fabs( TD2Temp - avgTemp ) > MAX_FLUSH_CIRC_TEMP_SENSOR_DIFF_C; // Check if any of the temperature sensors are out of tolerance - if( isThdOut || isTPoOut || isTD1Out || isTD2Out ) + if( TRUE == isThdOut || TRUE == isTPoOut || TRUE == isTD1Out || TRUE == isTD2Out ) { // Check if we have exceeded the number of trials. If not, try another time if ( ++stateTrialCounter < MAX_ALLOWED_STATE_TRIALS ) @@ -633,7 +635,7 @@ } // Only start the concentrate pumps if the temperature sensors are in range - if ( areTempSensorsInRange ) + if ( TRUE == areTempSensorsInRange ) { // TODO: enable the timeout once the concentrate pumps are available. //if ( didTimeout( stateTimer, FLUSH_CICRCULATION_WAIT_TIME_MS ) ) @@ -1125,8 +1127,7 @@ isDrainPumpInMixDrainOn = TRUE; // Turn on the drain pump to drain the reservoirs in open loop mode - //setDrainPumpTargetRPM( DRAIN_PUMP_RPM_IN_MIX_DRAIN ); TODO if this is not needed remove the #define - setDrainPumpTargetOutletPressure( 5.0 ); //TODO if this is the method, add a #define + setDrainPumpTargetRPM( DRAIN_PUMP_RPM_IN_MIX_DRAIN ); } else if ( isDrainPumpInMixDrainOn == TRUE ) { @@ -1313,9 +1314,6 @@ if ( didTimeout( stateTimer, FLUSH_CICRCULATION_WAIT_TIME_MS ) ) { - // Done with heat disinfect cycle - resetActuators(); - state = DG_HEAT_DISINFECT_STATE_COMPLETE; } @@ -1363,6 +1361,8 @@ if ( cancellationMode == CANCELLATION_MODE_NONE ) { + U32 targetRPM = 0; + // Stop all the actuators first then decide who should run next resetActuators(); @@ -1373,6 +1373,7 @@ // The two sensors must be less than a threshold to decide if mix drain is needed to normal drain if ( TDi < MIX_DRAIN_TEMPERATURE_THRESHOLD_C && TRo < MIX_DRAIN_TEMPERATURE_THRESHOLD_C ) { + targetRPM = DRAIN_PUMP_TARGET_RPM; rsrvr1Status = RESERVOIR_STATUS_FULL; rsrvr2Status = RESERVOIR_STATUS_FULL; cancellationMode = CANCELLATION_MODE_COLD; @@ -1383,14 +1384,15 @@ setValveState( VPI, VALVE_STATE_OPEN ); setValveState( VPD, VALVE_STATE_DRAIN_C_TO_NC ); + targetRPM = DRAIN_PUMP_RPM_IN_MIX_DRAIN; rsrvr1Status = RESERVOIR_STATUS_FULL; rsrvr2Status = RESERVOIR_STATUS_FULL; cancellationMode = CANCELLATION_MODE_HOT; } // The drain is set to start from reservoir 2 since all the actuators have been de-energized // Start the drain pump - setDrainPumpTargetRPM( DRAIN_PUMP_TARGET_RPM ); + setDrainPumpTargetRPM( targetRPM ); // Start the timer for drain timeout stateTimer = getMSTimerCount(); @@ -1479,8 +1481,8 @@ /*********************************************************************//** * @brief - * The setModeToFailed function sets the heat disinfect mode to failed - * by changing the state to complete. + * The setModeToFailed function sets the alarm that failed the heat disinfect + * mode. * @details Inputs: alarm, prevHeatDisinfectState * @details Outputs: none * @return none @@ -1500,8 +1502,6 @@ * @param r is DG_RESERVOIR_1 or DG_RESERVOIR_2 * @param targetVol is the target fill volume * @param timeout is the fill up timeout - * @param cancellationState is the cancellation state to be called in case - * the operation timed out. * @return the status of the reservoirs during filling *************************************************************************/ static RESERVOIRS_STATUS_T getRsrvrFillStatus( DG_RESERVOIR_ID_T r, F32 targetVol, U32 timeout ) @@ -1548,8 +1548,10 @@ * @details Outputs: stateTimer, heatDisinfectState heatDisinfectState, * alarm * @param r is DG_RESERVOIR_1 or DG_RESERVOIR_2 - * @param cancellationState is the cancellation state to be called in case - * the operation timed out. + * @param drainSteadyStateTimeout which is the time the reservoir's level + * does not change and is steady state + * @param timeout which is the timeout that a reservoir must be drained by + * then * @return the status of the reservoirs during draining *************************************************************************/ static RESERVOIRS_STATUS_T getRsrvrDrainStatus( DG_RESERVOIR_ID_T r, U32 drainSteadyStateTimeout, U32 timeout ) @@ -1566,6 +1568,7 @@ } else if ( didTimeout( stateTimer, timeout ) ) { + // TODO fix this part // Failed to drain ontime. Update the previous heat disinfect state and transition to basic cancellation //prevHeatDisinfectState = heatDisinfectState; //alarm = ALARM_ID_DG_RESERVOIR_DRAIN_TIMEOUT; Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r9ce06772b2f651c57144327e6cbf886e2bc22dee -r94b2082ddcec6ccb947e67714dc85ae005a2c7b6 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 9ce06772b2f651c57144327e6cbf886e2bc22dee) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 94b2082ddcec6ccb947e67714dc85ae005a2c7b6) @@ -236,7 +236,7 @@ BOOL result = FALSE; // If DG is in standby mode and the standby mode is in Idle state, request DG heat disinfection - //if ( DG_MODE_STAN == getCurrentOperationMode() && DG_STANDBY_MODE_STATE_IDLE == standbyState ) + if ( DG_MODE_STAN == getCurrentOperationMode() && DG_STANDBY_MODE_STATE_IDLE == standbyState ) { requestNewOperationMode( DG_MODE_HEAT ); Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r9ce06772b2f651c57144327e6cbf886e2bc22dee -r94b2082ddcec6ccb947e67714dc85ae005a2c7b6 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 9ce06772b2f651c57144327e6cbf886e2bc22dee) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 94b2082ddcec6ccb947e67714dc85ae005a2c7b6) @@ -891,14 +891,14 @@ MESSAGE_T msg; U08 *payloadPtr = msg.payload; - // create a message record + // Create a message record blankMessage( &msg ); msg.hdr.msgID = MSG_ID_DG_HEAT_DISINFECT_DATA; msg.hdr.payloadLen = sizeof( MODE_HEAT_DISINFECT_DATA_T ); memcpy( payloadPtr, heatDisinfectData, sizeof( MODE_HEAT_DISINFECT_DATA_T ) ); - // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DG_BROADCAST, ACK_NOT_REQUIRED ); return result; @@ -2438,7 +2438,15 @@ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } -//*******************************************************************/ +/*********************************************************************//** +* @brief +* The handleROPumpTargetPressureOverride function handles a request +* to override the RO pump target pressure. +* @details Inputs: none +* @details Outputs: message handled +* @param message a pointer to the message to handle +* @return none +*************************************************************************/ void handleROPumpTargetPressureOverride( MESSAGE_T *message ) { BOOL result = FALSE;