Index: dialin/hd/alarms.py =================================================================== diff -u -r1ceb44f1f6d97ce295db7c3233043df9cca35746 -re4a565fe82baacfdcc54cacd31072ce3e53a0ce4 --- dialin/hd/alarms.py (.../alarms.py) (revision 1ceb44f1f6d97ce295db7c3233043df9cca35746) +++ dialin/hd/alarms.py (.../alarms.py) (revision e4a565fe82baacfdcc54cacd31072ce3e53a0ce4) @@ -15,6 +15,8 @@ ############################################################################ import struct from logging import Logger +from enum import unique +from ..utils.base import DialinEnum from .constants import RESET, NO_RESET from ..common.msg_defs import MsgIds, MsgFieldPositions @@ -44,6 +46,14 @@ HD_ALARM_STATE_MEDIUM = 2 HD_ALARM_STATE_HIGH = 3 + # Alarm response buttons + @unique + class AlarmResponseButtons(DialinEnum): + HD_ALARM_RESPONSE_BUTTON_RESUME = 0 + HD_ALARM_RESPONSE_BUTTON_RINSEBACK = 1 + HD_ALARM_RESPONSE_BUTTON_END_TREATMENT = 2 + NUM_OF_HD_ALARM_RESPONSE_BUTTONS = 3 + # Alarm status message field positions START_POS_ALARM_STATE = DenaliMessage.PAYLOAD_START_INDEX END_POS_ALARM_STATE = START_POS_ALARM_STATE + 4 @@ -109,6 +119,8 @@ self.alarm_audio_curr_lg = 0.0 self.alarm_backup_audio_curr = 0.0 self.safety_shutdown_active = False + self.alarm_table_button_blockers = [False] * self.AlarmResponseButtons.NUM_OF_HD_ALARM_RESPONSE_BUTTONS + self.alarm_state_button_blockers = [False] * self.AlarmResponseButtons.NUM_OF_HD_ALARM_RESPONSE_BUTTONS def get_current_alarm_priority(self): """ @@ -126,6 +138,22 @@ """ return self.alarm_states + def get_alarm_response_button_table_blocker_states(self): + """ + Gets the states (T/F) of the alarm response buttons blocked by alarm table properties. + + @return: List of booleans of size 3 (for resume, rinseback and end treatment buttons) + """ + return self.alarm_table_button_blockers + + def get_alarm_response_button_state_blocker_states(self): + """ + Gets the states (T/F) of the alarm response buttons blocked by state properties. + + @return: List of booleans of size 3 (for resume, rinseback and end treatment buttons) + """ + return self.alarm_state_button_blockers + def get_alarm_conditions(self): """ Gets all alarm condition states for all alarms @@ -460,7 +488,7 @@ self.alarm_conditions[alarm_id[0]] = False @publish(["alarm_volume", "alarm_audio_curr_hg", "alarm_audio_curr_lg", "alarm_backup_audio_curr", - "safety_shutdown_active"]) + "safety_shutdown_active", "alarm_table_button_blockers", "alarm_state_button_blockers"]) def _handler_alarm_information_sync(self, message): """ Handles published HD alarm information broadcast messages. @@ -479,11 +507,30 @@ message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) saf = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])) + trs = struct.unpack('B', bytearray( + message['message'][MsgFieldPositions.END_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5+1])) + trb = struct.unpack('B', bytearray( + message['message'][MsgFieldPositions.END_POS_FIELD_5+1:MsgFieldPositions.END_POS_FIELD_5+2])) + tet = struct.unpack('B', bytearray( + message['message'][MsgFieldPositions.END_POS_FIELD_5+2:MsgFieldPositions.END_POS_FIELD_5+3])) + srs = struct.unpack('B', bytearray( + message['message'][MsgFieldPositions.END_POS_FIELD_5+3:MsgFieldPositions.END_POS_FIELD_5+4])) + srb = struct.unpack('B', bytearray( + message['message'][MsgFieldPositions.END_POS_FIELD_5+4:MsgFieldPositions.END_POS_FIELD_5+5])) + set = struct.unpack('B', bytearray( + message['message'][MsgFieldPositions.END_POS_FIELD_5+5:MsgFieldPositions.END_POS_FIELD_5+6])) + self.alarm_volume = vol[0] self.alarm_audio_curr_hg = ach[0] self.alarm_audio_curr_lg = acl[0] self.alarm_backup_audio_curr = bac[0] self.safety_shutdown_active = True if saf[0] == 1 else False + self.alarm_table_button_blockers[self.AlarmResponseButtons.HD_ALARM_RESPONSE_BUTTON_RESUME] = True if trs[0] == 1 else False + self.alarm_table_button_blockers[self.AlarmResponseButtons.HD_ALARM_RESPONSE_BUTTON_RINSEBACK] = True if trb[0] else False + self.alarm_table_button_blockers[self.AlarmResponseButtons.HD_ALARM_RESPONSE_BUTTON_END_TREATMENT] = True if tet[0] else False + self.alarm_state_button_blockers[self.AlarmResponseButtons.HD_ALARM_RESPONSE_BUTTON_RESUME] = True if srs[0] else False + self.alarm_state_button_blockers[self.AlarmResponseButtons.HD_ALARM_RESPONSE_BUTTON_RINSEBACK] = True if srb[0] else False + self.alarm_state_button_blockers[self.AlarmResponseButtons.HD_ALARM_RESPONSE_BUTTON_END_TREATMENT] = True if set[0] else False def cmd_clear_all_alarms(self) -> int: """