Index: leahi_dialin/td/modules/events.py =================================================================== diff -u -r2cd5cb76b0c2045695d9a890e5489fb50e6dba89 -r3b0a81ce7a7bee195a26fdcb9f1ad387088fb26d --- leahi_dialin/td/modules/events.py (.../events.py) (revision 2cd5cb76b0c2045695d9a890e5489fb50e6dba89) +++ leahi_dialin/td/modules/events.py (.../events.py) (revision 3b0a81ce7a7bee195a26fdcb9f1ad387088fb26d) @@ -61,9 +61,7 @@ td_enum_repository.TDOpModes.MODE_NLEG.name: td_enum_repository.TDNotLegalStates } # Dictionary of the sub-mode as key and the state enum class as the value - self._sub_mode_2_states = {td_enum_repository.TDPreTreatmentModesStates.TD_PRE_TREATMENT_WATER_SAMPLE_STATE.name: td_enum_repository.TDPreTreaSampleWaterStates, - td_enum_repository.TDPreTreatmentModesStates.TD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE.name: td_enum_repository.TDPreTreaNoCartSelfTestStates, - td_enum_repository.TDPreTreatmentModesStates.TD_PRE_TREATMENT_SELF_TEST_DRY_STATE.name: td_enum_repository.TDPreTreaDrySelfTestStates, + self._sub_mode_2_states = {td_enum_repository.TDPreTreatmentModesStates.TD_PRE_TREATMENT_SELF_TEST_DRY_STATE.name: td_enum_repository.TDPreTreaDrySelfTestStates, td_enum_repository.TDPreTreatmentModesStates.TD_PRE_TREATMENT_PRIME_STATE.name: td_enum_repository.TDPreTreaPrimeStates, td_enum_repository.TDPreTreatmentModesStates.TD_PRE_TREATMENT_RECIRCULATE_STATE.name: td_enum_repository.TDPreTreaRecircStates, td_enum_repository.TDPreTreatmentModesStates.TD_PRE_TREATMENT_PATIENT_CONNECTION_STATE.name: td_enum_repository.TDPreTreaPatientConnectStates, @@ -115,25 +113,29 @@ msg_list = [] msg_list.append((event_id, DataTypes.U32)) - if event_enum is td_enum_repository.TDEventList.TD_EVENT_OPERATION_STATUS: - msg_list.append((data_typ_1, DataTypes.U32)) # It's not used in operation status case - msg_list.append((op_mode, DataTypes.U08)) - msg_list.append((sub_mode, DataTypes.U08)) - msg_list.append((state, DataTypes.U08)) - msg_list.append((sub_state, DataTypes.U08)) - msg_list.append((data_typ_2, DataTypes.U32)) - msg_list.append((data_2, 'data_typ_2')) - else: - msg_list.append((data_typ_1, DataTypes.U32)) - msg_list.append((data_1, 'data_typ_1')) - msg_list.append((data_typ_2, DataTypes.U32)) - msg_list.append((data_2, 'data_typ_2')) self.process_into_vars(decoder_list = msg_list, message = message) # Convert the event ID to enum event_enum = td_enum_repository.TDEventList(event_id.value) + msg_list_2 = [] + if event_enum is td_enum_repository.TDEventList.TD_EVENT_OPERATION_STATUS: + msg_list_2.append((data_typ_1, DataTypes.U32)) # It's not used in operation status case + msg_list_2.append((op_mode, DataTypes.U08)) + msg_list_2.append((sub_mode, DataTypes.U08)) + msg_list_2.append((state, DataTypes.U08)) + msg_list_2.append((sub_state, DataTypes.U08)) + msg_list_2.append((data_typ_2, DataTypes.U32)) + msg_list_2.append((data_2, 'data_typ_2')) + else: + msg_list_2.append((data_typ_1, DataTypes.U32)) + msg_list_2.append((data_1, 'data_typ_1')) + msg_list_2.append((data_typ_2, DataTypes.U32)) + msg_list_2.append((data_2, 'data_typ_2')) + + self.process_into_vars(decoder_list = msg_list_2, message = message, start_from_byte = DataTypes.U32.size()) + # Get the current timestamp and create a tuple of the current events current_timestamp = datetime.now().astimezone().strftime('%Y-%m-%d %H:%M:%S.%f') event_tuple = (current_timestamp, event_enum.name, data_1.value, data_2.value) @@ -229,7 +231,7 @@ event_tuple = (current_timestamp, event_enum.name, data_1.value, data_2.value) elif event_enum is td_enum_repository.TDEventList.TD_EVENT_OPERATION_STATUS: - op_mode_enum, sub_mode_enum, state_enum, _ = self._operation_status_match(op_mode=op_mode, sub_mode=sub_mode, state=sub_state) + op_mode_enum, sub_mode_enum, state_enum, _ = self._operation_status_match(op_mode=op_mode.value, sub_mode=sub_mode.value, state=sub_state.value) event_tuple = (current_timestamp, op_mode_enum, sub_mode_enum, state_enum) # Update event dictionary @@ -298,17 +300,21 @@ return list_of_events - def _operation_status_match(self, op_mode: int, sub_mode: int=None, state:int=None, sub_state: int=None) -> Tuple[DialinEnum, Union[DialinEnum, int], Union[DialinEnum, int], Union[DialinEnum, int]]: + def _operation_status_match(self, op_mode: int, sub_mode: int=None, state:int=None, sub_state: int=None, debug: bool=False) -> Tuple[DialinEnum, Union[DialinEnum, int], Union[DialinEnum, int], Union[DialinEnum, int]]: """ Convert operation status values to enums. :param op_mode: (Integer) The operation mode value :param sub_mode: (Integer) The operation sub mode value :param state: (Integer) The operation state value :param sub_state: (Integer) The operation sub state value + :param debug: (Boolean) Print debug data or not :return: Returns the DialinEnum for each provied mode/state, or the original integer value if no enum is found """ op_mode_enum = td_enum_repository.TDOpModes(op_mode) + if debug: + print(f'\nDebug op_mode: {op_mode}') + print(f'Debug op_mode_enum: {op_mode_enum}') sub_mode_enum = None state_enum = None sub_state_enum = None @@ -317,15 +323,24 @@ sub_mode_enum = sub_mode else: sub_mode_enum = self._op_mode_2_sub_mode[op_mode_enum.name](sub_mode) + if debug: + print(f'Debug sub_mode: {sub_mode}') + print(f'Debug sub_mode_enum: {sub_mode_enum}') if state is not None: - if sub_mode_enum.name not in self._sub_mode_2_states: + if sub_mode_enum.name not in self._sub_mode_2_states or len(self._sub_mode_2_states[sub_mode_enum.name]) < state: state_enum = state else: state_enum = self._sub_mode_2_states[sub_mode_enum.name](state) + if debug: + print(f'Debug state: {state}') + print(f'Debug state_enum: {state_enum}') if sub_state is not None: if state_enum.name not in self._state_2_sub_states: sub_state_enum = sub_state else: sub_state_enum = self._state_2_sub_states[state_enum.name](sub_state) + if debug: + print(f'Debug sub_state: {sub_state}') + print(f'Debug sub_state_enum: {sub_state_enum}') return op_mode_enum, sub_mode_enum, state_enum, sub_state_enum