Index: firmware/App/Services/AlarmMgmtTD.c =================================================================== diff -u -rb692af0986725e87431ca5e23c5721f1b242baac -rf6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493 --- firmware/App/Services/AlarmMgmtTD.c (.../AlarmMgmtTD.c) (revision b692af0986725e87431ca5e23c5721f1b242baac) +++ firmware/App/Services/AlarmMgmtTD.c (.../AlarmMgmtTD.c) (revision f6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493) @@ -99,6 +99,7 @@ static U32 getAlarmStartTime( ALARM_ID_T alarmID ); static void publishAlarmInfo( void ); +static BOOL broadcastAlarmStatus( COMP_ALARM_STATUS_T almStatus ); /*********************************************************************//** * @brief @@ -1243,6 +1244,43 @@ } } +/*********************************************************************//** + * @brief + * The broadcastAlarmStatus function constructs an alarm status msg to + * be broadcast and queues the msg for transmit on the appropriate CAN channel. + * @details \b Inputs: none + * @details \b Outputs: alarm status msg constructed and queued. + * @param almStatus alarm status record + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +static BOOL broadcastAlarmStatus( COMP_ALARM_STATUS_T almStatus ) +{ + BOOL result; + ALARM_COMP_STATUS_PAYLOAD_T payload; + + payload.alarmState = (U32)almStatus.alarmsState; + payload.alarmTop = (U32)almStatus.alarmTop; + payload.silenceExpiresIn = almStatus.alarmsSilenceExpiresIn; + + 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.ok ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_OK_BUTTON_ONLY) : 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.noBloodRecirc ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_BLOOD_RECIRC) : 0 ); + payload.alarmsFlags |= ( almStatus.noDialRecirc ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_DIALYSATE_RECIRC) : 0 ); + payload.alarmsFlags |= ( almStatus.noMinimize ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_MINIMIZE) : 0 ); + payload.alarmsFlags |= ( almStatus.topAlarmConditionDetected ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_TOP_CONDITION) : 0 ); + + result = broadcastData( MSG_ID_ALARM_STATUS_DATA, COMM_BUFFER_OUT_CAN_TD_ALARM, (U08*)&payload, sizeof( ALARM_COMP_STATUS_PAYLOAD_T ) ); + + return result; +} + /************************************************************************* * TEST SUPPORT FUNCTIONS