Index: dialin/common/hd_defs.py =================================================================== diff -u -r061202ee879548ebbecdbbbfab85a63da1472ab2 -rcbe0d8adf603bc8372ab683eaf0f27ff8135bed8 --- dialin/common/hd_defs.py (.../hd_defs.py) (revision 061202ee879548ebbecdbbbfab85a63da1472ab2) +++ dialin/common/hd_defs.py (.../hd_defs.py) (revision cbe0d8adf603bc8372ab683eaf0f27ff8135bed8) @@ -7,8 +7,8 @@ # # @file hd_defs.py # -# @author (last) Dara Navaei -# @date (last) 11-Jan-2023 +# @author (last) Micahel Garthwaite +# @date (last) 25-Jan-2023 # @author (original) Peter Lucia # @date (original) 04-Dec-2020 # @@ -329,13 +329,12 @@ HD_EVENT_SERVICE_UPDATE = 9 # HD new service record has been updated HD_EVENT_USAGE_INFO_UPDATE = 10 # HD new usage information has been updated HD_EVENT_SW_CONFIG_UPDATE = 11 # HD new software configuration has been updated - HD_EVENT_BUTTON = 12 # HD button pressed/released - HD_EVENT_SAFETY_LINE = 13 # HD safety line pulled/released - HD_EVENT_RSRVR_1_LOAD_CELL_START_VALUES = 14 # HD reservoir 1 load cells start values - HD_EVENT_RSRVR_1_LOAD_CELL_END_VALUES = 15 # HD reservoir 2 load cells end values - HD_EVENT_RSRVR_2_LOAD_CELL_START_VALUES = 16 # HD reservoir 2 load cells start values - HD_EVENT_RSRVR_2_LOAD_CELL_END_VALUES = 17 # HD reservoir 2 load cells end values - NUM_OF_EVENT_IDS = 18 # Total number of HD events + HD_EVENT_RSRVR_1_LOAD_CELL_START_VALUES = 12 # HD reservoir 1 load cells start values + HD_EVENT_RSRVR_1_LOAD_CELL_END_VALUES = 13 # HD reservoir 2 load cells end values + HD_EVENT_RSRVR_2_LOAD_CELL_START_VALUES = 14 # HD reservoir 2 load cells start values + HD_EVENT_RSRVR_2_LOAD_CELL_END_VALUES = 15 # HD reservoir 2 load cells end values + HD_EVENT_SUB_STATE_CHANGE = 16 # HD Op sub-state change event + NUM_OF_EVENT_IDS = 17 # Total number of HD events @unique class HDEventDataType(DialinEnum): Index: dialin/hd/alarms.py =================================================================== diff -u -rab97eb597a02dfc880089734e87f1ac7ff62aebb -rcbe0d8adf603bc8372ab683eaf0f27ff8135bed8 --- dialin/hd/alarms.py (.../alarms.py) (revision ab97eb597a02dfc880089734e87f1ac7ff62aebb) +++ dialin/hd/alarms.py (.../alarms.py) (revision cbe0d8adf603bc8372ab683eaf0f27ff8135bed8) @@ -7,8 +7,8 @@ # # @file alarms.py # -# @author (last) Dara Navaei -# @date (last) 21-Dec-2022 +# @author (last) Micahel Garthwaite +# @date (last) 19-Jan-2023 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # @@ -20,6 +20,7 @@ from .constants import RESET, NO_RESET from ..common.msg_defs import MsgIds, MsgFieldPositions +from ..common.hd_defs import HDEventDataType from ..protocols.CAN import DenaliMessage, DenaliChannels from ..utils.base import AbstractSubSystem, publish from ..utils.checks import check_broadcast_interval_override_ms @@ -114,6 +115,7 @@ self.alarm_clear_top_only_flags = [False] * 500 # alarm information + self.alarm_data_type = dict() self.alarm_volume = 0 self.alarm_audio_curr_hg = 0.0 self.alarm_audio_curr_lg = 0.0 @@ -122,6 +124,22 @@ self.alarm_table_button_blockers = [False] * self.AlarmResponseButtons.NUM_OF_HD_ALARM_RESPONSE_BUTTONS.value self.alarm_state_button_blockers = [False] * self.AlarmResponseButtons.NUM_OF_HD_ALARM_RESPONSE_BUTTONS.value + # Loop through the list of the event data type enum and update the dictionary + for data_type in HDEventDataType: + event_data_type = HDEventDataType(data_type).name + struct_unpack_type = None + + # If U32 is in the data type enum (i.e. EVENT_DATA_TYPE_U32), then the key is the enum and the value is + # the corresponding format in the python struct + if 'U32' in event_data_type or 'BOOL' in event_data_type: + struct_unpack_type = 'I' + elif 'S32' in event_data_type: + struct_unpack_type = 'i' + elif 'F32' in event_data_type: + struct_unpack_type = 'f' + + self.alarm_data_type[event_data_type] = struct_unpack_type + def get_current_alarms_state(self): """ Gets the current alarms state. @@ -422,10 +440,19 @@ """ self.logger.debug("Alarm activated!") alarm_id = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) + data_typ_1 = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) - data_1 = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) + # Get the corresponding structure format + struct_data_type = self.alarm_data_type[HDEventDataType(data_typ_1).name] + # Get the data value by unpacking the data type + data_1 = struct.unpack(struct_data_type, bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3])) + data_typ_2 = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4])) - data_2 = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])) + # Get the corresponding structure format + struct_data_type = self.alarm_data_type[HDEventDataType(data_typ_2).name] + # Get the data value by unpacking the data type + data_2 = struct.unpack(struct_data_type, bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5])) + priority = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6])) rank = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_7:MsgFieldPositions.END_POS_FIELD_7])) clr_top_only = struct.unpack('i', bytearray(message['message'][MsgFieldPositions.START_POS_FIELD_8:MsgFieldPositions.END_POS_FIELD_8]))