Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r00fc092615d0b6b518754cb4de6a8abfaf946b33 -r8b85f5e5542a227384f6696238f3d18b8d8b0efa --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 00fc092615d0b6b518754cb4de6a8abfaf946b33) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 8b85f5e5542a227384f6696238f3d18b8d8b0efa) @@ -81,10 +81,10 @@ static U32 submodeCompleteTransitionTimeCounter; ///< Sub-mode completed transition wait time counter. static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T currentReservoirMgmtState; ///< Current pre-treatment reservoir management state. -static BOOL fillReservoirOneStartRequested; ///< Flag indicates fill reservoir one has been requested. static BOOL reservoirFilledStatus[ NUM_OF_DG_RESERVOIRS ]; ///< Flag indicates a reservoir has been filled. static BOOL reservoirFlushedStatus[ NUM_OF_DG_RESERVOIRS ]; ///< Flag indicates a reservoir has been flushed. static PRE_TREATMENT_RESERVOIR_FLAGS_T reservoirFlags[ NUM_OF_DG_RESERVOIRS ]; ///< Set of Flags that signal if the DG should wait to fill. +static BOOL initialReservoirDrain[ NUM_OF_DG_RESERVOIRS ]; ///< Flags indicate whether a reservoir has been requested to initially drain. // ********** private function prototypes ********** @@ -125,7 +125,6 @@ currentReservoirMgmtState = PRE_TREATMENT_RESERVOIR_MGMT_START_STATE; setUFVolStatus = FALSE; patientConnectionConfirm = FALSE; - fillReservoirOneStartRequested = FALSE; submodeCompleteTransitionTimeCounter = 0; reservoirFilledStatus[ DG_RESERVOIR_1 ] = FALSE; @@ -136,6 +135,9 @@ reservoirFlags[ DG_RESERVOIR_2 ].startFlushFill = FALSE; reservoirFlags[ DG_RESERVOIR_2 ].startNormalFill = FALSE; + initialReservoirDrain[ DG_RESERVOIR_1 ] = FALSE; + initialReservoirDrain[ DG_RESERVOIR_2 ] = FALSE; + initSampleWater(); initConsumableSelfTest(); initPrime(); @@ -489,6 +491,7 @@ *************************************************************************/ void signalActionToResumeFill( void ) { + reservoirFlags[ DG_RESERVOIR_1 ].startFlushFill = TRUE; reservoirFlags[ DG_RESERVOIR_1 ].startNormalFill = TRUE; reservoirFlags[ DG_RESERVOIR_2 ].startFlushFill = TRUE; reservoirFlags[ DG_RESERVOIR_2 ].startNormalFill = TRUE; @@ -689,8 +692,6 @@ { submodeCompleteTransitionTimeCounter = 0; state = HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; - fillReservoirOneStartRequested = TRUE; - reservoirFlags[ DG_RESERVOIR_1 ].startFlushFill = TRUE; transitionToNoCartSelfTests(); } } @@ -938,20 +939,16 @@ * @brief * The handlePreTreatmentReservoirMgmtStartState function handles reservoir * management start state for pre-treatment mode. - * @details Inputs: fillReservoirOneStartRequested + * @details Inputs: none * @details Outputs: processed fill reservoir one request * @return current state of pre-treatment reservoir management *************************************************************************/ static PRE_TREATMENT_RESERVOIR_MGMT_STATE_T handlePreTreatmentReservoirMgmtStartState( void ) { PRE_TREATMENT_RESERVOIR_MGMT_STATE_T state = PRE_TREATMENT_RESERVOIR_MGMT_START_STATE; - if ( TRUE == fillReservoirOneStartRequested ) - { - fillReservoirOneStartRequested = FALSE; - state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; - cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); - } + state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; + cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); return state; } @@ -960,7 +957,7 @@ * @brief * The handlePreTreatmentReservoirMgmtDrainCmdState function sends drain * command to DG when DG is in re-circulate mode. - * @details Inputs: fillReservoirOneStartRequested + * @details Inputs: none * @details Outputs: processed fill reservoir one request * @return current state of pre-treatment reservoir management *************************************************************************/ @@ -1036,22 +1033,38 @@ if ( ( DG_MODE_GENE == dgOpMode ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == dgSubMode ) ) { - volume = getPreTreatmentFillVolume( inactiveReservoir ); + initialReservoirDrain[ inactiveReservoir ] = TRUE; - // not flushed and need to fill - if ( ( FALSE == reservoirFlushedStatus[ inactiveReservoir ] ) && - ( TRUE == reservoirFlags[ inactiveReservoir ].startFlushFill ) ) + // if fills not yet enabled, check to see if we want to move on to drain the other reservoir + if ( reservoirFlags[ DG_RESERVOIR_1 ].startFlushFill != TRUE ) { - cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); - state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; - } + DG_RESERVOIR_ID_T activeReservoir = getDGActiveReservoir(); - // flushed and need to fill - if ( ( TRUE == reservoirFlushedStatus[ inactiveReservoir ] ) && - ( TRUE == reservoirFlags[ inactiveReservoir ].startNormalFill ) ) + if ( ( initialReservoirDrain[ activeReservoir ] != TRUE ) || ( inactiveReservoir != DG_RESERVOIR_2 ) ) + { + cmdSetDGActiveReservoir( inactiveReservoir ); + state = PRE_TREATMENT_RESERVOIR_MGMT_DRAIN_CMD_STATE; + } + } + else { - cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); - state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; + volume = getPreTreatmentFillVolume( inactiveReservoir ); + + // not flushed and need to fill + if ( ( FALSE == reservoirFlushedStatus[ inactiveReservoir ] ) && + ( TRUE == reservoirFlags[ inactiveReservoir ].startFlushFill ) ) + { + cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); + state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; + } + + // flushed and need to fill + if ( ( TRUE == reservoirFlushedStatus[ inactiveReservoir ] ) && + ( TRUE == reservoirFlags[ inactiveReservoir ].startNormalFill ) ) + { + cmdStartDGFill( volume, DEFAULT_TARGET_FILL_FLOW_RATE_LPM ); + state = PRE_TREATMENT_RESERVOIR_MGMT_FILL_CMD_RESP_STATE; + } } } Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -ra950dac5fd5cfbbc52c82efb512c6c36a4ab30f3 -r8b85f5e5542a227384f6696238f3d18b8d8b0efa --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision a950dac5fd5cfbbc52c82efb512c6c36a4ab30f3) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 8b85f5e5542a227384f6696238f3d18b8d8b0efa) @@ -84,7 +84,7 @@ #define SELF_TEST_TIME_DATA_PUB_INTERVAL ( MS_PER_SECOND ) ///< Interval (ms/task time) at which self-test time data is published on the CAN bus. #define PRESSURE_CHECK_START_PRESSURE_TOLERANCE_MMHG 10.0F ///< Prior to dry pressure leak test, arterial and venous pressure sensors should read zero +/- this tolerance. -#define MAX_EMPTY_RESERVOIR_WEIGHT_G 10.0F ///< Maximum reservoir weight to be considered empty for cartridge pressure leak test. +#define MAX_EMPTY_RESERVOIR_WEIGHT_G 15.0F ///< Maximum reservoir weight to be considered empty for cartridge pressure leak test. /// Multiplier to conver flow (mL/min) into volume (mL) for period of general task interval. static const F32 SELF_TEST_FLOW_INTEGRATOR = ( ( 1.0F * TASK_GENERAL_INTERVAL ) / ( SEC_PER_MIN * MS_PER_SECOND ) ); @@ -523,7 +523,6 @@ // Publish current self-test time data if ( calcTimeSince( selfTestPreviousPublishDataTime ) >= SELF_TEST_TIME_DATA_PUB_INTERVAL ) { - if currentDrySelfTestsState U32 const elapsedSelfTestTimeInSecs = calcTimeSince( selfTestStartTime ) / MS_PER_SECOND; selfTestPreviousPublishDataTime = getMSTimerCount(); @@ -977,13 +976,13 @@ setupForSelfTestsStop(); } else - { // Wait for reservoir 2 to empty before starting pressure leak test - if ( ( DG_RESERVOIR_2 == getDGInactiveReservoir() ) && ( getLoadCellWeight( LOAD_CELL_RESERVOIR_2_PRIMARY ) < MAX_EMPTY_RESERVOIR_WEIGHT_G ) ) + { + // Wait for reservoirs to drain before starting this test + if ( ( getLoadCellWeight( LOAD_CELL_RESERVOIR_1_PRIMARY ) < MAX_EMPTY_RESERVOIR_WEIGHT_G ) && ( getLoadCellWeight( LOAD_CELL_RESERVOIR_2_PRIMARY ) < MAX_EMPTY_RESERVOIR_WEIGHT_G ) ) { // TODO - wait 1 sec before taking pressure readings and beginning pressure check previousNormalArterialPressure = getFilteredArterialPressure(); previousNormalVenousPressure = getFilteredVenousPressure(); - cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); // temporarily set reservoir 1 as active before cartridge pressure leak test starts. state = DRY_SELF_TESTS_PRESSURE_SENSORS_VENOUS_SETUP_STATE; // Check to see if sensor is within normal ranges before we execute pressure sensor tests @@ -1269,7 +1268,6 @@ if ( ( arterialPressureDiff <= NORMAL_PRESSURE_DIFF_TOLERANCE_MMHG ) && ( venousPressureDiff <= NORMAL_PRESSURE_DIFF_TOLERANCE_MMHG ) ) { signalActionToResumeFill(); - cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); // restore reservoir 1 as active after cartridge pressure leak test completed. state = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; }