Index: firmware/App/Controllers/FluidLeak.c =================================================================== diff -u -r136fcc50a87793eeb55b20031f3d12b24fa16d81 -rad3acf79a6b0fa54234cc3b70b26600790d61500 --- firmware/App/Controllers/FluidLeak.c (.../FluidLeak.c) (revision 136fcc50a87793eeb55b20031f3d12b24fa16d81) +++ firmware/App/Controllers/FluidLeak.c (.../FluidLeak.c) (revision ad3acf79a6b0fa54234cc3b70b26600790d61500) @@ -15,13 +15,12 @@ * ***************************************************************************/ -#include "FluidLeak.h" #include "AlarmMgmt.h" +#include "FluidLeak.h" #include "FPGA.h" #include "ModeTreatmentParams.h" #include "OperationModes.h" #include "SystemCommMessages.h" -#include "TaskGeneral.h" #include "TaskPriority.h" #include "Timers.h" @@ -71,17 +70,21 @@ BOOL state; // Get latest state readings - getFPGAFluidLeakState( &state ); + state = getFPGAFluidLeakState(); + if ( TRUE == state ) + { + fluidLeakState.data = FLUID_LEAK_STATE_DRY; + } + else + { + fluidLeakState.data = FLUID_LEAK_STATE_WET; + } // Check state readings and act upon if ( FLUID_LEAK_STATE_WET == getFluidLeakState() ) { activateAlarmNoData( ALARM_ID_HD_FLUID_LEAK_DETECTED ); } - else - { - // Do nothing - } // Publish fluid leak state if due publishFluidLeakState(); @@ -98,12 +101,11 @@ *************************************************************************/ FLUID_LEAK_STATES_T getFluidLeakState( void ) { - FLUID_LEAK_STATES_T result = FLUID_LEAK_STATE_DRY; + FLUID_LEAK_STATES_T result = (FLUID_LEAK_STATES_T)fluidLeakState.data; - result = (FLUID_LEAK_STATES_T)fluidLeakState.data; if ( OVERRIDE_KEY == fluidLeakState.override ) { - result = (AIR_TRAP_LEVELS_T)fluidLeakState.ovData; + result = (FLUID_LEAK_STATES_T)fluidLeakState.ovData; } return result; @@ -169,7 +171,7 @@ if ( TRUE == isTestingActivated() ) { - U32 intvl = value / TASK_GENERAL_INTERVAL; + U32 intvl = value / TASK_PRIORITY_INTERVAL; result = TRUE; fluidLeakStatePublishInterval.ovData = intvl; Index: firmware/App/Services/FPGA.c =================================================================== diff -u -rf9faa852e6768e386171a1ca3b8337f88cdc3e82 -rad3acf79a6b0fa54234cc3b70b26600790d61500 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision f9faa852e6768e386171a1ca3b8337f88cdc3e82) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision ad3acf79a6b0fa54234cc3b70b26600790d61500) @@ -1409,12 +1409,12 @@ * @details Outputs: none * @return none *************************************************************************/ -void getFPGAFluidLeakState( BOOL *fluidLeak ) +BOOL getFPGAFluidLeakState( void ) { U16 fpgaGPIO = fpgaSensorReadings.fpgaGPIO; U16 state = fpgaGPIO & FPGA_FLUIDLEAK_STATE_MASK; - *fluidLeak = ( 0 == state ? FALSE : TRUE ); + return ( 0 == state ? FALSE : TRUE ); } /*********************************************************************//** Index: firmware/App/Services/FPGA.h =================================================================== diff -u -rf9faa852e6768e386171a1ca3b8337f88cdc3e82 -rad3acf79a6b0fa54234cc3b70b26600790d61500 --- firmware/App/Services/FPGA.h (.../FPGA.h) (revision f9faa852e6768e386171a1ca3b8337f88cdc3e82) +++ firmware/App/Services/FPGA.h (.../FPGA.h) (revision ad3acf79a6b0fa54234cc3b70b26600790d61500) @@ -75,7 +75,7 @@ void setFPGAValvesControlMode( U16 bits ); U16 getFPGAValvesStatus( void ); -void getFPGAFluidLeakState( BOOL *fluidLeak ); +BOOL getFPGAFluidLeakState( void ); void setFPGAValveDialyzerInletPosition( S16 setPoint ); S16 getFPGAValveDialyzerInletPosition( void ); Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r5e12061a34634f5282cb370fada17d1ab6717c4c -rad3acf79a6b0fa54234cc3b70b26600790d61500 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 5e12061a34634f5282cb370fada17d1ab6717c4c) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision ad3acf79a6b0fa54234cc3b70b26600790d61500) @@ -1275,13 +1275,14 @@ BOOL result; MESSAGE_T msg; U08 *payloadPtr = msg.payload; + U32 leakState = (U32)state; // Create a message record blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_HD_AIR_TRAP_DATA; - msg.hdr.payloadLen = sizeof( U32 ) + sizeof( U32 ); + msg.hdr.msgID = MSG_ID_HD_FLUID_LEAK_STATE; + msg.hdr.payloadLen = sizeof( U32 ); - memcpy( payloadPtr, &state, 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_HD_BROADCAST, ACK_NOT_REQUIRED ); @@ -3956,6 +3957,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 handleHDSoftwareResetRequest function handles a request to reset the * HD firmware processor. * @details Inputs: none