Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rb01542f8e4ef5a29e9b08fc0d465478de516bf02 -r93b7026089877765744c2c465c51fd6912d7084b --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision b01542f8e4ef5a29e9b08fc0d465478de516bf02) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 93b7026089877765744c2c465c51fd6912d7084b) @@ -733,24 +733,27 @@ // create a message record blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_ALARM_STATUS; - msg.hdr.payloadLen = sizeof( ALARM_COMP_STATUS_PAYLOAD_T ); - payload.alarmState = (U32)almStatus.alarmsState; - payload.alarmTop = (U32)almStatus.alarmTop; - payload.silenceExpiresIn = almStatus.alarmsSilenceExpiresIn; - payload.escalatesIn = almStatus.alarmsEscalatesIn; - 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.noNewTreatment ? BIT_BY_POS(6) : 0 ); - payload.alarmsFlags |= ( almStatus.bypassDialyzer ? BIT_BY_POS(7) : 0 ); - payload.alarmsFlags |= ( almStatus.alarmsToEscalate ? BIT_BY_POS(8) : 0 ); - payload.alarmsFlags |= ( almStatus.alarmsSilenced ? BIT_BY_POS(9) : 0 ); - payload.alarmsFlags |= ( almStatus.lampOn ? BIT_BY_POS(10) : 0 ); + msg.hdr.msgID = MSG_ID_ALARM_STATUS; + msg.hdr.payloadLen = sizeof( ALARM_COMP_STATUS_PAYLOAD_T ); + payload.alarmState = (U32)almStatus.alarmsState; + payload.alarmTop = (U32)almStatus.alarmTop; + payload.silenceExpiresIn = almStatus.alarmsSilenceExpiresIn; + payload.escalatesIn = almStatus.alarmsEscalatesIn; + + payload.alarmsFlags = ( almStatus.systemFault ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_SYSTEM_FAULT) : 0 ); + payload.alarmsFlags |= ( almStatus.stop ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_STOP) : 0 ); + payload.alarmsFlags |= ( almStatus.noClear ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_CLEAR) : 0 ); + payload.alarmsFlags |= ( almStatus.noResume ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_RESUME) : 0 ); + payload.alarmsFlags |= ( almStatus.noRinseback ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_RINSEBACK) : 0 ); + payload.alarmsFlags |= ( almStatus.noEndTreatment ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_END_TREATMENT) : 0 ); + payload.alarmsFlags |= ( almStatus.noNewTreatment ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_NEW_TREATMENT) : 0 ); + payload.alarmsFlags |= ( almStatus.bypassDialyzer ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_BYPASS_DIALYZER) : 0 ); + payload.alarmsFlags |= ( almStatus.alarmsToEscalate ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_ALARMS_TO_ESCALATE) : 0 ); + payload.alarmsFlags |= ( almStatus.alarmsSilenced ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_ALARMS_SILENCED) : 0 ); + payload.alarmsFlags |= ( almStatus.lampOn ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_LAMP_ON) : 0 ); + payload.alarmsFlags |= ( almStatus.topAlarmConditionnDetected ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_TOP_CONDITION) : 0 ); + memcpy( payloadPtr, &payload, sizeof( ALARM_COMP_STATUS_PAYLOAD_T ) ); // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer @@ -823,6 +826,35 @@ result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_ALARM, ACK_REQUIRED ); return result; +} + +/*********************************************************************//** + * @brief + * The broadcastAlarmConditionCleared function constructs an alarm condition + * cleared msg to be broadcast and queues the msg for transmit on the + * appropriate CAN channel. + * @details Inputs: none + * @details Outputs: alarm condition cleared msg constructed and queued. + * @param alarm ID of alarm that has had it's condition cleared + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastAlarmConditionCleared( U16 alarm ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_ALARM_CONDITION_CLEARED; + msg.hdr.payloadLen = sizeof( U16 ); + + memcpy( payloadPtr, &alarm, 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_HD_ALARM, ACK_REQUIRED ); + + return result; } /*********************************************************************//** @@ -1260,9 +1292,9 @@ /*********************************************************************//** * @brief - * The handleAlarmCleared function handles a cleared alarm event message. + * The handleAlarmCleared function handles a cleared alarm condition event message. * @details Inputs: none - * @details Outputs: alarm cleared. + * @details Outputs: alarm condition is cleared. * @param message a pointer to the message to handle * @return none *************************************************************************/ @@ -1277,11 +1309,35 @@ if ( (ALARM_ID_T)alarmID < NUM_OF_ALARM_IDS ) { - clearAlarm( (ALARM_ID_T)alarmID ); + clearAlarmCondition( (ALARM_ID_T)alarmID ); } } } - + +/*********************************************************************//** + * @brief + * The handleAlarmUserAction function handles a user alarm action event message. + * @details Inputs: none + * @details Outputs: selected action initiated. + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleAlarmUserAction( MESSAGE_T *message ) +{ + if ( message->hdr.payloadLen == sizeof( U16 ) ) + { + U08 *payloadPtr = message->payload; + U16 action; + + memcpy( &action, payloadPtr, sizeof( U16 ) ); + + if ( (ALARM_USER_ACTION_T)action < NUMBER_OF_ALARM_USER_ACTIONS ) + { + signalAlarmUserActionInitiated( (ALARM_USER_ACTION_T)action ); + } + } +} + /*********************************************************************//** * @brief * The handleOffButtonConfirmMsgFromUI function handles a response to an