Index: leahi_dialin/common/alarm_priorities.py =================================================================== diff -u -r41de945f9c773e54e965e80d9e46def828beb732 -r49a5752911c816d6f33e9800cda8c1221f0dca9e --- leahi_dialin/common/alarm_priorities.py (.../alarm_priorities.py) (revision 41de945f9c773e54e965e80d9e46def828beb732) +++ leahi_dialin/common/alarm_priorities.py (.../alarm_priorities.py) (revision 49a5752911c816d6f33e9800cda8c1221f0dca9e) @@ -40,7 +40,7 @@ ALARM_STATE_FLAG_BIT_POS_NO_RESUME = 3 ALARM_STATE_FLAG_BIT_POS_NO_RINSEBACK = 4 ALARM_STATE_FLAG_BIT_POS_NO_END_TREATMENT = 5 - ALARM_STATE_FLAG_BIT_POS_NO_NEW_TREATMENT = 6 + ALARM_STATE_FLAG_BIT_POS_NO_TEMPORARY_BREAK = 6 ALARM_STATE_FLAG_BIT_POS_USER_MUST_ACK = 7 ALARM_STATE_FLAG_BIT_POS_ALARMS_TO_ESCALATE = 8 ALARM_STATE_FLAG_BIT_POS_ALARMS_SILENCED = 9 Index: leahi_dialin/ui/td_messaging_alarms.py =================================================================== diff -u -r18c90a1b2b6c7339bdd192a2d2fac32f2b8a35df -r49a5752911c816d6f33e9800cda8c1221f0dca9e --- leahi_dialin/ui/td_messaging_alarms.py (.../td_messaging_alarms.py) (revision 18c90a1b2b6c7339bdd192a2d2fac32f2b8a35df) +++ leahi_dialin/ui/td_messaging_alarms.py (.../td_messaging_alarms.py) (revision 49a5752911c816d6f33e9800cda8c1221f0dca9e) @@ -4,7 +4,7 @@ from leahi_dialin.utils import conversions from leahi_dialin.protocols import CAN from leahi_dialin.common import msg_ids -from leahi_dialin.common.alarm_priorities import AlarmPriority +from leahi_dialin.common.alarm_priorities import AlarmPriority, AlarmDataTypes @singleton_threadsafe class TD_Messaging_Alarms(): @@ -97,3 +97,109 @@ self.can_interface.send(message, 0) + def cmd_set_alarm_triggered(self, alarm_id, + field_descriptor_1 : int, + data_field_1 : str, + field_descriptor_2 : int, + data_field_2 : str, + priority : int, + rank : int, + clear_top : int) -> None: + """ + Triggers an alarm. + + | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | #1:(U32) | + |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: |:--: | + |0x0200| 0x001 | 1 | Event | Y | TD | All | Alarm Triggered | \ref Data::mAlarmID | + + @param alarm_id: (int) the alarm id to trigger + @param field_descriptor_1: (int) alarm data 1 type + @param data_field_1: (str) alarm data 1 + @param field_descriptor_2: (int) alarm data 2 type + @param data_field_2: (str) alarm data 2 + @param priority: (int) alarm priority + @param rank: (int) alarm rank + @param clear_top: (int) clear top only + + @return: None + """ + zero = conversions.integer_to_bytearray(0) + payload = conversions.integer_to_bytearray(alarm_id) + if field_descriptor_1 == AlarmDataTypes.ALARM_DATA_TYPE_NONE: + payload += zero + payload += zero + payload += zero + payload += zero + else: + if field_descriptor_1 == AlarmDataTypes.ALARM_DATA_TYPE_F32: + payload += conversions.integer_to_bytearray(field_descriptor_1) + payload += conversions.float_to_bytearray(float(data_field_1)) + else: # BOOL, S32, U32 + payload += conversions.integer_to_bytearray(field_descriptor_1) + payload += conversions.integer_to_bytearray(int(data_field_1)) + if field_descriptor_2 == AlarmDataTypes.ALARM_DATA_TYPE_NONE: + payload += zero + payload += zero + else: + if field_descriptor_2 == AlarmDataTypes.ALARM_DATA_TYPE_F32: + payload += conversions.integer_to_bytearray(field_descriptor_2) + payload += conversions.float_to_bytearray(float(data_field_2)) + else: # BOOL, S32, U32 + payload += conversions.integer_to_bytearray(field_descriptor_2) + payload += conversions.integer_to_bytearray(int(data_field_2)) + + payload += conversions.unsigned_integer_to_bytearray(priority) + payload += conversions.unsigned_integer_to_bytearray(rank) + payload += conversions.unsigned_integer_to_bytearray(clear_top) + + + message = CAN.DenaliMessage.build_message( + channel_id=CAN.DenaliChannels.td_alarm_broadcast_ch_id, + message_id=CAN.MsgIds.MSG_ID_ALARM_TRIGGERED.value, + payload=payload) + + self.can_interface.send(message, 0) + + + def cmd_set_alarm_cleared(self, alarm_id: int = 0): + """ + Broadcasts to clear a specific alarm ID + + the Alarm Cleared message builder method + | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | #1:(U32) | + |:----:|:------:|:---:|:------:|:---:|:---:|:---:|:-----------: |:--: | + |0x0300| 0x001 | 1 | Event | Y | TD | All | Alarm Cleared | \ref Data::mAlarmID | + + @return: None + """ + + payload = conversions.integer_to_bytearray(alarm_id) + + message = CAN.DenaliMessage.build_message( + channel_id=CAN.DenaliChannels.td_alarm_broadcast_ch_id, + message_id=CAN.MsgIds.MSG_ID_ALARM_CLEARED.value, + payload=payload) + + + self.can_interface.send(message, 0) + + def cmd_set_alarm_cleared_condition(self, alarm_id: int = 0): + """ + Broadcasts that the alarm condition has been cleared + + the Alarm Cleared message builder method + | MSG | CAN ID | Box | Type | Ack | Src | Dst | Description | #1:(U32) | + |:----:|:---------:|:---:|:------:|:---:|:---:|:---:|:---------------------: |:--: | + |0x0400| 0x001,2,4 | 1 | Event | Y | TD | All | Alarm Condition Cleared | \ref Data::mAlarmID | + + @return: None + """ + + payload = conversions.integer_to_bytearray(alarm_id) + + message = CAN.DenaliMessage.build_message( + channel_id=CAN.DenaliChannels.td_alarm_broadcast_ch_id, + message_id=CAN.MsgIds.MSG_ID_ALARM_CONDITION_CLEARED.value, + payload=payload) + + self.can_interface.send(message, 0) \ No newline at end of file