Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r9316f6769a2f4ac9f85847cbc22166c8b43cef83 -rfa41b85cf47fb01cd905b2ed53d472a9cb0c1706 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 9316f6769a2f4ac9f85847cbc22166c8b43cef83) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision fa41b85cf47fb01cd905b2ed53d472a9cb0c1706) @@ -1261,20 +1261,31 @@ *************************************************************************/ SELF_TEST_STATUS_T execBloodFlowTest( void ) { - SELF_TEST_STATUS_T result = SELF_TEST_STATUS_FAILED; - CALIBRATION_DATA_T cal; + SELF_TEST_STATUS_T result = SELF_TEST_STATUS_PASSED; + U08 const bfmStatus = getFPGABloodFlowMeterStatus(); // Retrieve blood flow sensor calibration data and check for sensor connected status + if ( BFM_SENSOR_PARAM_CORRUPT_STATUS != bfmStatus ) + { #ifndef SKIP_CALIBRATION_TESTS - if ( ( TRUE == getCalibrationData( &cal ) ) && ( BFM_SENSOR_PARAM_CORRUPT_STATUS != getFPGABloodFlowMeterStatus() ) ) + CALIBRATION_DATA_T cal; + + if ( TRUE == getCalibrationData( &cal ) ) + { + bloodFlowCalGain = cal.bloodFlowGain; + bloodFlowCalOffset = cal.bloodFlowOffset_mL_min; + } + else + { + result = SELF_TEST_STATUS_FAILED; + } +#endif + } + else { - bloodFlowCalGain = cal.bloodFlowGain; - bloodFlowCalOffset = cal.bloodFlowOffset_mL_min; - result = SELF_TEST_STATUS_PASSED; + result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_BLOOD_FLOW_STATUS_SELF_TEST_FAILURE, (U32)bfmStatus ); } -#else - result = SELF_TEST_STATUS_PASSED; -#endif return result; } Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -r9316f6769a2f4ac9f85847cbc22166c8b43cef83 -rfa41b85cf47fb01cd905b2ed53d472a9cb0c1706 --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 9316f6769a2f4ac9f85847cbc22166c8b43cef83) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision fa41b85cf47fb01cd905b2ed53d472a9cb0c1706) @@ -1218,20 +1218,31 @@ *************************************************************************/ SELF_TEST_STATUS_T execDialInFlowTest( void ) { - SELF_TEST_STATUS_T result = SELF_TEST_STATUS_FAILED; - CALIBRATION_DATA_T cal; + SELF_TEST_STATUS_T result = SELF_TEST_STATUS_PASSED; + U08 const dfmStatus = getFPGADialysateFlowMeterStatus(); -#ifndef SKIP_CALIBRATION_TESTS // Retrieve dialysate flow sensor calibration data - if ( ( TRUE == getCalibrationData( &cal ) ) && ( DFM_SENSOR_PARAM_CORRUPT_STATUS != getFPGADialysateFlowMeterStatus() ) ) + if ( DFM_SENSOR_PARAM_CORRUPT_STATUS != dfmStatus ) { - dialInFlowCalGain = cal.dialysateFlowGain; - dialInFlowCalOffset = cal.dialysateFlowOffset_mL_min; - result = SELF_TEST_STATUS_PASSED; - } -#else - result = SELF_TEST_STATUS_PASSED; +#ifndef SKIP_CALIBRATION_TESTS + CALIBRATION_DATA_T cal; + + if ( TRUE == getCalibrationData( &cal ) ) + { + dialInFlowCalGain = cal.dialysateFlowGain; + dialInFlowCalOffset = cal.dialysateFlowOffset_mL_min; + } + else + { + result = SELF_TEST_STATUS_FAILED; + } #endif + } + else + { + result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_DIALYSATE_FLOW_STATUS_SELF_TEST_FAILURE, (U32)dfmStatus ); + } return result; } Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -rf7b149d8b8c9ea6ac58e4739101693d251d7a355 -rfa41b85cf47fb01cd905b2ed53d472a9cb0c1706 --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision f7b149d8b8c9ea6ac58e4739101693d251d7a355) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision fa41b85cf47fb01cd905b2ed53d472a9cb0c1706) @@ -569,13 +569,11 @@ * @brief * The execPresOcclTest function executes the PresOccl self-test. * @details Inputs: none - * @details Outputs: none - * @return the result of the PresOccl self-test. + * @details Outputs: Triggers fault when test case fails + * @return none *************************************************************************/ -SELF_TEST_STATUS_T execPresOcclTest( void ) +void execPresOcclTest( void ) { - SELF_TEST_STATUS_T result = SELF_TEST_STATUS_PASSED; - U32 const bpPressure = getMeasuredBloodPumpOcclusion(); U32 const dialysateInPressure = getMeasuredDialInPumpOcclusion(); U32 const dialysateOutPressure = getMeasuredDialOutPumpOcclusion(); @@ -584,30 +582,28 @@ if ( ( bpPressure <= OCCLUSION_NO_CARTRIDGE_PRESSURE_READING_MIN ) || ( bpPressure >= OCCLUSION_THRESHOLD ) ) { - result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_BP_OCCLUSION_SELF_TEST_FAILURE, bpPressure ); } if ( ( dialysateInPressure <= OCCLUSION_NO_CARTRIDGE_PRESSURE_READING_MIN ) || ( dialysateInPressure >= OCCLUSION_THRESHOLD ) ) { - result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_DIP_OCCLUSION_SELF_TEST_FAILURE, dialysateInPressure ); } if ( ( dialysateOutPressure <= OCCLUSION_NO_CARTRIDGE_PRESSURE_READING_MIN ) || ( dialysateOutPressure >= OCCLUSION_THRESHOLD ) ) { - result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_DOP_OCCLUSION_SELF_TEST_FAILURE, dialysateOutPressure ); } if ( ( arterialPressure <= ARTERIAL_PRESSURE_SELF_TEST_MIN ) || ( arterialPressure >= ARTERIAL_PRESSURE_SELF_TEST_MAX ) ) { - result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_ARTERIAL_PRESSURE_SELF_TEST_FAILURE, arterialPressure ); } if ( ( venousPressure <= VENOUS_PRESSURE_SELF_TEST_MIN ) || ( venousPressure >= VENOUS_PRESSURE_SELF_TEST_MAX ) ) { - result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_VENOUS_PRESSURE_SELF_TEST_FAILURE, venousPressure ); } - - return result; } /*********************************************************************//** Index: firmware/App/Controllers/PresOccl.h =================================================================== diff -u -r69656450319bfcfdeffdc8f11e88084d4ea38d7d -rfa41b85cf47fb01cd905b2ed53d472a9cb0c1706 --- firmware/App/Controllers/PresOccl.h (.../PresOccl.h) (revision 69656450319bfcfdeffdc8f11e88084d4ea38d7d) +++ firmware/App/Controllers/PresOccl.h (.../PresOccl.h) (revision fa41b85cf47fb01cd905b2ed53d472a9cb0c1706) @@ -63,7 +63,7 @@ void initPresOccl( void ); void execPresOccl( void ); -SELF_TEST_STATUS_T execPresOcclTest( void ); +void execPresOcclTest( void ); SELF_TEST_STATUS_T execPresOcclDryTest( void ); F32 getMeasuredArterialPressure( void ); Index: firmware/App/Modes/ConsumableSelfTest.c =================================================================== diff -u -rae7ff6466ac1225cb5998990cc5163edc53ce003 -rfa41b85cf47fb01cd905b2ed53d472a9cb0c1706 --- firmware/App/Modes/ConsumableSelfTest.c (.../ConsumableSelfTest.c) (revision ae7ff6466ac1225cb5998990cc5163edc53ce003) +++ firmware/App/Modes/ConsumableSelfTest.c (.../ConsumableSelfTest.c) (revision fa41b85cf47fb01cd905b2ed53d472a9cb0c1706) @@ -75,6 +75,7 @@ { case CONSUMABLE_SELF_TESTS_INSTALL_STATE: #ifndef SKIP_CONSUMABLE_TESTS + // TODO: Check for DG straw door status to be open once DG door driver implemented if ( TRUE == consumableInstallConfirmed ) #endif { Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -rb70bf4c5a7cdb4218d812546b3bc5d7dad152700 -rfa41b85cf47fb01cd905b2ed53d472a9cb0c1706 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision b70bf4c5a7cdb4218d812546b3bc5d7dad152700) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision fa41b85cf47fb01cd905b2ed53d472a9cb0c1706) @@ -113,7 +113,7 @@ static void handleNoCartSelfTestsStopRequest( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestsWaitForClosedDoor( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestPumpsState( void ); -static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestLeakDetectorsState( SELF_TEST_STATUS_T *result ); +static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestLeakDetectorsState( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestStartHomingState( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestHomeValvesAndPumpState( void ); static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestStoppedState( void ); @@ -217,8 +217,6 @@ *************************************************************************/ void execNoCartSelfTests( void ) { - SELF_TEST_STATUS_T result = SELF_TEST_STATUS_PASSED; - // execute no cartridge self-tests state machine switch ( currentNoCartSelfTestsState ) { @@ -231,38 +229,25 @@ break; case NO_CART_SELF_TESTS_OCCLUSION_SENSORS_STATE: - result = execPresOcclTest(); - - if ( SELF_TEST_STATUS_PASSED == result ) - { - currentNoCartSelfTestsState = NO_CART_SELF_TESTS_BLOOD_FLOW_METERS_STATE; - } + execPresOcclTest(); + currentNoCartSelfTestsState = NO_CART_SELF_TESTS_BLOOD_FLOW_METERS_STATE; break; case NO_CART_SELF_TESTS_BLOOD_FLOW_METERS_STATE: - result = execBloodFlowTest(); - - if ( SELF_TEST_STATUS_PASSED == result ) - { - currentNoCartSelfTestsState = NO_CART_SELF_TESTS_DIALYSATE_FLOW_METERS_STATE; - } + execBloodFlowTest(); + currentNoCartSelfTestsState = NO_CART_SELF_TESTS_DIALYSATE_FLOW_METERS_STATE; break; case NO_CART_SELF_TESTS_DIALYSATE_FLOW_METERS_STATE: - result = execDialInFlowTest(); - - if ( SELF_TEST_STATUS_PASSED == result ) - { - currentNoCartSelfTestsState = NO_CART_SELF_TESTS_PUMPS_STATE; - } + execDialInFlowTest(); break; case NO_CART_SELF_TESTS_PUMPS_STATE: currentNoCartSelfTestsState = handleNoCartSelfTestPumpsState(); break; case NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE: - currentNoCartSelfTestsState = handleNoCartSelfTestLeakDetectorsState( &result ); + currentNoCartSelfTestsState = handleNoCartSelfTestLeakDetectorsState(); break; case NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE: @@ -297,11 +282,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_NO_CART_SELF_TEST_FAILURE, currentNoCartSelfTestsState ); - } } /*********************************************************************//** @@ -649,19 +629,21 @@ * @param result self-test result * @return the next state of no cartridge self-tests state machine *************************************************************************/ -static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestLeakDetectorsState( SELF_TEST_STATUS_T *result ) +static NO_CART_SELF_TESTS_STATE_T handleNoCartSelfTestLeakDetectorsState( void ) { NO_CART_SELF_TESTS_STATE_T state = NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE; + // TODO: Use appropriate sensor driver + BOOL const bloodLeakDetector = getFPGABloodLeakDetectorStatus(); - if ( TRUE == getFPGABloodLeakDetectorStatus() ) + if ( TRUE == bloodLeakDetector ) { // TODO: Use appropriate sensor driver setFPGASensorTest( BLOOD_LEAK_NORMAL_OPERATION ); state = NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE; } else { - *result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_BLOOD_LEAK_SELF_TEST_FAILURE, (U32)bloodLeakDetector ); } return state;