Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r5c5ea32c4f6a79610ae1ff8e62d399d4894cc10a -rfb7b90110c095be1aa8b3ad4dc26fa21e8acc851 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 5c5ea32c4f6a79610ae1ff8e62d399d4894cc10a) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision fb7b90110c095be1aa8b3ad4dc26fa21e8acc851) @@ -59,6 +59,7 @@ PRE_TREATMENT_RESERVOIR_MGMT_START_FILL_STATE, ///< Command DG to start filling reservoir PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE, ///< After sending fill command, process DG fill command response PRE_TREATMENT_RESERVOIR_MGMT_FILL_COMPLETE_STATE, ///< Reservoir fill has completed + PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE, PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE, ///< Wait for prime operation to switch reservoir PRE_TREATMENT_RESERVOIR_MGMT_COMPLETE_STATE, ///< Pre-treatment reservoir management complete state NUM_OF_PRE_TREATMENT_RESERVOIR_MGMT_STATES ///< Number of pre-treatments reservoir mgmt. states @@ -110,6 +111,7 @@ static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtFillCmdState( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtFillCmdRespState( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtFillCompleteState( void ); +static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtRequestReservoirSwitchState( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtWaitReservoirSwitchState( void ); static U32 getPreTreatmentFillVolume( DG_RESERVOIR_ID_T inactiveRes ); @@ -924,6 +926,10 @@ currentReservoirMgmtState = handlePreTreatmentReservoirMgmtFillCompleteState(); break; + case PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE: + currentReservoirMgmtState = handlePreTreatmentReservoirMgmtRequestReservoirSwitchState(); + break; + case PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE: currentReservoirMgmtState = handlePreTreatmentReservoirMgmtWaitReservoirSwitchState(); break; @@ -1049,8 +1055,8 @@ if ( ( initialReservoirDrain[ activeReservoir ] != TRUE ) || ( inactiveReservoir != DG_RESERVOIR_2 ) ) { - cmdSetDGActiveReservoir( inactiveReservoir ); - state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; + //cmdSetDGActiveReservoir( inactiveReservoir ); + state = PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE; } } else @@ -1135,7 +1141,7 @@ { if ( FALSE == reservoirFilledStatus[ DG_RESERVOIR_1 ] ) { - state = PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE; + state = PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE; reservoirFilledStatus[ DG_RESERVOIR_1 ] = TRUE; } else @@ -1149,7 +1155,7 @@ } else { - state = PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE; + state = PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE; if ( FALSE == reservoirFlushedStatus[ DG_RESERVOIR_1 ] ) { @@ -1162,13 +1168,13 @@ #endif { reservoirFlushedStatus[ DG_RESERVOIR_1 ] = TRUE; - cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); + //cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); } } else { reservoirFlushedStatus[ DG_RESERVOIR_2 ] = TRUE; - cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); + //cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); } } } @@ -1178,6 +1184,32 @@ /*********************************************************************//** * @brief + * The handlePreTreatmentReservoirMgmtRequestReservoirSwitchState function waits + * until prime operation switches the active reservoir before filling up next reservoir. + * @details Inputs: DG intactive reservoir + * @details Outputs: start filling next reservoir + * @return current state of pre-treatment reservoir management + *************************************************************************/ +static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtRequestReservoirSwitchState( void ) +{ + PRE_TREATMENT_RESERVOIR_MGMT_STATE_T state = PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE; + DG_OP_MODE_T dgOpMode = getDGOpMode(); + U32 dgSubMode = getDGSubMode(); + DG_RESERVOIR_ID_T inactiveReservoir = getDGInactiveReservoir(); + + //wait after drain or fill + if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) + { + state = PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE; + cmdSetDGActiveReservoir( inactiveReservoir ); + } + + return state; +} + + +/*********************************************************************//** + * @brief * The handlePreTreatmentReservoirMgmtWaitReservoirSwitchState function waits * until prime operation switches the active reservoir before filling up next reservoir. * @details Inputs: DG intactive reservoir @@ -1187,7 +1219,26 @@ static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtWaitReservoirSwitchState( void ) { PRE_TREATMENT_RESERVOIR_MGMT_STATE_T state = PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE; + DG_CMD_RESPONSE_T dgCmdResp; + // handle fill command response from DG + if ( TRUE == getDGCommandResponse( DG_CMD_SWITCH_RESERVOIR, &dgCmdResp ) ) + { + if ( DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE == dgCmdResp.rejectCode ) + { + //retry? + state = PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE; + } + else if ( dgCmdResp.rejectCode != DG_CMD_REQUEST_REJECT_REASON_NONE ) + {// bad call + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_DG_INVALID_FILL_COMMAND_REJECTED, dgCmdResp.rejectCode ) + } + else + {// success. move forward + state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; + } + } + /* if ( ( TRUE == reservoirFilledStatus[ DG_RESERVOIR_1 ] ) && ( FALSE == reservoirFilledStatus[ DG_RESERVOIR_2 ] ) ) { if ( DG_RESERVOIR_2 == getDGInactiveReservoir() ) @@ -1201,7 +1252,7 @@ { state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; } - } + }*/ return state; }