Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r6742b3e355d70e0bdf036ed93cc2268bdd36cb99 -r4a369538d8e96eada94bc74da213c54c33107426 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 6742b3e355d70e0bdf036ed93cc2268bdd36cb99) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 4a369538d8e96eada94bc74da213c54c33107426) @@ -59,9 +59,9 @@ BOOL initialDrain; ///< Flags indicate whether a reservoir has been requested to initially drain. BOOL startFlushFill; ///< Flags "GO" for a flush reservoir fill, to synchronize with self-test requirements BOOL startNormalFill; ///< Flags "GO" for a normal reservoir fill, to synchronize with self-test requirements - BOOL fillComplete; ///< Flag indicates a reservoir has been filled. BOOL flushComplete; ///< Flag indicates a reservoir has been flushed. - U08 flushCount; ///< Flag indicates the number of reservoir flush cycles required. + BOOL fillComplete; ///< Flag indicates a reservoir has been filled. + U32 flushCount; ///< Flag indicates the number of reservoir flush cycles required. } PRE_TREATMENT_RESERVOIR_VAR_T; /// States of the pre-treatment reservoir management state machine. @@ -97,6 +97,7 @@ static U32 submodeCompleteTransitionTimeCounter; ///< Sub-mode completed transition wait time counter. static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T currentReservoirMgmtState; ///< Current pre-treatment reservoir management state. +static DG_RESERVOIR_ID_T activeReservoir = DG_RESERVOIR_2; static PRE_TREATMENT_RESERVOIR_VAR_T reservoirStatus[ NUM_OF_DG_RESERVOIRS ]; ///< Detailed state of each reservoir. #ifndef _RELEASE_ @@ -924,6 +925,9 @@ *************************************************************************/ static void execPreTreatmentReservoirMgmt( void ) { + // update the active reservoir. + activeReservoir = getDGActiveReservoir(); + // treatment reservoir mgmt. state machine switch ( currentReservoirMgmtState ) { @@ -1008,9 +1012,7 @@ PRE_TREATMENT_RESERVOIR_MGMT_STATE_T state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; DG_OP_MODE_T dgOpMode = getDGOpMode(); U32 dgSubMode = getDGSubMode(); - DG_RESERVOIR_ID_T const activeRes = getDGActiveReservoir(); - // If DG has not started yet, start DG if ( DG_MODE_STAN == dgOpMode ) { @@ -1022,8 +1024,15 @@ { if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) { - state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_RESP_STATE; - cmdStartDGDrain( DRAIN_RESERVOIR_TO_VOLUME_ML, TRUE, FALSE, TRUE ); + if ( FALSE == reservoirStatus[ activeReservoir ].flushComplete ) + { + state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_RESP_STATE; + cmdStartDGDrain( DRAIN_RESERVOIR_TO_VOLUME_ML, TRUE, FALSE, TRUE ); + } + else + { + state = PRE_TREATMENT_RESERVOIR_MGMT_START_FILL_STATE; + } } } @@ -1078,37 +1087,40 @@ DG_OP_MODE_T dgOpMode = getDGOpMode(); U32 dgSubMode = getDGSubMode(); U32 volume = 0; - DG_RESERVOIR_ID_T inactiveReservoir = getDGInactiveReservoir(); if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) { // Drain both reservoirs and return to active res 2 before initial fills - if ( reservoirStatus[ inactiveReservoir ].initialDrain != TRUE ) + if ( reservoirStatus[ activeReservoir ].initialDrain != TRUE ) { - reservoirStatus[ inactiveReservoir ].initialDrain = TRUE; + reservoirStatus[ activeReservoir ].initialDrain = TRUE; state = PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE; } - // Once both reservoirs drained and returned to active res 2, wait for pre-tx workflow to get to point where fills allowed before filling - else if ( TRUE == reservoirStatus[ DG_RESERVOIR_1 ].startFlushFill ) - { - volume = getPreTreatmentFillVolume( inactiveReservoir ); - // not flushed and need to fill - if ( ( TRUE != reservoirStatus[ inactiveReservoir ].flushComplete ) && - ( TRUE == reservoirStatus[ inactiveReservoir ].startFlushFill ) ) + // Once both reservoirs drained and returned to active res 2, wait for pre-tx workflow + // to get to point where fills are allowed, before starting fill + // not flushed and need to fill -OR- + // flushed and need to fill after entering dry self test state + else if ( ( TRUE == reservoirStatus[ activeReservoir ].startFlushFill ) || + ( ( TRUE == reservoirStatus[ activeReservoir ].startNormalFill ) && + ( currentPreTreatmentState >= HD_PRE_TREATMENT_SELF_TEST_DRY_STATE ) ) ) + { + // Start tracking flush cycles, flushComplete => don't drain again. + if ( FALSE == reservoirStatus[ activeReservoir ].flushComplete ) { - cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); - state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; + if (0 < reservoirStatus[ activeReservoir ].flushCount) + { + reservoirStatus[ activeReservoir ].flushCount -= 1; + } + if ( 0 == reservoirStatus[ activeReservoir ].flushCount ) + { + reservoirStatus[ activeReservoir ].flushComplete = TRUE; + } } - // flushed and need to fill after entering dry self test state - if ( ( TRUE == reservoirStatus[ inactiveReservoir ].flushComplete ) && - ( TRUE == reservoirStatus[ inactiveReservoir ].startNormalFill ) && - ( currentPreTreatmentState >= HD_PRE_TREATMENT_SELF_TEST_DRY_STATE ) ) - { - cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); - state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; - } + volume = getPreTreatmentFillVolume( activeReservoir ); + cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); + state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; } } @@ -1165,39 +1177,23 @@ PRE_TREATMENT_RESERVOIR_MGMT_STATE_T state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_COMPLETE_STATE; DG_OP_MODE_T dgOpMode = getDGOpMode(); U32 dgSubMode = getDGSubMode(); - U32 activeReservoir = (U32) getDGActiveReservoir(); if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) { + state = PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE; + if ( ( TRUE == reservoirStatus[ DG_RESERVOIR_1 ].flushComplete ) && ( TRUE == reservoirStatus[ DG_RESERVOIR_2 ].flushComplete ) ) { - if ( FALSE == reservoirStatus[ activeReservoir ].fillComplete ) - { - reservoirStatus[ activeReservoir ].fillComplete = TRUE; - state = PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE; - } + reservoirStatus[ activeReservoir ].fillComplete = TRUE; } else { - state = PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE; + DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; - if ( FALSE == reservoirStatus[ activeReservoir ].flushComplete ) - { - DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; - - if (0 < reservoirStatus[ activeReservoir ].flushCount) - { - reservoirStatus[ activeReservoir ].flushCount -= 1; - } - if ( 0 == reservoirStatus[ activeReservoir ].flushCount ) - { - reservoirStatus[ activeReservoir ].flushComplete = TRUE; - } - rsrvrCmd.reservoirID = activeReservoir; - rsrvrCmd.useLastTrimmerHeaterDC = FALSE; - cmdSetDGActiveReservoir( &rsrvrCmd ); - } + rsrvrCmd.reservoirID = activeReservoir; + rsrvrCmd.useLastTrimmerHeaterDC = FALSE; + cmdSetDGActiveReservoir( &rsrvrCmd ); } }