Index: firmware/App/Modes/ModeChemicalDisinfect.c =================================================================== diff -u -r9490539a39d2bfd8d40558f3c05b09b48f041e6c -rede368b67b0aecd60a9d90546eca353eb6f86e58 --- firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision 9490539a39d2bfd8d40558f3c05b09b48f041e6c) +++ firmware/App/Modes/ModeChemicalDisinfect.c (.../ModeChemicalDisinfect.c) (revision ede368b67b0aecd60a9d90546eca353eb6f86e58) @@ -146,7 +146,8 @@ static U32 rsrvrFillStableTimeCounter = 0; ///< Reservoirs fill stable time counter. static ALARM_ID_T alarmDetectedPendingTrigger; ///< Chemical disinfect alarm to raise. static U32 numberOfPostDisinfectRinses = NUM_OF_POST_DISINFECT_RINSES; ///< Number of times to rinse the fluid path after chemical disinfect. -static U32 primeAcidSteadyStateCounter = 0; +static U32 primeAcidSteadyStateCounter = 0; ///< Prime acid steady state counter. +static BOOL haveDrainParamsBeenInit; ///< Boolean flag to indicate whether the drain parameters have been reset or not. // ********** private function prototypes ********** @@ -192,7 +193,7 @@ * R1ChemDisinfectVol, R2ChemDisinfectVol, overallChemDisinfectTimer, * cancellationMode, rsrvrFillStableTimeCounter, prevChemDisinfectState * isPartialDisinfectInProgress, numberOfPostDisinfectRinses, - * primeAcidSteadyStateCounter, chemDisinfectUIState + * primeAcidSteadyStateCounter, chemDisinfectUIState, haveDrainParamsBeenInit * @return none *************************************************************************/ void initChemicalDisinfectMode( void ) @@ -214,6 +215,7 @@ numberOfPostDisinfectRinses = NUM_OF_POST_DISINFECT_RINSES; primeAcidSteadyStateCounter = 0; chemDisinfectUIState = CHEM_DISINFECT_UI_STATE_NOT_RUNNING; + haveDrainParamsBeenInit = FALSE; } /*********************************************************************//** @@ -1894,20 +1896,29 @@ { DG_RESERVOIR_STATUS_T status = DG_RESERVOIR_ABOVE_TARGET; + // If the drain parameters of the reservoir is not initialized, initialize them + if ( FALSE == haveDrainParamsBeenInit ) + { + initDrainParameters( r ); + haveDrainParamsBeenInit = TRUE; + } + BOOL isDrainComplete = hasTargetDrainVolumeBeenReached( r, drainSteadyStateTimeout ); if ( TRUE == isDrainComplete ) { // Set the state timer in case it needs to be used for another timeout check - stateTimer = getMSTimerCount(); - status = DG_RESERVOIR_REACHED_TARGET; + stateTimer = getMSTimerCount(); + haveDrainParamsBeenInit = FALSE; + status = DG_RESERVOIR_REACHED_TARGET; } else if ( TRUE == didTimeout( stateTimer, timeout ) ) { // Failed to drain on time. Update the previous chemical disinfect state and transition to basic cancellation - prevChemDisinfectState = chemDisinfectState; + prevChemDisinfectState = chemDisinfectState; + haveDrainParamsBeenInit = FALSE; alarmDetectedPendingTrigger = ALARM_ID_DG_RESERVOIR_DRAIN_TIMEOUT; - status = DG_RESERVOIR_NOT_REACHED_TARGET; + status = DG_RESERVOIR_NOT_REACHED_TARGET; } return status;