Index: leahi_dialin/dd/modules/events.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r75c97894e28b7cc684fcaf8f7ffba3f8c1bb61d8 --- leahi_dialin/dd/modules/events.py (.../events.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/dd/modules/events.py (.../events.py) (revision 75c97894e28b7cc684fcaf8f7ffba3f8c1bb61d8) @@ -72,11 +72,9 @@ dd_enum_repository.DDOpModes.MODE_ROPS.name: dd_enum_repository.DDROPermeateStates, dd_enum_repository.DDOpModes.MODE_NLEG.name: dd_enum_repository.DDNotLegalStates} - # Define the dictionaries - self._dd_event_dictionary = dict() - # Loop through the list of the DD events enums and initial the event dictionary. Each event is a key in the # dictionary and the value is a list. + self._dd_event_dictionary = dict() for event in dd_enum_repository.DDEventList: self._dd_event_dictionary[dd_enum_repository.DDEventList(event).name] = [] @@ -159,28 +157,26 @@ message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1]))[0] # Convert the event ID to enum event_enum = dd_enum_repository.DDEventList(event_id) + current_timestamp = datetime.now().astimezone().strftime('%Y-%m-%d %H:%M:%S.%f') if event_enum is dd_enum_repository.DDEventList.DD_EVENT_OPERATION_STATUS: - # Get the data type + # Get the data type - irrelevant event_data_type_1 = struct.unpack(DataTypes.U32.unpack_attrib(), bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2]))[0] - event_data_1 = struct.unpack(DataTypes(event_data_type_1).unpack_attrib(), bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] - + # Opmode data is compressed into the 4 byte op_mode = struct.unpack(DataTypes.U08.unpack_attrib(), bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.START_POS_FIELD_4+1]))[0] + message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.START_POS_FIELD_3+1]))[0] sub_mode = struct.unpack(DataTypes.U08.unpack_attrib(), bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4+1:MsgFieldPositions.START_POS_FIELD_4+2]))[0] + message['message'][MsgFieldPositions.START_POS_FIELD_3+1:MsgFieldPositions.START_POS_FIELD_3+2]))[0] sub_state = struct.unpack(DataTypes.U08.unpack_attrib(), bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_4+2:MsgFieldPositions.START_POS_FIELD_4+3]))[0] + message['message'][MsgFieldPositions.START_POS_FIELD_3+2:MsgFieldPositions.START_POS_FIELD_3+3]))[0] _ = struct.unpack(DataTypes.U08.unpack_attrib(), bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4+3:MsgFieldPositions.END_POS_FIELD_4]))[0] - + event_data_type_2 = struct.unpack(DataTypes.U32.unpack_attrib(), bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] + message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] event_data_2 = struct.unpack(DataTypes(event_data_type_2).unpack_attrib(), bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_6:MsgFieldPositions.END_POS_FIELD_6]))[0] - + message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] else: # Get the data type event_data_type_1 = struct.unpack(DataTypes.U32.unpack_attrib(), bytearray( @@ -194,14 +190,14 @@ message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] # Create the event data - current_timestamp = datetime.strptime(last_op_tuple[0], '%Y-%m-%d %H:%M:%S.%f') event_tuple = (current_timestamp, event_enum.name, event_data_1, event_data_2) # Update event data from integer to name if it's op mode change if event_enum is dd_enum_repository.DDEventList.DD_EVENT_OP_MODE_CHANGE: event_data_1 = dd_enum_repository.DDOpModes(event_data_1).name event_data_2 = dd_enum_repository.DDOpModes(event_data_2).name event_tuple = (current_timestamp, event_enum.name, event_data_1, event_data_2) + # Check if the event state name is sub mode change. elif event_enum is dd_enum_repository.DDEventList.DD_EVENT_SUB_MODE_CHANGE: # Get the length of the list of the op mode list @@ -220,6 +216,7 @@ # Get the current and previous operation modes of the last tuple in the list of the sub modes # i.e. (timestamp, event type, prev, current) current_op_mode = last_op_tuple[len(last_op_tuple) - 1] + current_op_mode_timestamp = datetime.strptime(last_op_tuple[0], '%Y-%m-%d %H:%M:%S.%f') sub_mode_list_len = len(self._dd_event_dictionary[dd_enum_repository.DDEventList.DD_EVENT_SUB_MODE_CHANGE.name]) if sub_mode_list_len != 0: @@ -239,11 +236,11 @@ # If the prev and current match respectively, it means the current operation mode has not changed so the # operation mode states can be converted from the current sub mode enum class if current_sub_mode_timestamp != 0: - if current_timestamp <= current_sub_mode_timestamp: + if current_op_mode_timestamp <= current_sub_mode_timestamp: event_data_1 = current_sub_mode_enum_class(event_data_1).name event_data_2 = current_sub_mode_enum_class(event_data_2).name - elif current_timestamp > current_sub_mode_timestamp: + elif current_op_mode_timestamp > current_sub_mode_timestamp: # If the previous and current of the last two tuples do not match, then an operation mode transition # has occurred and the previous state is converted from the previous class and the current op mode # is converted from current operation states enum class. @@ -293,5 +290,4 @@ self.process_into_vars(decoder_list = msg_list, message = message) - self.dd_event_op_mode_timestamp = timestamp