Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r54f45c387430e440ab4607451fc84dea61f273f1 -rab304e2ca6e3e40ed8cb12650e9855ae0b9649d8 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 54f45c387430e440ab4607451fc84dea61f273f1) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision ab304e2ca6e3e40ed8cb12650e9855ae0b9649d8) @@ -40,6 +40,7 @@ #include "Utilities.h" #include "Valves.h" #include "WatchdogMgmt.h" +#include "ModeHeatDisinfect.h" /** * @addtogroup SystemCommMessages @@ -54,7 +55,19 @@ #ifdef DEBUG_ENABLED #define DEBUG_EVENT_MAX_TEXT_LEN 40 #endif + +#pragma pack(push,1) + +/// Heat disinfect data +typedef struct +{ + U32 internalState; ///< Internal state of heat disinfect state machine + F32 elapsedTimeMins; ///< Heat disinfect elapsed time in minutes + U32 currentCycle; ///< Current cycle of the heat disinfect +} DG_HEAT_DISINFECT_DATA_T; +#pragma pack(pop) + // ********** private data ********** static BOOL testerLoggedIn = FALSE; ///< Flag indicates whether tester logged in or not. @@ -497,7 +510,7 @@ * @param setPWM set PWM duty cycle in % * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastROPumpData( U32 tgtPressure, F32 measFlow, F32 setPWM ) +BOOL broadcastROPumpData( F32 tgtPressure, F32 measFlow, F32 setPWM, U32 pumpState ) { BOOL result; MESSAGE_T msg; @@ -509,9 +522,10 @@ msg.hdr.msgID = MSG_ID_RO_PUMP_DATA; msg.hdr.payloadLen = sizeof( RO_PUMP_DATA_T ); - payload.setROPumpPressure = tgtPressure; + payload.roPumpTgtPressure = tgtPressure; payload.measROFlowRate = measFlow; - payload.roPumpPWM = setPWM; + payload.roPumpPWM = setPWM; + payload.roPumpState = pumpState; memcpy( payloadPtr, &payload, sizeof( RO_PUMP_DATA_T ) ); @@ -531,7 +545,7 @@ * @param dac set DAC value * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastDrainPumpData( U32 tgtSpeed, U32 dac ) +BOOL broadcastDrainPumpData( U32 tgtSpeed, U32 dac, F32 deltaP, U32 drainPumpState ) { BOOL result; MESSAGE_T msg; @@ -544,7 +558,9 @@ msg.hdr.payloadLen = sizeof( DRAIN_PUMP_DATA_T ); payload.setDrainPumpSpeed = tgtSpeed; - payload.dacValue = dac; + payload.dacValue = dac; + payload.deltaPressure = deltaP; + payload.drainPState = drainPumpState; memcpy( payloadPtr, &payload, sizeof( DRAIN_PUMP_DATA_T ) ); @@ -653,6 +669,41 @@ result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DG_BROADCAST, ACK_NOT_REQUIRED ); return result; +} + +/************************************************************************* + * @brief + * The broadcastHeatDisinfectData function sends out DG heat disinfection + * data + * Inputs : DG heat disinfect data + * Outputs : DG heat disinfect data msg constructed and queued + * @param internalState : The state of the internal state machine of the mode + * @param minutesElapsed: Minutes elapsed since the start of heat disinfection + * @param currentCycle: Current cycle count of DG heat disinfection + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastHeatDisinfectData( U32 internalState, F32 minutesElapsed, U32 currentCycle ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + DG_HEAT_DISINFECT_DATA_T payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_HEAT_DISINFECT_DATA; + msg.hdr.payloadLen = sizeof( DG_HEAT_DISINFECT_DATA_T ); + + payload.internalState = internalState; + payload.elapsedTimeMins = minutesElapsed; + payload.currentCycle = currentCycle; + + memcpy( payloadPtr, &payload, sizeof( DG_HEAT_DISINFECT_DATA_T ) ); + + // 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; } /*********************************************************************//** @@ -1007,6 +1058,66 @@ /************************************************************************* + * @brief + * The handleStartStopDGHeatDisinfect function handles a request start or + * stop DG heat disifect + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return result + *************************************************************************/ +BOOL handleStartStopDGHeatDisinfect( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(U32) ) + { + BOOL startingDGHeatDisinfect; + + memcpy( &startingDGHeatDisinfect, message->payload, sizeof(U32) ); + + if ( TRUE == startingDGHeatDisinfect ) + { + startDGHeatDisinfect(); + result = TRUE; + } + else + { + stopDGHeatDisinfect(); + result = TRUE; + } + } + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); + + return result; +} + +/************************************************************************* + * @brief + * The handleSetROPumpPWM function handles the start of the RO pump with a\n + * PWM. The run is open loop + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return result + *************************************************************************/ +BOOL handleSetROPumpPWM( MESSAGE_T * message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(U32) ) + { + U32 roPumpPWM; + memcpy( &roPumpPWM, message->payload, sizeof(U32) ); + result = setROPumpTargetPWM( roPumpPWM ); + } + + return result; +} + +/************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ @@ -1425,7 +1536,7 @@ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } -/*********************************************************************//** +/*********************************************************************//** * @brief * The handleTestROPumpSetPointOverrideRequest function handles a request to * override the RO pump pressure set point (in PSI). @@ -1656,16 +1767,99 @@ sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); } -/*********************************************************************//** - * @brief - * The handleTestDGSafetyShutdownOverrideRequest function handles a - * request to override the safety shutdown signal. - * @details - * Inputs : none - * Outputs : message handled - * @param message a pointer to the message to handle - * @return none - *************************************************************************/ +/************************************************************************* + * @brief + * The handleSetDrainPumpDeltaPressure function handles a \n + * request to override the delta pressure for the drain pump + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( U32, handleSetDrainPumpDeltaPressureOverrideRequest, \ + testSetTargetDrainPumpDeltaPressureOverride, testResetTargetDrainPumpDeltaPressureOverride ) + +/************************************************************************* + * @brief + * The handleSetHeatDisinfectRecircStateDurationOverrideRequest function handles a \n + * request to override the heat disinfection recirculation state duration in minutes + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( F32, handleSetHeatDisinfectRecircStateDurationOverrideRequest, \ + testSetHeatDisinfectRecircDurationOverride, testResetHeatDisinfectRecircDurationOverride ) + +/************************************************************************* + * @brief + * The handleSetHeatDisinfectRSVR1ToRSVR2StateDurationOverrideRequest \n + * function handles a request to override the heat disinfection reservoir 1 \n + * to reservoir 2 state duration in minutes + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( F32, handleSetHeatDisinfectRSVR1ToRSVR2StateDurationOverrideRequest, \ + testSetHeatDisinfectR1ToR2DurationOverride, testResetHeatDisinfectR1ToR2DurationOverride ) + +/************************************************************************* + * @brief + * The handleSetHeatDisinfectRSVR2ToRSVR1StateDurationOverrideRequest \n + * function handles a request to override the heat disinfection reservoir 2 \n + * to reservoir 1 state duration in minutes + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( F32, handleSetHeatDisinfectRSVR2ToRSVR1StateDurationOverrideRequest, \ + testSetHeatDisinfectionR2ToR1DurationOverride, testResetHeatDisinfectionR2ToR1DurationOverride ) + +/************************************************************************* + * @brief + * The handleSetHeatDisinfectNoOfCyclesStateDurationOverrideRequest \n + * function handles a request to override the heat disinfection no of \n + * cycles to run request + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( U32, handleSetHeatDisinfectNoOfCyclesStateDurationOverrideRequest, \ + testSetHeatDisinfectNoOfCyclesOverride, testResetHeatDisinfectNoOfCyclesOverride ) + + +/************************************************************************* + * @brief + * The handleSetHeatDisinfectionPublishDataIntervalOverrideRequest \n + * function handles a request to override the heat disinfection data \n + * publish interval + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( U32, handleSetHeatDisinfectionPublishDataIntervalOverrideRequest, \ + testSetHeatDisinfectDataPublishIntervalOverride, testResetHeatDisinfectDataPublishIntervalOverride ) + +/*********************************************************************//** + * @brief + * The handleTestDGSafetyShutdownOverrideRequest function handles a + * request to override the safety shutdown signal. + * @details + * Inputs : none + * Outputs : message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ void handleTestDGSafetyShutdownOverrideRequest( MESSAGE_T *message ) { TEST_OVERRIDE_PAYLOAD_T payload;