Index: firmware/App/Controllers/BloodLeak.c =================================================================== diff -u -r4b8363716866a9850de172af1609008fccf0ee74 -r085476747d1b466802f94f5926fc53a8ec463ec5 --- firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision 4b8363716866a9850de172af1609008fccf0ee74) +++ firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision 085476747d1b466802f94f5926fc53a8ec463ec5) @@ -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 @@ -705,7 +720,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 ) { @@ -744,6 +759,13 @@ bloodLeakZeroStartTime = getMSTimerCount(); } + if ( TRUE == bloodLeakExitNormalRequested ) + { + state = BLOOD_LEAK_INIT_STATE; + bloodLeakZeroRequested = FALSE; + bloodLeakExitNormalRequested = TRUE; + } + return state; }