Index: firmware/App/Controllers/BloodLeak.c =================================================================== diff -u -ra520312a49a6d1042a63800e3edc222290318d77 -r6982379266891326c9d45aecd7d54ad5c85ea69f --- firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision a520312a49a6d1042a63800e3edc222290318d77) +++ firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision 6982379266891326c9d45aecd7d54ad5c85ea69f) @@ -37,11 +37,13 @@ /// Defined states for the blood leak detector state machine. typedef enum BloodLeakStates { - BLOOD_LEAK_INIT_STATE = 0, ///< Initial state - BLOOD_LEAK_ZERO_STATE, ///< Zero state - BLOOD_LEAK_SELF_TEST_STATE, ///< Self-test state - BLOOD_LEAK_NORMAL_STATE, ///< Normal state - NUM_OF_BLOOD_LEAK_STATES ///< Number of blood leak detector states + BLOOD_LEAK_CHECK_SET_POINT_STATE = 0, ///< Check set point state. + BLOOD_LEAK_SET_SET_POINT_STATE, ///< Set set point state. + BLOOD_LEAK_INIT_STATE, ///< Init state. + BLOOD_LEAK_ZERO_STATE, ///< Zero state. + BLOOD_LEAK_SELF_TEST_STATE, ///< Self-test state. + BLOOD_LEAK_NORMAL_STATE, ///< Normal state. + NUM_OF_BLOOD_LEAK_STATES ///< Number of blood leak detector states. } BLOOD_LEAK_STATES_T; // ********** private data ********** @@ -56,12 +58,14 @@ static U32 bloodLeakPersistenceCtr = 0; ///< Blood leak alarm persistence timer counter. -/// 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 }; +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. static U32 bloodLeakDataPublicationTimerCounter = 0; ///< Timer counter used to schedule blood leak data publication to CAN bus. // ********** private function prototypes ********** +static BLOOD_LEAK_STATES_T handleBloodLeakCheckSetPointState( void ); +static BLOOD_LEAK_STATES_T handleBloodLeakSetSetPointState( void ); static BLOOD_LEAK_STATES_T handleBloodLeakInitState( void ); static BLOOD_LEAK_STATES_T handleBloodLeakZeroState( void ); static BLOOD_LEAK_STATES_T handleBloodLeakSelfTestState( void ); @@ -78,14 +82,14 @@ *************************************************************************/ void initBloodLeak( void ) { - bloodLeakState = BLOOD_LEAK_INIT_STATE; - bloodLeakStatus.data = BLOOD_LEAK_NOT_DETECTED; + bloodLeakState = BLOOD_LEAK_CHECK_SET_POINT_STATE; + bloodLeakStatus.data = BLOOD_LEAK_NOT_DETECTED; bloodLeakStatus.ovInitData = BLOOD_LEAK_NOT_DETECTED; - bloodLeakStatus.ovData = BLOOD_LEAK_NOT_DETECTED; - bloodLeakStatus.override = OVERRIDE_RESET; - bloodLeakSelfTestStatus = SELF_TEST_STATUS_IN_PROGRESS; - bloodLeakZeroRequested = FALSE; - bloodLeakZeroStartTime = 0; + bloodLeakStatus.ovData = BLOOD_LEAK_NOT_DETECTED; + bloodLeakStatus.override = OVERRIDE_RESET; + bloodLeakSelfTestStatus = SELF_TEST_STATUS_IN_PROGRESS; + bloodLeakZeroRequested = FALSE; + bloodLeakZeroStartTime = 0; bloodLeakSelfTestStartTime = 0; } @@ -103,6 +107,14 @@ // Execute blood leak state machine switch( bloodLeakState ) { + case BLOOD_LEAK_CHECK_SET_POINT_STATE: + bloodLeakState = handleBloodLeakCheckSetPointState(); + break; + + case BLOOD_LEAK_SET_SET_POINT_STATE: + bloodLeakState = handleBloodLeakSetSetPointState(); + break; + case BLOOD_LEAK_INIT_STATE: bloodLeakState = handleBloodLeakInitState(); break; @@ -145,6 +157,41 @@ /*********************************************************************//** * @brief + * The handleBloodLeakCheckSetPointState function handles the check set point + * state to ensure the set point is set correctly. + * @details Inputs: none + * @details Outputs: Blood Leak module init. + * @return next state + *************************************************************************/ +static BLOOD_LEAK_STATES_T handleBloodLeakCheckSetPointState( void ) +{ + BLOOD_LEAK_STATES_T state = BLOOD_LEAK_CHECK_SET_POINT_STATE; + + // TODO remove + state = BLOOD_LEAK_SET_SET_POINT_STATE; + // TODO remove for testing only + + return state; +} + +/*********************************************************************//** + * @brief + * The handleBloodLeakSetSetPointState function handles the set set point state. + * @details Inputs: none + * @details Outputs: Blood Leak module init. + * @return next state + *************************************************************************/ +static BLOOD_LEAK_STATES_T handleBloodLeakSetSetPointState( void ) +{ + BLOOD_LEAK_STATES_T state = BLOOD_LEAK_SET_SET_POINT_STATE; + + state = BLOOD_LEAK_INIT_STATE; + + return state; +} + +/*********************************************************************//** + * @brief * The handleBloodLeakInitState function handles the Blood Leak module in init * state. * @details Inputs: none @@ -334,11 +381,20 @@ // Publish blood leak data on interval if ( ++bloodLeakDataPublicationTimerCounter >= getU32OverrideValue( &bloodLeakDataPublishInterval ) ) { - BLOOD_LEAK_DATA_T bloodLeakData; + BLOOD_LEAK_DATA_T data; - bloodLeakData.bloodLeakStatus = (U32)getBloodLeakStatus(); - bloodLeakData.bloodLeakState = (U32)bloodLeakState; - broadcastData( MSG_ID_HD_BLOOD_LEAK_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&bloodLeakData, sizeof( BLOOD_LEAK_DATA_T ) ); + data.bloodLeakStatus = (U32)getBloodLeakStatus(); + data.bloodLeakState = (U32)bloodLeakState; + data.bloodLeakZeroStatusCounter = (U32)getFPGABloodLeakZeroStatusCounter(); + data.bloodLeakCounter = (U32)getFPGABloodLeakCounter(); + data.bloodLeakZeroedStatus = (U32)getFPGABloodLeakZeroedStatus(); + data.bloodLeakDetectSetPoint = (U32)getFPGABloodLeakDetectSetPoint(); + data.bloodLeakDetectLevel = (U32)getFPGABloodLeakDetectLevel(); + data.bloodLeakStCount = (U32)getFPGABloodLeakStCount(); + data.bloodLeakLEDIntesity = (U32)getFPGABloodLeakLEDIntensity(); + data.bloodLeakRegisterCounter = (U32)getFPGABloodLeakRegisterCounter(); + + broadcastData( MSG_ID_HD_BLOOD_LEAK_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( BLOOD_LEAK_DATA_T ) ); bloodLeakDataPublicationTimerCounter = 0; } }