Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r83a8a0e1e8630939e6a173f1313cceb7f39e00dd -ra33009eaa35d2d5be3872b64f2f1609196769256 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 83a8a0e1e8630939e6a173f1313cceb7f39e00dd) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision a33009eaa35d2d5be3872b64f2f1609196769256) @@ -116,23 +116,23 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestWaitForDoorCloseState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestUsedCartridgeCheckState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsSetupState( void ); -static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsState( SELF_TEST_STATUS_T *result ); -static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsNormalState( SELF_TEST_STATUS_T *result ); +static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsState( void ); +static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsNormalState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestSyringePumpPrimeState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestSyringePumpOcclusionDetectionState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestStoppedState( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestStartState( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestSetupState( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestBubblesState( void ); -static WET_SELF_TESTS_STATE_T handleWetSelfTestPrimeCheckState( SELF_TEST_STATUS_T *result ); +static WET_SELF_TESTS_STATE_T handleWetSelfTestPrimeCheckState( void ); 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 ); +static WET_SELF_TESTS_STATE_T handleWetSelfTestFirstDisplacementVerifyState( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestSecondDisplacementSetupState( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestSecondDisplacementState( void ); -static WET_SELF_TESTS_STATE_T handleWetSelfTestSecondDisplacementVerifyState( SELF_TEST_STATUS_T *result ); +static WET_SELF_TESTS_STATE_T handleWetSelfTestSecondDisplacementVerifyState( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestStoppedState( void ); /*********************************************************************//** @@ -384,8 +384,6 @@ *************************************************************************/ void execDrySelfTests( void ) { - SELF_TEST_STATUS_T result = SELF_TEST_STATUS_PASSED; - // execute dry self-tests state machine switch ( currentDrySelfTestsState ) { @@ -432,11 +430,11 @@ break; case DRY_SELF_TESTS_PRESSURE_SENSORS_STATE: - currentDrySelfTestsState = handleDrySelfTestPressureSensorsState( &result ); + currentDrySelfTestsState = handleDrySelfTestPressureSensorsState(); break; case DRY_SELF_TESTS_PRESSURE_SENSORS_NORMAL_STATE: - currentDrySelfTestsState = handleDrySelfTestPressureSensorsNormalState( &result ); + currentDrySelfTestsState = handleDrySelfTestPressureSensorsNormalState(); break; case DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE: @@ -462,11 +460,6 @@ // Self-tests flags should be handled by now, reset if flags not handled with current state resetSelfTestsFlags(); - if ( SELF_TEST_STATUS_FAILED == result ) - { - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_PRE_TREATMENT_DRY_SELF_TEST_FAILURE, currentDrySelfTestsState ); - } - // Publish current self-test time data if ( calcTimeSince( selfTestPreviousPublishDataTime ) >= SELF_TEST_TIME_DATA_PUB_INTERVAL ) { @@ -545,8 +538,6 @@ *************************************************************************/ void execWetSelfTests( void ) { - SELF_TEST_STATUS_T result = SELF_TEST_STATUS_PASSED; - #ifndef _RELEASE_ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_WET_SELF_TEST ) == SW_CONFIG_ENABLE_VALUE ) { @@ -570,7 +561,7 @@ break; case WET_SELF_TESTS_PRIME_CHECK_STATE: - currentWetSelfTestsState = handleWetSelfTestPrimeCheckState( &result ); + currentWetSelfTestsState = handleWetSelfTestPrimeCheckState(); break; case WET_SELF_TESTS_BLOOD_LEAK_DETECTOR_STATE: @@ -586,7 +577,7 @@ break; case WET_SELF_TESTS_FIRST_DISPLACEMENT_VERIFY_STATE: - currentWetSelfTestsState = handleWetSelfTestFirstDisplacementVerifyState( &result ); + currentWetSelfTestsState = handleWetSelfTestFirstDisplacementVerifyState(); break; case WET_SELF_TESTS_SECOND_DISPLACEMENT_SETUP_STATE: @@ -598,7 +589,7 @@ break; case WET_SELF_TESTS_SECOND_DISPLACEMENT_VERIFY_STATE: - currentWetSelfTestsState = handleWetSelfTestSecondDisplacementVerifyState( &result ); + currentWetSelfTestsState = handleWetSelfTestSecondDisplacementVerifyState(); break; case WET_SELF_TESTS_STOPPED_STATE: @@ -616,11 +607,6 @@ // Self-tests flags should be handled by now, reset if flags not handled with current state resetSelfTestsFlags(); - - if ( SELF_TEST_STATUS_FAILED == result ) - { - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_PRE_TREATMENT_WET_SELF_TEST_FAILURE, currentWetSelfTestsState ); - } } /*********************************************************************//** @@ -938,7 +924,7 @@ setupForSelfTestsStop(); } else - { + { // TODO - wait 1 sec before taking pressure readings and beginning pressure check previousNormalArterialPressure = getFilteredArterialPressure(); previousNormalVenousPressure = getFilteredVenousPressure(); @@ -960,10 +946,9 @@ * pressure sensors and verify they are in correct range. * @details Inputs: none * @details Outputs: none - * @param result self-test result * @return the next state of dry self-tests state machine *************************************************************************/ -static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsState( SELF_TEST_STATUS_T *result ) +static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsState( void ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_SENSORS_STATE; F32 const arterialPressure = getFilteredArterialPressure(); @@ -973,18 +958,18 @@ if ( ( TRUE == didTimeout( pressureSelfTestBloodPumpRunStartTime, BLOOD_PUMP_RUN_TIME_PRESSURE_SELF_TEST ) ) || ( ARTERIAL_PRESSURE_SELF_TEST_LOW_LIMIT_MMHG >= arterialPressure ) || ( VENOUS_PRESSURE_SELF_TEST_HIGH_LIMIT_MMHG <= venousPressure ) ) { + signalBloodPumpHardStop(); // Test pass when reading positive arterial pressure and negative venous pressure if ( ( arterialPressure < 0) && ( venousPressure > 0 ) ) { - signalBloodPumpHardStop(); setValvePosition( VBV, VALVE_POSITION_B_OPEN ); setValveAirTrap( STATE_OPEN ); pressureSelfTestNormalizedStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_PRESSURE_SENSORS_NORMAL_STATE; } else { - *result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRE_TREATMENT_DRY_PRESSURE_TEST_FAILURE, arterialPressure, venousPressure ); } } @@ -1003,10 +988,9 @@ * pressure sensors after returning to normal state. * @details Inputs: none * @details Outputs: none - * @param result self-test result * @return the next state of dry self-tests state machine *************************************************************************/ -static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsNormalState( SELF_TEST_STATUS_T *result ) +static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsNormalState( void ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_SENSORS_NORMAL_STATE; @@ -1021,7 +1005,7 @@ } else { - *result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRE_TREATMENT_DRY_PRESSURE_NORMAL_TEST_FAILURE, arterialPressureDiff, venousPressureDiff ); } } @@ -1107,7 +1091,7 @@ } } - if ( ( TRUE == doesAlarmStatusIndicateStop() ) && ( FALSE == isAlarmActive( ALARM_ID_HD_SYRINGE_PUMP_OCCLUSION ) ) ) + if ( TRUE == doesAlarmStatusIndicateStop() ) { state = DRY_SELF_TESTS_STOPPED_STATE; setupForSelfTestsStop(); @@ -1225,7 +1209,7 @@ setupDisplacementVolume -= ( SELF_TEST_FLOW_INTEGRATOR * getMeasuredDialInFlowRate() ); - if ( setupDisplacementVolume <= 0 ) + if ( setupDisplacementVolume <= 0.0 ) { signalDialInPumpHardStop(); selfTestBubble( ADV ); @@ -1273,13 +1257,11 @@ * lines to make sure they are primed. * @details Inputs: Arterial and venous bubble detectors status * @details Outputs: Test pass/fail - * @param result self-test result * @return the next state of wet self-tests state machine *************************************************************************/ -static WET_SELF_TESTS_STATE_T handleWetSelfTestPrimeCheckState( SELF_TEST_STATUS_T *result ) +static WET_SELF_TESTS_STATE_T handleWetSelfTestPrimeCheckState( void ) { WET_SELF_TESTS_STATE_T state = WET_SELF_TESTS_PRIME_CHECK_STATE; - *result = SELF_TEST_STATUS_FAILED; BUBBLE_STATUS_T const ADVBubbleStatus = getBubbleStatus( ADV ); @@ -1296,8 +1278,11 @@ } state = WET_SELF_TESTS_BLOOD_LEAK_DETECTOR_STATE; - *result = SELF_TEST_STATUS_PASSED; } + else + { + activateAlarmNoData( ALARM_ID_PRE_TREATMENT_WET_PRIME_TEST_FAILURE ); + } if ( TRUE == doesAlarmStatusIndicateStop() ) { @@ -1422,7 +1407,7 @@ * @details Outputs: verify correctness of dialysate flow meter and load cell * @return the next state of wet self-tests state machine *************************************************************************/ -static WET_SELF_TESTS_STATE_T handleWetSelfTestFirstDisplacementVerifyState( SELF_TEST_STATUS_T *result ) +static WET_SELF_TESTS_STATE_T handleWetSelfTestFirstDisplacementVerifyState( void ) { WET_SELF_TESTS_STATE_T state = WET_SELF_TESTS_FIRST_DISPLACEMENT_VERIFY_STATE; @@ -1440,7 +1425,14 @@ } else { - *result = SELF_TEST_STATUS_FAILED; + if ( fabs( resOneDiffAfterDisplacement - resTwoDiffAfterDisplacement) > WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G ) + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRE_TREATMENT_WET_LC_TEST_FAILURE, resOneDiffAfterDisplacement, resTwoDiffAfterDisplacement ); + } + else + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRE_TREATMENT_WET_FLOW_TEST_FAILURE, averageDisp, fmdIntegratedVolume ); + } } } @@ -1541,7 +1533,7 @@ * @details Outputs: verify correctness of dialysate flow meter and load cell * @return the next state of wet self-tests state machine *************************************************************************/ -static WET_SELF_TESTS_STATE_T handleWetSelfTestSecondDisplacementVerifyState( SELF_TEST_STATUS_T *result ) +static WET_SELF_TESTS_STATE_T handleWetSelfTestSecondDisplacementVerifyState( void ) { WET_SELF_TESTS_STATE_T state = WET_SELF_TESTS_SECOND_DISPLACEMENT_VERIFY_STATE; @@ -1559,7 +1551,14 @@ } else { - *result = SELF_TEST_STATUS_FAILED; + if ( fabs( resOneDiffAfterDisplacement - resTwoDiffAfterDisplacement) > WET_SELF_TEST_DISPLACEMENT_TOLERANCE_G ) + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRE_TREATMENT_WET_LC_TEST_FAILURE, resOneDiffAfterDisplacement, resTwoDiffAfterDisplacement ); + } + else + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_PRE_TREATMENT_WET_FLOW_TEST_FAILURE, avgDisp, fmdIntegratedVolume ); + } } }