Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r1bbf9da32e622975efed00b1a7589387a9829440 -rd71d1e6c2be627158cac9a8bc56adac7cdefd1c8 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 1bbf9da32e622975efed00b1a7589387a9829440) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision d71d1e6c2be627158cac9a8bc56adac7cdefd1c8) @@ -25,6 +25,7 @@ #include "MsgQueues.h" #include "WatchdogMgmt.h" #include "SystemCommMessages.h" +#include "Utilities.h" #include "SystemComm.h" // ********** private definitions ********** @@ -35,6 +36,14 @@ { U08 confirmed; // 1 = confirmed, 0 = rejected/timed out } OFF_BUTTON_MESSAGE_FROM_UI_PAYLOAD_T; +typedef struct +{ + U32 alarmState; // 0 = no alarms, 1 = low priority, 2 = medium priority, 3 = high priority + U32 alarmTop; // ID of top active alarm + U32 silenceExpiresIn; // seconds + U08 alarmsSilenced; // 1 = silenced, 0 = not silenced + U08 alarmsFlags; // bit flags: 1 = true, 0 = false for each bit +} ALARM_COMP_STATUS_PAYLOAD_T; #pragma pack(pop) @@ -66,6 +75,7 @@ U32 msgSize = 0; U32 sizeMod, sizePad; U32 i; + U08 crc = crc8( (U08*)(&msg), sizeof( MESSAGE_HEADER_T ) + msg.hdr.payloadLen ); // prefix data with message sync byte data[ msgSize++ ] = MESSAGE_SYNC_BYTE; @@ -78,8 +88,8 @@ memcpy( &data[ msgSize ], &( msg.payload ), msg.hdr.payloadLen ); msgSize += msg.hdr.payloadLen; - // TODO - calculate 8-bit CRC - data[ msgSize++ ] = 0; // TODO - s/b 8-bit CRC when calc is available + // add 8-bit CRC + data[ msgSize++ ] = crc; // pad with zero bytes to get length a multiple of CAN_MESSAGE_PAYLOAD_SIZE (8) sizeMod = msgSize % CAN_MESSAGE_PAYLOAD_SIZE; @@ -164,13 +174,26 @@ U32 msgSize; U08 data[ sizeof( MESSAGE_WRAPPER_T ) + 1 + CAN_MESSAGE_PAYLOAD_SIZE ]; // must hold full (wrapped) message + sync + any CAN padding U08 *payloadPtr = msg.payload; + ALARM_COMP_STATUS_PAYLOAD_T payload; // create a message record blankMessage( &msg ); msg.hdr.msgID = MSG_ID_ALARM_STATUS; - msg.hdr.payloadLen = sizeof( COMP_ALARM_STATUS_T ); + msg.hdr.payloadLen = sizeof( ALARM_COMP_STATUS_PAYLOAD_T ); + payload.alarmState = (U32)almStatus.alarmsState; + payload.alarmTop = (U32)almStatus.alarmTop; + payload.silenceExpiresIn = almStatus.alarmsSilenceExpiresIn; + payload.alarmsSilenced = (U08)almStatus.alarmsSilenced; + payload.alarmsFlags = ( almStatus.systemFault ? BIT_BY_POS(0) : 0 ); + payload.alarmsFlags |= ( almStatus.stop ? BIT_BY_POS(1) : 0 ); + payload.alarmsFlags |= ( almStatus.noClear ? BIT_BY_POS(2) : 0 ); + payload.alarmsFlags |= ( almStatus.noResume ? BIT_BY_POS(3) : 0 ); + payload.alarmsFlags |= ( almStatus.noRinseback ? BIT_BY_POS(4) : 0 ); + payload.alarmsFlags |= ( almStatus.noEndTreatment ? BIT_BY_POS(5) : 0 ); + payload.alarmsFlags |= ( almStatus.noEndTreatment ? BIT_BY_POS(6) : 0 ); + payload.alarmsFlags |= ( almStatus.bypassDialyzer ? BIT_BY_POS(7) : 0 ); - memcpy( payloadPtr, &almStatus, sizeof( COMP_ALARM_STATUS_T ) ); + memcpy( payloadPtr, &almStatus, sizeof( ALARM_COMP_STATUS_PAYLOAD_T ) ); // serialize the message (w/ sync, CRC, and appropriate CAN padding) msgSize = serializeMessage( msg, data ); @@ -580,6 +603,18 @@ DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestBloodFlowMeasuredOverrideRequest, testSetMeasuredBloodFlowRateOverride, testResetMeasuredBloodFlowRateOverride ) /************************************************************************* + * @brief handleTestBloodPumpRotorMeasuredSpeedOverrideRequest + * The handleTestBloodPumpRotorMeasuredSpeedOverrideRequest function handles a request to \n + * override the measured blood pump rotor speed (RPM). + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestBloodPumpRotorMeasuredSpeedOverrideRequest, testSetMeasuredBloodPumpRotorSpeedOverride, testResetMeasuredBloodPumpRotorSpeedOverride ) + +/************************************************************************* * @brief handleTestBloodPumpMeasuredSpeedOverrideRequest * The handleTestBloodPumpMeasuredSpeedOverrideRequest function handles a request to \n * override the measured blood pump speed (RPM). @@ -589,21 +624,33 @@ * @param message : a pointer to the message to handle * @return none *************************************************************************/ -DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestBloodPumpMeasuredSpeedOverrideRequest, testSetMeasuredBloodPumpMCSpeedOverride, testResetMeasuredBloodPumpMCSpeedOverride ) +DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestBloodPumpMeasuredSpeedOverrideRequest, testSetMeasuredBloodPumpSpeedOverride, testResetMeasuredBloodPumpSpeedOverride ) /************************************************************************* - * @brief handleTestBloodPumpMeasuredCurrentOverrideRequest - * The handleTestBloodPumpMeasuredCurrentOverrideRequest function handles a request to \n - * override the measured blood pump current (mA). + * @brief handleTestBloodPumpMCMeasuredSpeedOverrideRequest + * The handleTestBloodPumpMCMeasuredSpeedOverrideRequest function handles a request to \n + * override the measured blood pump motor controller speed (RPM). * @details * Inputs : none * Outputs : message handled * @param message : a pointer to the message to handle * @return none *************************************************************************/ -DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestBloodPumpMeasuredCurrentOverrideRequest, testSetMeasuredBloodPumpMCCurrentOverride, testResetMeasuredBloodPumpMCCurrentOverride ) +DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestBloodPumpMCMeasuredSpeedOverrideRequest, testSetMeasuredBloodPumpMCSpeedOverride, testResetMeasuredBloodPumpMCSpeedOverride ) /************************************************************************* + * @brief handleTestBloodPumpMCMeasuredCurrentOverrideRequest + * The handleTestBloodPumpMCMeasuredCurrentOverrideRequest function handles a request to \n + * override the measured blood pump motor controller current (mA). + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestBloodPumpMCMeasuredCurrentOverrideRequest, testSetMeasuredBloodPumpMCCurrentOverride, testResetMeasuredBloodPumpMCCurrentOverride ) + +/************************************************************************* * @brief handleTestBloodFlowBroadcastIntervalOverrideRequest * The handleTestBloodFlowBroadcastIntervalOverrideRequest function handles a request to \n * override the broadcast interval for blood flow data.