Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r97e24856b80f612b2556fb9a599e40659710822a -r3eab17f4bf956168bd11eb0a54c2dce66b54946a --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 97e24856b80f612b2556fb9a599e40659710822a) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 3eab17f4bf956168bd11eb0a54c2dce66b54946a) @@ -47,6 +47,8 @@ typedef enum PreTreatmentReservoirMgmt_States { PRE_TREATMENT_RESERVOIR_MGMT_START_STATE = 0, ///< Wait for signal to start drain and fill reservoirs. + PRE_TREATMENT_RESERVOIR_MGMT_SWITCH_RESERVOIR_CMD_STATE, ///< Command DG to switch active reservoir. + PRE_TREATMENT_RESERVOIR_MGMT_SWITCH_RESERVOIR_RESP_STATE, ///< Processing DG switch reservoir command response. PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE, ///< Command DG to start draining reservoir. PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_RESP_STATE, ///< After sending drain command, process DG drain command response. PRE_TREATMENT_RESERVOIR_MGMT_START_FILL_STATE, ///< Command DG to start filling reservoir. @@ -90,6 +92,8 @@ static void execPreTreatmentReservoirMgmt( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtStartState( void ); +static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtSwitchReservoirCmdState( void ); +static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtSwitchReservoirRespState( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtDrainCmdState( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtDrainCmdRespState( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtFillCmdState( void ); @@ -160,7 +164,9 @@ switch ( currentPreTreatmentState ) { case HD_PRE_TREATMENT_START_STATE: +#ifndef SKIP_SAMPLE_WATER transitionToSampleWater(); +#endif currentPreTreatmentState = HD_PRE_TREATMENT_WATER_SAMPLE_STATE; break; @@ -308,7 +314,9 @@ BOOL accepted = FALSE; REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NO_PATIENT_CONNECTION_CONFIRM; +#ifndef SKIP_UI_INTERACTION if ( TRUE == patientConnectionConfirm ) +#endif { if ( ( MODE_PRET == getCurrentOperationMode() ) && ( HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE == currentPreTreatmentState ) ) { @@ -480,13 +488,22 @@ static HD_PRE_TREATMENT_MODE_STATE_T handleWaterSampleState( void ) { HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_WATER_SAMPLE_STATE; + DG_OP_MODE_T dgOpMode = getDGOpMode(); + U32 dgSubMode = getDGSubMode(); execSampleWater(); +#ifndef SKIP_SAMPLE_WATER if ( TRUE == isSampleWaterPassed() ) +#endif { - state = HD_PRE_TREATMENT_SELF_TEST_CONSUMABLE_STATE; - transitionToConsumableSelfTest(); + if ( ( DG_MODE_STAN == dgOpMode ) && ( DG_STANDBY_MODE_STATE_IDLE == dgSubMode ) ) + { + state = HD_PRE_TREATMENT_SELF_TEST_CONSUMABLE_STATE; + cmdStartDG(); + cmdSetDGDialysateTargetTemps( 39.0, 37.0 ); + transitionToConsumableSelfTest(); + } } return state; @@ -560,7 +577,9 @@ { HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_CART_INSTALL_STATE; +#ifndef SKIP_UI_INTERACTION if ( TRUE == confirmInstallRequested ) +#endif { confirmInstallRequested = FALSE; state = HD_PRE_TREATMENT_SELF_TEST_DRY_STATE; @@ -662,7 +681,9 @@ execPreTreatmentRecirc(); +#ifndef SKIP_UI_INTERACTION if ( TRUE == continueToTreatmentRequested ) +#endif { continueToTreatmentRequested = FALSE; state = HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; @@ -709,6 +730,14 @@ currentReservoirMgmtState = handlePreTreatmentReservoirMgmtStartState(); break; + case PRE_TREATMENT_RESERVOIR_MGMT_SWITCH_RESERVOIR_CMD_STATE: + currentReservoirMgmtState = handlePreTreatmentReservoirMgmtSwitchReservoirCmdState(); + break; + + case PRE_TREATMENT_RESERVOIR_MGMT_SWITCH_RESERVOIR_RESP_STATE: + currentReservoirMgmtState = handlePreTreatmentReservoirMgmtSwitchReservoirRespState(); + break; + case PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE: currentReservoirMgmtState = handlePreTreatmentReservoirMgmtDrainCmdState(); break; @@ -751,14 +780,64 @@ if ( TRUE == fillReservoirOneStartRequested ) { fillReservoirOneStartRequested = FALSE; - state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; + state = PRE_TREATMENT_RESERVOIR_MGMT_SWITCH_RESERVOIR_CMD_STATE; } return state; } /*********************************************************************//** * @brief + * The handlePreTreatmentReservoirMgmtSwitchReservoirRespState function sends + * switch reservoir command to DG. + * @details Inputs: reservoirFilledStatus[] + * @details Outputs: sent switch reservoir command to DG + * @return next state of pre-treatment reservoir management + *************************************************************************/ +static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtSwitchReservoirCmdState( void ) +{ + if ( FALSE == reservoirFilledStatus[ DG_RESERVOIR_1 ] ) + { + cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); + } + else + { + cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); + } + + return PRE_TREATMENT_RESERVOIR_MGMT_SWITCH_RESERVOIR_RESP_STATE; +} + +/*********************************************************************//** + * @brief + * The handlePreTreatmentReservoirMgmtSwitchReservoirRespState function waits + * and processes DG switch reservoir command response. + * @details Inputs: DG switch reservoir command response + * @details Outputs: processed switch reservoir response + * @return next state of pre-treatment reservoir management + *************************************************************************/ +static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtSwitchReservoirRespState( void ) +{ + PRE_TREATMENT_RESERVOIR_MGMT_STATE_T state = PRE_TREATMENT_RESERVOIR_MGMT_SWITCH_RESERVOIR_RESP_STATE; + DG_CMD_RESPONSE_T dgCmdResp; + + if ( TRUE == getDGCommandResponse( DG_CMD_SWITCH_RESERVOIR, &dgCmdResp ) ) + { + if ( TRUE == dgCmdResp.rejected ) + { + state = PRE_TREATMENT_RESERVOIR_MGMT_SWITCH_RESERVOIR_CMD_STATE; + } + else + { + state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; + } + } + + return state; +} + +/*********************************************************************//** + * @brief * The handlePreTreatmentReservoirMgmtDrainCmdState function sends drain * command to DG when DG is in re-circulate mode. * @details Inputs: fillReservoirOneStartRequested @@ -769,10 +848,11 @@ { PRE_TREATMENT_RESERVOIR_MGMT_STATE_T state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; DG_OP_MODE_T dgOpMode = getDGOpMode(); + U32 dgSubMode = getDGSubMode(); if ( DG_MODE_CIRC == dgOpMode ) { - if ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == getDGSubMode() ) + if ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) { state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_RESP_STATE; cmdStartDGDrain( DRAIN_RESERVOIR_TO_VOLUME_ML, TRUE ); @@ -798,13 +878,14 @@ { PRE_TREATMENT_RESERVOIR_MGMT_STATE_T state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_RESP_STATE; DG_CMD_RESPONSE_T dgCmdResp; + DG_OP_MODE_T dgOpMode = getDGOpMode(); - if ( ( TRUE == getDGCommandResponse( DG_CMD_START_DRAIN, &dgCmdResp ) ) && ( DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE == dgCmdResp.rejected ) ) + if ( ( TRUE == getDGCommandResponse( DG_CMD_START_DRAIN, &dgCmdResp ) ) && ( DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE == dgCmdResp.rejectCode ) ) { state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; } - if ( DG_MODE_DRAI == getDGOpMode() ) + if ( DG_MODE_DRAI == dgOpMode ) { state = PRE_TREATMENT_RESERVOIR_MGMT_START_FILL_STATE; } @@ -824,8 +905,10 @@ static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtFillCmdState( void ) { PRE_TREATMENT_RESERVOIR_MGMT_STATE_T state = PRE_TREATMENT_RESERVOIR_MGMT_START_FILL_STATE; + DG_OP_MODE_T dgOpMode = getDGOpMode(); + U32 dgSubMode = getDGSubMode(); - if ( ( DG_MODE_CIRC == getDGOpMode() ) && ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == getDGSubMode() ) ) + if ( ( DG_MODE_CIRC == dgOpMode ) && ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) ) { state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; @@ -854,15 +937,17 @@ { PRE_TREATMENT_RESERVOIR_MGMT_STATE_T state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; DG_CMD_RESPONSE_T dgCmdResp; + DG_OP_MODE_T dgOpMode = getDGOpMode(); - if ( ( TRUE == getDGCommandResponse( DG_CMD_START_FILL, &dgCmdResp ) ) && ( DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE == dgCmdResp.rejected ) ) + + if ( ( TRUE == getDGCommandResponse( DG_CMD_START_FILL, &dgCmdResp ) ) && ( DG_CMD_REQUEST_REJECT_REASON_INVALID_MODE == dgCmdResp.rejectCode ) ) { - currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_START_FILL_STATE; + state = PRE_TREATMENT_RESERVOIR_MGMT_START_FILL_STATE; } - if ( DG_MODE_FILL == getDGOpMode() ) + if ( DG_MODE_FILL == dgOpMode ) { - currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_FILL_COMPLETE_STATE; + state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_COMPLETE_STATE; } return state; @@ -880,14 +965,14 @@ static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtFillCompleteState( void ) { PRE_TREATMENT_RESERVOIR_MGMT_STATE_T state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_COMPLETE_STATE; + DG_OP_MODE_T dgOpMode = getDGOpMode(); - if ( DG_MODE_CIRC == getDGOpMode() ) + if ( DG_MODE_CIRC == dgOpMode ) { if ( FALSE == reservoirFilledStatus[ DG_RESERVOIR_1 ] ) { - currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; + state = PRE_TREATMENT_RESERVOIR_MGMT_SWITCH_RESERVOIR_CMD_STATE; reservoirFilledStatus[ DG_RESERVOIR_1 ] = TRUE; - cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); } else if ( ( TRUE == reservoirFilledStatus[ DG_RESERVOIR_1 ] ) && ( FALSE == reservoirFilledStatus[ DG_RESERVOIR_2 ] ) ) {