Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r6fc5e3596bfb7f27e93e4bfbe4909b9f58c17b48 -r1f3647830e9de0a1f0a4e445ce8d72d5525f51fb --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 6fc5e3596bfb7f27e93e4bfbe4909b9f58c17b48) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 1f3647830e9de0a1f0a4e445ce8d72d5525f51fb) @@ -145,8 +145,125 @@ userConfirmOffButton( cargo.confirmed ); } +/************************************************************************* + * @brief broadcastAlarmTriggered + * The broadcastAlarmTriggered function constructs an alarm triggered msg to \n + * be broadcast and queues the msg for transmit on the appropriate CAN channel. + * @details + * Inputs : none + * Outputs : alarm triggered msg constructed and queued. + * @param alarm : ID of alarm triggered + * @param almData1 : 1st data associated with alarm + * @param almData2 : 2nd data associated with alarm + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastAlarmTriggered( ALARM_ID_T alarm, ALARM_DATA_T almData1, ALARM_DATA_T almData2 ) +{ + BOOL result; + MESSAGE_T msg; + U32 msgSize; + U08 data[sizeof(MESSAGE_WRAPPER_T)+1+CAN_MESSAGE_CARGO_SIZE]; // must hold full (wrapped) message + sync + any CAN padding + U08 *cargoPtr = msg.cargo; + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_ALARM_TRIGGERED; + msg.hdr.cargoLen = sizeof(ALARM_ID_T) + sizeof(ALARM_DATA_T) + sizeof(ALARM_DATA_T); + + memcpy( cargoPtr, &alarm, sizeof(ALARM_ID_T) ); + cargoPtr += sizeof(ALARM_ID_T); + memcpy( cargoPtr, &almData1, sizeof(ALARM_DATA_T) ); + cargoPtr += sizeof(ALARM_DATA_T); + memcpy( cargoPtr, &almData2, sizeof(ALARM_DATA_T) ); + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) + msgSize = serializeMessage( msg, data ); + + // add serialized message data to appropriate comm buffer + result = addToCommBuffer( COMM_BUFFER_OUT_CAN_HD_ALARM, data, msgSize ); + + return result; +} /************************************************************************* + * @brief broadcastAlarmCleared + * The broadcastAlarmCleared function constructs an alarm cleared msg to be \n + * broadcast and queues the msg for transmit on the appropriate CAN channel. + * @details + * Inputs : none + * Outputs : alarm cleared msg constructed and queued. + * @param alarm : ID of alarm cleared + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastAlarmCleared( ALARM_ID_T alarm ) +{ + BOOL result; + MESSAGE_T msg; + U32 msgSize; + U08 data[sizeof(MESSAGE_WRAPPER_T)+1+CAN_MESSAGE_CARGO_SIZE]; // must hold full (wrapped) message + sync + any CAN padding + U08 *cargoPtr = msg.cargo; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_ALARM_CLEARED; + msg.hdr.cargoLen = sizeof(ALARM_ID_T); + + memcpy( cargoPtr, &alarm, sizeof(ALARM_ID_T) ); + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) + msgSize = serializeMessage( msg, data ); + + // add serialized message data to appropriate comm buffer + result = addToCommBuffer( COMM_BUFFER_OUT_CAN_HD_ALARM, data, msgSize ); + + return result; +} + +/************************************************************************* + * @brief broadcastBloodFlowData + * The broadcastBloodFlowData function constructs a blood flow data msg to \n + * be broadcast and queues the msg for transmit on the appropriate CAN channel. + * @details + * Inputs : none + * Outputs : blood flow data msg constructed and queued. + * @param flowStPt : Current set point for blood flow + * @param measFlow : Latest measured blood flow + * @param measSpd : Latest measured blood pump speed + * @param measSpd : Latest measured blood pump motor current + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastBloodFlowData( U32 flowStPt, F32 measFlow, F32 measSpd, F32 measCurr ) +{ + BOOL result; + MESSAGE_T msg; + U32 msgSize; + U08 data[sizeof(MESSAGE_WRAPPER_T)+1+CAN_MESSAGE_CARGO_SIZE]; // must hold full (wrapped) message + sync + any CAN padding + U08 *cargoPtr = msg.cargo; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_BLOOD_FLOW_DATA; + msg.hdr.cargoLen = sizeof(U32) + sizeof(F32) + sizeof(F32) + sizeof(F32); + + memcpy( cargoPtr, &flowStPt, sizeof(U32) ); + cargoPtr += sizeof(U32); + memcpy( cargoPtr, &measFlow, sizeof(F32) ); + cargoPtr += sizeof(F32); + memcpy( cargoPtr, &measSpd, sizeof(F32) ); + cargoPtr += sizeof(F32); + memcpy( cargoPtr, &measCurr, sizeof(F32) ); + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) + msgSize = serializeMessage( msg, data ); + + // add serialized message data to appropriate comm buffer + result = addToCommBuffer( COMM_BUFFER_OUT_CAN_HD_BROADCAST, data, msgSize ); + + return result; + +} + + +/************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/