Index: leahi_dialin/td/modules/alarms.py =================================================================== diff -u -r20c821bd230fc7689a0275a2918981669ff5cc19 -r47a803c6dd859a5bcc7a6c82e0cb160c350473ea --- leahi_dialin/td/modules/alarms.py (.../alarms.py) (revision 20c821bd230fc7689a0275a2918981669ff5cc19) +++ leahi_dialin/td/modules/alarms.py (.../alarms.py) (revision 47a803c6dd859a5bcc7a6c82e0cb160c350473ea) @@ -78,26 +78,30 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.td_alarm_broadcast_ch_id - self.msg_id_td_alarm_status_data = MsgIds.MSG_ID_ALARM_STATUS_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_alarm_status_data, - self._handler_alarms_status_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_alarm_broadcast_ch_id, + message_id = MsgIds.MSG_ID_ALARM_STATUS_DATA.value, + function = self._handler_alarms_status_sync) - channel_id = DenaliChannels.td_alarm_broadcast_ch_id - self.msg_id_td_alarm_triggered = MsgIds.MSG_ID_ALARM_TRIGGERED.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_alarm_triggered, - self._handler_alarm_trigger) - self.msg_id_td_alarm_cleared = MsgIds.MSG_ID_ALARM_CLEARED.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_alarm_cleared, - self._handler_alarm_clear) - self.msg_id_td_alarm_condition_cleared = MsgIds.MSG_ID_ALARM_CONDITION_CLEARED.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_alarm_condition_cleared, - self._handler_alarm_condition_clear) - channel_id = DenaliChannels.td_sync_broadcast_ch_id - self.msg_id_td_alarm_info_data = MsgIds.MSG_ID_TD_ALARM_INFORMATION_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_alarm_info_data, - self._handler_alarm_information_sync) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_alarm_broadcast_ch_id, + message_id = MsgIds.MSG_ID_ALARM_TRIGGERED.value, + function = self._handler_alarm_trigger) + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_alarm_broadcast_ch_id, + message_id = MsgIds.MSG_ID_ALARM_CLEARED.value, + function = self._handler_alarm_clear) + + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_alarm_broadcast_ch_id, + message_id = MsgIds.MSG_ID_ALARM_CONDITION_CLEARED.value, + function = self._handler_alarm_condition_clear) + + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_TD_ALARM_INFORMATION_DATA.value, + function = self._handler_alarm_information_sync) + + self.can_interface.register_receiving_publication_function(channel_id = DenaliChannels.td_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_TD_ACTIVE_ALARMS_LIST_REQUEST_RESPONSE.value, + function = self._handler_alarm_list_response) + self.td_alarm_status_timestamp = 0.0 #: The timestamp of the last Alarm Status message self.td_alarm_triggered_timestamp = 0.0 #: The timestamp of the last Alarm Triggered message self.td_alarm_cleared_timestamp = 0.0 #: The timestamp of the last Alarm Cleared message @@ -132,6 +136,12 @@ self.alarm_table_button_blockers = [False] * self.AlarmResponseButtons.NUM_OF_TD_ALARM_RESPONSE_BUTTONS.value #: The Alarm Table's Button blocker data self.alarm_state_button_blockers = [False] * self.AlarmResponseButtons.NUM_OF_TD_ALARM_RESPONSE_BUTTONS.value #: The Alarm State's Button blocker data + # Alarms list + self.ui_alarm_list_accepted = True #: The Alarm List request accepted + self.ui_alarm_list_reject_reason = 0 #: The Alarm List request reject reason + self.ui_alarm_list = [] #: The UI Alarm List content + self.ui_alarm_list_timestamp = 0.0 #: The timestamp of the last Alarm List + # Loop through the list of the event data type enum and update the dictionary for data_type in td_enum_repository.TDEventDataTypes: event_data_type = td_enum_repository.TDEventDataTypes(data_type).name @@ -299,6 +309,28 @@ self.td_alarm_information_timestamp = timestamp + @publish(["msg_id_td_active_alarms_list_request_response", "accepted", "rejection_reason", "active_alarm_list"]) + def _handler_alarm_list_response(self, message, timestamp=0.0): + """ + Handles published TD alarm clear alarm condition messages. + + @param message: published TD alarm clear alarm condition message + @return: none + """ + self.ui_alarm_list_accepted = struct.unpack('i',bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] + self.ui_alarm_list_reject_reason = struct.unpack('i',bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] + + i = 3 + for _ in range(0,10): + start_pos = eval(f'MsgFieldPositions.START_POS_FIELD_{i}') + end_pos = eval(f'MsgFieldPositions.END_POS_FIELD_{i}') + value = struct.unpack('i',bytearray(message['message'][start_pos:end_pos]))[0] + self.ui_alarm_list.append(value) + i += 1 + + self.ui_alarm_list_timestamp = timestamp + + def cmd_alarm_status_broadcast_interval_override(self, ms: int = 250, reset: int = NO_RESET): """ Constructs and sends the alarm status broadcast interval override command