Index: leahi_dialin/td/modules/events.py =================================================================== diff -u -r6caa49d072aceb2655d605de5d2eea52ab1a8911 -r27d9de42c0111c7f369cc335889fe6b988d09cc8 --- leahi_dialin/td/modules/events.py (.../events.py) (revision 6caa49d072aceb2655d605de5d2eea52ab1a8911) +++ leahi_dialin/td/modules/events.py (.../events.py) (revision 27d9de42c0111c7f369cc335889fe6b988d09cc8) @@ -63,27 +63,25 @@ 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, - 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, - td_enum_repository.TDTreatmentStates.TREATMENT_BLOOD_PRIME_STATE.name: td_enum_repository.TDTreaBloodPrimeStates, - td_enum_repository.TDTreatmentStates.TREATMENT_DIALYSIS_STATE.name:td_enum_repository.TDTreaDialysisStates, - td_enum_repository.TDTreatmentStates.TREATMENT_PAUSED_STATE.name:td_enum_repository.TDTreaPausedStates, - td_enum_repository.TDTreatmentStates.TREATMENT_RINSEBACK_STATE.name:td_enum_repository.TDTreaRinsebackStates, - td_enum_repository.TDTreatmentStates.TREATMENT_RECIRC_STATE.name:td_enum_repository.TDTreaRecircStates, - td_enum_repository.TDTreatmentStates.TREATMENT_END_STATE.name:td_enum_repository.TDTreaEndStates, - td_enum_repository.TDTreatmentStates.TREATMENT_SALINE_BOLUS_STATE.name:td_enum_repository.TDTreaBolusStates } + self._sub_mode_2_states = {td_enum_repository.TDPreTreatmentModesStates.SELF_TEST_DRY_STATE.name: td_enum_repository.TDPreTreaDrySelfTestStates, + td_enum_repository.TDPreTreatmentModesStates.PRIME_STATE.name: td_enum_repository.TDPreTreaPrimeStates, + td_enum_repository.TDPreTreatmentModesStates.RECIRCULATE_STATE.name: td_enum_repository.TDPreTreaRecircStates, + td_enum_repository.TDPreTreatmentModesStates.PATIENT_CONNECTION_STATE.name: td_enum_repository.TDPreTreaPatientConnectStates, + td_enum_repository.TDTreatmentStates.BLOOD_PRIME_STATE.name: td_enum_repository.TDTreaBloodPrimeStates, + td_enum_repository.TDTreatmentStates.DIALYSIS_STATE.name:td_enum_repository.TDTreaDialysisStates, + td_enum_repository.TDTreatmentStates.PAUSED_STATE.name:td_enum_repository.TDTreaPausedStates, + td_enum_repository.TDTreatmentStates.RINSEBACK_STATE.name:td_enum_repository.TDTreaRinsebackStates, + td_enum_repository.TDTreatmentStates.RECIRC_STATE.name:td_enum_repository.TDTreaRecircStates, + td_enum_repository.TDTreatmentStates.END_STATE.name:td_enum_repository.TDTreaEndStates, + td_enum_repository.TDTreatmentStates.SALINE_BOLUS_STATE.name:td_enum_repository.TDTreaBolusStates } # Dictionary of the state as key and the sub state enum class as the value - self._state_2_sub_states = {td_enum_repository.TDPreTreaSampleWaterStates.SAMPLE_WATER_STATE.name: td_enum_repository.TDPreTreaSamplWaterUserActionStates, - td_enum_repository.TDPreTreaPrimeStates.TD_PRIME_WET_SELF_TESTS_STATE.name: td_enum_repository.TDWetSelfTestsStates, - td_enum_repository.TDTreaBloodPrimeStates.BLOOD_PRIME_RUN_STATE.name: td_enum_repository.TDTreaBloodPrimeUserActionStates, - td_enum_repository.TDTreaRinsebackStates.RINSEBACK_RUN_STATE.name: td_enum_repository.TDTreaRinsebackUserActionStates, - td_enum_repository.TDTreaRecircStates.TREATMENT_RECIRC_RECIRC_STATE.name: td_enum_repository.TDTreaRecircUserActionStates, - td_enum_repository.TDTreaEndStates.TREATMENT_END_WAIT_FOR_RINSEBACK_STATE.name: td_enum_repository.TDTreaEndUserActionStates } + self._state_2_sub_states = {td_enum_repository.TDPreTreaSampleWaterStates.STATE.name: td_enum_repository.TDPreTreaSamplWaterUserActionStates, + td_enum_repository.TDPreTreaPrimeStates.WET_SELF_TESTS_STATE.name: td_enum_repository.TDWetSelfTestsStates, + td_enum_repository.TDTreaBloodPrimeStates.RUN_STATE.name: td_enum_repository.TDTreaBloodPrimeUserActionStates, + td_enum_repository.TDTreaRinsebackStates.RUN_STATE.name: td_enum_repository.TDTreaRinsebackUserActionStates, + td_enum_repository.TDTreaRecircStates.RECIRC_STATE.name: td_enum_repository.TDTreaRecircUserActionStates, + td_enum_repository.TDTreaEndStates.WAIT_FOR_RINSEBACK_STATE.name: td_enum_repository.TDTreaEndUserActionStates } # Loop through the list of the TD events enums and initial the event dictionary. Each event is a key in the # dictionary and the value is a list. @@ -119,39 +117,43 @@ 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.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) # Check if the event state name is operation mode change. If it is, get the name of the operation modes # from the op modes enum class - if event_enum is td_enum_repository.TDEventList.TD_EVENT_OP_MODE_CHANGE: + if event_enum is td_enum_repository.TDEventList.OP_MODE_CHANGE: data_1 = td_enum_repository.TDOpModes(data_1.value).name data_2 = td_enum_repository.TDOpModes(data_2.value).name event_tuple = (current_timestamp, event_enum.name, data_1.value, data_2.value) # Check if the event state name is sub mode change. - elif event_enum is td_enum_repository.TDEventList.TD_EVENT_SUB_MODE_CHANGE: + elif event_enum is td_enum_repository.TDEventList.SUB_MODE_CHANGE: # Get the Op Mode Change messages - op_modes_list = self._event_dictionary[td_enum_repository.TDEventList.TD_EVENT_OP_MODE_CHANGE.name] + op_modes_list = self._event_dictionary[td_enum_repository.TDEventList.OP_MODE_CHANGE.name] # If there are Op mode change messages, use it to determine the operation mode for the current submode change # Index description: @@ -161,7 +163,7 @@ # 3: Current Op / Sub Mode if len(op_modes_list) != 0: # Get the Sub Mode Change messages - sub_mode_list = self._event_dictionary[td_enum_repository.TDEventList.TD_EVENT_SUB_MODE_CHANGE.name] + sub_mode_list = self._event_dictionary[td_enum_repository.TDEventList.SUB_MODE_CHANGE.name] last_op_mode_message = op_modes_list[-1] # Check if this is not the very first Sub Mode Change message @@ -192,7 +194,7 @@ # to identify the Op Modes for the Sub Modes else: # Get the Operation Status Change messages - op_status_list = self._event_dictionary[td_enum_repository.TDEventList.TD_EVENT_OPERATION_STATUS.name] + op_status_list = self._event_dictionary[td_enum_repository.TDEventList.OPERATION_STATUS.name] data_2_found = False event_1_op_mode = self.UNKNOWN_STATE @@ -232,8 +234,8 @@ # Update the tuple 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) + elif event_enum is td_enum_repository.TDEventList.OPERATION_STATUS: + 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 @@ -303,17 +305,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 @@ -322,15 +328,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