Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r152aacee2eb078fb519724e1305630f5b5b4cb91 -r8afe61f9833d9184c3ac0a430186dcb9aed7d468 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 152aacee2eb078fb519724e1305630f5b5b4cb91) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 8afe61f9833d9184c3ac0a430186dcb9aed7d468) @@ -511,17 +511,41 @@ /*********************************************************************//** * @brief - * The signalActionToResumeFill function sets the remaining reservior fill - * flags to resume filling while in PreTreatment Mode. + * The signalAllowDGFlushFills function sets the reservoir flush flags + * to allow reservoir flush fills to proceed when ready. * @details Inputs: none * @details Outputs: reservoirFlags * @return none *************************************************************************/ -void signalActionToResumeFill( void ) +void signalAllowDGFlushFills( void ) { reservoirStatus[ DG_RESERVOIR_1 ].startFlushFill = TRUE; - reservoirStatus[ DG_RESERVOIR_1 ].startNormalFill = TRUE; reservoirStatus[ DG_RESERVOIR_2 ].startFlushFill = TRUE; +} + +/*********************************************************************//** + * @brief + * The signalAllowDGFillRes1 function sets the reservoir 1 fill flag + * to allow reservoir 1 fill to proceed when ready. + * @details Inputs: none + * @details Outputs: reservoirFlags + * @return none + *************************************************************************/ +void signalAllowDGFillRes1( void ) +{ + reservoirStatus[ DG_RESERVOIR_1 ].startNormalFill = TRUE; +} + +/*********************************************************************//** + * @brief + * The signalAllowDGFillRes2 function sets the reservoir 2 fill flag + * to allow reservoir 2 fill to proceed when ready. + * @details Inputs: none + * @details Outputs: reservoirFlags + * @return none + *************************************************************************/ +void signalAllowDGFillRes2( void ) +{ reservoirStatus[ DG_RESERVOIR_2 ].startNormalFill = TRUE; } @@ -723,7 +747,12 @@ fillReservoirOneStartRequested = TRUE; transitionToNoCartSelfTests(); } - signalActionToResumeFill(); +#ifndef _RELEASE_ + if ( SW_CONFIG_DISABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_AIR_PUMP ) ) // Allow reservoir flushes now if air pump not disabled +#endif + { + signalAllowDGFlushFills(); + } } return state; @@ -1073,33 +1102,37 @@ static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtFillCmdState( void ) { PRE_TREATMENT_RESERVOIR_MGMT_STATE_T state = PRE_TREATMENT_RESERVOIR_MGMT_START_FILL_STATE; + DG_RESERVOIR_ID_T inactiveReservoir = getDGInactiveReservoir(); 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 ) ) { + U32 volume = 0; + // Drain both reservoirs and return to active res 2 before initial fills if ( reservoirStatus[ inactiveReservoir ].initialDrain != TRUE ) { reservoirStatus[ inactiveReservoir ].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 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[ inactiveReservoir ].startFlushFill ) || - ( ( TRUE == reservoirStatus[ inactiveReservoir ].startNormalFill ) && - ( currentPreTreatmentState >= HD_PRE_TREATMENT_SELF_TEST_DRY_STATE ) ) ) - { - volume = getPreTreatmentFillVolume( inactiveReservoir ); + // Determine target fill volume for next fill + volume = getPreTreatmentFillVolume( inactiveReservoir ); + // Determine whether we can start next fill yet + if ( ( FALSE == reservoirStatus[ inactiveReservoir ].flushComplete ) && + ( TRUE == reservoirStatus[ inactiveReservoir ].startFlushFill ) ) + { cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; } + else if ( ( TRUE == reservoirStatus[ inactiveReservoir ].flushComplete ) && + ( TRUE == reservoirStatus[ inactiveReservoir ].startNormalFill ) ) + { + cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); + state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; + } } return state; Index: firmware/App/Modes/ModePreTreat.h =================================================================== diff -u -r0a4dcd288d4347b85baaa0b07da568b6add5eac7 -r8afe61f9833d9184c3ac0a430186dcb9aed7d468 --- firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision 0a4dcd288d4347b85baaa0b07da568b6add5eac7) +++ firmware/App/Modes/ModePreTreat.h (.../ModePreTreat.h) (revision 8afe61f9833d9184c3ac0a430186dcb9aed7d468) @@ -65,7 +65,9 @@ void setUserSetUFVolumeStatus( BOOL status ); // Set status that indicates UF volume setting has been set void signalUserConfirmPatientConnection( void ); // Signal that user confirms patient connection has been completed void signalUserStartTreatment( void ); // Signal that user requests to start treatment -void signalActionToResumeFill( void ); // Signal that indicates the HD to resume filling reservoirs +void signalAllowDGFlushFills( void ); // Signal that indicates the HD may begin flush fills at DG +void signalAllowDGFillRes1( void ); // Signal that indicates the HD may begin filling reservoir 1 (after flushes completed) +void signalAllowDGFillRes2( void ); // Signal that indicates the HD may begin filling reservoir 2 (after flushes completed) void signalAlarmActionToPreTreatmentMode( ALARM_ACTION_T action ); // Execute alarm action as appropriate for pre-treatment mode Index: firmware/App/Modes/Prime.c =================================================================== diff -u -r152aacee2eb078fb519724e1305630f5b5b4cb91 -r8afe61f9833d9184c3ac0a430186dcb9aed7d468 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision 152aacee2eb078fb519724e1305630f5b5b4cb91) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 8afe61f9833d9184c3ac0a430186dcb9aed7d468) @@ -685,12 +685,7 @@ if ( TRUE == getReservoirFillStatus( DG_RESERVOIR_1 ) ) { - DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; - - rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_1; - rsrvrCmd.useLastTrimmerHeaterDC = FALSE; - - if ( TRUE == hasDGCompletedReservoirSwitch() ) + if ( ( TRUE == hasDGCompletedReservoirSwitch() ) && ( DG_RESERVOIR_1 == getDGActiveReservoir() ) ) { U32 dialyzerDialysateVolume = getDialyzerDialysateVolume(); @@ -869,14 +864,7 @@ if ( TRUE == getReservoirFillStatus( DG_RESERVOIR_2 ) ) { - DG_SWITCH_RSRVRS_CMD_T rsrvrCmd; - - rsrvrCmd.reservoirID = (U32)DG_RESERVOIR_2; - rsrvrCmd.useLastTrimmerHeaterDC = FALSE; - - cmdSetDGActiveReservoir( &rsrvrCmd ); - - if ( TRUE == hasDGCompletedReservoirSwitch() ) + if ( ( TRUE == hasDGCompletedReservoirSwitch() ) && ( DG_RESERVOIR_2 == getDGActiveReservoir() ) ) { signalBloodPumpHardStop(); setDialInPumpTargetFlowRate( DIALYSATE_PUMP_FAST_PRIME_FLOW_RATE_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r09b031966f17134ee635b3e60c8001005c93ed8d -r8afe61f9833d9184c3ac0a430186dcb9aed7d468 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 09b031966f17134ee635b3e60c8001005c93ed8d) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 8afe61f9833d9184c3ac0a430186dcb9aed7d468) @@ -433,6 +433,13 @@ else #endif { +#ifndef _RELEASE_ + if ( SW_CONFIG_DISABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_AIR_PUMP ) ) // Allow res 1&2 fills now if air pump not disabled +#endif + { + signalAllowDGFillRes1(); + signalAllowDGFillRes2(); + } currentDrySelfTestsState = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; } } @@ -1375,7 +1382,14 @@ { state = DRY_SELF_TESTS_SYRINGE_PUMP_OCCLUSION_DETECTION_STATE; syringeOcclusionDelayStartTime = getMSTimerCount(); // Get the current time to check for occlusion after 3 seconds has elapsed - signalActionToResumeFill(); +#ifndef _RELEASE_ + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_AIR_PUMP ) ) // if no air pump, now we can allow fills to start + { + signalAllowDGFlushFills(); + signalAllowDGFillRes1(); + signalAllowDGFillRes2(); + } +#endif } else { @@ -1397,7 +1411,14 @@ } else { - signalActionToResumeFill(); +#ifndef _RELEASE_ + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_AIR_PUMP ) ) // if no air pump, now we can allow fills to start + { + signalAllowDGFlushFills(); + signalAllowDGFillRes1(); + signalAllowDGFillRes2(); + } +#endif state = DRY_SELF_TESTS_COMPLETE_STATE; }