Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -rb7764e26a3460652da29b1f957706dfaca413226 -r108a0285f895e26bb037f3472bb05962ea3c4941 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision b7764e26a3460652da29b1f957706dfaca413226) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 108a0285f895e26bb037f3472bb05962ea3c4941) @@ -75,6 +75,7 @@ WET_SELF_TESTS_START_STATE = 0, ///< Wet self-tests starting state. WET_SELF_TESTS_SETUP_STATE, ///< Setup reservoirs for wet self-tests. WET_SELF_TESTS_PRIME_CHECK_STATE, ///< Prime check wet self-tests state, checks for primed patient lines. + WET_SELF_TESTS_BLOOD_LEAK_DETECTOR_STATE, ///< Blood leak detector self-test state. WET_SELF_TESTS_FIRST_DISPLACEMENT_SETUP_STATE, ///< Setup valve and start dialysate pump for first displacement. WET_SELF_TESTS_FIRST_DISPLACEMENT_STATE, ///< Fill reservoir 2 with 100 mL of dialysate from reservoir 1 state. WET_SELF_TESTS_FIRST_DISPLACEMENT_VERIFY_STATE, ///< After first displacement completed verify state. @@ -120,7 +121,6 @@ static void setupForSelfTestsStop( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestsWaitForClosedDoor( void ); -static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestLeakDetectorsState( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestHomeValvesState( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestHomeSyringePumpState( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestPumpsState( void ); @@ -138,6 +138,7 @@ static WET_SELF_TESTS_STATE_T handleWetSelfTestStartState( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestSetupState( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestPrimeCheckState( SELF_TEST_STATUS_T *result ); +static WET_SELF_TESTS_STATE_T handleWetSelfTestBloodLeakDetectorState( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestFirstDisplacementSetupState( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestFirstDisplacementState( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestFirstDisplacementVerifyState( SELF_TEST_STATUS_T *result ); @@ -260,15 +261,9 @@ case NO_CART_SELF_TESTS_DIALYSATE_FLOW_METERS_STATE: execDialInFlowTest(); - - zeroBloodLeak(); - currentNoCartSelfTestsState = NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE; + currentNoCartSelfTestsState = NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE; break; - case NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE: - currentNoCartSelfTestsState = handleNoCartSelfTestLeakDetectorsState(); - break; - case NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE: // TODO: Implement self tests currentNoCartSelfTestsState = NO_CART_SELF_TESTS_HOME_VALVES_STATE; @@ -508,6 +503,10 @@ currentWetSelfTestsState = handleWetSelfTestPrimeCheckState( &result ); break; + case WET_SELF_TESTS_BLOOD_LEAK_DETECTOR_STATE: + currentWetSelfTestsState = handleWetSelfTestBloodLeakDetectorState(); + break; + case WET_SELF_TESTS_FIRST_DISPLACEMENT_SETUP_STATE: currentWetSelfTestsState = handleWetSelfTestFirstDisplacementSetupState(); break; @@ -600,31 +599,6 @@ /*********************************************************************//** * @brief - * The handleNoCartSelfTestLeakDetectorsState function verifies leak detectors status. - * @details Inputs: none - * @details Outputs: none - * @return the next state of no cartridge self-tests state machine - *************************************************************************/ -static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestLeakDetectorsState( void ) -{ - NO_CART_SELF_TESTS_STATE_T state = NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE; - - if ( SELF_TEST_STATUS_PASSED == getBloodLeakSelfTestStatus() ) - { - state = NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE; - } - - if ( TRUE == doesAlarmStatusIndicateStop() ) - { - setupForSelfTestsStop(); - state = NO_CART_SELF_TESTS_STOPPED_STATE; - } - - return state; -} - -/*********************************************************************//** - * @brief * The handleNoCartSelfTestHomeValvesState function starts homing process for * all the valves. * @details Inputs: none @@ -1125,9 +1099,36 @@ if ( ( FALSE == isADADetectedAir ) && ( FALSE == isADVDetectedAir ) ) #endif { + zeroBloodLeak(); + state = WET_SELF_TESTS_BLOOD_LEAK_DETECTOR_STATE; + *result = SELF_TEST_STATUS_PASSED; + } + + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = WET_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + + return state; +} + +/*********************************************************************//** + * @brief + * The handleWetSelfTestBloodLeakDetectorState function handles zeoring and + * self-test for blood leak detector. + * @details Inputs: none + * @details Outputs: next self-test state + * @return the next state of wet self-tests state machine + *************************************************************************/ +static WET_SELF_TESTS_STATE_T handleWetSelfTestBloodLeakDetectorState( void ) +{ + WET_SELF_TESTS_STATE_T state = WET_SELF_TESTS_BLOOD_LEAK_DETECTOR_STATE; + + if ( SELF_TEST_STATUS_PASSED == getBloodLeakSelfTestStatus() ) + { settleStartTime = getMSTimerCount(); state = WET_SELF_TESTS_FIRST_DISPLACEMENT_SETUP_STATE; - *result = SELF_TEST_STATUS_PASSED; } if ( TRUE == doesAlarmStatusIndicateStop() )