Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r57f9f2d3b4c109c952034003c77a315bb3c41717 -r43937ee7309e1ad696d31417888021775803f436 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 57f9f2d3b4c109c952034003c77a315bb3c41717) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 43937ee7309e1ad696d31417888021775803f436) @@ -132,6 +132,7 @@ static BOOL useHeparin; ///< Flag indicates the user of heparin. static BOOL selfTestsResumeRequested; ///< Flag indicates user requesting self-tests resume. static BOOL cartridgeUsedTestRun; ///< Flag indicates whether the used cartridge test has been run. +static BOOL occlusionBaselineWasSet; ///< Flag indicates whether the blood pump occlusion baseline for installed cartridge has been set. static BOOL doorStateAfterCartridgeInstall; ///< Flag indicates state of front door for saline clamp check after cartridge installed. // ********** private function prototypes ********** @@ -245,6 +246,7 @@ setValvePosition( VDO, VALVE_POSITION_A_INSERT_EJECT ); setValvePosition( VBA, VALVE_POSITION_A_INSERT_EJECT ); setValvePosition( VBV, VALVE_POSITION_A_INSERT_EJECT ); + setValveAirTrap( STATE_CLOSED ); } /*********************************************************************//** @@ -425,6 +427,7 @@ previousNormalVenousPressure = 0.0; dryPressureTestsCompleted = FALSE; cartridgeUsedTestRun = FALSE; + occlusionBaselineWasSet = FALSE; selfTestStartTime = getMSTimerCount(); selfTestPreviousPublishDataTime = getMSTimerCount(); selfTestCartridgeSettleTime = getMSTimerCount(); @@ -958,6 +961,7 @@ if ( TRUE == didTimeout( selfTestCartridgeSettleTime, CARTRIDGE_INSERT_PRESSURE_SETTLE_TIME_MS ) ) { setOcclusionInstallLevel(); // Record occlusion pressure level after a new cartridge is installed + occlusionBaselineWasSet = TRUE; doorClosedRequired( TRUE, TRUE ); state = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; } @@ -1086,6 +1090,10 @@ if ( TRUE == doesAlarmStatusIndicateStop() ) { + if ( TRUE == isAlarmActive( ALARM_ID_HD_NO_CARTRIDGE_LOADED ) ) + { + occlusionBaselineWasSet = FALSE; // need to get baseline again after cartridge installed properly + } state = DRY_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); } @@ -1397,8 +1405,8 @@ } // After VBT opened, start looking to see if pressures normalize - if ( ( STATE_OPEN == getValveAirTrapStatus() ) && ( arterialPressureDiff <= NORMAL_PRESSURE_DIFF_TOLERANCE_MMHG ) && - ( venousPressureDiff <= NORMAL_PRESSURE_DIFF_TOLERANCE_MMHG ) ) + if ( ( STATE_OPEN == getValveAirTrapStatus() ) && + ( arterialPressureDiff <= NORMAL_PRESSURE_DIFF_TOLERANCE_MMHG ) && ( venousPressureDiff <= NORMAL_PRESSURE_DIFF_TOLERANCE_MMHG ) ) { dryPressureTestsCompleted = TRUE; state = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; @@ -1507,7 +1515,8 @@ * @brief * The handleDrySelfTestStoppedState function handles the stopped dry self-tests * operation. - * @details Inputs: selfTestsResumeRequested + * @details Inputs: selfTestsResumeRequested, occlusionBaselineWasSet, + * dryPressureTestsCompleted, cartridgeUsedTestRun * @details Outputs: selfTestsResumeRequested, selfTestStartTime, selfTestCartridgeSettleTime * @return the next state of dry self-tests state machine *************************************************************************/ @@ -1542,10 +1551,10 @@ selfTestStartTime = getMSTimerCount(); selfTestsResumeRequested = FALSE; selfTestCartridgeSettleTime = getMSTimerCount(); + doorClosedRequired( TRUE, TRUE ); if ( TRUE == dryPressureTestsCompleted ) { - doorClosedRequired( TRUE, TRUE ); state = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; } else @@ -1554,8 +1563,14 @@ setValvePosition( VBA, VALVE_POSITION_B_OPEN ); if ( TRUE == cartridgeUsedTestRun ) { + doorClosedRequired( TRUE, TRUE ); state = DRY_SELF_TESTS_CARTRIDGE_LOADED_CHECK_STATE; } + else if ( occlusionBaselineWasSet != TRUE ) + { + selfTestCartridgeSettleTime = getMSTimerCount(); + state = DRY_SELF_TESTS_START_STATE; + } else { state = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE;