Index: firmware/App/Modes/ModeFlush.c =================================================================== diff -u -r006227ac3cde98b6a2f9659b7f764547262f373b -r0fd51747628ba4b6b522fc1b99e068f6bfa402e6 --- firmware/App/Modes/ModeFlush.c (.../ModeFlush.c) (revision 006227ac3cde98b6a2f9659b7f764547262f373b) +++ firmware/App/Modes/ModeFlush.c (.../ModeFlush.c) (revision 0fd51747628ba4b6b522fc1b99e068f6bfa402e6) @@ -88,6 +88,7 @@ static U32 overallFlushElapsedTimeStart; ///< Overall flush mode elapsed time start. static U32 stateTimerStart; ///< State timer start. static U32 rsrvrTimer[ NUM_OF_DG_RESERVOIRS ]; ///< Reservoir fill timers +static bool hasRsrvrTimerBeenInit[ NUM_OF_DG_RESERVOIRS ]; ///< Reservoir fill timers initialized static U32 drainTimer; ///< Drain timer static ALARM_ID_T alarmDetectedPendingTrigger; ///< Alarm ID that is detected and is pending to be triggered. static DG_RESERVOIR_STATUS_T rsrvr1Status; ///< Reservoir 1 status. @@ -524,6 +525,9 @@ rsrvrTimer[ DG_RESERVOIR_1 ] = rsrvrTimer[ DG_RESERVOIR_2 ] = getMSTimerCount(); + hasRsrvrTimerBeenInit[ DG_RESERVOIR_1 ] = TRUE; + hasRsrvrTimerBeenInit[ DG_RESERVOIR_2 ] = FALSE; + rsrvr1Status = DG_RESERVOIR_BELOW_TARGET; rsrvr2Status = DG_RESERVOIR_BELOW_TARGET; flushUIState = FLUSH_UI_STATE_FLUSH_RESERVOIRS; @@ -568,6 +572,12 @@ } else if ( DG_RESERVOIR_REACHED_TARGET == rsrvr1Status ) { + // R1 reached target so start R2 fill timer + if (!hasRsrvrTimerBeenInit[ DG_RESERVOIR_2 ]) + { + rsrvrTimer[ DG_RESERVOIR_2 ] = getMSTimerCount(); + hasRsrvrTimerBeenInit[ DG_RESERVOIR_2 ] = false; + } if ( DG_RESERVOIR_BELOW_TARGET == rsrvr2Status ) { rsrvr2Status = getRsrvrFillStatus( DG_RESERVOIR_2, RSRVRS_PARTIAL_FILL_VOL_ML, RSRVRS_PARTIAL_FILL_TIMEOUT_MS, TRUE ); @@ -974,16 +984,16 @@ { status = DG_RESERVOIR_REACHED_TARGET; rsrvrFillStableTimeCounter[ r ] = 0; - // Set the state timer in case it needs to be used for another timeout check + // Set the reservoir timer in case it needs to be used for another timeout check rsrvrTimer [ r ] = getMSTimerCount(); - if (resetStateTimer) - { - stateTimerStart = getMSTimerCount(); - } +// if (resetStateTimer) +// { +// stateTimerStart = getMSTimerCount(); +// } } } -// else if ( TRUE == didTimeout( rsrvrTimer [ r [, timeout ) ) - else if ( TRUE == didTimeout( stateTimerStart, timeout ) ) + else if ( (TRUE == didTimeout( rsrvrTimer [ r ], timeout ) ) && hasRsrvrTimerBeenInit[ r] ) +// else if ( TRUE == didTimeout( stateTimerStart, timeout ) ) { // Failed to fill on time prevFlushState = flushState; @@ -1026,16 +1036,16 @@ { // Set the state timer in case it needs to be used for another timeout check drainTimer = getMSTimerCount(); - if (resetStateTimer) - { - stateTimerStart = getMSTimerCount(); - } +// if (resetStateTimer) +// { +// stateTimerStart = getMSTimerCount(); +// } haveDrainParamsBeenInit[ r ] = FALSE; status = DG_RESERVOIR_REACHED_TARGET; } -// else if ( TRUE == didTimeout( drainTimer, timeout ) ) - else if ( TRUE == didTimeout( stateTimerStart, timeout ) ) + else if ( TRUE == didTimeout( drainTimer, timeout ) ) +// else if ( TRUE == didTimeout( stateTimerStart, timeout ) ) { // Failed to drain on time prevFlushState = flushState;