Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r5d8a0c67beebb63c5f5455b309a16211c1de8cf0 -r7229fed020e9f3398bd5ccc8a3f5576cedc322b0 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 5d8a0c67beebb63c5f5455b309a16211c1de8cf0) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 7229fed020e9f3398bd5ccc8a3f5576cedc322b0) @@ -8,7 +8,7 @@ * @file SelfTests.c * * @author (last) Sean Nash -* @date (last) 14-Apr-2023 +* @date (last) 15-May-2023 * * @author (original) Quang Nguyen * @date (original) 28-Jan-2021 @@ -941,29 +941,11 @@ { setOcclusionInstallLevel(); // Record occlusion pressure level after a new cartridge is installed doorClosedRequired( TRUE, TRUE ); -#ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_DRY_SELF_TESTS ) ) - { - signalAllowDGFlushFills(); - signalAllowDGFillRes1(); - signalAllowDGFillRes2(); - state = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; - } - else -#endif - { -#ifndef _RELEASE_ - if ( SW_CONFIG_DISABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_AIR_PUMP ) ) // Allow res 1&2 fills now if air pump not disabled -#endif - { - signalAllowDGFillRes1(); - signalAllowDGFillRes2(); - } - state = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; - } + signalAllowDGFillRes1(); + signalAllowDGFillRes2(); + state = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; } } - else { // doorClosedRequired() will trigger alarms if pumpTrack is open @@ -1022,7 +1004,7 @@ *************************************************************************/ static DRY_SELF_TESTS_STATE_T handleDrySelfTestUsedCartridgeCheckState( void ) { - DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_USED_CARTRIDGE_CHECK_STATE; + DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_USED_CARTRIDGE_CHECK_STATE; BUBBLE_STATUS_T ADVBubbleStatus = getBubbleStatus( ADV ); SEND_EVENT_WITH_2_U32_DATA(HD_EVENT_DRY_SELF_TEST_CARTRIDGE_RESULT,(U32)ADVBubbleStatus,(U32)BUBBLE_DETECTED) @@ -1035,18 +1017,16 @@ } else { -#ifndef _RELEASE_ - if ( getSoftwareConfigStatus( SW_CONFIG_ENABLE_WORN_OUT_CARTRIDGE ) != SW_CONFIG_ENABLE_VALUE ) -#endif + if ( TRUE == getTestConfigStatus( TEST_CONFIG_USE_WET_CARTRIDGE ) ) { - activateAlarmNoData( ALARM_ID_HD_INSTALL_NEW_CARTRIDGE ); + // If either of the test configurations are set go to loaded check + state = DRY_SELF_TESTS_CARTRIDGE_LOADED_CHECK_STATE; } -#ifndef _RELEASE_ else { - state = DRY_SELF_TESTS_CARTRIDGE_LOADED_CHECK_STATE; + // If we are using the worn cartridge or wet cartridge, it is not needed to alarm the user to install the new cartridge + activateAlarmNoData( ALARM_ID_HD_INSTALL_NEW_CARTRIDGE ); } -#endif } if ( TRUE == doesAlarmStatusIndicateStop() ) @@ -1079,6 +1059,12 @@ setValveAirTrap( STATE_OPEN ); pressureSelfTestPreNormalStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_PRESSURE_SENSORS_NORMAL_SETUP_STATE; + + if ( TRUE == getTestConfigStatus( TEST_CONFIG_USE_WET_CARTRIDGE ) ) + { + dryPressureTestsCompleted = TRUE; + state = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; + } } if ( TRUE == doesAlarmStatusIndicateStop() ) @@ -1109,47 +1095,22 @@ } else { -#ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_AIR_PUMP ) ) - { + if ( TRUE == didTimeout( pressureSelfTestPreNormalStartTime, PRE_NORMAL_PRESSURE_SELF_TEST_DELAY_MS ) ) + { // Record baseline pressures before pressurizing blood side circuit side of cartridge + previousNormalArterialPressure = getFilteredArterialPressure(); + previousNormalVenousPressure = getFilteredVenousPressure(); - // 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 ) ) + // Check to see if sensor is within normal ranges before we execute pressure sensor tests + if ( ( fabs( previousNormalArterialPressure ) > PRESSURE_CHECK_START_PRESSURE_TOLERANCE_MMHG ) || + ( fabs( previousNormalVenousPressure ) > PRESSURE_CHECK_START_PRESSURE_TOLERANCE_MMHG ) ) { - if ( TRUE == didTimeout( pressureSelfTestPreNormalStartTime, PRE_NORMAL_PRESSURE_SELF_TEST_DELAY_MS ) ) - { - previousNormalArterialPressure = getFilteredArterialPressure(); - previousNormalVenousPressure = getFilteredVenousPressure(); - state = DRY_SELF_TESTS_PRESSURE_SENSORS_VENOUS_SETUP_STATE; - - // Check to see if sensor is within normal ranges before we execute pressure sensor tests - if ( ( fabs( previousNormalArterialPressure ) > PRESSURE_CHECK_START_PRESSURE_TOLERANCE_MMHG ) || ( fabs( previousNormalVenousPressure ) > PRESSURE_CHECK_START_PRESSURE_TOLERANCE_MMHG ) ) - { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_PRE_TREATMENT_DRY_PRESSURE_TEST_FAILURE, previousNormalArterialPressure, previousNormalVenousPressure ); - } - } + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_PRE_TREATMENT_DRY_PRESSURE_TEST_FAILURE, previousNormalArterialPressure, previousNormalVenousPressure ); } - } - else -#endif - { - if ( TRUE == didTimeout( pressureSelfTestPreNormalStartTime, PRE_NORMAL_PRESSURE_SELF_TEST_DELAY_MS ) ) - { // Record baseline pressures before pressurizing blood side circuit side of cartridge - previousNormalArterialPressure = getFilteredArterialPressure(); - previousNormalVenousPressure = getFilteredVenousPressure(); - - // Check to see if sensor is within normal ranges before we execute pressure sensor tests - if ( ( fabs( previousNormalArterialPressure ) > PRESSURE_CHECK_START_PRESSURE_TOLERANCE_MMHG ) || ( fabs( previousNormalVenousPressure ) > PRESSURE_CHECK_START_PRESSURE_TOLERANCE_MMHG ) ) - { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_PRE_TREATMENT_DRY_PRESSURE_TEST_FAILURE, previousNormalArterialPressure, previousNormalVenousPressure ); - } - else - { - state = DRY_SELF_TESTS_PRESSURE_SENSORS_VENOUS_SETUP_STATE; - } + else + { + state = DRY_SELF_TESTS_PRESSURE_SENSORS_VENOUS_SETUP_STATE; } } - } return state; @@ -1174,34 +1135,12 @@ } else { -#ifndef _RELEASE_ - if ( SW_CONFIG_DISABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_AIR_PUMP ) ) - { -#endif - setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); -#ifndef _RELEASE_ - } - else - { - setValvePosition( VDI, VALVE_POSITION_B_OPEN ); - } -#endif + setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); setValvePosition( VBA, VALVE_POSITION_B_OPEN ); setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); setValveAirTrap( STATE_CLOSED ); -#ifndef _RELEASE_ - if ( SW_CONFIG_DISABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_AIR_PUMP ) ) - { -#endif - setAirPumpState( AIR_PUMP_STATE_ON ); -#ifndef _RELEASE_ - } - else - { - setDialInPumpTargetFlowRate( DIAL_IN_PUMP_PRESSURE_SELF_TEST_FLOW, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - } -#endif + setAirPumpState( AIR_PUMP_STATE_ON ); pressureSelfTestVenousTestStartTime = getMSTimerCount(); } @@ -1219,23 +1158,12 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsVenousState( void ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_SENSORS_VENOUS; - F32 const venousPressure = getFilteredVenousPressure(); + F32 venousPressure = getFilteredVenousPressure(); // End the test when reaching target pressure or time out if ( VENOUS_PRESSURE_SELF_TEST_FIRST_PASS_LIMIT_MMHG <= venousPressure ) { -#ifndef _RELEASE_ - if ( SW_CONFIG_DISABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_AIR_PUMP ) ) - { -#endif setAirPumpState( AIR_PUMP_STATE_OFF ); -#ifndef _RELEASE_ - } - else - { - signalDialInPumpHardStop(); - } -#endif state = DRY_SELF_TESTS_PRESSURE_SENSORS_ARTERIAL_SETUP_STATE; } @@ -1298,8 +1226,8 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsArterialState( void ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_SENSORS_ARTERIAL; - F32 const arterialPressure = getFilteredArterialPressure(); - F32 const venousPressure = getFilteredVenousPressure(); + F32 arterialPressure = getFilteredArterialPressure(); + F32 venousPressure = getFilteredVenousPressure(); // End the test when reaching target pressure or time out // Test pass when reading positive arterial pressure and negative venous pressure @@ -1342,10 +1270,10 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsDecayState( void ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_SENSORS_DECAY_STATE; - F32 const arterialPressure = getFilteredArterialPressure(); - F32 const venousPressure = getFilteredVenousPressure(); - F32 arterialDecayDiff = 0; - F32 venousDecayDiff = 0; + F32 arterialPressure = getFilteredArterialPressure(); + F32 venousPressure = getFilteredVenousPressure(); + F32 arterialDecayDiff = 0.0F; + F32 venousDecayDiff = 0.0F; // update peak pressure value from pressurized state // if pressure continues to increase due to filter lag. @@ -1359,13 +1287,13 @@ peakVenousPressure = venousPressure; } - if ( ( TRUE == didTimeout( pressureSelfTestDecayStartTime, DECAY_PRESSURE_SELF_TEST_TIME ) ) ) + if ( TRUE == didTimeout( pressureSelfTestDecayStartTime, DECAY_PRESSURE_SELF_TEST_TIME ) ) { arterialDecayDiff = fabs( arterialPressure - peakArterialPressure ); venousDecayDiff = fabs( venousPressure - peakVenousPressure ); if ( ( arterialDecayDiff < ARTERIAL_DECAY_PRESSURE_DIFF_TOLERANCE_MMHG ) && - ( venousDecayDiff < VENOUS_DECAY_PRESSURE_DIFF_TOLERANCE_MMHG ) ) + ( venousDecayDiff < VENOUS_DECAY_PRESSURE_DIFF_TOLERANCE_MMHG ) ) { decayedArterialPressure = arterialPressure; decayedVenousPressure = venousPressure; @@ -1399,8 +1327,8 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsStabilityState( void ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_SENSORS_STABILITY_STATE; - F32 arterialStabilityDiff = 0; - F32 venousStabilityDiff = 0; + F32 arterialStabilityDiff = 0.0F; + F32 venousStabilityDiff = 0.0F; if ( ( TRUE == didTimeout( pressureSelfTestStabilityStartTime, STABILTY_PRESSURE_SELF_TEST_TIME ) ) ) { @@ -1442,36 +1370,18 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_SENSORS_NORMAL_STATE; - F32 const arterialPressureDiff = fabs( getFilteredArterialPressure() - previousNormalArterialPressure ); - F32 const venousPressureDiff = fabs( getFilteredVenousPressure() - previousNormalVenousPressure ); + F32 arterialPressureDiff = fabs( getFilteredArterialPressure() - previousNormalArterialPressure ); + F32 venousPressureDiff = fabs( getFilteredVenousPressure() - previousNormalVenousPressure ); -#ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_AIR_PUMP ) ) + // open air trap after time threshold. + if ( TRUE == didTimeout( pressureSelfTestNormalizedStartTime, NORMALIZED_PRESSURE_SELF_TEST_VBT_TIMER ) ) { - // open VDI to Pos A after timer threshold - if ( TRUE == didTimeout( pressureSelfTestNormalizedStartTime, NORMALIZED_PRESSURE_SELF_TEST_VDI_TIMER ) ) - { - setValvePosition( VDI, VALVE_POSITION_A_INSERT_EJECT ); - } - // open air trap after time threshold. - if ( TRUE == didTimeout( pressureSelfTestNormalizedStartTime, NORMALIZED_PRESSURE_SELF_TEST_VBT_TIMERX ) ) - { - setValveAirTrap( STATE_OPEN ); - } + setValveAirTrap( STATE_OPEN ); } - else -#endif - { - // open air trap after time threshold. - if ( TRUE == didTimeout( pressureSelfTestNormalizedStartTime, NORMALIZED_PRESSURE_SELF_TEST_VBT_TIMER ) ) - { - setValveAirTrap( STATE_OPEN ); - } - } // After VBT opened, start looking to see if pressures normalize - if ( ( STATE_OPEN == getValveAirTrapStatus() ) && - ( arterialPressureDiff <= NORMAL_PRESSURE_DIFF_TOLERANCE_MMHG ) && ( venousPressureDiff <= NORMAL_PRESSURE_DIFF_TOLERANCE_MMHG ) ) + 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; @@ -1574,7 +1484,7 @@ if ( TRUE == didTimeout( syringeOcclusionDelayStartTime, SYRINGE_PUMP_OCCLUSION_CHECK_DELAY ) ) { - if ( FALSE == checkForSyringeOcclusion() ) // transition to complete state only when occlusion is removed + if ( FALSE == checkForSyringeOcclusion( FALSE ) ) // transition to complete state only when occlusion is removed { state = DRY_SELF_TESTS_COMPLETE_STATE; } @@ -1629,25 +1539,15 @@ selfTestsResumeRequested = FALSE; selfTestCartridgeSettleTime = getMSTimerCount(); -#ifndef _RELEASE_ - if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_DRY_SELF_TESTS ) ) + if ( TRUE == dryPressureTestsCompleted ) { doorClosedRequired( TRUE, TRUE ); state = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; } else -#endif - { // 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; - } + { + doorClosedRequired( FALSE, TRUE ); + state = DRY_SELF_TESTS_START_STATE; } } @@ -1935,13 +1835,20 @@ } else { - if ( fabs( resOneDiffAfterDisplacement - resTwoDiffAfterDisplacement) > WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G ) + if ( getTestConfigStatus( TEST_CONFIG_DISABLE_WET_SELFTEST_DISPLACEMENT_ALARM ) != TRUE ) { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_PRE_TREATMENT_WET_LC_TEST_FAILURE, resOneDiffAfterDisplacement, resTwoDiffAfterDisplacement ); + if ( fabs( resOneDiffAfterDisplacement - resTwoDiffAfterDisplacement) > WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G ) + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_PRE_TREATMENT_WET_LC_TEST_FAILURE, resOneDiffAfterDisplacement, resTwoDiffAfterDisplacement ); + } + else + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_PRE_TREATMENT_WET_FLOW_TEST_FAILURE, averageDisp, fmdIntegratedVolume ); + } } else { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_PRE_TREATMENT_WET_FLOW_TEST_FAILURE, averageDisp, fmdIntegratedVolume ); + state = WET_SELF_TESTS_SECOND_DISPLACEMENT_SETUP_STATE; } } @@ -2078,13 +1985,20 @@ } else { - if ( fabs( resOneDiffAfterDisplacement - resTwoDiffAfterDisplacement) > WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G ) + if ( getTestConfigStatus( TEST_CONFIG_DISABLE_WET_SELFTEST_DISPLACEMENT_ALARM ) != TRUE ) { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_PRE_TREATMENT_WET_LC_TEST_FAILURE, resOneDiffAfterDisplacement, resTwoDiffAfterDisplacement ); + if ( fabs( resOneDiffAfterDisplacement - resTwoDiffAfterDisplacement) > WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G ) + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_PRE_TREATMENT_WET_LC_TEST_FAILURE, resOneDiffAfterDisplacement, resTwoDiffAfterDisplacement ); + } + else + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_PRE_TREATMENT_WET_FLOW_TEST_FAILURE, avgDisp, fmdIntegratedVolume ); + } } else { - SET_ALARM_WITH_2_F32_DATA( ALARM_ID_HD_PRE_TREATMENT_WET_FLOW_TEST_FAILURE, avgDisp, fmdIntegratedVolume ); + state = WET_SELF_TESTS_COMPLETE_STATE; } }