Index: firmware/App/Controllers/Bubble.c =================================================================== diff -u -reb64545b0bddac878e5d930272c6c8068bb4089a -r158c9ecf7ed2404a53b387bfc3f9202a25d7c0ee --- firmware/App/Controllers/Bubble.c (.../Bubble.c) (revision eb64545b0bddac878e5d930272c6c8068bb4089a) +++ firmware/App/Controllers/Bubble.c (.../Bubble.c) (revision 158c9ecf7ed2404a53b387bfc3f9202a25d7c0ee) @@ -245,25 +245,29 @@ // Check status reading and act upon if ( BUBBLE_DETECTED == getBubbleStatus( bubble ) ) { - if ( getCurrentOperationMode() == MODE_TREA ) + if ( ( getCurrentOperationMode() == MODE_TREA ) && ( getTreatmentState() != TREATMENT_RINSEBACK_STATE ) ) { - if ( bubble == ADA ) + // TODO: Enable if ADA is ever used to detect air bubble on arterial line during treatment + //if ( bubble == ADA ) + //{ + // activateAlarmNoData( ALARM_ID_HD_ARTERIAL_BUBBLE_DETECTED ); + //} + + if ( bubble == ADV ) { - activateAlarmNoData( ALARM_ID_HD_ARTERIAL_BUBBLE_DETECTED ); - } - else if ( bubble == ADV ) - { activateAlarmNoData( ALARM_ID_HD_VENOUS_BUBBLE_DETECTED ); } } - else if ( getCurrentOperationMode() == TREATMENT_RINSEBACK_STATE ) // TODO: Any better mode to know we are in rinseback? + else if ( ( getCurrentOperationMode() == MODE_TREA ) && ( getTreatmentState() == TREATMENT_RINSEBACK_STATE ) ) { - if ( bubble == ADA ) + // TODO: Enable if ADA is ever used to detect air bubble on arterial line during rinseback + //if ( bubble == ADA ) + //{ + // activateAlarmNoData( ALARM_ID_HD_ARTERIAL_BUBBLE_DETECTOR_FAULT ); + //} + + if ( bubble == ADV ) { - activateAlarmNoData( ALARM_ID_HD_ARTERIAL_BUBBLE_DETECTOR_FAULT ); - } - else if ( bubble == ADV ) - { activateAlarmNoData( ALARM_ID_HD_VENOUS_BUBBLE_DETECTOR_RINSEBACK_FAULT ); } } @@ -274,7 +278,8 @@ { clearAlarmCondition( ALARM_ID_HD_ARTERIAL_BUBBLE_DETECTED ); } - else if ( bubble == ADV ) + + if ( bubble == ADV ) { clearAlarmCondition( ALARM_ID_HD_VENOUS_BUBBLE_DETECTED ); } Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r3d30c9829d316b8c5e632c0201a59c8d14b3486e -r158c9ecf7ed2404a53b387bfc3f9202a25d7c0ee --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 3d30c9829d316b8c5e632c0201a59c8d14b3486e) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 158c9ecf7ed2404a53b387bfc3f9202a25d7c0ee) @@ -18,6 +18,7 @@ #include "AirTrap.h" #include "BloodFlow.h" #include "BloodLeak.h" +#include "Bubble.h" #include "DGInterface.h" #include "DialInFlow.h" #include "DialOutFlow.h" @@ -121,6 +122,7 @@ 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 handleNoCartSelfTestBubblesState( 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 ); @@ -269,6 +271,10 @@ currentNoCartSelfTestsState = handleNoCartSelfTestLeakDetectorsState(); break; + case NO_CART_SELF_TESTS_BUBBLES_STATE: + currentNoCartSelfTestsState = handleNoCartSelfTestBubblesState(); + break; + case NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE: // TODO: Implement self tests currentNoCartSelfTestsState = NO_CART_SELF_TESTS_HOME_VALVES_STATE; @@ -611,6 +617,34 @@ if ( SELF_TEST_STATUS_PASSED == getBloodLeakSelfTestStatus() ) { + selfTestBubble( ADA ); + selfTestBubble( ADV ); + state = NO_CART_SELF_TESTS_BUBBLES_STATE; + } + + + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + setupForSelfTestsStop(); + state = NO_CART_SELF_TESTS_STOPPED_STATE; + } + + return state; +} + +/*********************************************************************//** + * @brief + * The handleNoCartSelfTestBubblesState function verifies air bubbles 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 handleNoCartSelfTestBubblesState( void ) +{ + NO_CART_SELF_TESTS_STATE_T state = NO_CART_SELF_TESTS_BUBBLES_STATE; + + if ( ( SELF_TEST_STATUS_PASSED == getBubbleSelfTestStatus( ADA ) ) && ( SELF_TEST_STATUS_PASSED == getBubbleSelfTestStatus( ADV ) ) ) + { state = NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE; } @@ -813,11 +847,10 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_USED_CARTRIDGE_CHECK_STATE; - // TODO: Use appropriate sensor driver - BOOL const isADADetectedAir = noFPGABubbleDetected( ADA ); - BOOL const isADVDetectedAir = noFPGABubbleDetected( ADV ); + BOOL const isADADetectedFluid = noFPGABubbleDetected( ADA ); + BOOL const isADVDetectedFluid = noFPGABubbleDetected( ADV ); - if ( ( TRUE == isADADetectedAir ) && ( TRUE == isADVDetectedAir ) && + if ( ( FALSE == isADADetectedFluid ) && ( FALSE == isADVDetectedFluid ) && ( AIR_TRAP_LEVEL_AIR == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_LOWER ) ) && ( AIR_TRAP_LEVEL_AIR == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_UPPER ) ) ) { @@ -1117,12 +1150,11 @@ WET_SELF_TESTS_STATE_T state = WET_SELF_TESTS_PRIME_CHECK_STATE; *result = SELF_TEST_STATUS_FAILED; - // TODO: Use appropriate sensor driver - BOOL const isADADetectedAir = noFPGABubbleDetected( ADA ); - BOOL const isADVDetectedAir = noFPGABubbleDetected( ADV ); + BOOL const isADADetectedFluid = noFPGABubbleDetected( ADA ); + BOOL const isADVDetectedFluid = noFPGABubbleDetected( ADV ); #ifndef SKIP_AIR_BUBBLE_CHECK - if ( ( FALSE == isADADetectedAir ) && ( FALSE == isADVDetectedAir ) ) + if ( ( TRUE == isADADetectedFluid ) && ( TRUE == isADVDetectedFluid ) ) #endif { settleStartTime = getMSTimerCount();