Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -read7abbdefe4e5b4899008893804c727110fbc80 -r3b4158ff08e5116996f07bb2a670630119e440fc --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision ead7abbdefe4e5b4899008893804c727110fbc80) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 3b4158ff08e5116996f07bb2a670630119e440fc) @@ -110,6 +110,7 @@ static F32 peakVenousPressure; ///< Holds the peak normal venous pressure reading. static F32 decayedArterialPressure; ///< Holds the decayed arterial pressure reading after blood pump is stopped. static F32 decayedVenousPressure; ///< Holds the decayed venous pressure reading after blood pump is stopped. +static BOOL dryPressureTestsCompleted; ///< Flag indicates dry cartridge pressure leak testing has been completed. static BOOL wetSelfTestsResult; ///< Result of wet self-tests. static WET_SELF_TESTS_STATE_T currentWetSelfTestsState; ///< Current state of the wet self-tests state machine. @@ -395,6 +396,7 @@ pressureSelfTestNormalizedStartTime = 0; previousNormalArterialPressure = 0.0; previousNormalVenousPressure = 0.0; + dryPressureTestsCompleted = FALSE; selfTestStartTime = getMSTimerCount(); selfTestPreviousPublishDataTime = getMSTimerCount(); selfTestCartridgeSettleTime = getMSTimerCount(); @@ -1439,6 +1441,7 @@ 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; } @@ -1501,7 +1504,7 @@ } else { - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, (U32)SW_FAULT_ID_HD_SYRINGE_NOT_PRELOADED ) + preloadSyringePlunger(); } } } @@ -1573,6 +1576,24 @@ doorClosedRequired( FALSE, FALSE ); + // if not enough heparin alarm, pre-load pusher after retract completes + if ( TRUE == isAlarmActive( ALARM_ID_HD_SYRINGE_PUMP_NOT_ENOUGH_HEPARIN_ALARM ) ) + { // prevent resume until syringe is retracted and pre-loaded + setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, FALSE ); + if ( isSyringePumpRunning() != TRUE ) + { + if ( TRUE == isSyringePumpHome() ) + { + preloadSyringePlunger(); + } + else if ( TRUE == isSyringePumpPreLoaded() ) + { + setAlarmUserActionEnabled( ALARM_USER_ACTION_RESUME, TRUE ); + } + } + } + + // if resume request, resume dry self-tests if ( TRUE == selfTestsResumeRequested ) { // Restart self-test start time @@ -1588,9 +1609,17 @@ } else #endif - { - doorClosedRequired( FALSE, TRUE ); - state = DRY_SELF_TESTS_START_STATE; + { // if we've completed pressure testing, resume to syringe pump prime state, otherwise go back to start of dry self-tests + if ( TRUE == dryPressureTestsCompleted ) + { + doorClosedRequired( TRUE, TRUE ); + state = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; + } + else + { + doorClosedRequired( FALSE, TRUE ); + state = DRY_SELF_TESTS_START_STATE; + } } }