Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r5a61bccd959265c00e5276ba23391198ca82b6dd -r5ff39fd6948ae3656b4035c85325bd8fca0a37f3 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 5a61bccd959265c00e5276ba23391198ca82b6dd) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 5ff39fd6948ae3656b4035c85325bd8fca0a37f3) @@ -82,6 +82,13 @@ F32 drainPumpOutletPressure; } PRESSURES_DATA_T; +typedef struct +{ + U32 activeReservoir; + U32 fillToVolumeMl; + U32 drainToVolumeMl; +} RESERVOIR_DATA_T; + #pragma pack(pop) // ********** private data ********** @@ -307,6 +314,35 @@ } /************************************************************************* + * @brief + * The broadcastDGOpMode function constructs an operation mode msg to be \n + * broadcast and queues the msg for transmit on the appropriate CAN channel. + * @details + * Inputs : none + * Outputs : DG op mode msg constructed and queued. + * @param mode : ID of current DG op mode + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastDGOpMode( U32 mode ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_OP_MODE; + msg.hdr.payloadLen = sizeof( U32 ); + + memcpy( payloadPtr, &mode, 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 broadcastRTCEpoch * The broadcastRTCEpoch function constructs an epoch msg to \n * be broadcast and queues the msg for transmit on the appropriate CAN channel. @@ -477,6 +513,31 @@ return result; } +// MSG_ID_DG_RESERVOIR_DATA +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_PRESSURES_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 handlePowerOffWarning function handles a power off warning message \n @@ -520,18 +581,20 @@ { MESSAGE_T msg; U08 *payloadPtr = msg.payload; - U16 buildNum = (U16)DG_VERSION_BUILD; + U08 major = (U08)DG_VERSION_MAJOR; + U08 minor = (U08)DG_VERSION_MINOR; + 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( U16 ); - *payloadPtr = (U08)DG_VERSION_MAJOR; - payloadPtr++; - *payloadPtr = (U08)DG_VERSION_MINOR; - payloadPtr++; - memcpy( payloadPtr, &buildNum, sizeof( U16 ) ); + memcpy( payloadPtr, &major, sizeof( U08 ) ); + payloadPtr += sizeof( U08 ); + memcpy( payloadPtr, &minor, 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 );