Index: firmware/App/Controllers/BloodLeak.c =================================================================== diff -u -r518745cc77b07b0a6aa35d5530255d2bcc8b1090 -rb7764e26a3460652da29b1f957706dfaca413226 --- firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision 518745cc77b07b0a6aa35d5530255d2bcc8b1090) +++ firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision b7764e26a3460652da29b1f957706dfaca413226) @@ -31,7 +31,7 @@ // ********** private definitions ********** #define BLOOD_LEAK_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the blood leak data is published on the CAN bus. -#define BLOOD_LEAK_TIMEOUT_MS 100 ///< Blood leak detector timeout for zeroing and self-test (15 ms extended edge detection) +#define BLOOD_LEAK_TIMEOUT_MS 500 ///< Blood leak detector timeout for zeroing and self-test (15 ms extended edge detection) /// Defined states for the blood leak detector state machine. typedef enum BloodLeakStates @@ -52,7 +52,6 @@ static BOOL bloodLeakZeroRequested = FALSE; ///< Blood leak zero requested flag static U32 bloodLeakZeroStartTime = 0; ///< Blood leak zeroing start time. static U32 bloodLeakSelfTestStartTime = 0; ///< Blood leak self-test start time. -static U32 clearSelfTestStartTime = 0; ///< Blood leak self-test clear start time. /// Interval (in ms) at which to publish blood leak data to CAN bus. static OVERRIDE_U32_T bloodLeakDataPublishInterval = { BLOOD_LEAK_PUB_INTERVAL, BLOOD_LEAK_PUB_INTERVAL, 0, 0 }; @@ -79,6 +78,7 @@ { bloodLeakState = BLOOD_LEAK_INIT_STATE; bloodLeakStatus.data = BLOOD_LEAK_NOT_DETECTED; + bloodLeakSelfTestStatus = SELF_TEST_STATUS_IN_PROGRESS; bloodLeakZeroRequested = FALSE; bloodLeakZeroStartTime = 0; bloodLeakSelfTestStartTime = 0; @@ -177,6 +177,7 @@ if ( TRUE == FPGABloodLeakZeroDetected() ) { state = BLOOD_LEAK_SELF_TEST_STATE; + bloodLeakSelfTestStatus = SELF_TEST_STATUS_IN_PROGRESS; clearFPGABloodLeakZero(); setFPGABloodLeakSelfTest(); bloodLeakSelfTestStartTime = getMSTimerCount(); @@ -207,21 +208,23 @@ if ( FALSE == noFPGABloodLeakDetected() ) // Faked blood leak caused by independent MCU board { bloodLeakSelfTestStatus = SELF_TEST_STATUS_PASSED; - clearSelfTestStartTime = getMSTimerCount(); clearFPGABloodLeakSelfTest(); } else { - if ( ( ( SELF_TEST_STATUS_PASSED != bloodLeakSelfTestStatus ) ) && ( TRUE == didTimeout( bloodLeakSelfTestStartTime, BLOOD_LEAK_TIMEOUT_MS ) ) ) + if ( ( ( SELF_TEST_STATUS_IN_PROGRESS == bloodLeakSelfTestStatus ) ) && ( TRUE == didTimeout( bloodLeakSelfTestStartTime, BLOOD_LEAK_TIMEOUT_MS ) ) ) { bloodLeakSelfTestStatus = SELF_TEST_STATUS_FAILED; activateAlarmNoData( ALARM_ID_HD_BLOOD_LEAK_SELF_TEST_FAILURE ); } } - if ( ( SELF_TEST_STATUS_PASSED == bloodLeakSelfTestStatus ) && ( TRUE == didTimeout( clearSelfTestStartTime, 500 ) ) ) + if ( SELF_TEST_STATUS_IN_PROGRESS != bloodLeakSelfTestStatus ) { - state = BLOOD_LEAK_NORMAL_STATE; + if ( TRUE == noFPGABloodLeakDetected() ) + { + state = BLOOD_LEAK_NORMAL_STATE; + } } return state; @@ -307,29 +310,6 @@ *************************************************************************/ SELF_TEST_STATUS_T getBloodLeakSelfTestStatus( void ) { - switch ( bloodLeakState ) - { - case BLOOD_LEAK_INIT_STATE: - bloodLeakSelfTestStatus = SELF_TEST_STATUS_IN_PROGRESS; - break; - - case BLOOD_LEAK_ZERO_STATE: - bloodLeakSelfTestStatus = SELF_TEST_STATUS_IN_PROGRESS; - break; - - case BLOOD_LEAK_SELF_TEST_STATE: - bloodLeakSelfTestStatus = SELF_TEST_STATUS_IN_PROGRESS; - break; - - case BLOOD_LEAK_NORMAL_STATE: - bloodLeakSelfTestStatus = SELF_TEST_STATUS_PASSED; - break; - - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_HD_INVALID_BLOOD_LEAK_STATE, bloodLeakState ) - break; - } - return bloodLeakSelfTestStatus; } Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r04f033af4174bf41a7aa0ff9ccaae45b77472e01 -rb7764e26a3460652da29b1f957706dfaca413226 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 04f033af4174bf41a7aa0ff9ccaae45b77472e01) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision b7764e26a3460652da29b1f957706dfaca413226) @@ -613,10 +613,6 @@ { state = NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE; } - else - { - activateAlarmNoData( ALARM_ID_HD_BLOOD_LEAK_SELF_TEST_FAILURE ); - } if ( TRUE == doesAlarmStatusIndicateStop() ) { Index: firmware/App/Services/FPGA.c =================================================================== diff -u -r04f033af4174bf41a7aa0ff9ccaae45b77472e01 -rb7764e26a3460652da29b1f957706dfaca413226 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision 04f033af4174bf41a7aa0ff9ccaae45b77472e01) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision b7764e26a3460652da29b1f957706dfaca413226) @@ -1684,7 +1684,7 @@ { U16 noFPGABloodLeakDetected = fpgaSensorReadings.fpgaGPIO & FPGA_BLOOD_LEAK_STATUS_MASK; - return ( 0 == noFPGABloodLeakDetected ? FALSE : TRUE ); + return ( 0 == noFPGABloodLeakDetected ? TRUE : FALSE ); } /*********************************************************************//**