Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r611e805a6547ac922154e623a9d79adeae128e81 -ra504d6899e709d7432af9c055db1bd1fe340d032 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 611e805a6547ac922154e623a9d79adeae128e81) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision a504d6899e709d7432af9c055db1bd1fe340d032) @@ -18,9 +18,23 @@ #include // for memcpy() +#include "DrainPump.h" +#include "Heaters.h" +#include "LoadCell.h" #include "MsgQueues.h" +#include "ModeStandby.h" +#include "ModeRecirculate.h" +#include "OperationModes.h" +#include "Pressures.h" +#include "Reservoirs.h" +#include "ROPump.h" +#include "RTC.h" +#include "SystemComm.h" +#include "Utilities.h" +#include "Valves.h" #include "WatchdogMgmt.h" #include "SystemCommMessages.h" +#include "SafetyShutdown.h" #include "Utilities.h" #include "SystemComm.h" #include "RTC.h" @@ -61,6 +75,40 @@ typedef struct { + U32 setROPumpPressure; + F32 measROFlowRate; + F32 roPumpPWM; +} RO_PUMP_DATA_T; + +typedef struct +{ + U32 setDrainPumpSpeed; + U32 dacValue; +} DRAIN_PUMP_DATA_T; + +typedef struct +{ + F32 roPumpInletPressure; + F32 roPumpOutletPressure; + F32 drainPumpInletPressure; + F32 drainPumpOutletPressure; +} PRESSURES_DATA_T; + +typedef struct +{ + U32 activeReservoir; + U32 fillToVolumeMl; + U32 drainToVolumeMl; +} RESERVOIR_DATA_T; + +typedef struct +{ + U32 targetPrimaryHeaterTemp; + U32 targetTrimmerHeaterTemp; +} TARGET_TEMPS_PAYLOAD_T; + +typedef struct +{ U32 mainPrimayHeaterDC; U32 smallPrimaryHeaterDC; U32 trimmerHeaterDC; @@ -77,6 +125,7 @@ static U32 serializeMessage( MESSAGE_T msg, COMM_BUFFER_T buffer, BOOL ackReq ); static BOOL sendTestAckResponseMsg( MSG_ID_T msgID, BOOL ack ); +static BOOL sendAckResponseMsg( MSG_ID_T msgID, COMM_BUFFER_T buffer, BOOL ack ); /************************************************************************* * @brief serializeMessage @@ -191,8 +240,38 @@ return result; } +/************************************************************************* + * @brief sendTestAckResponseMsg + * The sendTestAckResponseMsg function constructs a simple response \n + * message for a handled test message and queues it for transmit on the \n + * appropriate UART channel. + * @details + * Inputs : none + * Outputs : response message constructed and queued for transmit. + * @param msgID : ID of handled message that we are responding to + * @param buffer : outgoing buffer that message should be queued in + * @param ack : TRUE if test message was handled successfully, FALSE if not + * @return TRUE if response message successfully queued for transmit, FALSE if not + *************************************************************************/ +static BOOL sendAckResponseMsg( MSG_ID_T msgID, COMM_BUFFER_T buffer, BOOL ack ) +{ + BOOL result; + MESSAGE_T msg; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = msgID; + msg.hdr.payloadLen = sizeof( U08 ); + msg.payload[ 0 ] = (U08)ack; + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + result = serializeMessage( msg, buffer, ACK_NOT_REQUIRED ); + + return result; +} + // *********************************************************************** -// ********************* MSG_ID_OFF_BUTTON_PRESS ************************* +// ***************** Message Sending Helper Functions ******************** // *********************************************************************** /************************************************************************* @@ -290,34 +369,30 @@ /************************************************************************* * @brief - * The broadcastTreatmentTime function constructs a treatment time msg to \n - * be broadcast and queues the msg for transmit on the appropriate CAN channel. + * The broadcastDGHDOperationMode function constructs a DG operation mode \n + * broadcast message and queues the msg for transmit on the appropriate CAN channel. * @details * Inputs : none - * Outputs : treatment time data msg constructed and queued - * @param secsTotTreatment : Total treatment time prescribed (in seconds). - * @param secsElapsed : Treatment time elapsed (in seconds). - * @param secsRemaining : Treatment time remaining (in seconds). + * Outputs : DG operation mode msg constructed and queued + * @param mode : current operation mode of the DG. + * @param subMode : current sub-mode of the current operation mode of the DG. * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastTreatmentTime( U32 secsTotTreatment, U32 secsElapsed, U32 secsRemaining ) +BOOL broadcastDGOperationMode( U32 mode, U32 subMode ) { BOOL result; MESSAGE_T msg; U08 *payloadPtr = msg.payload; - TREATMENT_TIME_DATA_T payload; // create a message record blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_TREATMENT_TIME; - msg.hdr.payloadLen = sizeof( TREATMENT_TIME_DATA_T ); + msg.hdr.msgID = MSG_ID_DG_OP_MODE; + msg.hdr.payloadLen = sizeof( U32 ) + sizeof( U32 ); - payload.treatmentTimePrescribedinSec = secsTotTreatment; - payload.treatmentTimeElapsedinSec = secsElapsed; - payload.treatmentTimeRemaininginSec = secsRemaining; + memcpy( payloadPtr, &mode, sizeof( U32 ) ); + payloadPtr += sizeof( U32 ); + memcpy( payloadPtr, &subMode, sizeof( U32 ) ); - memcpy( payloadPtr, &payload, sizeof( TREATMENT_TIME_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 ); @@ -328,7 +403,7 @@ * @brief * The broadcastLoadCellData function sends out load cell data. * @details - * Inputs : load cell data + * Inputs : none * Outputs : load cell data msg constructed and queued * @param loadCellA1 : load cell A 1 data in grams. * @param loadCellA2 : load cell A 2 data in grams. @@ -363,6 +438,35 @@ /************************************************************************* * @brief + * The broadcastValvesStates function sends out DG valves states. + * @details + * Inputs : none + * Outputs : Valves states msg constructed and queued + * @param valvesStates : valves states + * refer to setFPGAValveStates function in FPGA.c for details + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastValvesStates( U16 valvesStates ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_VALVES_STATES; + msg.hdr.payloadLen = sizeof( U16 ); + + memcpy( payloadPtr, &valvesStates, sizeof( U16 ) ); + + // 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 broadcastHeatersData function sends out DG heaters data * @details * Inputs : heaters data @@ -375,20 +479,55 @@ BOOL broadcastHeatersData ( U32 mainPrimaryDC, U32 smallPrimaryDC, U32 trimmerDC ) { BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + HEATERS_DATA_T payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_HEATERS_DATA; + msg.hdr.payloadLen = sizeof( HEATERS_DATA_T ); + + payload.mainPrimayHeaterDC = mainPrimaryDC; + payload.smallPrimaryHeaterDC = smallPrimaryDC; + payload.trimmerHeaterDC = trimmerDC; + + memcpy( payloadPtr, &payload, sizeof( HEATERS_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; +} + +/************************************************************************* + * @brief + * The broadcastROPumpData function sends out RO pump data. + * @details + * Inputs : none + * Outputs : RO pump data msg constructed and queued + * @param tgtPressure : target pressure for RO pump in PSI. + * @param measFlow : measure RO flow rate in LPM. + * @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 result; MESSAGE_T msg; U08 *payloadPtr = msg.payload; - HEATERS_DATA_T payload; + RO_PUMP_DATA_T payload; // create a message record blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_HEATERS_DATA; - msg.hdr.payloadLen = sizeof( HEATERS_DATA_T ); + msg.hdr.msgID = MSG_ID_RO_PUMP_DATA; + msg.hdr.payloadLen = sizeof( RO_PUMP_DATA_T ); - payload.mainPrimayHeaterDC = mainPrimaryDC; - payload.smallPrimaryHeaterDC = smallPrimaryDC; - payload.trimmerHeaterDC = trimmerDC; + payload.setROPumpPressure = tgtPressure; + payload.measROFlowRate = measFlow; + payload.roPumpPWM = setPWM; - memcpy( payloadPtr, &payload, sizeof( HEATERS_DATA_T ) ); + memcpy( payloadPtr, &payload, sizeof( RO_PUMP_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 ); @@ -398,6 +537,111 @@ /************************************************************************* * @brief + * The broadcastDrainPumpData function sends out RO pump data. + * @details + * Inputs : none + * Outputs : Drain pump data msg constructed and queued + * @param tgtSpeed : target speed for drain pump in RPM. + * @param dac : set DAC value. + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastDrainPumpData( U32 tgtSpeed, U32 dac ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + DRAIN_PUMP_DATA_T payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DRAIN_PUMP_DATA; + msg.hdr.payloadLen = sizeof( DRAIN_PUMP_DATA_T ); + + payload.setDrainPumpSpeed = tgtSpeed; + payload.dacValue = dac; + + memcpy( payloadPtr, &payload, sizeof( DRAIN_PUMP_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; +} + +/************************************************************************* + * @brief + * The broadcastPressureSensorsData function sends out DG pressure data. + * @details + * Inputs : none + * Outputs : Pressure data msg constructed and queued + * @param measROIn : measured RO pump inlet pressure in PSI. + * @param measROOut : measured RO pump outlet pressure in PSI. + * @param measDrainIn : measured Drain pump inlet pressure in PSI. + * @param measDrainOut : measured Drain pump outlet pressure in PSI. + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastPressureSensorsData( F32 measROIn, F32 measROOut, F32 measDrainIn, F32 measDrainOut ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + PRESSURES_DATA_T payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_PRESSURES_DATA; + msg.hdr.payloadLen = sizeof( PRESSURES_DATA_T ); + + payload.roPumpInletPressure = measROIn; + payload.roPumpOutletPressure = measROOut; + payload.drainPumpInletPressure = measDrainIn; + payload.drainPumpOutletPressure = measDrainOut; + + memcpy( payloadPtr, &payload, sizeof( PRESSURES_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; +} + +/************************************************************************* + * @brief + * The broadcastReservoirData function broadcasts the DG reservoir data. + * @details + * Inputs : none + * Outputs : Reservoir data msg constructed and queued + * @param resID : ID of currently active reservoir. + * @param fillToVol : Current target fill to volume for inactive reservoir. + * @param drainToVol : Current target drain to volume for inactive reservoir. + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastReservoirData( U32 resID, U32 fillToVol, U32 drainToVol ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + RESERVOIR_DATA_T payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_RESERVOIR_DATA; + msg.hdr.payloadLen = sizeof( RESERVOIR_DATA_T ); + + payload.activeReservoir = resID; + payload.fillToVolumeMl = fillToVol; + payload.drainToVolumeMl = drainToVol; + + memcpy( payloadPtr, &payload, sizeof( RESERVOIR_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; +} + +/************************************************************************* + * @brief * The broadcastTemperatureSensorsData function sends out DG temperature * sensors data * Inputs : heaters data @@ -424,7 +668,248 @@ return result; } +// *********************************************************************** +// **************** Message Handling Helper Functions ******************** +// *********************************************************************** + /************************************************************************* + * @brief + * The handlePowerOffWarning function handles a power off warning message \n + * from the HD. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handlePowerOffWarning( MESSAGE_T *message ) +{ + // TODO - signal modules that require a warning +} + +/************************************************************************* + * @brief + * The handleSetDialysateTemperatureCmd function handles a dialysate temperature \n + * set points message from the HD. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleSetDialysateTemperatureCmd( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(TARGET_TEMPS_PAYLOAD_T) ) + { + TARGET_TEMPS_PAYLOAD_T payload; + + result = TRUE; + memcpy( &payload, message->payload, sizeof(TARGET_TEMPS_PAYLOAD_T) ); + setPrimaryHeaterTargetTemperature( (F32)payload.targetPrimaryHeaterTemp ); + setTrimmerHeaterTargetTemperature( (F32)payload.targetTrimmerHeaterTemp ); + } + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); +} + +/************************************************************************* + * @brief + * The handleFWVersionCmd function handles a FW version request message. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleFWVersionCmd( MESSAGE_T *message ) +{ + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + U08 major = (U08)DG_VERSION_MAJOR; + U08 minor = (U08)DG_VERSION_MINOR; + U08 micro = (U08)DG_VERSION_MICRO; + U16 build = (U16)DG_VERSION_BUILD; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_VERSION; + msg.hdr.payloadLen = sizeof( U08 ) + sizeof( U08 ) + sizeof( U08 ) + sizeof( U16 ); + + memcpy( payloadPtr, &major, sizeof( U08 ) ); + payloadPtr += sizeof( U08 ); + memcpy( payloadPtr, &minor, sizeof( U08 ) ); + payloadPtr += sizeof( U08 ); + memcpy( payloadPtr, µ, sizeof( U08 ) ); + payloadPtr += sizeof( U08 ); + memcpy( payloadPtr, &build, sizeof( U16 ) ); + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + serializeMessage( msg, COMM_BUFFER_OUT_CAN_DG_BROADCAST, ACK_NOT_REQUIRED ); +} + +/************************************************************************* + * @brief + * The handleSwitchReservoirCmd function handles a switch reservoirs command \n + * from the HD. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleSwitchReservoirCmd( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(RESERVOIR_ID_T) ) + { + RESERVOIR_ID_T reservoirID; + + result = TRUE; + memcpy( &reservoirID, message->payload, sizeof(RESERVOIR_ID_T) ); + setActiveReservoirCmd( reservoirID ); + } + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); +} + +/************************************************************************* + * @brief + * The handleFillCmd function handles a fill command from the HD. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleFillCmd( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(U32) ) + { + U32 fillToVolumeMl; + + result = TRUE; + memcpy( &fillToVolumeMl, message->payload, sizeof(U32) ); + startFillCmd( fillToVolumeMl ); + } + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); +} + +/************************************************************************* + * @brief + * The handleDrainCmd function handles a drain command from the HD. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleDrainCmd( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(U32) ) + { + U32 drainToVolMl; + + result = TRUE; + memcpy( &drainToVolMl, message->payload, sizeof(U32) ); + + startDrainCmd( drainToVolMl ); + } + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); +} + +/************************************************************************* + * @brief + * The handleStartStopTreatmentMsg function handles a treatment start/stop \n + * message from the HD. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleStartStopTreatmentMsg( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(U32) ) + { + BOOL startingTreatment; + + memcpy( &startingTreatment, message->payload, sizeof(U32) ); + + if ( DG_MODE_STAN == getCurrentOperationMode() && TRUE == startingTreatment ) + { + result = requestDGStart(); + } + else if ( DG_MODE_CIRC == getCurrentOperationMode() && FALSE == startingTreatment ) + { + result = requestDGStop(); + } + } + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); +} + +/************************************************************************* + * @brief + * The handleStartStopTrimmerHeaterCmd function handles a trimmer heater start/stop \n + * command message from the HD. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleStartStopTrimmerHeaterCmd( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(U32) ) + { + BOOL startingHeater; + + memcpy( &startingHeater, message->payload, sizeof(U32) ); + + if ( TRUE == startingHeater ) + { + result = startTrimmerHeaterCmd(); + } + else + { + result = stopTrimmerHeaterCmd(); + } + } + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); +} + +/************************************************************************* + * @brief + * The handleSampleWaterCmd function handles a sample water command from the HD. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleSampleWaterCmd( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == 0 ) + { + if ( DG_MODE_STAN == getCurrentOperationMode() ) + { + result = requestWaterSample(); + } + } + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_DG_2_HD, result ); +} + +/************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ @@ -522,32 +1007,6 @@ } /************************************************************************* - * @brief - * The handleTestDGMessageRequest function handles a request to add a \n - * DG message to the received message queue. - * @details - * Inputs : none - * Outputs : message handled - * @param message : a pointer to the message to handle - * @return none - *************************************************************************/ -void handleTestDGMessageRequest( MESSAGE_T *message ) -{ - MESSAGE_WRAPPER_T dgMessage; - U32 msgLen = (U32)(message->hdr.payloadLen); - U08 *msgBytes = (U08*)(&(dgMessage)); - BOOL result; - - memcpy( msgBytes, message->payload, msgLen ); - - // add HD message to received message queue - result = addToMsgQueue( MSG_Q_IN, &dgMessage ); - - // respond to request - sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); -} - -/************************************************************************* * @brief handleTestWatchdogCheckInStateOverrideRequest * The handleTestWatchdogCheckInStateOverrideRequest function handles a \n * request to override the check-in status of a given task. @@ -572,6 +1031,8 @@ DATA_ARRAY_OVERRIDE_HANDLER_FUNC_U32( BOOL, handleTestAlarmStateOverrideRequest, testSetAlarmStateOverride, testResetAlarmStateOverride ) /************************************************************************* +<<<<<<< HEAD +======= * @brief * The handleTestLoadCellOverrideRequest function handles a request to \n * override the value read from the given load cell. @@ -651,6 +1112,164 @@ /************************************************************************* * @brief + * The handleTestLoadCellDataBroadcastIntervalOverrideRequest function handles \n + * a request to override the broadcast interval for load cell data. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( U32, handleTestLoadCellDataBroadcastIntervalOverrideRequest, testSetLoadCellDataPublishIntervalOverride, testResetLoadCellDataPublishIntervalOverride ) + +/************************************************************************* + * @brief + * The handleTestPressureSensorOverrideRequest function handles a request to \n + * override the value read from the given pressure sensor. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_ARRAY_OVERRIDE_HANDLER_FUNC_F32( BOOL, handleTestPressureSensorOverrideRequest, testSetDGPressureSensorOverride, testResetDGPressureSensorOverride ) + +/************************************************************************* + * @brief + * The handleTestPressureDataBroadcastIntervalOverrideRequest function handles \n + * a request to override the broadcast interval for load cell data. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( U32, handleTestPressureDataBroadcastIntervalOverrideRequest, testSetPressuresDataPublishIntervalOverride, testResetPressuresDataPublishIntervalOverride ) + +/************************************************************************* + * @brief + * The handleTestROPumpSetPointOverrideRequest function handles a request to \n + * override the RO pump pressure set point (in PSI). + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( U32, handleTestROPumpSetPointOverrideRequest, testSetTargetROPumpPressureOverride, testResetTargetROPumpPressureOverride ) + +/************************************************************************* + * @brief + * The handleTestROMeasuredFlowOverrideRequest function handles a request to \n + * override the RO flow rate. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_F32( F32, handleTestROMeasuredFlowOverrideRequest, testSetMeasuredROFlowRateOverride, testResetMeasuredROFlowRateOverride ) + +/************************************************************************* + * @brief + * The handleTestROPumpDataBroadcastIntervalOverrideRequest function handles \n + * a request to override the broadcast interval for RO pump data. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( U32, handleTestROPumpDataBroadcastIntervalOverrideRequest, testSetROPumpDataPublishIntervalOverride, testResetROPumpDataPublishIntervalOverride ) + +/************************************************************************* + * @brief + * The handleTestDrainPumpSetPointOverrideRequest function handles a request to \n + * override the drain pump speed set point (in RPM). + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( BOOL, handleTestDrainPumpSetPointOverrideRequest, testSetTargetDrainPumpSpeedOverride, testResetTargetDrainPumpSpeedOverride ) + +/************************************************************************* + * @brief + * The handleTestDrainPumpDataBroadcastIntervalOverrideRequest function handles \n + * a request to override the broadcast interval for drain pump data. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( U32, handleTestDrainPumpDataBroadcastIntervalOverrideRequest, testSetDrainPumpDataPublishIntervalOverride, testResetDrainPumpDataPublishIntervalOverride ) + +/************************************************************************* + * @brief + * The handleTestValveStateOverrideRequest function handles a request to \n + * override the state value read from the given valve. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_ARRAY_OVERRIDE_HANDLER_FUNC_U32( BOOL, handleTestValveStateOverrideRequest, testSetValveStateOverride, testResetValveStateOverride ) + +/************************************************************************* + * @brief + * The handleTestValvesStatesPublishIntervalOverrideRequest function handles \n + * a request to override the publish interval of valves states from the given valve. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( BOOL, handleTestValvesStatesPublishIntervalOverrideRequest, testSetValvesStatesPublishIntervalOverride, testResetValvesStatesPublishIntervalOverride ) + +/************************************************************************* + * @brief + * The handleTestDGSafetyShutdownOverrideRequest function handles a \n + * request to override the safety shutdown signal. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( U32, handleTestDGSafetyShutdownOverrideRequest, testSetSafetyShutdownOverride, testResetSafetyShutdownOverride ) + +#ifdef CAN_TEST +void broadcastCANTest1LargeFrequentMessage() +{ + static U16 seqNo = 0; + MESSAGE_T msg; + U32 i; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = 99; + msg.hdr.payloadLen = 96; + + for ( i = 0; i < 12; i++ ) + { + memcpy(&msg.payload[i*8], &seqNo, 2); + seqNo++; + } + memcpy(&msg.payload[94], &seqNo, 2); + seqNo++; + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + serializeMessage( msg, COMM_BUFFER_OUT_CAN_DG_BROADCAST, ACK_NOT_REQUIRED ); +} + +#endif + +/************************************************************************* + * @brief * The handleStartStopPrimaryHeater function handles a request start or * stop the primary heater * @details