Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -rb3076db63d3e6515746948fba3a4c2bf9aad9c27 -r1d9599c2903d2fe7eb0e48e24f3f809932d1a38d --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision b3076db63d3e6515746948fba3a4c2bf9aad9c27) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 1d9599c2903d2fe7eb0e48e24f3f809932d1a38d) @@ -54,7 +54,6 @@ #define STABILTY_PRESSURE_SELF_TEST_TIME ( 5 * MS_PER_SECOND ) ///< Time to wait for pressure to stabilize in ms. #define NORMALIZED_PRESSURE_SELF_TEST_TIME ( 20 * MS_PER_SECOND ) ///< Time to wait for pressure to normalize in ms. #define NORMALIZED_PRESSURE_SELF_TEST_VBT_TIMER ( 1 * MS_PER_SECOND ) ///< Time to wait until we open VBT during normal pressure tests. -#define NORMALIZED_PRESSURE_SELF_TEST_VBT_TIMERX ( 7 * MS_PER_SECOND ) ///< Time to wait until we open VBT during normal pressure tests (for old builds that don't support air pump). #define NORMALIZED_PRESSURE_SELF_TEST_VDI_TIMER ( 5 * MS_PER_SECOND ) ///< Time to wait until we open VDI during normal pressure tests. #define ARTERIAL_DECAY_PRESSURE_DIFF_TOLERANCE_MMHG 5.0F ///< Difference in arterial pressure readings after the pump stops (in mmHg). @@ -152,6 +151,7 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestWaitForDoorCloseState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestUsedCartridgeCheckState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestCartridgeLoadedCheckState( void ); +static DRY_SELF_TESTS_STATE_T handleDrySelfTestSyringePumpSeekState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsNormalSetupState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsVenousSetupState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsVenousState( void ); @@ -486,6 +486,10 @@ currentDrySelfTestsState = handleDrySelfTestCartridgeLoadedCheckState(); break; + case DRY_SELF_TESTS_SYRINGE_PUMP_SEEK_STATE: + currentDrySelfTestsState = handleDrySelfTestSyringePumpSeekState(); + break; + case DRY_SELF_TESTS_PRESSURE_SENSORS_NORMAL_SETUP_STATE: currentDrySelfTestsState = handleDrySelfTestPressureSensorsNormalSetupState(); break; @@ -1074,32 +1078,88 @@ if ( SELF_TEST_STATUS_PASSED == execPresOcclDryTest() ) { + state = DRY_SELF_TESTS_SYRINGE_PUMP_SEEK_STATE; + } + + 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(); + } + + return state; +} + +/*********************************************************************//** + * @brief + * The handleDrySelfTestSyringePumpSeekState function handles the syringe + * pump seek dry self-test state. + * @details Inputs: + * @details Outputs: + * @return the next state of dry self-tests state machine + *************************************************************************/ +static DRY_SELF_TESTS_STATE_T handleDrySelfTestSyringePumpSeekState( void ) +{ + DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_SYRINGE_PUMP_SEEK_STATE; + BOOL done = FALSE; + + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = DRY_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + else + { // using Heparin? + if ( TRUE == useHeparin ) + { // syringe pump is not busy? + if ( FALSE == isSyringePumpRunning() ) + { // seek completed? + if ( TRUE == isSyringePlungerFound() ) + { // move on when seek completed + done = TRUE; + } + else + { // pre-load completed? + if ( TRUE == isSyringePumpPreLoaded() ) + { // initiate seek plunger operation + seekSyringePlunger(); + } + else + { // pre-load syringe + preloadSyringePlunger(); + } + } + } + } + else + { // not using Heparin, so move on + done = TRUE; + } + } + + // setup for pressure tests when done + if ( TRUE == done ) + { setArtVenPressureOffsets(); setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); - setValvePosition( VBA, VALVE_POSITION_B_OPEN ); // need open path from PBA to VBT - setValvePosition( VBV, VALVE_POSITION_A_INSERT_EJECT ); // need open path from PBA to VBT + setValvePosition( VBA, VALVE_POSITION_B_OPEN ); // need open path from PBA to VBT + setValvePosition( VBV, VALVE_POSITION_A_INSERT_EJECT ); // need open path from PBA to VBT setValveAirTrap( STATE_OPEN ); pressureSelfTestPreNormalStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_PRESSURE_SENSORS_NORMAL_SETUP_STATE; if ( TRUE == getTestConfigStatus( TEST_CONFIG_USE_WET_CARTRIDGE ) ) - { + { // skip pressure tests if using wet cartridge dryPressureTestsCompleted = TRUE; state = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; } } - 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(); - } - return state; }