Index: firmware/App/Controllers/BloodLeak.c =================================================================== diff -u -rfc5a5c7406958c9bcf3fab8405abccf3ad7322f0 -r494fa9614f7ec4cb0f677763c499044336ea8214 --- firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision fc5a5c7406958c9bcf3fab8405abccf3ad7322f0) +++ firmware/App/Controllers/BloodLeak.c (.../BloodLeak.c) (revision 494fa9614f7ec4cb0f677763c499044336ea8214) @@ -32,20 +32,32 @@ #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. +/// 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_STATES_T; + // ********** private data ********** -static OVERRIDE_U32_T bloodLeakState; ///< Current state of blood leak state machine. +static BLOOD_LEAK_STATES_T bloodLeakState; ///< Current state of blood leak state machine. static OVERRIDE_U32_T bloodLeakStatus; ///< Detected blood leak status for blood leak detector. -static U32 bloodLeakZeroTimerCount = 0; ///< Timer counter for blood leak zeroing. -static U32 bloodLeakSelfTestTimerCount = 0; ///< Timer counter for blood leak self-test. +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. /// 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 U32 bloodLeakDataPublicationTimerCounter = 0; ///< Timer counter used to schedule blood leak data publication to CAN bus. // ********** private function prototypes ********** +static BLOOD_LEAK_STATES_T handleBloodLeakInitState( void ); static BLOOD_LEAK_STATES_T handleBloodLeakZeroState( void ); static BLOOD_LEAK_STATES_T handleBloodLeakSelfTestState( void ); static BLOOD_LEAK_STATES_T handleBloodLeakNormalState( void ); @@ -62,8 +74,11 @@ *************************************************************************/ void initBloodLeak( void ) { - bloodLeakState.data = BLOOD_LEAK_INIT_STATE; + bloodLeakState = BLOOD_LEAK_INIT_STATE; bloodLeakStatus.data = BLOOD_LEAK_NOT_DETECTED; + bloodLeakZeroRequested = FALSE; + bloodLeakZeroStartTime = 0; + bloodLeakSelfTestStartTime = 0; } /*********************************************************************//** @@ -78,27 +93,27 @@ if ( getCurrentOperationMode() != MODE_INIT ) { // Execute blood leak state machine - switch( bloodLeakState.data ) + switch( bloodLeakState ) { case BLOOD_LEAK_INIT_STATE: - // Do nothing; + bloodLeakState = handleBloodLeakInitState(); break; case BLOOD_LEAK_ZERO_STATE: - bloodLeakState.data = handleBloodLeakZeroState(); + bloodLeakState = handleBloodLeakZeroState(); break; case BLOOD_LEAK_SELF_TEST_STATE: - bloodLeakState.data = handleBloodLeakSelfTestState(); + bloodLeakState = handleBloodLeakSelfTestState(); break; case BLOOD_LEAK_NORMAL_STATE: - bloodLeakState.data = handleBloodLeakNormalState(); + bloodLeakState = handleBloodLeakNormalState(); break; default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, (U32)SW_FAULT_ID_HD_INVALID_BLOOD_LEAK_STATE, (U32)bloodLeakState.data ) - initBloodLeak(); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, (U32)SW_FAULT_ID_HD_INVALID_BLOOD_LEAK_STATE, (U32)bloodLeakState ) + bloodLeakState = BLOOD_LEAK_INIT_STATE; break; } } @@ -109,6 +124,42 @@ /*********************************************************************//** * @brief + * The zeroBloodLeak function zeroes the Blood Leak Detector. + * @details Inputs: none + * @details Outputs: Blood Leak module zeroing. + * @return Boolean as success or failure + *************************************************************************/ +void zeroBloodLeak( void ) +{ + bloodLeakZeroRequested = TRUE; +} + +/*********************************************************************//** + * @brief + * The handleBloodLeakInitState function handles the Blood Leak module in init + * state. + * @details Inputs: none + * @details Outputs: Blood Leak module init. + * @return next state + *************************************************************************/ +static BLOOD_LEAK_STATES_T handleBloodLeakInitState( void ) +{ + BLOOD_LEAK_STATES_T state = BLOOD_LEAK_INIT_STATE; + + if ( TRUE == bloodLeakZeroRequested ) + { + state = BLOOD_LEAK_ZERO_STATE; + bloodLeakZeroRequested = FALSE; + + setFPGABloodLeakZero(); + bloodLeakZeroStartTime = getMSTimerCount(); + } + + return state; +} + +/*********************************************************************//** + * @brief * The handleBloodLeakZeroState function handles the Blood Leak module in zeroing * state. * @details Inputs: none @@ -117,19 +168,24 @@ *************************************************************************/ static BLOOD_LEAK_STATES_T handleBloodLeakZeroState( void ) { - BLOOD_LEAK_STATES_T result = BLOOD_LEAK_ZERO_STATE; + BLOOD_LEAK_STATES_T state = BLOOD_LEAK_ZERO_STATE; - // TODO: Complete - //if ( FALSE == zeroBloodLeak() ) - //{ - //activateAlarmNoData( ALARM_ID_HD_BLOOD_LEAK_FAULT ); - //} - //else - //{ - // TODO: Fill in - //} + if ( TRUE == didTimeout( bloodLeakZeroStartTime, 10 ) ) // TODO: Define 10 up in the code + { + if ( TRUE == FPGABloodLeakZeroDetected() ) + { + state = BLOOD_LEAK_SELF_TEST_STATE; + clearFPGABloodLeakZero(); + setFPGABloodLeakSelfTest(); + bloodLeakSelfTestStartTime = getMSTimerCount(); + } + else + { + activateAlarmNoData( ALARM_ID_HD_BLOOD_LEAK_FAULT ); + } + } - return result; + return state; } /*********************************************************************//** @@ -138,23 +194,26 @@ * in self-test state. * @details Inputs: none * @details Outputs: Blood Leak module self test. - * @return next state + * @return none *************************************************************************/ static BLOOD_LEAK_STATES_T handleBloodLeakSelfTestState( void ) { - BLOOD_LEAK_STATES_T result = BLOOD_LEAK_SELF_TEST_STATE; + BLOOD_LEAK_STATES_T state = BLOOD_LEAK_SELF_TEST_STATE; - // TODO: Complete - //if ( FALSE == selfTestBloodLeak() ) - //{ - //activateAlarmNoData( ALARM_ID_HD_BLOOD_LEAK_FAULT ); - //} - //else - //{ - // TODO: Fill in - //} + if ( TRUE == didTimeout( bloodLeakSelfTestStartTime, 10 ) ) // TODO: Define 10 up in the code + { + if ( FALSE == noFPGABloodLeakDetected() ) + { + state = BLOOD_LEAK_NORMAL_STATE; + clearFPGABloodLeakSelfTest(); + } + else + { + activateAlarmNoData( ALARM_ID_HD_BLOOD_LEAK_SELF_TEST_FAILURE ); + } + } - return result; + return state; } /*********************************************************************//** @@ -167,13 +226,12 @@ *************************************************************************/ static BLOOD_LEAK_STATES_T handleBloodLeakNormalState( void ) { - BLOOD_LEAK_STATES_T result = BLOOD_LEAK_NORMAL_STATE; + BLOOD_LEAK_STATES_T state = BLOOD_LEAK_NORMAL_STATE; // Check status reading and act upon if ( BLOOD_LEAK_DETECTED == getBloodLeakStatus() ) { - if ( ( getCurrentOperationMode() >= TREATMENT_BLOOD_PRIME_STATE ) && - ( getCurrentOperationMode() <= TREATMENT_RECIRC_STATE ) ) // TODO: Not sure this is correct range of states + if ( getCurrentOperationMode() == MODE_TREA ) { activateAlarmNoData( ALARM_ID_HD_BLOOD_LEAK_DETECTED ); bloodLeakStatus.data = BLOOD_LEAK_DETECTED; @@ -188,7 +246,16 @@ clearAlarmCondition( ALARM_ID_HD_BLOOD_LEAK_DETECTED ); } - return result; + if ( TRUE == bloodLeakZeroRequested ) + { + state = BLOOD_LEAK_ZERO_STATE; + bloodLeakZeroRequested = FALSE; + + setFPGABloodLeakZero(); + bloodLeakZeroStartTime = getMSTimerCount(); + } + + return state; } /*********************************************************************//** @@ -213,22 +280,15 @@ /*********************************************************************//** * @brief - * The getBloodLeakState function gets the current state of the blood - * leak detector state machine. - * @details Inputs: bloodLeakState + * The getBloodLeakSelfTestStatus function gets the status for the blood + * leak detector self-test. + * @details Inputs: bloodLeakStatus * @details Outputs: none - * @return the current blood leak state. + * @return status of blood leak detector self-test. *************************************************************************/ -BLOOD_LEAK_STATES_T getBloodLeakState( void ) +BOOL getBloodLeakSelfTestStatus( void ) { - BLOOD_LEAK_STATES_T result = (BLOOD_LEAK_STATES_T)bloodLeakState.data; - - if ( OVERRIDE_KEY == bloodLeakState.override ) - { - result = (BLOOD_LEAK_STATES_T)bloodLeakState.ovData; - } - - return result; + return ( bloodLeakState == BLOOD_LEAK_NORMAL_STATE ); } /*********************************************************************//** @@ -264,9 +324,8 @@ if ( ++bloodLeakDataPublicationTimerCounter >= getPublishBloodLeakDataInterval() ) { BLOOD_LEAK_STATUS_T status = getBloodLeakStatus(); - BLOOD_LEAK_STATES_T state = getBloodLeakState(); - broadcastBloodLeakData( status, state ); + broadcastBloodLeakData( status, bloodLeakState ); bloodLeakDataPublicationTimerCounter = 0; } } @@ -374,54 +433,4 @@ return result; } -/*********************************************************************//** - * @brief - * The testSetBloodLeakStateOverride function overrides the state - * of the blood leak detector. - * @details Inputs: none - * @details Outputs: bloodLeakState - * @param none - * @param state override blood leak detector with this - * @return TRUE if override successful, FALSE if not - *************************************************************************/ -BOOL testSetBloodLeakStateOverride( BLOOD_LEAK_STATES_T state ) -{ - BOOL result = FALSE; - - if ( state < NUM_OF_BLOOD_LEAK_STATES ) - { - if ( TRUE == isTestingActivated() ) - { - result = TRUE; - bloodLeakState.ovData = (U32)state; - bloodLeakState.override = OVERRIDE_KEY; - } - } - - return result; -} - -/*********************************************************************//** - * @brief - * The testResetBloodLeakStateOverride function resets the override of the - * blood leak detector state. - * @details Inputs: none - * @details Outputs: bloodLeakState - * @param none - * @return TRUE if reset successful, FALSE if not - *************************************************************************/ -BOOL testResetBloodLeakStateOverride( void ) -{ - BOOL result = FALSE; - - if ( TRUE == isTestingActivated() ) - { - result = TRUE; - bloodLeakState.override = OVERRIDE_RESET; - bloodLeakState.ovData = bloodLeakState.ovInitData; - } - - return result; -} - /**@}*/ Index: firmware/App/Controllers/BloodLeak.h =================================================================== diff -u -rb2afbf7b9bb007d06c28a56cd4e61d3cd9bbe150 -r494fa9614f7ec4cb0f677763c499044336ea8214 --- firmware/App/Controllers/BloodLeak.h (.../BloodLeak.h) (revision b2afbf7b9bb007d06c28a56cd4e61d3cd9bbe150) +++ firmware/App/Controllers/BloodLeak.h (.../BloodLeak.h) (revision 494fa9614f7ec4cb0f677763c499044336ea8214) @@ -41,35 +41,21 @@ NUM_OF_BLOOD_LEAK_STATUS ///< Number of blood leak detector status } BLOOD_LEAK_STATUS_T; -/// 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_STATES_T; - // ********** public function prototypes ********** void initBloodLeak( void ); -BOOL zeroBloodLeak( void ); -BOOL selfTestBloodLeak( void ); void execBloodLeak( void ); +void zeroBloodLeak( void ); BLOOD_LEAK_STATUS_T getBloodLeakStatus( void ); -BLOOD_LEAK_STATES_T getBloodLeakState( void ); +BOOL getBloodLeakSelfTestStatus( void ); BOOL testSetBloodLeakDataPublishIntervalOverride( U32 value ); BOOL testResetBloodLeakDataPublishIntervalOverride( void ); BOOL testSetBloodLeakStatusOverride( BLOOD_LEAK_STATUS_T status); BOOL testResetBloodLeakStatusOverride( void ); -BOOL testSetBloodLeakStateOverride( BLOOD_LEAK_STATES_T state); -BOOL testResetBloodLeakStateOverride( void ); - /**@}*/ #endif Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r6222c779385d5e3c3723eec889d75a900ff62070 -r494fa9614f7ec4cb0f677763c499044336ea8214 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 6222c779385d5e3c3723eec889d75a900ff62070) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 494fa9614f7ec4cb0f677763c499044336ea8214) @@ -17,6 +17,7 @@ #include "AirTrap.h" #include "BloodFlow.h" +#include "BloodLeak.h" #include "DGInterface.h" #include "DialInFlow.h" #include "DialOutFlow.h" @@ -37,9 +38,6 @@ #define PUMP_RUN_SELF_TEST_TIME_MS ( 15 * MS_PER_SECOND ) ///< Self-test time to run pumps in ms. #define PUMP_SELF_TEST_FLOW_RATE_ML_MIN 100 ///< Self-test pump flow rate in mL/min. -#define BLOOD_LEAK_SELF_TEST_SET 0x1 ///< Initiate blood leak self-test. -#define BLOOD_LEAK_NORMAL_OPERATION 0x0 ///< Return blood leak to normal operation. - #define BLOOD_PUMP_RUN_TIME_PRESSURE_SELF_TEST ( 5 * MS_PER_SECOND ) ///< Pressure self-test time to run blood pump in ms. #define ARTERIAL_PRESSURE_SELF_TEST_LOW_LIMIT_MMHG -50.0 ///< Arterial pressure low limit after running blood pump. @@ -110,7 +108,7 @@ 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 handleNoCartSelfTestHomeValvesAndPumpState( 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 handleNoCartSelfTestStoppedState( void ); static void handleWetSelfTestsStopRequest( void ); @@ -267,7 +265,7 @@ break; case NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE: - currentNoCartSelfTestsState = handleNoCartSelfTestLeakDetectorsState( &result ); + currentNoCartSelfTestsState = handleNoCartSelfTestLeakDetectorsState(); break; case NO_CART_SELF_TESTS_HOME_VALVES_AND_PUMPS_STATE: @@ -558,7 +556,7 @@ signalDialInPumpHardStop(); signalDialOutPumpHardStop(); - setFPGASensorTest( BLOOD_LEAK_SELF_TEST_SET ); + zeroBloodLeak(); state = NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE; } @@ -594,22 +592,16 @@ * The handleNoCartSelfTestLeakDetectorsState function verify leak detectors status. * @details Inputs: none * @details Outputs: none - * @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; - if ( TRUE == noFPGABloodLeakDetected() ) + if ( TRUE == getBloodLeakSelfTestStatus() ) { - setFPGASensorTest( BLOOD_LEAK_NORMAL_OPERATION ); state = NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE; } - else - { - *result = SELF_TEST_STATUS_FAILED; - } return state; } Index: firmware/App/Services/FPGA.c =================================================================== diff -u -re9cc9eadcf846737bbc4e900db22f4c2a06ad922 -r494fa9614f7ec4cb0f677763c499044336ea8214 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision e9cc9eadcf846737bbc4e900db22f4c2a06ad922) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision 494fa9614f7ec4cb0f677763c499044336ea8214) @@ -85,6 +85,9 @@ #define FPGA_BLOOD_LEAK_STATUS_MASK 0x1000 ///< Bit mask for blood leak detector. #define FPGA_BLOOD_LEAK_ZERO_STATE_MASK 0x2000 ///< Bit mask for blood leak detector zero. +#define FPGA_BLOOD_LEAK_ZERO_CMD 0x02 ///< Bit for blood leak detector zero command. +#define FPGA_BLOOD_LEAK_SELF_TEST_CMD 0x01 ///< Bit for blood leak detector self test command. + #define FPGA_ADA_INPUT_STATUS_MASK 0x0001 ///< Bit mask for arterial air bubble detector input status. #define FPGA_ADV_INPUT_STATUS_MASK 0x0002 ///< Bit mask for venous air bubble detector input status. @@ -1436,19 +1439,6 @@ /*********************************************************************//** * @brief - * The setFPGASensorTest function sets the sensor test output. - * @details Inputs: fpgaActuatorSetPoints - * @details Outputs: fpgaActuatorSetPoints - * @param sensorTest - * @return none - *************************************************************************/ -void setFPGASensorTest( U08 sensorTest ) -{ - fpgaActuatorSetPoints.fpgaSensorTest = sensorTest; -} - -/*********************************************************************//** - * @brief * The getDoorState function gets the current state of door switch. * @details Inputs: none * @details Outputs: none @@ -1540,13 +1530,52 @@ * @details Outputs: none * @return FPGABloodLeakZeroDetected *************************************************************************/ -//void setFPGABloodLeakZero( void ) -//{ - // TODO -//} +void setFPGABloodLeakZero( void ) +{ + fpgaActuatorSetPoints.fpgaSensorTest = FPGA_BLOOD_LEAK_ZERO_CMD; +} /*********************************************************************//** * @brief + * The clearFPGABloodLeakZero function clears the Blood Leak detector from + * zeroing mode via the FPGA. + * @details Inputs: fpgaSensorReadings + * @details Outputs: none + * @return none + *************************************************************************/ +void clearFPGABloodLeakZero( void ) +{ + fpgaActuatorSetPoints.fpgaSensorTest = 0x00; +} + +/*********************************************************************//** + * @brief + * The setFPGABloodLeakSelfTest function sets the Blood Leak detector into + * self-test mode via the FPGA. + * @details Inputs: fpgaSensorReadings + * @details Outputs: none + * @return FPGABloodLeakZeroDetected + *************************************************************************/ +void setFPGABloodLeakSelfTest( void ) +{ + fpgaActuatorSetPoints.fpgaSensorTest = FPGA_BLOOD_LEAK_SELF_TEST_CMD; +} + +/*********************************************************************//** + * @brief + * The clearFPGABloodLeakSelfTest function clears the Blood Leak detector from + * self-test mode via the FPGA. + * @details Inputs: fpgaSensorReadings + * @details Outputs: none + * @return none + *************************************************************************/ +void clearFPGABloodLeakSelfTest( void ) +{ + fpgaActuatorSetPoints.fpgaSensorTest = 0x00; +} + +/*********************************************************************//** + * @brief * The setValveDialyzerInletPosition function sets the position of VDi * in counts * @details Inputs: fpgaActuatorSetPoints Index: firmware/App/Services/FPGA.h =================================================================== diff -u -r6ebc1c6fd052021f95c55e81bdce3612e90efa71 -r494fa9614f7ec4cb0f677763c499044336ea8214 --- firmware/App/Services/FPGA.h (.../FPGA.h) (revision 6ebc1c6fd052021f95c55e81bdce3612e90efa71) +++ firmware/App/Services/FPGA.h (.../FPGA.h) (revision 494fa9614f7ec4cb0f677763c499044336ea8214) @@ -88,7 +88,10 @@ BOOL noFPGABloodLeakDetected( void ); BOOL FPGABloodLeakZeroDetected( void ); -//void setFPGABloodLeakZero( void ); TODO +void setFPGABloodLeakZero( void ); +void clearFPGABloodLeakZero( void ); +void setFPGABloodLeakSelfTest( void ); +void clearFPGABloodLeakSelfTest( void ); void setFPGAValveDialyzerInletPosition( S16 setPoint ); S16 getFPGAValveDialyzerInletPosition( void ); Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -rfd5bc887202bea10092302ad7c32370bae4daaa5 -r494fa9614f7ec4cb0f677763c499044336ea8214 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision fd5bc887202bea10092302ad7c32370bae4daaa5) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 494fa9614f7ec4cb0f677763c499044336ea8214) @@ -1459,8 +1459,8 @@ handleSetBloodLeakStatusOverrideRequest( message ); break; - case MSG_ID_HD_BLOOD_LEAK_STATE_OVERRIDE: - handleSetBloodLeakStateOverrideRequest( message ); + case MSG_ID_HD_BLOOD_LEAK_ZERO_REQUEST: + handleBloodLeakZeroRequest( message ); break; case MSG_ID_HD_SET_OP_MODE_REQUEST: Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rb2afbf7b9bb007d06c28a56cd4e61d3cd9bbe150 -r494fa9614f7ec4cb0f677763c499044336ea8214 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision b2afbf7b9bb007d06c28a56cd4e61d3cd9bbe150) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 494fa9614f7ec4cb0f677763c499044336ea8214) @@ -1438,16 +1438,16 @@ * be broadcasted and queues the msg for transmit on the appropriate CAN channel. * @details Inputs: none * @details Outputs: blood leak data msg constructed and queued - * @param blood leak data + * @param status blood leak status + * @param state blood leak state * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastBloodLeakData( BLOOD_LEAK_STATUS_T status, BLOOD_LEAK_STATES_T state ) +BOOL broadcastBloodLeakData( BLOOD_LEAK_STATUS_T status, U32 state ) { BOOL result; MESSAGE_T msg; U08 *payloadPtr = msg.payload; U32 leakStatus = (U32)status; - U32 leakState = (U32)state; // Create a message record blankMessage( &msg ); @@ -1456,7 +1456,7 @@ memcpy( payloadPtr, &leakStatus, sizeof( U32 ) ); payloadPtr += sizeof( U32 ); - memcpy( payloadPtr, &leakState, sizeof( U32 ) ); + memcpy( payloadPtr, &state, sizeof( U32 ) ); // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_BROADCAST, ACK_NOT_REQUIRED ); @@ -4327,30 +4327,22 @@ /*********************************************************************//** * @brief - * The handleSetBloodLeakStateOverrideRequest function handles a request to - * override the blood leak detector state. + * The handleBloodLeakZeroRequest function handles a request to + * zero the blood leak detector. * @details Inputs: none * @details Outputs: message handled * @param message : a pointer to the message to handle * @return none *************************************************************************/ -void handleSetBloodLeakStateOverrideRequest( MESSAGE_T *message ) +void handleBloodLeakZeroRequest( MESSAGE_T *message ) { - TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; BOOL result = FALSE; // Verify payload length - if ( sizeof( TEST_OVERRIDE_ARRAY_PAYLOAD_T ) == message->hdr.payloadLen ) + if ( 0 == message->hdr.payloadLen ) { - memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_ARRAY_PAYLOAD_T ) ); - if ( FALSE == payload.reset ) - { - result = testSetBloodLeakStateOverride( (BLOOD_LEAK_STATES_T)( payload.state.u32 ) ); - } - else - { - result = testResetBloodLeakStateOverride(); - } + result = TRUE; + zeroBloodLeak(); } // Respond to request Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rb2afbf7b9bb007d06c28a56cd4e61d3cd9bbe150 -r494fa9614f7ec4cb0f677763c499044336ea8214 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision b2afbf7b9bb007d06c28a56cd4e61d3cd9bbe150) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 494fa9614f7ec4cb0f677763c499044336ea8214) @@ -282,7 +282,7 @@ BOOL broadcastFluidLeakState( FLUID_LEAK_STATES_T state ); // MSG_ID_HD_BLOOD_LEAK_DATA -BOOL broadcastBloodLeakData( BLOOD_LEAK_STATUS_T status, BLOOD_LEAK_STATES_T state ); +BOOL broadcastBloodLeakData( BLOOD_LEAK_STATUS_T status, U32 state ); // MSG_ID_HD_PRIMING_STATUS_DATA BOOL broadcastPrimeData( PRIMING_DATA_PAYLOAD_T *primeDataPtr ); @@ -485,8 +485,8 @@ // MSG_ID_HD_BLOOD_LEAK_STATUS_OVERRIDE void handleSetBloodLeakStatusOverrideRequest( MESSAGE_T *message ); -// MSG_ID_HD_BLOOD_LEAK_STATE_OVERRIDE -void handleSetBloodLeakStateOverrideRequest( MESSAGE_T *message ); +// MSG_ID_HD_BLOOD_LEAK_ZERO_REQUEST +void handleBloodLeakZeroRequest( MESSAGE_T *message ); // MSG_ID_SUPER_CLEAR_ALARMS_CMD void handleTestSuperClearAlarmsRequest( MESSAGE_T *message );