Index: firmware/App/Common.h =================================================================== diff -u -r197ee67d1cc0e0e3c80ccae58858dda09cad0834 -rd71d1e6c2be627158cac9a8bc56adac7cdefd1c8 --- firmware/App/Common.h (.../Common.h) (revision 197ee67d1cc0e0e3c80ccae58858dda09cad0834) +++ firmware/App/Common.h (.../Common.h) (revision d71d1e6c2be627158cac9a8bc56adac7cdefd1c8) @@ -101,6 +101,7 @@ #define MAKE_WORD_OF_BYTES(h, l) ((((U16)(h) << SHIFT_8_BITS_FOR_BYTE_SHIFT) & MASK_OFF_LSB) | ((U16)(l) & MASK_OFF_MSB)) #define MAKE_LONG_OF_WORDS(h, l) ((((U32)(h) << SHIFT_16_BITS_FOR_WORD_SHIFT) & MASK_OFF_LSW) | ((U32)(l) & MASK_OFF_MSW)) #define GET_TOGGLE(v, l, h) ((v) == (l) ? (h) : (l)) +#define BIT_BY_POS(p) (1U << (p)) #define SET_ALARM_WITH_1_U32_DATA(a,d1) { \ ALARM_DATA_T dat1; \ Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r197ee67d1cc0e0e3c80ccae58858dda09cad0834 -rd71d1e6c2be627158cac9a8bc56adac7cdefd1c8 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 197ee67d1cc0e0e3c80ccae58858dda09cad0834) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision d71d1e6c2be627158cac9a8bc56adac7cdefd1c8) @@ -630,6 +630,7 @@ sendDebugData( (U08*)debugFlowStr, strlen(debugFlowStr) ); #endif broadcastBloodFlowData( flowStPt, measFlow, measRotSpd, measSpd, measMCSpd, measMCCurr ); + //broadcastBloodFlowData( 500, 501.0, 100.0, 1000.0, -1001.25, 750.0 ); bloodFlowDataPublicationTimerCounter = 0; } } Index: firmware/App/Controllers/Buttons.c =================================================================== diff -u -r1bbf9da32e622975efed00b1a7589387a9829440 -rd71d1e6c2be627158cac9a8bc56adac7cdefd1c8 --- firmware/App/Controllers/Buttons.c (.../Buttons.c) (revision 1bbf9da32e622975efed00b1a7589387a9829440) +++ firmware/App/Controllers/Buttons.c (.../Buttons.c) (revision d71d1e6c2be627158cac9a8bc56adac7cdefd1c8) @@ -344,7 +344,7 @@ offRequestAwaitingUserConfirmation = TRUE; offRequestPendingTimer = 0; #ifdef SIMULATE_UI - userConfirmOffButton( USER_CONFIRMED ); + userConfirmOffButton( OFF_BUTTON_RSP_USER_REQUESTS_POWER_OFF ); #endif } } Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r12978a9cc2442759dbb42d71ffcbc8057a1a7d14 -rd71d1e6c2be627158cac9a8bc56adac7cdefd1c8 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 12978a9cc2442759dbb42d71ffcbc8057a1a7d14) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision d71d1e6c2be627158cac9a8bc56adac7cdefd1c8) @@ -26,6 +26,7 @@ #include "Comm.h" #include "Interrupts.h" #include "MsgQueues.h" +#include "Utilities.h" #include "SystemCommMessages.h" #ifdef RM46_EVAL_BOARD_TARGET @@ -714,7 +715,7 @@ if ( TRUE == isThereMsgRcvd ) { // TODO - check CRC before processing a message - if ( 1 ) + if ( message.crc == crc8( (U08*)(&message), sizeof(MESSAGE_HEADER_T) + message.msg.hdr.payloadLen ) ) { processReceivedMessage( &message.msg ); } @@ -810,12 +811,12 @@ handleTestBloodFlowMeasuredOverrideRequest( message ); break; - case MSG_ID_BLOOD_PUMP_MEAS_SPEED_OVERRIDE: - handleTestBloodPumpMeasuredSpeedOverrideRequest( message ); + case MSG_ID_BLOOD_PUMP_MC_MEAS_SPEED_OVERRIDE: + handleTestBloodPumpMCMeasuredSpeedOverrideRequest( message ); break; - case MSG_ID_BLOOD_PUMP_MEAS_CURR_OVERRIDE: - handleTestBloodPumpMeasuredCurrentOverrideRequest( message ); + case MSG_ID_BLOOD_PUMP_MC_MEAS_CURR_OVERRIDE: + handleTestBloodPumpMCMeasuredCurrentOverrideRequest( message ); break; case MSG_ID_BLOOD_FLOW_SEND_INTERVAL_OVERRIDE: 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. Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r1bbf9da32e622975efed00b1a7589387a9829440 -rd71d1e6c2be627158cac9a8bc56adac7cdefd1c8 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 1bbf9da32e622975efed00b1a7589387a9829440) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision d71d1e6c2be627158cac9a8bc56adac7cdefd1c8) @@ -46,10 +46,12 @@ MSG_ID_ALARM_TIME_OVERRIDE, // 0x8007 MSG_ID_BLOOD_FLOW_SET_PT_OVERRIDE, // 0x8008 MSG_ID_BLOOD_FLOW_MEAS_OVERRIDE, // 0x8009 - MSG_ID_BLOOD_PUMP_MEAS_SPEED_OVERRIDE, // 0x800A - MSG_ID_BLOOD_PUMP_MEAS_CURR_OVERRIDE, // 0x800B + MSG_ID_BLOOD_PUMP_MC_MEAS_SPEED_OVERRIDE, // 0x800A + MSG_ID_BLOOD_PUMP_MC_MEAS_CURR_OVERRIDE, // 0x800B MSG_ID_BLOOD_FLOW_SEND_INTERVAL_OVERRIDE, // 0x800C MSG_ID_ALARM_STATUS_SEND_INTERVAL_OVERRIDE, // 0x800D + MSG_ID_BLOOD_PUMP_MEAS_SPEED_OVERRIDE, // 0x800E + MSG_ID_BLOOD_PUMP_MEAS_ROTOR_SPEED_OVERRIDE,// 0x800F END_OF_MSG_IDS } MSG_ID_T; @@ -113,13 +115,19 @@ // MSG_ID_BLOOD_FLOW_MEAS_OVERRIDE void handleTestBloodFlowMeasuredOverrideRequest( MESSAGE_T *message ); -// MSG_ID_BLOOD_PUMP_MEAS_SPEED_OVERRIDE -void handleTestBloodPumpMeasuredSpeedOverrideRequest( MESSAGE_T *message ); +// MSG_ID_BLOOD_PUMP_MC_MEAS_SPEED_OVERRIDE +void handleTestBloodPumpMCMeasuredSpeedOverrideRequest( MESSAGE_T *message ); -// MSG_ID_BLOOD_PUMP_MEAS_CURR_OVERRIDE -void handleTestBloodPumpMeasuredCurrentOverrideRequest( MESSAGE_T *message ); +// MSG_ID_BLOOD_PUMP_MC_MEAS_CURR_OVERRIDE +void handleTestBloodPumpMCMeasuredCurrentOverrideRequest( MESSAGE_T *message ); // MSG_ID_BLOOD_FLOW_SEND_INTERVAL_OVERRIDE void handleTestBloodFlowBroadcastIntervalOverrideRequest( MESSAGE_T *message ); +// MSG_ID_BLOOD_PUMP_MEAS_SPEED_OVERRIDE +void handleTestBloodPumpMeasuredSpeedOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_BLOOD_PUMP_MEAS_ROTOR_SPEED_OVERRIDE +void handleTestBloodPumpRotorMeasuredSpeedOverrideRequest( MESSAGE_T *message ); + #endif Index: firmware/App/Services/Utilities.c =================================================================== diff -u -r1bbf9da32e622975efed00b1a7589387a9829440 -rd71d1e6c2be627158cac9a8bc56adac7cdefd1c8 --- firmware/App/Services/Utilities.c (.../Utilities.c) (revision 1bbf9da32e622975efed00b1a7589387a9829440) +++ firmware/App/Services/Utilities.c (.../Utilities.c) (revision d71d1e6c2be627158cac9a8bc56adac7cdefd1c8) @@ -80,9 +80,6 @@ 130, 179, 224, 209, 70, 119, 36, 21, 59, 10, 89, 104, 255, 206, 157, 172 }; -// ********** private function prototypes ********** - - /************************************************************************* * @brief crc16 * The crc16 function calculates a 16-bit CRC for a given range of bytes \n