Index: firmware/App/Controllers/BloodLeak.c =================================================================== diff -u -r6e86723c766c0097c9867af984c0c7e82802537a -rd96d1805307c4e4586416629081b3314037392bf --- firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision 6e86723c766c0097c9867af984c0c7e82802537a) +++ firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision d96d1805307c4e4586416629081b3314037392bf) @@ -135,7 +135,7 @@ static U32 bloodLeakSelfTestStartTime; ///< Blood leak self-test start time. static BOOL bloodLeakIsPOSTComplete; ///< Blood leak is POST complete flag. -static U32 bloodLeakPersistenceCtr = 0; ///< Blood leak alarm persistence timer counter. +static U32 bloodLeakPersistenceCtr; ///< Blood leak alarm persistence timer counter. static OVERRIDE_U32_T bloodLeakDataPublishInterval = { BLOOD_LEAK_PUB_INTERVAL, BLOOD_LEAK_PUB_INTERVAL, 0, 0 }; ///< Interval (in ms) at which to publish blood leak data to CAN bus. @@ -148,6 +148,7 @@ static HD_BLOOD_LEAK_SENSOR_CAL_RECORD_T bloodLeakCalRecord; ///< Blood leak calibration record structure. static U32 bloodLeakGetCalStartTime; ///< Blood leak get calibration start time. static U32 bloodLeakPrevFPGARegisterCount; ///< Blood leak previous FPGA communications counter. +static BOOL bloodLeakExitNormalRequested; ///< Blood leak exit normal state requested. /// Blood leak start up sequence array. static const U08 BLOOD_LEAK_START_UP_SEQUENCE[ BLOOD_LEAK_STARTUP_SEQ_LENGTH ] = { BLOOD_LEAK_RESET_TX_FIFO, @@ -200,7 +201,7 @@ * bloodLeakCommandWriteTryCount, bloodLeakGetCalStartTime, bloodLeakEmbModeSubstate * bloodLeakIsPOSTComplete, bloodLeakPersistenceCtr, bloodLeakSignalEmbModeReq, * bloodLeakEmbModeRqstedCmd, bloodLeakEmbModeOpsStartTime, bloodLeakEmbModeRespBuffer, - * bloodLeakEmbModeRespIndex, bloodLeakEmbModeNumOfCmdTries + * bloodLeakEmbModeRespIndex, bloodLeakEmbModeNumOfCmdTries, bloodLeakExitNormalRequested * @return none *************************************************************************/ void initBloodLeak( void ) @@ -229,6 +230,7 @@ bloodLeakEmbModeOpsStartTime = 0; bloodLeakEmbModeRespIndex = 0; bloodLeakEmbModeNumOfCmdTries = 0; + bloodLeakExitNormalRequested = FALSE; // Set the blood leak set pint sequence to 0 to be initialized memset( bloodLeakSetPointSequence, 0x0, BLOOD_LEAK_SET_POINT_SEQ_MAX_LENGTH ); @@ -347,7 +349,7 @@ * zeroed. * @details Inputs: none * @details Outputs: Blood Leak module zeroing. - * @return Boolean as success or failure + * @return none *************************************************************************/ void zeroBloodLeak( void ) { @@ -357,6 +359,19 @@ /*********************************************************************//** * @brief + * The exitBloodLeakNormalState requests that the blood leak sensor to exit + * its normal state. + * @details Inputs: none + * @details Outputs: bloodLeakExitNormalRequested + * @return none + *************************************************************************/ +void exitBloodLeakNormalState( void ) +{ + bloodLeakExitNormalRequested = TRUE; +} + +/*********************************************************************//** + * @brief * The execBloodLeakSelfTest function executes the blood leak self-test. * @details Inputs: none * @details Outputs: none @@ -701,7 +716,7 @@ } // Check status reading and act upon - if ( ( BLOOD_LEAK_DETECTED == getBloodLeakStatus() ) && ( MODE_TREA == getCurrentOperationMode() ) ) + if ( BLOOD_LEAK_DETECTED == getBloodLeakStatus() ) { if ( ++bloodLeakPersistenceCtr > BLOOD_LEAK_PERSISTENCE ) { @@ -740,6 +755,13 @@ bloodLeakZeroStartTime = getMSTimerCount(); } + if ( TRUE == bloodLeakExitNormalRequested ) + { + state = BLOOD_LEAK_INIT_STATE; + bloodLeakZeroRequested = FALSE; + bloodLeakExitNormalRequested = TRUE; + } + return state; } Index: firmware/App/Controllers/BloodLeak.h =================================================================== diff -u -r050984357442e3ee0d6d5b21e274c1306643c598 -rd96d1805307c4e4586416629081b3314037392bf --- firmware/App/Controllers/BloodLeak.h (.../BloodLeak.h) (revision 050984357442e3ee0d6d5b21e274c1306643c598) +++ firmware/App/Controllers/BloodLeak.h (.../BloodLeak.h) (revision d96d1805307c4e4586416629081b3314037392bf) @@ -62,6 +62,8 @@ void execBloodLeak( void ); void zeroBloodLeak( void ); +void exitBloodLeakNormalState( void ); + SELF_TEST_STATUS_T execBloodLeakSelfTest( void ); BLOOD_LEAK_STATUS_T getBloodLeakStatus( void ); Index: firmware/App/Modes/TreatmentStop.c =================================================================== diff -u -r3d72b777cf1ceb673d118341c46e2d6d5b7b75f5 -rd96d1805307c4e4586416629081b3314037392bf --- firmware/App/Modes/TreatmentStop.c (.../TreatmentStop.c) (revision 3d72b777cf1ceb673d118341c46e2d6d5b7b75f5) +++ firmware/App/Modes/TreatmentStop.c (.../TreatmentStop.c) (revision d96d1805307c4e4586416629081b3314037392bf) @@ -17,6 +17,7 @@ #include "AirTrap.h" #include "BloodFlow.h" +#include "BloodLeak.h" #include "DGInterface.h" #include "DialInFlow.h" #include "DialOutFlow.h" @@ -93,6 +94,7 @@ { setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, TRUE ); } + setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, TRUE ); // Ensure all pumps except DPi stopped @@ -114,6 +116,9 @@ // Reset saline bolus state in case alarm interrupted one resetSalineBolus(); + // Exit blood leak normal state so there will no blood detection alarm + exitBloodLeakNormalState(); + // Should always have an alarm active in treatment stop sub-mode so that user can take action if ( FALSE == isAnyAlarmActive() ) {