Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -r2fea76e972a450a97c74b2a9f627095032a3b586 -r98eaa905f2487013d5e9af76bf064f872332c2fe --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 2fea76e972a450a97c74b2a9f627095032a3b586) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision 98eaa905f2487013d5e9af76bf064f872332c2fe) @@ -144,8 +144,6 @@ initPersistentAlarm( ALARM_ID_INLET_WATER_HIGH_CONDUCTIVITY, COND_SENSOR_PERSISTENCE_PERIOD, COND_SENSOR_PERSISTENCE_PERIOD ); initPersistentAlarm( ALARM_ID_INLET_WATER_LOW_CONDUCTIVITY, COND_SENSOR_PERSISTENCE_PERIOD, COND_SENSOR_PERSISTENCE_PERIOD ); initPersistentAlarm( ALARM_ID_RO_REJECTION_RATIO_OUT_OF_RANGE, RO_REJECTION_RATIO_PERSISTENCE_PERIOD, RO_REJECTION_RATIO_PERSISTENCE_PERIOD ); - initPersistentAlarm( ALARM_ID_POST_ACID_CONDUCTIVITY_OUT_OF_RANGE, POST_ACID_CONDUCTIVITY_PERSISTENCE_PERIOD, POST_ACID_CONDUCTIVITY_PERSISTENCE_PERIOD ); - initPersistentAlarm( ALARM_ID_POST_BICARB_CONDUCTIVITY_OUT_OF_RANGE, POST_ACID_CONDUCTIVITY_PERSISTENCE_PERIOD, POST_ACID_CONDUCTIVITY_PERSISTENCE_PERIOD ); } /*********************************************************************//** Index: firmware/App/Controllers/FluidLeak.c =================================================================== diff -u --- firmware/App/Controllers/FluidLeak.c (revision 0) +++ firmware/App/Controllers/FluidLeak.c (revision 98eaa905f2487013d5e9af76bf064f872332c2fe) @@ -0,0 +1,255 @@ +/************************************************************************** +* +* Copyright (c) 2019-2021 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file FluidLeak.c +* +* @author (last) Peman Montazemi +* @date (last) 09-Mar-2021 +* +* @author (original) Peman Montazemi +* @date (original) 09-Mar-2021 +* +***************************************************************************/ + +#include "AlarmMgmt.h" +#include "FluidLeak.h" +#include "FPGA.h" +//#include "ModeTreatmentParams.h" +#include "OperationModes.h" +#include "SystemCommMessages.h" +#include "TaskPriority.h" +#include "Timers.h" + +/** + * @addtogroup FluidLeak + * @{ + */ + +// ********** private definitions ********** + +#define FLUID_LEAK_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval (ms/task time) at which the fluid leak data is published on the CAN bus. + +// ********** private data ********** + +static U32 fluidLeakStatePublicationTimerCounter = 0; ///< Timer counter used to schedule fluid leak publication to CAN bus. + +/// Interval (in ms) at which to publish fluid leak data to CAN bus. +static OVERRIDE_U32_T fluidLeakStatePublishInterval = { FLUID_LEAK_PUB_INTERVAL, FLUID_LEAK_PUB_INTERVAL, 0, 0 }; +static OVERRIDE_U32_T fluidLeakState; ///< Detected fluid leak state for fluid leak detector. + +// ********** private function prototypes ********** + +static void publishFluidLeakState( void ); +static U32 getPublishFluidLeakStateInterval( void ); + +/*********************************************************************//** + * @brief + * The initFluidLeak function initializes the Fluid Leak module. + * @details Inputs: none + * @details Outputs: Fluid Leak module initialized. + * @return none + *************************************************************************/ +void initFluidLeak( void ) +{ + fluidLeakState.data = FLUID_LEAK_STATE_DRY; +} + +/*********************************************************************//** + * @brief + * The execFluidLeak function executes the fluid leak monitor. + * @details Inputs: FPGA fluid leak state GPIO pin state + * @details Outputs: fluidLeakState + * @return none + *************************************************************************/ +void execFluidLeak( void ) +{ + BOOL noFluidLeakDetected = noFPGAFluidLeakDetected(); + + // Get latest state reading + if ( TRUE == noFluidLeakDetected ) + { + fluidLeakState.data = FLUID_LEAK_STATE_DRY; + } + else + { + fluidLeakState.data = FLUID_LEAK_STATE_WET; + } + + // Check state reading and act upon + if ( FLUID_LEAK_STATE_WET == getFluidLeakState() ) + { + activateAlarmNoData( ALARM_ID_DG_FLUID_LEAK_DETECTED ); + } + + // Publish fluid leak state if due + publishFluidLeakState(); +} + +/*********************************************************************//** + * @brief + * The getFluidLeakState function gets the current reading for the fluid + * leak detector. + * @details Inputs: fluidLeakState + * @details Outputs: none + * @param none + * @return the current fluid leak state. + *************************************************************************/ +FLUID_LEAK_STATES_T getFluidLeakState( void ) +{ + FLUID_LEAK_STATES_T result = (FLUID_LEAK_STATES_T)fluidLeakState.data; + + if ( OVERRIDE_KEY == fluidLeakState.override ) + { + result = (FLUID_LEAK_STATES_T)fluidLeakState.ovData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getPublishFluidLeakStateInterval function gets the fluid leak state + * publication interval. + * @details Inputs: fluidLeakStatePublishInterval + * @details Outputs: none + * @return the current fluid leak state publication interval (in task intervals). + *************************************************************************/ +static U32 getPublishFluidLeakStateInterval( void ) +{ + U32 result = fluidLeakStatePublishInterval.data; + + if ( OVERRIDE_KEY == fluidLeakStatePublishInterval.override ) + { + result = fluidLeakStatePublishInterval.ovData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The publishFluidLeakState function publishes fluid leak state at the set interval. + * @details Inputs: fluidLeakState + * @details Outputs: if broadcast is due, send fluid leak state + * @return none + *************************************************************************/ +static void publishFluidLeakState( void ) +{ + // Publish fluid leak state on interval + if ( ++fluidLeakStatePublicationTimerCounter >= getPublishFluidLeakStateInterval() ) + { + FLUID_LEAK_STATES_T state = getFluidLeakState(); + + broadcastFluidLeakState( state ); + fluidLeakStatePublicationTimerCounter = 0; + } +} + + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testSetFluidLeakStatePublishIntervalOverride function overrides the + * fluid leak state publish interval. + * @details Inputs: none + * @details Outputs: fluidLeakStatePublishInterval + * @param value override fluid leak state publish interval with (in ms) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetFluidLeakStatePublishIntervalOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + U32 intvl = value / TASK_PRIORITY_INTERVAL; + + result = TRUE; + fluidLeakStatePublishInterval.ovData = intvl; + fluidLeakStatePublishInterval.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetFluidLeakStatePublishIntervalOverride function resets the override + * of the fluid leak state publish interval. + * @details Inputs: none + * @details Outputs: fluidLeakStatePublishInterval + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testResetFluidLeakStatePublishIntervalOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + fluidLeakStatePublishInterval.override = OVERRIDE_RESET; + fluidLeakStatePublishInterval.ovData = fluidLeakStatePublishInterval.ovInitData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSetFluidLeakStateOverride function overrides the state + * of the fluid leak detector. + * @details Inputs: none + * @details Outputs: fluidLeakState + * @param none + * @param state override fluid leak detector with this + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetFluidLeakStateOverride( FLUID_LEAK_STATES_T state ) +{ + BOOL result = FALSE; + + if ( ( state < NUM_OF_FLUID_LEAK_STATES ) ) + { + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + fluidLeakState.ovData = (U32)state; + fluidLeakState.override = OVERRIDE_KEY; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetFluidLeakStateOverride function resets the override of the + * fluid leak detector. + * @details Inputs: none + * @details Outputs: fluidLeakState + * @param none + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ +BOOL testResetFluidLeakStateOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + fluidLeakState.override = OVERRIDE_RESET; + fluidLeakState.ovData = fluidLeakState.ovInitData; + } + + return result; +} + +/**@}*/ Index: firmware/App/Controllers/FluidLeak.h =================================================================== diff -u --- firmware/App/Controllers/FluidLeak.h (revision 0) +++ firmware/App/Controllers/FluidLeak.h (revision 98eaa905f2487013d5e9af76bf064f872332c2fe) @@ -0,0 +1,56 @@ +/************************************************************************** +* +* Copyright (c) 2019-2021 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file FluidLeak.h +* +* @author (last) Peman Montazemi +* @date (last) 09-Mar-2021 +* +* @author (original) Peman Montazemi +* @date (original) 09-Mar-2021 +* +***************************************************************************/ + +#ifndef __FLUID_LEAK_H__ +#define __FLUID_LEAK_H__ + +#include "DGCommon.h" + +/** + * @defgroup FluidLeak FluidLeak + * @brief Fluid Leak detector monitor module. Monitors the + * fluid leak detector. + * + * @addtogroup FluidLeak + * @{ + */ + +// ********** public definitions ********** + +/// Enumeration of fluid leak detector states. +typedef enum FluidLeakDetectorStates +{ + FLUID_LEAK_STATE_WET = 0, ///< Fluid leak detector senses fluid + FLUID_LEAK_STATE_DRY, ///< Fluid leak detector does not sense any fluid + NUM_OF_FLUID_LEAK_STATES ///< Number of fluid leak detector states +} FLUID_LEAK_STATES_T; + +// ********** public function prototypes ********** + +void initFluidLeak( void ); +void execFluidLeak( void ); + +FLUID_LEAK_STATES_T getFluidLeakState( void ); + +BOOL testSetFluidLeakStatePublishIntervalOverride( U32 value ); +BOOL testResetFluidLeakStatePublishIntervalOverride( void ); +BOOL testSetFluidLeakStateOverride( FLUID_LEAK_STATES_T state ); +BOOL testResetFluidLeakStateOverride( void ); + +/**@}*/ + +#endif Index: firmware/App/Modes/ModeFill.c =================================================================== diff -u -r484b185f0cf4b2ea0ba9de331573952b1b5124b4 -r98eaa905f2487013d5e9af76bf064f872332c2fe --- firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 484b185f0cf4b2ea0ba9de331573952b1b5124b4) +++ firmware/App/Modes/ModeFill.c (.../ModeFill.c) (revision 98eaa905f2487013d5e9af76bf064f872332c2fe) @@ -203,7 +203,7 @@ handleDialysateMixing(); checkConcentrateConductivity(); - BOOL isDialysateProductionGood = ( !isAlarmActive( ALARM_ID_POST_ACID_CONDUCTIVITY_OUT_OF_RANGE ) && !isAlarmActive( ALARM_ID_POST_BICARB_CONDUCTIVITY_OUT_OF_RANGE ) ); + BOOL isDialysateProductionGood = ( !isAlarmActive( ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE ) && !isAlarmActive( ALARM_ID_BICARB_CONDUCTIVITY_OUT_OF_RANGE ) ); #ifdef DISABLE_DIALYSATE_CHECK isDialysateProductionGood = TRUE; @@ -237,7 +237,7 @@ totalROFlowRate += getMeasuredROFlowRate(); - BOOL isDialysateConductivityBad = ( isAlarmActive( ALARM_ID_POST_ACID_CONDUCTIVITY_OUT_OF_RANGE ) || isAlarmActive( ALARM_ID_POST_BICARB_CONDUCTIVITY_OUT_OF_RANGE ) ); + BOOL isDialysateConductivityBad = ( isAlarmActive( ALARM_ID_ACID_CONDUCTIVITY_OUT_OF_RANGE ) || isAlarmActive( ALARM_ID_BICARB_CONDUCTIVITY_OUT_OF_RANGE ) ); #ifdef DISABLE_DIALYSATE_CHECK isDialysateConductivityBad = FALSE; Index: firmware/App/Services/FPGA.c =================================================================== diff -u -rfeb93744f73bc0a3d58841bb02bd05c38357f35d -r98eaa905f2487013d5e9af76bf064f872332c2fe --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision feb93744f73bc0a3d58841bb02bd05c38357f35d) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision 98eaa905f2487013d5e9af76bf064f872332c2fe) @@ -8,8 +8,8 @@ * * @file FPGA.c * -* @author (last) Quang Nguyen -* @date (last) 18-Sep-2020 +* @author (last) Peman Montazemi +* @date (last) 09-Mar-2021 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -76,6 +76,8 @@ #define DRAIN_PUMP_DAC_SHIFT_BITS 4 ///< Drain pump DAC shift bits. +#define FPGA_FLUIDLEAK_STATE_MASK 0x0004 ///< Bit mask for fluid leak detector. + // FPGA header struct. #pragma pack(push,1) typedef struct @@ -166,7 +168,7 @@ U16 fpgaCP1HallSense; ///< Reg 388. Concentrate pump CP1 hall sensor pulse width. U16 fpgaCP2HallSense; ///< Reg 390. Concentrate pump CP2 hall sensor pulse width. - U08 fpgaGPIOReg; ///< Reg 392. FGPA GPIO register + U08 fpgaGPIO; ///< Reg 392. FGPA GPIO register U08 fpgaDummyByte2Addr; ///< Reg 393. Dummy byte address to maintain an even addressing scheme U16 fpgaADCTemp; ///< Reg 394. Internal FPGA die temperature ADC } DG_FPGA_SENSORS_T; @@ -1778,5 +1780,19 @@ return fpgaSensorReadings.fpgaADC2ErrorCnt; } -/**@}*/ +/*********************************************************************//** + * @brief + * The noFluidLeakDetected function returns TRUE if no fluid leak has been + * detected (dry) and FALSE if a fluid leak has been detected (wet). + * @details Inputs: fpgaSensorReadings + * @details Outputs: none + * @return noFluidLeakDetected + *************************************************************************/ +BOOL noFPGAFluidLeakDetected( void ) +{ + U16 noFluidLeakDetected = fpgaSensorReadings.fpgaGPIO & FPGA_FLUIDLEAK_STATE_MASK; + return ( 0 == noFluidLeakDetected ? FALSE : TRUE ); +} + +/**@}*/ Index: firmware/App/Services/FPGA.h =================================================================== diff -u -rfeb93744f73bc0a3d58841bb02bd05c38357f35d -r98eaa905f2487013d5e9af76bf064f872332c2fe --- firmware/App/Services/FPGA.h (.../FPGA.h) (revision feb93744f73bc0a3d58841bb02bd05c38357f35d) +++ firmware/App/Services/FPGA.h (.../FPGA.h) (revision 98eaa905f2487013d5e9af76bf064f872332c2fe) @@ -132,6 +132,8 @@ U08 getFPGAADC2ReadCount( void ); U08 getFPGAADC2ErrorCount( void ); +BOOL noFPGAFluidLeakDetected( void); + /**@}*/ #endif Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r6145c5d1a645646587fb077df3c61eef2354f744 -r98eaa905f2487013d5e9af76bf064f872332c2fe --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 6145c5d1a645646587fb077df3c61eef2354f744) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 98eaa905f2487013d5e9af76bf064f872332c2fe) @@ -1141,10 +1141,6 @@ handleTestDGAccelBroadcastIntervalOverrideRequest( message ); break; - case MSG_ID_DG_ACCEL_SET_CALIBRATION: - handleSetAccelCalibration( message ); - break; - case MSG_ID_DRAIN_PUMP_SET_DELTA_PRESSURE_OVERRIDE: handleSetDrainPumpDeltaPressureOverrideRequest( message ); break; @@ -1208,6 +1204,14 @@ handleTestUVReactorsHealthOverride( message ); break; + case MSG_ID_DG_FLUID_LEAK_SEND_INTERVAL_OVERRIDE: + handleSetFluidLeakBroadcastIntervalOverrideRequest( message ); + break; + + case MSG_ID_DG_FLUID_LEAK_STATE_DETECTOR_OVERRIDE: + handleSetFluidLeakStateDetectorOverrideRequest( message ); + break; + default: // TODO - unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r484b185f0cf4b2ea0ba9de331573952b1b5124b4 -r98eaa905f2487013d5e9af76bf064f872332c2fe --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 484b185f0cf4b2ea0ba9de331573952b1b5124b4) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 98eaa905f2487013d5e9af76bf064f872332c2fe) @@ -882,6 +882,36 @@ return result; } +/***********************************************************************//** + * @brief + * The broadcastFluidLeakState function constructs a DG fluid leak state msg to \n + * be broadcasted and queues the msg for transmit on the appropriate CAN channel. + * @details Inputs: none + * @details Outputs: fluid leak state msg constructed and queued + * @param state fluid leak state + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastFluidLeakState( FLUID_LEAK_STATES_T state ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + U32 leakState = (U32)state; + + // Create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_FLUID_LEAK_STATE; + msg.hdr.payloadLen = sizeof( U32 ); + + memcpy( payloadPtr, &leakState, 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_DG_BROADCAST, ACK_NOT_REQUIRED ); + + return result; +} + + /*********************************************************************//** * @brief * The sendCommandResponseMsg function constructs a command response to HD @@ -2095,6 +2125,70 @@ /*********************************************************************//** * @brief + * The handleSetFluidLeakBroadcastIntervalOverrideRequest function handles a + * request to override the fluid leak state broadcast interval. + * @details Inputs: none + * @details Outputs: message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleSetFluidLeakBroadcastIntervalOverrideRequest( MESSAGE_T *message ) +{ + TEST_OVERRIDE_PAYLOAD_T payload; + BOOL result = FALSE; + + // Verify payload length + if ( sizeof( TEST_OVERRIDE_PAYLOAD_T ) == message->hdr.payloadLen ) + { + memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_PAYLOAD_T ) ); + if ( FALSE == payload.reset ) + { + result = testSetFluidLeakStatePublishIntervalOverride( (U32)( payload.state.u32 ) ); + } + else + { + result = testResetFluidLeakStatePublishIntervalOverride(); + } + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** + * @brief + * The handleSetFluidLeakStateDetectorOverrideRequest function handles a request to + * override the fluid leak detector state. + * @details Inputs: none + * @details Outputs: message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleSetFluidLeakStateDetectorOverrideRequest( 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 ) + { + memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_ARRAY_PAYLOAD_T ) ); + if ( FALSE == payload.reset ) + { + result = testSetFluidLeakStateOverride( ( FLUID_LEAK_STATES_T)( payload.state.u32 ) ); + } + else + { + result = testResetFluidLeakStateOverride(); + } + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** + * @brief * The handleDGSoftwareResetRequest function handles a request to * perform a software reset on DG. * @details Inputs: none Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r6145c5d1a645646587fb077df3c61eef2354f744 -r98eaa905f2487013d5e9af76bf064f872332c2fe --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 6145c5d1a645646587fb077df3c61eef2354f744) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 98eaa905f2487013d5e9af76bf064f872332c2fe) @@ -21,6 +21,7 @@ #include "DGCommon.h" #include "DrainPump.h" #include "Fans.h" +#include "FluidLeak.h" #include "MsgQueues.h" #include "Reservoirs.h" #include "ROPump.h" @@ -99,6 +100,9 @@ // MSG_ID_DG_UV_REACTORS_DATA BOOL broadcastUVReactorsData( UV_REACTORS_DATA_T *uvReactorsData ); +// MSG_ID_DG_FLUID_LEAK_STATE +BOOL broadcastFluidLeakState( FLUID_LEAK_STATES_T state); + // MSG_ID_DG_COMMAND_RESPONSE void sendCommandResponseMsg( DG_CMD_RESPONSE_T *cmdResponsePtr ); @@ -224,9 +228,15 @@ // MSG_ID_DG_START_STOP_INLET_UV_REACTOR void handleStartStopUVReactors( MESSAGE_T *message ); -//MSG_ID_UV_REACTORS_DATA_PUBLISH_INTERVAL_OVERRIDE +// MSG_ID_UV_REACTORS_DATA_PUBLISH_INTERVAL_OVERRIDE void handleTestUVReactorsDataPublishIntervalOverride( MESSAGE_T *message ); +// MSG_ID_DG_FLUID_LEAK_SEND_INTERVAL_OVERRIDE +void handleSetFluidLeakBroadcastIntervalOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_HD_FLUID_LEAK_STATE_DETECTOR_OVERRIDE +void handleSetFluidLeakStateDetectorOverrideRequest( MESSAGE_T *message); + // MSG_ID_DG_SOFTWARE_RESET_REQUEST void handleDGSoftwareResetRequest( MESSAGE_T *message); Index: firmware/source/sys_main.c =================================================================== diff -u -r88f28230d288947ba84840b967e95b32e3deffaa -r98eaa905f2487013d5e9af76bf064f872332c2fe --- firmware/source/sys_main.c (.../sys_main.c) (revision 88f28230d288947ba84840b967e95b32e3deffaa) +++ firmware/source/sys_main.c (.../sys_main.c) (revision 98eaa905f2487013d5e9af76bf064f872332c2fe) @@ -69,6 +69,7 @@ #include "CPLD.h" #include "DrainPump.h" #include "Fans.h" +#include "FluidLeak.h" #include "FPGA.h" #include "Heaters.h" #include "InternalADC.h" @@ -188,6 +189,7 @@ initMsgQueues(); initSystemComm(); initReservoirs(); + initFluidLeak(); initOperationModes(); }