Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -ra7ea37877ac65a9932d639bbe55a8456b97d6913 -r5bf62ff1373f2e9eea858244a97167323bff33f8 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision a7ea37877ac65a9932d639bbe55a8456b97d6913) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 5bf62ff1373f2e9eea858244a97167323bff33f8) @@ -65,6 +65,7 @@ static BOOL disposableRemovalConfirmed = FALSE; ///< Flag indicates user confirms disposable removal. static BOOL isDrainStarted = FALSE; ///< Flag indicates a drain operation has been started. +static BOOL isDrainCompleted = FALSE; static HD_POST_TREATMENT_STATE_T currentPostTreatmentState; ///< Current state of post-treatment mode state machine. static DRAIN_STATE_T currentDrainReservoirState; ///< Current drain reservoir state. @@ -79,6 +80,7 @@ static HD_POST_TREATMENT_STATE_T handlePostTreatmentVerifyState( void ); static void execDrainReservoirs( void ); +static BOOL isReservoirDrainStarted( void ); static DRAIN_STATE_T handleDrainFirstReservoirStartState( void ); static DRAIN_STATE_T handleDrainFirstReservoirState( void ); static DRAIN_STATE_T handleDrainSwitchReservoirState( void ); @@ -96,6 +98,7 @@ patientDisconnectionConfirmed = FALSE; disposableRemovalConfirmed = FALSE; isDrainStarted = FALSE; + isDrainCompleted = FALSE; currentPostTreatmentState = HD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE; currentDrainReservoirState = DRAIN_FIRST_RESERVOIR_START_STATE; postTreatmentPublishTimerCounter = 0; @@ -123,7 +126,6 @@ setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, FALSE ); - cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); cmdStopDGTrimmerHeater(); setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); @@ -410,6 +412,33 @@ /*********************************************************************//** * @brief + * The isReservoirDrainStarted function checks if reservoir drain has started. + * @details Inputs: none + * @details Outputs: processed drain command response + * @return TRUE if reservoir drain has started, otherwise FALSE + *************************************************************************/ +static BOOL isReservoirDrainStarted( void ) +{ + DG_CMD_RESPONSE_T dgCmdResp; + BOOL result = FALSE; + + if ( TRUE == getDGCommandResponse( DG_CMD_START_DRAIN, &dgCmdResp ) ) + { + if ( DG_CMD_REQUEST_REJECT_REASON_NONE == dgCmdResp.rejectCode ) + { + result = TRUE; + } + else + { + cmdStartDGDrain( EMPTY_RESERVOIR_VOLUME_ML, FALSE ); + } + } + + return result; +} + +/*********************************************************************//** + * @brief * The handleDrainReservoirOneState function sends command to DG to * drain first reservoir. * @details Inputs: none @@ -439,25 +468,25 @@ *************************************************************************/ static DRAIN_STATE_T handleDrainFirstReservoirState( void ) { - DG_CMD_RESPONSE_T dgCmdResp; DRAIN_STATE_T state = DRAIN_FIRST_RESERVOIR_STATE; - if ( ( TRUE == getDGCommandResponse( DG_CMD_START_DRAIN, &dgCmdResp ) ) && ( DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE == dgCmdResp.rejectCode ) ) + if ( TRUE == isReservoirDrainStarted() ) { - state = DRAIN_FIRST_RESERVOIR_START_STATE; + isDrainStarted = TRUE; } - if ( DG_MODE_DRAI == getDGOpMode() ) + // Drain has started and DG goes to re-circ mode flush lines state means drain completed + if ( ( TRUE == isDrainStarted ) && ( DG_RECIRCULATE_MODE_STATE_FLUSH_LINES == getDGSubMode() ) ) { - isDrainStarted = TRUE; + isDrainCompleted = TRUE; } - // Drain has started and DG goes to re-circ mode means drain completed - if ( TRUE == isDrainStarted ) + if ( TRUE == isDrainCompleted ) { if ( ( DG_MODE_CIRC == getDGOpMode() ) && ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == getDGSubMode() ) ) { isDrainStarted = FALSE; + isDrainCompleted = FALSE; state = DRAIN_SWITCH_RESERVOIR_STATE; cmdSetDGActiveReservoir( getDGInactiveReservoir() ); } @@ -497,25 +526,25 @@ *************************************************************************/ static DRAIN_STATE_T handleDrainSecondReservoirState( void ) { - DG_CMD_RESPONSE_T dgCmdResp; DRAIN_STATE_T state = DRAIN_SECOND_RESERVOIR_STATE; - if ( ( TRUE == getDGCommandResponse( DG_CMD_START_DRAIN, &dgCmdResp ) ) && ( DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE == dgCmdResp.rejectCode ) ) + if ( TRUE == isReservoirDrainStarted() ) { - cmdStartDGDrain( EMPTY_RESERVOIR_VOLUME_ML, FALSE ); + isDrainStarted = TRUE; } - if ( DG_MODE_DRAI == getDGOpMode() ) + // Drain has started and DG goes to re-circ mode flush lines state means drain completed + if ( ( TRUE == isDrainStarted ) && ( DG_RECIRCULATE_MODE_STATE_FLUSH_LINES == getDGSubMode() ) ) { - isDrainStarted = TRUE; + isDrainCompleted = TRUE; } - // Drain has started and DG goes to re-circ mode means drain completed - if ( TRUE == isDrainStarted ) + if ( TRUE == isDrainCompleted ) { if ( ( DG_MODE_CIRC == getDGOpMode() ) && ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == getDGSubMode() ) ) { isDrainStarted = FALSE; + isDrainCompleted = FALSE; state = DRAIN_COMPLETE_STATE; } }