Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r45fb982b55fa1895d400d5ae3d31b0237e8a32db -r65a72f68f34ed506bf99c8cf52b339cb5bad11db --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 45fb982b55fa1895d400d5ae3d31b0237e8a32db) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 65a72f68f34ed506bf99c8cf52b339cb5bad11db) @@ -46,7 +46,7 @@ #define SYRINGE_PUMP_OCCLUSION_CHECK_DELAY ( 1 * MS_PER_SECOND ) ///< Delay 1 second then check for syringe pump prime occlusion. #define BLOOD_PUMP_RUN_TIME_PRESSURE_SELF_TEST ( 20 * MS_PER_SECOND ) ///< Pressure self-test time to run blood pump in ms. -#define DIAL_IN_PUMP_RUN_TIME_PRESSURE_SELF_TEST ( 20 * MS_PER_SECOND ) +#define DIAL_IN_PUMP_RUN_TIME_PRESSURE_SELF_TEST ( 20 * MS_PER_SECOND ) ///< Pressure self-test time to run dip in ms. #define DECAY_PRESSURE_SELF_TEST_TIME ( 4 * MS_PER_SECOND ) ///< time to wait for pressure to decay in ms. #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. @@ -59,7 +59,7 @@ #define VENOUS_STABILITY_PRESSURE_DIFF_TOLERANCE_MMHG 5.0F ///< Difference in venous pressure readings while in a stable pressured state (in mmHg). #define ARTERIAL_PRESSURE_SELF_TEST_LOW_LIMIT_MMHG -200.0F ///< Arterial pressure low limit after running blood pump. -#define VENOUS_PRESSURE_SELF_TEST_HIGH_LIMIT_MMHG 200.0F ///< Venous pressure high limit after running blood pump. +#define VENOUS_PRESSURE_SELF_TEST_HIGH_LIMIT_MMHG 200.0F ///< Venous pressure high limit after running blood pump. #define VENOUS_PRESSURE_SELF_TEST_FIRST_PASS_LIMIT_MMHG 200.0F ///< Venous pressure high limit after running dpi in first test. #define NORMAL_PRESSURE_DIFF_TOLERANCE_MMHG 20.0F ///< Difference in pressure readings after return to normal state tolerance (in mmHg). @@ -78,13 +78,13 @@ #define RESERVOIR_SETTLE_TIME_MS ( 4 * MS_PER_SECOND ) ///< Time allotted for reservoir to settle in ms. #define MAX_NO_CARTRIDGE_SELF_TEST_TIME 30 ///< Maximum no cartridge self-test time (in seconds). -#define MAX_DRY_SELF_TEST_TIME ( 3 * SEC_PER_MIN ) ///< Maximum dry self-test time (in seconds). +#define MAX_DRY_SELF_TEST_TIME ( 12 * SEC_PER_MIN ) ///< Maximum dry self-test time (in seconds). #define CARTRIDGE_INSERT_PRESSURE_SETTLE_TIME_MS ( 10 * MS_PER_SECOND ) ///< Time (in ms) required to wait for occlusion pressure to settle after cartridge insertion. #define SELF_TEST_TIME_DATA_PUB_INTERVAL ( MS_PER_SECOND ) ///< Interval (ms/task time) at which self-test time data is published on the CAN bus. #define PRESSURE_CHECK_START_PRESSURE_TOLERANCE_MMHG 10.0F ///< Prior to dry pressure leak test, arterial and venous pressure sensors should read zero +/- this tolerance. -#define MAX_EMPTY_RESERVOIR_WEIGHT_G 10.0F ///< Maximum reservoir weight to be considered empty for cartridge pressure leak test. +#define MAX_EMPTY_RESERVOIR_WEIGHT_G 15.0F ///< Maximum reservoir weight to be considered empty for cartridge pressure leak test. /// Multiplier to conver flow (mL/min) into volume (mL) for period of general task interval. static const F32 SELF_TEST_FLOW_INTEGRATOR = ( ( 1.0F * TASK_GENERAL_INTERVAL ) / ( SEC_PER_MIN * MS_PER_SECOND ) ); @@ -97,7 +97,7 @@ static DRY_SELF_TESTS_STATE_T currentDrySelfTestsState; ///< Current state of the dry self-tests state machine. static U32 pressureSelfTestBloodPumpRunStartTime; ///< Pressure dry self-test blood pump runs start time. -static U32 pressureSelfTestDialInPumpRunStartTime; +static U32 pressureSelfTestDialInPumpRunStartTime; ///< Pressure dry self-test dip runs start time. static U32 pressureSelfTestNormalizedStartTime; ///< Normalized pressure dry self-test start time. static U32 pressureSelfTestDecayStartTime; ///< Decay pressure dry self-test start time. static U32 pressureSelfTestStabilityStartTime; ///< Stability pressure dry self-test start time. @@ -456,13 +456,6 @@ setValveAirTrap( STATE_OPEN ); currentDrySelfTestsState = DRY_SELF_TESTS_PRESSURE_SENSORS_NORMAL_SETUP_STATE; } -#ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_ENABLE_WORN_OUT_CARTRIDGE ) ) - { - setValveAirTrap( STATE_CLOSED ); - currentDrySelfTestsState = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; - } -#endif break; case DRY_SELF_TESTS_PRESSURE_SENSORS_NORMAL_SETUP_STATE: @@ -976,13 +969,13 @@ setupForSelfTestsStop(); } else - { // Wait for reservoir 2 to empty before starting pressure leak test - if ( ( DG_RESERVOIR_2 == getDGInactiveReservoir() ) && ( getLoadCellWeight( LOAD_CELL_RESERVOIR_2_PRIMARY ) < MAX_EMPTY_RESERVOIR_WEIGHT_G ) ) + { + // Wait for reservoirs to drain before starting this test + if ( ( getLoadCellWeight( LOAD_CELL_RESERVOIR_1_PRIMARY ) < MAX_EMPTY_RESERVOIR_WEIGHT_G ) && ( getLoadCellWeight( LOAD_CELL_RESERVOIR_2_PRIMARY ) < MAX_EMPTY_RESERVOIR_WEIGHT_G ) ) { // TODO - wait 1 sec before taking pressure readings and beginning pressure check previousNormalArterialPressure = getFilteredArterialPressure(); previousNormalVenousPressure = getFilteredVenousPressure(); - cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); // temporarily set reservoir 1 as active before cartridge pressure leak test starts. state = DRY_SELF_TESTS_PRESSURE_SENSORS_VENOUS_SETUP_STATE; // Check to see if sensor is within normal ranges before we execute pressure sensor tests @@ -1013,7 +1006,6 @@ state = DRY_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); } - else { setValvePosition( VDI, VALVE_POSITION_B_OPEN ); @@ -1079,7 +1071,6 @@ state = DRY_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); } - else { setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); @@ -1134,6 +1125,7 @@ return state; } + /*********************************************************************//** * @brief * The handleDrySelfTestPressureSensorsDecayState function verifies @@ -1267,8 +1259,6 @@ if ( ( arterialPressureDiff <= NORMAL_PRESSURE_DIFF_TOLERANCE_MMHG ) && ( venousPressureDiff <= NORMAL_PRESSURE_DIFF_TOLERANCE_MMHG ) ) { - signalActionToResumeFill(); - cmdSetDGActiveReservoir( DG_RESERVOIR_1 ); // restore reservoir 1 as active after cartridge pressure leak test completed. state = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; } @@ -1329,6 +1319,7 @@ } else { + signalActionToResumeFill(); state = DRY_SELF_TESTS_COMPLETE_STATE; } @@ -1541,14 +1532,21 @@ if ( BUBBLE_NOT_DETECTED == ADVBubbleStatus ) { + if ( TRUE == zeroBloodLeak() ) + { + state = WET_SELF_TESTS_BLOOD_LEAK_DETECTOR_STATE; + } + else + { #ifndef _RELEASE_ - if ( ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_BLOOD_LEAK_SELF_TEST ) != SW_CONFIG_ENABLE_VALUE ) && - ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_SELF_TESTS_AIR_BUBBLE_CHECK ) != SW_CONFIG_ENABLE_VALUE ) ) + if ( ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_BLOOD_LEAK_SELF_TEST ) == SW_CONFIG_ENABLE_VALUE ) ) + { + state = WET_SELF_TESTS_FIRST_DISPLACEMENT_SETUP_STATE; + } + else #endif - { - if ( TRUE == zeroBloodLeak() ) { - state = WET_SELF_TESTS_BLOOD_LEAK_DETECTOR_STATE; + activateAlarmNoData( ALARM_ID_HD_BLOOD_LEAK_SENSOR_ZERO_SEQUENCE_FAILED ); } } }