Index: firmware/App/Modes/ModeHeatDisinfect.c =================================================================== diff -u -r8266598642c10b864905217d75d483f9ece15a0b -r44cc25461e4936f7928904640c87a03ef7cf3c16 --- firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 8266598642c10b864905217d75d483f9ece15a0b) +++ firmware/App/Modes/ModeHeatDisinfect.c (.../ModeHeatDisinfect.c) (revision 44cc25461e4936f7928904640c87a03ef7cf3c16) @@ -25,9 +25,12 @@ #include "ROPump.h" #include "TemperatureSensors.h" #include "UVReactors.h" +#include "SystemCommMessages.h" +#include "TaskGeneral.h" -//TODO control composition pumps -//TODO add header to functions +// TODO control composition pumps +// TODO add header to functions +// TODO add documentation /** * @addtogroup DGHeatDisinfectMode @@ -37,23 +40,32 @@ // ********** private definitions ********** // TODO: Change the target temperature to 85 -#define HEAT_DISINFECT_TARGET_TEMPERATURE 30U ///< Heat disinfection target temperature +#define HEAT_DISINFECT_TARGET_TEMPERATURE 30U ///< Heat disinfection target temperature #define MAX_TPO_AND_TDI_SENSORS_DIFFERENCE 1U #define MAX_TEMPERATURE_DEVIATION_FROM_TARGET 4U +#define HEAT_DISINFECT_RECIRC_PATH_TIME_MINS 1U +#define HEAT_DISINFECT_R1_TO_R2_TIME_MINS 1U +#define HEAT_DISINFECT_R2_TO_R1_TIME_MINS 1U + +#define MINUTES_TO_MS_CONVERSION 60000U + #define HEAT_DISINFECT_EVAC_RECIRC_PATH_TIME_MS 4000U //TODo do we need this? Change this to the amount of time the composite pumps will run -#define HEAT_DISINFECT_RECIRC_PATH_TIME_MS (1*60000) -#define HEAT_DISINFECT_R1_TO_R2_TIME_MS (1*60000) -#define HEAT_DISINFECT_R2_TO_R1_TIME_MS (1*60000) -#define HEAT_DISINFECT_OVERALL_TIME_MS (50*60000) +#define HEAT_DISINFECT_RECIRC_PATH_TIME_MS ( HEAT_DISINFECT_RECIRC_PATH_TIME_MINS * MINUTES_TO_MS_CONVERSION ) +#define HEAT_DISINFECT_R1_TO_R2_TIME_MS ( HEAT_DISINFECT_R1_TO_R2_TIME_MINS * MINUTES_TO_MS_CONVERSION ) +#define HEAT_DISINFECT_R2_TO_R1_TIME_MS ( HEAT_DISINFECT_R2_TO_R1_TIME_MINS * MINUTES_TO_MS_CONVERSION ) +#define HEAT_DISINFECT_TARGET_CYCLES 5U -#define DRAIN_PUMP_TARGET_DELTA_PRESSURE 0U -#define DRAIN_PUMP_TARGET_RPM 2800U -#define RO_PUMP_TARGET_FLOW_RATE_LPM 0.9 +#define HEAT_DISINFECT_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) -#define FULL_RESERVOIRS_WEIGHT_GRAMS 500U -#define EMPTY_RESERVOIRS_WEIGHT_GRAMS 200U +#define DRAIN_PUMP_TARGET_DELTA_PRESSURE 0U +#define DRAIN_PUMP_EVACUATE_FLUID_TARGET_RPM 2800U +#define DRAIN_PUMP_DISINFECT_DRAIN_PATH_TARGET_RPM 1500U +#define RO_PUMP_TARGET_FLOW_RATE_LPM 0.9 +#define FULL_RESERVOIRS_WEIGHT_GRAMS 500U //TODO Change this value +#define EMPTY_RESERVOIRS_WEIGHT_GRAMS 200U //TODO Change this value + // ********** private data ********** /// Heat disinfect evacuate/fill states @@ -70,18 +82,34 @@ static INTERNAL_HEAT_DISINFECT_STATE_T heatDisinfectInternalState = INTERNAL_HEAT_DISINFECT_STATE_OFF; static DG_HEAT_DISINFECT_STATE_T heatDisinfectState = DG_HEAT_DISINFECT_STATE_START; ///< Currently active heat disinfect state. -static U32 heatDisinfectElapsedTime; -static U32 stateTimer; +static U32 heatDisinfectElapsedTime = 0; +static U32 stateTimer = 0; +static U32 drainPumpTargetRPM = 0; +static U32 heatDisinfectCurrentCycle = 0; +static U32 heatDisinfectPublishCounter = 0; -// ********** private function prototypes ********** +static OVERRIDE_F32_T heatDisinfectRecircDuration = { HEAT_DISINFECT_RECIRC_PATH_TIME_MS, + HEAT_DISINFECT_RECIRC_PATH_TIME_MS, + 0, 0 }; -static void stopActuators( void ); -static void setActuatorsToFillWater( void ); +static OVERRIDE_F32_T heatDisinfectR1ToR2Duration = { HEAT_DISINFECT_R1_TO_R2_TIME_MS, + HEAT_DISINFECT_R1_TO_R2_TIME_MS, + 0, 0 }; -static BOOL isTemperatureInRange( void ); -static BOOL hasHeatDisinfectTimeElapsed( void ); -static void execHeatDisinfectInternalStates( void ); +static OVERRIDE_F32_T heatDisinfectR2ToR1Duration = { HEAT_DISINFECT_R2_TO_R1_TIME_MS, + HEAT_DISINFECT_R2_TO_R1_TIME_MS, + 0, 0 }; +static OVERRIDE_U32_T heatDisinfectNoOfCyclesToRun = { HEAT_DISINFECT_TARGET_CYCLES, + HEAT_DISINFECT_TARGET_CYCLES, + 0, 0 }; + +static OVERRIDE_U32_T heatDisinfectDataPublishInterval = { HEAT_DISINFECT_DATA_PUB_INTERVAL, + HEAT_DISINFECT_DATA_PUB_INTERVAL, + 0, 0 }; + +// ********** private function prototypes ********** + static INTERNAL_HEAT_DISINFECT_STATE_T handleHeatDisinfectOffState( void ); static INTERNAL_HEAT_DISINFECT_STATE_T handleHeatDisinfectFillWithWaterState( void ); static INTERNAL_HEAT_DISINFECT_STATE_T handleHeatDisinfectEvacRecircPathState( void ); @@ -97,6 +125,19 @@ static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectDrainPath( void ); static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectFillWithWaterDeprimeReservoirs( void ); +static void stopActuators( void ); +static void setActuatorsToFillWater( void ); + +static BOOL isTemperatureInRange( void ); +static void execHeatDisinfectInternalStates( void ); +static void publishHeatDisinfectData ( void ); +static U32 getPublishHeatDisinfectDataInterval( void ); +static DATA_GET_PROTOTYPE( U32, getPublishHeatDisinfectDataInterval ); +static DATA_GET_PROTOTYPE( F32, getRecirculationDuration ); +static DATA_GET_PROTOTYPE( F32, getRSVR1ToRSVR2Duration ); +static DATA_GET_PROTOTYPE( F32, getRSVR2ToRSVR1Duration ); +static DATA_GET_PROTOTYPE( U32, getNoOfCyclesToRun ); + /*********************************************************************//** * @brief * The initHeatDisinfectMode function initializes the heat disinfect Mode module. @@ -105,9 +146,11 @@ * Outputs : none * @return none *************************************************************************/ -void initHeatDisinfectMode( void ) + void initHeatDisinfectMode( void ) { heatDisinfectElapsedTime = 0; + drainPumpTargetRPM = 0; + heatDisinfectCurrentCycle = 0; heatDisinfectState = DG_HEAT_DISINFECT_STATE_START; } @@ -171,12 +214,18 @@ heatDisinfectState = handleHeatDisinfectFillWithWaterDeprimeReservoirs(); break; + case DG_HEAT_DISINFECT_STATE_COMPLETE: + // Do nothing + break; + default: // TODO - s/w fault - heatDisinfectState = DG_HEAT_DISINFECT_STATE_START; + heatDisinfectState = DG_HEAT_DISINFECT_STATE_COMPLETE; break; } + publishHeatDisinfectData(); + return (U32)heatDisinfectState; } @@ -200,13 +249,15 @@ * @details * Inputs : none * Outputs : none - * @return none + * @return state of run *************************************************************************/ -void startDGHeatDisinfect( void ) +BOOL startDGHeatDisinfect( void ) { // TODO: make sure DG is not in the middle of something and it is in standby initHeatDisinfectMode(); requestNewOperationMode( DG_MODE_HEAT ); + + return TRUE; // For now. Check whether it is the right request before switching } /*********************************************************************//** @@ -231,8 +282,11 @@ DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_EVACUATE_DIALYSATE_FILL_WITH_WATER; stopActuators(); + drainPumpTargetRPM = DRAIN_PUMP_EVACUATE_FLUID_TARGET_RPM; heatDisinfectInternalState = INTERNAL_HEAT_DISINFECT_STATE_OFF; + heatDisinfectElapsedTime = getMSTimerCount(); + return state; } @@ -281,6 +335,7 @@ if ( fabs(TPi - TDi) <= MAX_TPO_AND_TDI_SENSORS_DIFFERENCE ) { + // Set the states to disinfect recirculation path setValveState ( VPI, VALVE_STATE_OPEN ); setValveState ( VBF, VALVE_STATE_OPEN ); setValveState ( VSP, VALVE_STATE_CLOSED ); @@ -303,18 +358,13 @@ { DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_DISINFECT_RECIRC_PATH; - if ( hasHeatDisinfectTimeElapsed() ) - { - state = DG_HEAT_DISINFECT_STATE_DISINFECT_DRAIN_PATH; - } // If the temperature is out of tolerance, go back to heat water - else if ( ! isTemperatureInRange() ) + if ( ! isTemperatureInRange() ) { state = DG_HEAT_DISINFECT_STATE_HEAT_WATER; } - else if ( didTimeout( stateTimer, HEAT_DISINFECT_RECIRC_PATH_TIME_MS ) ) + else if ( didTimeout( stateTimer, getRecirculationDuration() ) ) { - heatDisinfectElapsedTime = heatDisinfectElapsedTime + HEAT_DISINFECT_EVAC_RECIRC_PATH_TIME_MS; //TODO Test // Set the state for reservoir 1 to reservoir 2 setValveState ( VPI, VALVE_STATE_OPEN ); setValveState ( VBF, VALVE_STATE_OPEN ); @@ -342,18 +392,13 @@ { DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_DISINFECT_RESERVOIR_1_TO_2; - if ( hasHeatDisinfectTimeElapsed() ) - { - state = DG_HEAT_DISINFECT_STATE_DISINFECT_DRAIN_PATH; - } // If the temperature is out of tolerance, go back to heat water - else if ( ! isTemperatureInRange() ) + if ( ! isTemperatureInRange() ) { state = DG_HEAT_DISINFECT_STATE_HEAT_WATER; } - else if ( didTimeout( stateTimer, HEAT_DISINFECT_R1_TO_R2_TIME_MS ) ) + else if ( didTimeout( stateTimer, getRSVR1ToRSVR2Duration() ) ) { - heatDisinfectElapsedTime = heatDisinfectElapsedTime + HEAT_DISINFECT_EVAC_RECIRC_PATH_TIME_MS; //TODO Test // Set the state for reservoir 1 to reservoir 2 setValveState ( VPI, VALVE_STATE_OPEN ); setValveState ( VBF, VALVE_STATE_OPEN ); @@ -376,22 +421,18 @@ return state; } + static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectReservoir2To1( void ) { DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_DISINFECT_RESERVOIR_2_TO_1; - if ( hasHeatDisinfectTimeElapsed() ) - { - state = DG_HEAT_DISINFECT_STATE_DISINFECT_DRAIN_PATH; - } // If the temperature is out of tolerance, go back to heat water - else if ( ! isTemperatureInRange() ) + if ( ! isTemperatureInRange() ) { state = DG_HEAT_DISINFECT_STATE_HEAT_WATER; } - else if ( didTimeout( stateTimer, HEAT_DISINFECT_R2_TO_R1_TIME_MS ) ) + else if ( didTimeout( stateTimer, getRSVR2ToRSVR1Duration() ) ) { - heatDisinfectElapsedTime = heatDisinfectElapsedTime + HEAT_DISINFECT_EVAC_RECIRC_PATH_TIME_MS; //TODO Test // Set the state for reservoir 1 to reservoir 2 setValveState ( VPI, VALVE_STATE_OPEN ); setValveState ( VBF, VALVE_STATE_OPEN ); @@ -408,30 +449,62 @@ setDrainPumpTargetDeltaPressure( DRAIN_PUMP_TARGET_DELTA_PRESSURE ); setROPumpTargetFlowRate( RO_PUMP_TARGET_FLOW_RATE_LPM ); - stateTimer = getMSTimerCount(); - - if ( heatDisinfectElapsedTime > HEAT_DISINFECT_OVERALL_TIME_MS ) + if ( ++heatDisinfectCurrentCycle > getNoOfCyclesToRun() ) { + drainPumpTargetRPM = DRAIN_PUMP_DISINFECT_DRAIN_PATH_TARGET_RPM; + heatDisinfectInternalState = INTERNAL_HEAT_DISINFECT_STATE_OFF; state = DG_HEAT_DISINFECT_STATE_DISINFECT_DRAIN_PATH; } else { + setValveState ( VPI, VALVE_STATE_OPEN ); + setValveState ( VBF, VALVE_STATE_OPEN ); + setValveState ( VSP, VALVE_STATE_CLOSED ); + setValveState ( VPD, VALVE_STATE_OPEN_C_TO_NO ); + setValveState ( VPO, VALVE_STATE_NOFILL_C_TO_NO ); + setValveState ( VDR, VALVE_STATE_RECIRC_C_TO_NC ); + setValveState ( VRC, VALVE_STATE_RECIRC_C_TO_NC ); + setValveState ( VRO, VALVE_STATE_R2_C_TO_NO ); + setValveState ( VRD, VALVE_STATE_R1_C_TO_NO ); + setValveState ( VRI, VALVE_STATE_R1_C_TO_NO ); + setValveState ( VRF, VALVE_STATE_R2_C_TO_NO ); + setROPumpTargetFlowRate( RO_PUMP_TARGET_FLOW_RATE_LPM ); + stateTimer = getMSTimerCount(); state = DG_HEAT_DISINFECT_STATE_DISINFECT_RECIRC_PATH; } } return state; } + static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectDrainPath( void ) { DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_DISINFECT_DRAIN_PATH; + execHeatDisinfectInternalStates(); //TODO test to see if it is needed to be in an if statement + + if ( heatDisinfectInternalState == INTERNAL_HEAT_DISINFECT_STATE_COMPLETE ) + { + drainPumpTargetRPM = DRAIN_PUMP_EVACUATE_FLUID_TARGET_RPM; + heatDisinfectInternalState = INTERNAL_HEAT_DISINFECT_STATE_OFF; + state = DG_HEAT_DISINFECT_STATE_FILL_WITH_WATER_DEPRIME_RESERVOIRS; + } + return state; } + static DG_HEAT_DISINFECT_STATE_T handleHeatDisinfectFillWithWaterDeprimeReservoirs( void ) { DG_HEAT_DISINFECT_STATE_T state = DG_HEAT_DISINFECT_STATE_FILL_WITH_WATER_DEPRIME_RESERVOIRS; + execHeatDisinfectInternalStates(); //TODO test to see if it is needed to be in an if statement + + // Done with heat disinfect + if ( heatDisinfectInternalState == INTERNAL_HEAT_DISINFECT_STATE_COMPLETE ) + { + state = DG_HEAT_DISINFECT_STATE_COMPLETE; + } + return state; } @@ -504,7 +577,27 @@ state = INTERNAL_HEAT_DISINFECT_STATE_FILL_WITH_WATER; } + else if ( heatDisinfectState == DG_HEAT_DISINFECT_STATE_DISINFECT_DRAIN_PATH ) + { + // Set the actuators for draining the path + signalROPumpHardStop(); + signalDrainPumpHardStop(); + setValveState ( VPI, VALVE_STATE_OPEN ); + setValveState ( VBF, VALVE_STATE_OPEN ); + setValveState ( VSP, VALVE_STATE_CLOSED ); + setValveState ( VPD, VALVE_STATE_OPEN_C_TO_NO ); + setValveState ( VPO, VALVE_STATE_NOFILL_C_TO_NO ); + setValveState ( VDR, VALVE_STATE_DRAIN_C_TO_NO ); + setValveState ( VRC, VALVE_STATE_DRAIN_C_TO_NO ); + setValveState ( VRO, VALVE_STATE_R2_C_TO_NC ); + setValveState ( VRD, VALVE_STATE_R1_C_TO_NC ); + setValveState ( VRI, VALVE_STATE_R1_C_TO_NO ); + setValveState ( VRF, VALVE_STATE_R2_C_TO_NO ); + setDrainPumpTargetSpeed( drainPumpTargetRPM ); + state = INTERNAL_HEAT_DISINFECT_STATE_EVACUATE_RESERVOIR_1; + } + return state; } @@ -566,7 +659,7 @@ setValveState ( VRD, VALVE_STATE_R1_C_TO_NC ); setValveState ( VRI, VALVE_STATE_R1_C_TO_NO ); setValveState ( VRF, VALVE_STATE_R2_C_TO_NO ); - setDrainPumpTargetSpeed ( DRAIN_PUMP_TARGET_RPM ); + setDrainPumpTargetSpeed ( drainPumpTargetRPM ); state = INTERNAL_HEAT_DISINFECT_STATE_EVACUATE_RESERVOIR_1; } @@ -594,7 +687,7 @@ setValveState ( VRD, VALVE_STATE_R1_C_TO_NO ); setValveState ( VRI, VALVE_STATE_R1_C_TO_NO ); setValveState ( VRF, VALVE_STATE_R2_C_TO_NO ); - //setDrainPumpTargetSpeed ( DRAIN_PUMP_TARGET_RPM ); probably it is not needed TODO test this + //setDrainPumpTargetSpeed ( drainPumpTargetRPM ); probably it is not needed TODO test this state = INTERNAL_HEAT_DISINFECT_STATE_EVACUATE_RESERVOIR_2; } @@ -615,7 +708,8 @@ setActuatorsToFillWater(); state = INTERNAL_HEAT_DISINFECT_STATE_FILL_WITH_WATER; } - else if ( heatDisinfectState == DG_HEAT_DISINFECT_STATE_FILL_WITH_WATER_DEPRIME_RESERVOIRS ) + else if ( heatDisinfectState == DG_HEAT_DISINFECT_STATE_FILL_WITH_WATER_DEPRIME_RESERVOIRS || + heatDisinfectState == DG_HEAT_DISINFECT_STATE_DISINFECT_DRAIN_PATH ) { state = INTERNAL_HEAT_DISINFECT_STATE_COMPLETE; } @@ -665,18 +759,6 @@ return result; } -static BOOL hasHeatDisinfectTimeElapsed( void ) -{ - BOOL result = FALSE; - - if ( heatDisinfectElapsedTime > HEAT_DISINFECT_OVERALL_TIME_MS ) - { - result = TRUE; - } - - return result; -} - static void setActuatorsToFillWater( void ) { setValveState ( VPI, VALVE_STATE_OPEN ); @@ -693,4 +775,219 @@ setROPumpTargetFlowRate( RO_PUMP_TARGET_FLOW_RATE_LPM ); } +static U32 getPublishHeatDisinfectDataInterval() +{ + U32 result = heatDisinfectDataPublishInterval.data; + + if ( OVERRIDE_KEY == heatDisinfectDataPublishInterval.override ) + { + result = heatDisinfectDataPublishInterval.ovData; + } + + return result; +} + +static void publishHeatDisinfectData ( void ) +{ + if ( ++heatDisinfectPublishCounter >= getPublishHeatDisinfectDataInterval() ) + { + F32 elapsedtime = calcTimeSince( heatDisinfectElapsedTime ) / MINUTES_TO_MS_CONVERSION; + broadcastHeatDisinfectData( (U32)heatDisinfectInternalState, elapsedtime, heatDisinfectCurrentCycle ); + heatDisinfectPublishCounter = 0; + } +} + +BOOL testSetHeatDisinfectDataPublishIntervalOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + U32 intvl = value / TASK_GENERAL_INTERVAL; + + result = TRUE; + heatDisinfectDataPublishInterval.ovData = intvl; + heatDisinfectDataPublishInterval.override = OVERRIDE_KEY; + } + + return result; +} + +BOOL testResetHeatDisinfectDataPublishIntervalOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + heatDisinfectDataPublishInterval.override = OVERRIDE_RESET; + heatDisinfectDataPublishInterval.ovData = heatDisinfectDataPublishInterval.ovInitData; + } + + return result; +} + +BOOL testSetHeatDisinfectRecircDurationOverride( F32 recircMins ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + heatDisinfectRecircDuration.ovInitData = heatDisinfectRecircDuration.data; + heatDisinfectRecircDuration.ovData = recircMins * MINUTES_TO_MS_CONVERSION; + heatDisinfectRecircDuration.override = OVERRIDE_KEY; + } + + return result; +} + +BOOL testResetHeatDisinfectRecircDurationOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + heatDisinfectRecircDuration.ovData = heatDisinfectRecircDuration.ovInitData; + heatDisinfectRecircDuration.override = OVERRIDE_RESET; + } + + return result; +} + +BOOL testSetHeatDisinfectR1ToR2DurationOverride( F32 R1ToR2Mins ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + heatDisinfectR1ToR2Duration.ovInitData = heatDisinfectR1ToR2Duration.data; + heatDisinfectR1ToR2Duration.ovData = R1ToR2Mins * MINUTES_TO_MS_CONVERSION; + heatDisinfectR1ToR2Duration.override = OVERRIDE_KEY; + } + + return result; +} + +BOOL testResetHeatDisinfectR1ToR2DurationOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + heatDisinfectR1ToR2Duration.ovData = heatDisinfectR1ToR2Duration.ovInitData; + heatDisinfectR1ToR2Duration.override = OVERRIDE_RESET; + } + + return result; +} + +BOOL testSetHeatDisinfectionR2ToR1DurationOverride( F32 R2ToR1Mins ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + heatDisinfectR2ToR1Duration.ovInitData = heatDisinfectR2ToR1Duration.data; + heatDisinfectR2ToR1Duration.ovData = R2ToR1Mins * MINUTES_TO_MS_CONVERSION; + heatDisinfectR2ToR1Duration.override = OVERRIDE_KEY; + } + + return result; +} + +BOOL testResetHeatDisinfectionR2ToR1DurationOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + heatDisinfectR2ToR1Duration.ovData = heatDisinfectR2ToR1Duration.ovInitData; + heatDisinfectR2ToR1Duration.override = OVERRIDE_RESET; + } + + return result; +} + +BOOL testSetHeatDisinfectNoOfCyclesOverride( U32 cycles ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + heatDisinfectNoOfCyclesToRun.ovInitData = heatDisinfectNoOfCyclesToRun.data; + heatDisinfectNoOfCyclesToRun.ovData = cycles; + heatDisinfectNoOfCyclesToRun.override = OVERRIDE_KEY; + } + + return result; +} + +BOOL testResetHeatDisinfectNoOfCyclesOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + heatDisinfectNoOfCyclesToRun.ovData = heatDisinfectNoOfCyclesToRun.ovInitData; + heatDisinfectNoOfCyclesToRun.override = OVERRIDE_RESET; + } + + return result; +} + +static F32 getRecirculationDuration() +{ + F32 result = heatDisinfectRecircDuration.data; + + if ( OVERRIDE_KEY == heatDisinfectRecircDuration.override ) + { + result = heatDisinfectRecircDuration.ovData; + } + + return result; +} + +static F32 getRSVR1ToRSVR2Duration() +{ + F32 result = heatDisinfectR1ToR2Duration.data; + + if ( OVERRIDE_KEY == heatDisinfectR1ToR2Duration.override ) + { + result = heatDisinfectR1ToR2Duration.ovData; + } + + return result; +} + +static F32 getRSVR2ToRSVR1Duration() +{ + F32 result = heatDisinfectR2ToR1Duration.data; + + if ( OVERRIDE_KEY == heatDisinfectR2ToR1Duration.override ) + { + result = heatDisinfectR2ToR1Duration.ovData; + } + + return result; +} + +static U32 getNoOfCyclesToRun() +{ + U32 result = heatDisinfectNoOfCyclesToRun.data; + + if ( OVERRIDE_KEY == heatDisinfectNoOfCyclesToRun.override ) + { + result = heatDisinfectNoOfCyclesToRun.ovData; + } + + return result; +} + /**@}*/