Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r12708a04ae3365e11180182fc52d005c229a7bc6 -rb341967abc8bab38c4f13ff8176e3aec37fa10bb --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 12708a04ae3365e11180182fc52d005c229a7bc6) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision b341967abc8bab38c4f13ff8176e3aec37fa10bb) @@ -829,13 +829,14 @@ ( FALSE == isValveCloseToCommandedPosition( valve, valvesStatus[ valve ].pendingCommandedPosition ) ) ) { // Just set the valves to transition so it will not be in a known position for a while - valvesStatus[ valve ].commandedPosition = valvesStatus[ valve ].pendingCommandedPosition; - valvesStatus[ valve ].transitionStartTime = getMSTimerCount(); - valvesStatus[ valve ].hasTransitionBeenRequested = FALSE; + valvesStatus[ valve ].commandedPosition = valvesStatus[ valve ].pendingCommandedPosition; + valvesStatus[ valve ].transitionStartTime = getMSTimerCount(); + setValveNextStep( valve, TRANSITION_STEP_CHANGE_IN_COUNTS ); state = VALVE_STATE_IN_TRANSITION; } + valvesStatus[ valve ].hasTransitionBeenRequested = FALSE; } // This option is only available in a debug build #ifdef DEBUG_ENABLED Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rbd4f21cec7b0d25c6a83a53a15220550d4e7bda3 -rb341967abc8bab38c4f13ff8176e3aec37fa10bb --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision bd4f21cec7b0d25c6a83a53a15220550d4e7bda3) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision b341967abc8bab38c4f13ff8176e3aec37fa10bb) @@ -131,7 +131,6 @@ static HD_PRE_TREATMENT_PAT_CONN_STATE_T handlePatientConnectionWait4UserConfirmState( void ); static HD_PRE_TREATMENT_PAT_CONN_STATE_T handlePatientConnectionWait4TreatmentStartState( void ); -static void execPreTreatmentTestConfigReservoirMgmt( void ); static void execPreTreatmentReservoirMgmt( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtStartState( void ); static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtDrainCmdState( void ); @@ -144,6 +143,9 @@ static U32 getPreTreatmentFillVolume( DG_RESERVOIR_ID_T inactiveRes ); static void setPreTreatmentHeatingParams( F32 targetTempC, U32 targetVolML, F32 targetFillFlowLPM, U32 dialysateFlowMLPM ); +// Test configuration teset function +static void execPreTreatmentTestConfigReservoirMgmt( void ); + /*********************************************************************//** * @brief * The initPreTreatmentMode function initializes the Pre-Treatment Mode module. @@ -1581,131 +1583,115 @@ *************************************************************************/ static void execPreTreatmentTestConfigReservoirMgmt( void ) { + DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; + DG_CMD_RESPONSE_T dgCmdResp; + F32 reservoir1Level = getReservoirWeight( DG_RESERVOIR_1 ); + F32 reservoir2Level = getReservoirWeight( DG_RESERVOIR_2 ); + DG_OP_MODE_T dgOpMode = getDGOpMode(); + U32 dgSubMode = getDGSubMode(); + switch( currentReservoirMgmtState ) { case PRE_TREATMENT_RESERVOIR_MGMT_START_STATE: + rsrvrCmd.useLastTrimmerHeaterDC = FALSE; + + if ( ( reservoir1Level >= PRE_TREATMENT_TEST_CONFIG_MIN_RSRVR_VOL_ML ) && ( reservoir1Level < PRE_TREATMENT_TEST_CONFIG_MAX_RSRVR_VOL_ML ) ) { - DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; - F32 reservoir1Level = getReservoirWeight( DG_RESERVOIR_1 ); - F32 reservoir2Level = getReservoirWeight( DG_RESERVOIR_2 ); + // Assume a reservoir switch is not needed and transition to the complete state because we are done + currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_COMPLETE_STATE; - rsrvrCmd.useLastTrimmerHeaterDC = FALSE; - - if ( ( reservoir1Level >= PRE_TREATMENT_TEST_CONFIG_MIN_RSRVR_VOL_ML ) && ( reservoir1Level < PRE_TREATMENT_TEST_CONFIG_MAX_RSRVR_VOL_ML ) ) + if ( DG_RESERVOIR_2 == getDGActiveReservoir() ) { - // Assume a reservoir switch is not needed and transition to the complete state because we are done - currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_COMPLETE_STATE; - - if ( DG_RESERVOIR_2 == getDGActiveReservoir() ) - { - // Reservoir 1 has the right volume, set it to active reservoir and wait for it to be done - rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_1; - currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE; - cmdSetDGActiveReservoir( &rsrvrCmd ); - } + // Reservoir 1 has the right volume, set it to active reservoir and wait for it to be done + rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_1; + currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE; + cmdSetDGActiveReservoir( &rsrvrCmd ); } - else if ( reservoir1Level >= PRE_TREATMENT_TEST_CONFIG_MAX_RSRVR_VOL_ML ) + } + else if ( reservoir1Level >= PRE_TREATMENT_TEST_CONFIG_MAX_RSRVR_VOL_ML ) + { + // Reservoir 1 needs a partial drain so set it to be inactive so DG can drain it + if ( DG_RESERVOIR_1 == getDGActiveReservoir() ) { - // Reservoir 1 needs a partial drain so set it to be inactive so DG can drain it - if ( DG_RESERVOIR_1 == getDGActiveReservoir() ) - { - rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_2; - cmdSetDGActiveReservoir( &rsrvrCmd ); - } - - currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; + rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_2; + cmdSetDGActiveReservoir( &rsrvrCmd ); } - else if ( ( reservoir2Level >= PRE_TREATMENT_TEST_CONFIG_MIN_RSRVR_VOL_ML ) && ( reservoir2Level < PRE_TREATMENT_TEST_CONFIG_MAX_RSRVR_VOL_ML ) ) - { - // Reservoir 2 is in the right level, just make sure it is the active reservoir - // Assume a reservoir switch is not needed and transition to the complete state because we are done - currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_COMPLETE_STATE; - if ( DG_RESERVOIR_1 == getDGActiveReservoir() ) - { - rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_2; - currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE; - cmdSetDGActiveReservoir( &rsrvrCmd ); - } + currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; + } + else if ( ( reservoir2Level >= PRE_TREATMENT_TEST_CONFIG_MIN_RSRVR_VOL_ML ) && ( reservoir2Level < PRE_TREATMENT_TEST_CONFIG_MAX_RSRVR_VOL_ML ) ) + { + // Reservoir 2 is in the right level, just make sure it is the active reservoir + // Assume a reservoir switch is not needed and transition to the complete state because we are done + currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_COMPLETE_STATE; + + if ( DG_RESERVOIR_1 == getDGActiveReservoir() ) + { + rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_2; + currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE; + cmdSetDGActiveReservoir( &rsrvrCmd ); } - else if ( reservoir2Level >= PRE_TREATMENT_TEST_CONFIG_MAX_RSRVR_VOL_ML ) + } + else if ( reservoir2Level >= PRE_TREATMENT_TEST_CONFIG_MAX_RSRVR_VOL_ML ) + { + if ( DG_RESERVOIR_2 == getDGActiveReservoir() ) { - if ( DG_RESERVOIR_2 == getDGActiveReservoir() ) - { - rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_1; - cmdSetDGActiveReservoir( &rsrvrCmd ); - } - - currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; + rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_1; + cmdSetDGActiveReservoir( &rsrvrCmd ); } + + currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; } break; case PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE: + // If DG has not started yet, start DG + if ( DG_MODE_STAN == dgOpMode ) { - DG_OP_MODE_T dgOpMode = getDGOpMode(); - U32 dgSubMode = getDGSubMode(); + cmdStartDG(); + } - // If DG has not started yet, start DG - if ( DG_MODE_STAN == dgOpMode ) + // Ensure any pending reservoir switches are completed before sending drain command + if ( TRUE == hasDGCompletedReservoirSwitch() ) + { + if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) { - cmdStartDG(); + currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_RESP_STATE; + cmdStartDGDrain( PRE_TREATMENT_FULL_RESERVOIR_VOLUME_ML, FALSE, FALSE, TRUE ); } - - // Ensure any pending reservoir switches are completed before sending drain command - if ( TRUE == hasDGCompletedReservoirSwitch() ) - { - if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) - { - currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_RESP_STATE; - cmdStartDGDrain( PRE_TREATMENT_FULL_RESERVOIR_VOLUME_ML, FALSE, FALSE, TRUE ); - } - } } break; case PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_RESP_STATE: + // Check DG response to drain command + if ( TRUE == getDGCommandResponse( DG_CMD_START_DRAIN, &dgCmdResp ) ) { - DG_CMD_RESPONSE_T dgCmdResp; - DG_OP_MODE_T dgOpMode = getDGOpMode(); - U32 dgSubMode = getDGSubMode(); - - // Check DG response to drain command - if ( TRUE == getDGCommandResponse( DG_CMD_START_DRAIN, &dgCmdResp ) ) + if ( DG_CMD_REQUEST_REJECT_REASON_NONE == dgCmdResp.rejectCode ) { - if ( DG_CMD_REQUEST_REJECT_REASON_NONE == dgCmdResp.rejectCode ) + if ( DG_MODE_DRAI == dgOpMode ) { - if ( DG_MODE_DRAI == dgOpMode ) - { - currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE; - } + currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE; } - else - { - currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; - } } + else + { + currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; + } } break; case PRE_TREATMENT_RESERVOIR_MGMT_REQUEST_RESERVOIR_SWITCH_STATE: + if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) { - DG_OP_MODE_T dgOpMode = getDGOpMode(); - U32 dgSubMode = getDGSubMode(); + DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; + DG_RESERVOIR_ID_T inactiveReservoir = getDGInactiveReservoir(); - if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) - { - DG_RESERVOIR_ID_T inactiveReservoir = getDGInactiveReservoir(); + rsrvrCmd.reservoirID = ( DG_RESERVOIR_1 == inactiveReservoir ? (U32)DG_RESERVOIR_1 : (U32)DG_RESERVOIR_2 ); + rsrvrCmd.useLastTrimmerHeaterDC = FALSE; - DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; + cmdSetDGActiveReservoir( &rsrvrCmd ); - rsrvrCmd.reservoirID = ( DG_RESERVOIR_1 == inactiveReservoir ? (U32)DG_RESERVOIR_1 : (U32)DG_RESERVOIR_2 ); - rsrvrCmd.useLastTrimmerHeaterDC = FALSE; - - cmdSetDGActiveReservoir( &rsrvrCmd ); - - currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE; - } + currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RESERVOIR_SWITCH_STATE; } break;