Index: leahi_dialin/td/treatment_delivery.py =================================================================== diff -u -r3dc5b82f0b6f0ad88f51e709ec969b3f62af5240 -r81e359d6c7ced081bd4580ec3e6cc38939781c6a --- leahi_dialin/td/treatment_delivery.py (.../treatment_delivery.py) (revision 3dc5b82f0b6f0ad88f51e709ec969b3f62af5240) +++ leahi_dialin/td/treatment_delivery.py (.../treatment_delivery.py) (revision 81e359d6c7ced081bd4580ec3e6cc38939781c6a) @@ -42,15 +42,15 @@ from .proxies.dd_proxy import DDProxy from .proxies.ui_proxy import UIProxy -from ..common.constants import NO_RESET -from ..common.msg_defs import MsgIds, MsgFieldPositions -from ..common import td_enum_repository -from ..common.generic_defs import DataTypes -from ..common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override -from ..protocols.CAN import CanMessage, CanMessenger, CanChannels -from ..utils.abstract_classes import AbstractSubSystem -from ..utils.base import publish, LogManager -from ..utils.conversions import integer_to_bytearray, bytearray_to_byte +from leahi_dialin.common.constants import NO_RESET, MSG_HEADER_SIZE +from leahi_dialin.common.msg_ids import MsgIds +from leahi_dialin.common import td_enum_repository +from leahi_dialin.common.generic_defs import DataTypes +from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override +from leahi_dialin.protocols.CAN import CanMessage, CanMessenger, CanChannels +from leahi_dialin.utils.abstract_classes import AbstractSubSystem, LocalVars +from leahi_dialin.utils.base import publish, LogManager +from leahi_dialin.utils.conversions import integer_to_bytearray, bytearray_to_byte class TD(AbstractSubSystem): @@ -115,19 +115,16 @@ self.td_debug_events_timestamp = 0.0 #: The timestamp of the latest events message self.ui_version_info_response_timestamp = 0.0 #: The timestamp of the latest UI version info message self.td_version_response_timestamp = 0.0 #: The timestamp of the latest TD version info message - self.td_operation_mode = td_enum_repository.TDOpModes.MODE_INIT.value #: The Operation Mode's value - self.td_operation_sub_mode = 0 #: The Operation Sub-Mode's value - self.td_logged_in = False #: The value showing if the user is logged in or not - self.td_set_logged_in_status(False) - self.ui_version = None #: The UI's version value - self.td_version = None #: The TD's version value - self.td_fpga_version = None #: The TD's FPGA version value + self.td_operation_mode = td_enum_repository.TDOpModes.MODE_INIT.value + self.td_operation_sub_mode = 0 + self.ui_version = None + self.td_version = None + self.td_fpga_version = None self.td_debug_events = [''] * self._TD_DEBUG_EVENT_LIST_COUNT #: The Debug Event's list self.td_debug_event_index = 0 #: The index of the last Event self.td_last_debug_event = '' #: The name of the last Event # Create command groups - self.air_pump = TDAirPump(self.can_interface, self.logger) #: The Air Pump module self.air_trap = TDAirTrap(self.can_interface, self.logger) #: The Air Trap module self.alarms = TDAlarms(self.can_interface, self.logger) #: The Alarms module @@ -152,18 +149,82 @@ self.ui_proxy = UIProxy(self.can_interface, self.logger) #: The UI Proxy module (imitates commands sent by UI) + +# ============================================================ Properties ============================================================ + @property + def td_operation_mode(self) -> int: + """ + The Operation Mode + """ + return self._op_mode + + @td_operation_mode.setter + def td_operation_mode(self, value): + self._op_mode = value + + + @property + def td_operation_sub_mode(self) -> int: + """ + The Operation Sub Mode + """ + return self._sub_mode + + @td_operation_sub_mode.setter + def td_operation_sub_mode(self, value): + self._sub_mode = value + + + @property + def ui_version(self) -> int: + """ + The UI Version data + """ + return self._ui_version + + @ui_version.setter + def ui_version(self, value): + self._ui_version = value + + + @property + def td_version(self) -> str: + """ + The TD Version data + """ + return self._td_version + + @td_version.setter + def td_version(self, value): + self._td_version = value + + + @property + def td_fpga_version(self) -> str: + """ + The TD FPGA Version data + """ + return self._fpga_version + + @td_fpga_version.setter + def td_fpga_version(self, value): + self._fpga_version = value + + + +# ============================================================ Handlers ============================================================ @publish(["msg_id_td_debug_event", "td_debug_events_timestamp","td_debug_events"]) def _handler_td_debug_event_sync(self, message, timestamp = 0.0): payload = message['message'] message_length = payload[self._TD_DEBUG_EVENT_MSG_LEN_INDEX] temp_message = '' - index = MsgFieldPositions.START_POS_FIELD_1 + index = MSG_HEADER_SIZE for i in range(0, message_length): # Loop through the length and get the - char, char_index = bytearray_to_byte(payload, index + i, False) + char, index = bytearray_to_byte(payload, index, False) # The return value is the incremented index temp_message += chr(char) self.td_debug_events_timestamp = timestamp @@ -175,16 +236,7 @@ self.td_debug_event_index = 0 - def td_set_logged_in_status(self, logged_in: bool = False): - """ - Callback for td logged in status change. - @param logged_in: Logged in status for TD - @return: None - """ - self.td_logged_in = logged_in - - @publish(["msg_id_td_op_mode_data", "td_op_mode_timestamp","td_operation_mode", "td_operation_sub_mode"]) def _handler_td_op_mode_sync(self, message, timestamp = 0.0): """ @@ -195,11 +247,10 @@ @return: None """ msg_list = [] - msg_list.append(('self.td_operation_mode', DataTypes.U32)) - msg_list.append(('self.td_operation_sub_mode', DataTypes.U32)) + msg_list.append((type(self).td_operation_mode, DataTypes.U32)) + msg_list.append((type(self).td_operation_sub_mode, DataTypes.U32)) - self.process_into_vars(decoder_list = msg_list, - message = message) + self.process_into_vars(decoder_list = msg_list, message = message) self.td_op_mode_timestamp = timestamp @@ -212,26 +263,35 @@ @return: None if not successful, the version string if unpacked successfully """ + major = LocalVars('major') + minor = LocalVars('minor') + micro = LocalVars('micro') + build = LocalVars('build') + fpga_id = LocalVars('fpga_id') + fpga_major = LocalVars('fpga_major') + fpga_minor = LocalVars('fpga_minor') + fpga_lab = LocalVars('fpga_lab') + compatibility = LocalVars('compatibility') + msg_list = [] - msg_list.append(('major', DataTypes.U08)) - msg_list.append(('minor', DataTypes.U08)) - msg_list.append(('micro', DataTypes.U08)) - msg_list.append(('build', DataTypes.U16)) - msg_list.append(('fpga_id', DataTypes.U08)) - msg_list.append(('fpga_major', DataTypes.U08)) - msg_list.append(('fpga_minor', DataTypes.U08)) - msg_list.append(('fpga_lab', DataTypes.U08)) - msg_list.append(('compatibility', DataTypes.U32)) + msg_list.append((major, DataTypes.U08)) + msg_list.append((minor, DataTypes.U08)) + msg_list.append((micro, DataTypes.U08)) + msg_list.append((build, DataTypes.U16)) + msg_list.append((fpga_id, DataTypes.U08)) + msg_list.append((fpga_major, DataTypes.U08)) + msg_list.append((fpga_minor, DataTypes.U08)) + msg_list.append((fpga_lab, DataTypes.U08)) + msg_list.append((compatibility, DataTypes.U32)) - result = self.process_into_vars(decoder_list = msg_list, - message = message) + self.process_into_vars(decoder_list = msg_list, message = message) - if all([each is not None for each in [result['major'], result['minor'], result['micro'], result['build'], result['compatibility']]]): - self.td_version = f"v{result['major']}.{result['minor']}.{result['micro']}-{result['build']}.{result['compatibility']}" + if all([each is not None for each in [major.value, minor.value, micro.value, build.value, compatibility.value]]): + self.td_version = f"v{major.value}.{minor.value}.{micro.value}-{build.value}.{compatibility.value}" self.logger.debug(f'TD VERSION: {self.td_version}') - if all([each is not None for each in [result['fpga_id'], result['fpga_major'], result['fpga_minor'], result['fpga_lab']]]): - self.td_fpga_version = f"v{result['fpga_id']}.{result['fpga_major']}.{result['fpga_minor']}-{result['fpga_lab']}" + if all([each is not None for each in [fpga_id.value, fpga_major.value, fpga_minor.value, fpga_lab.value]]): + self.td_fpga_version = f"v{fpga_id.value}.{fpga_major.value}.{fpga_minor.value}-{fpga_lab.value}" self.logger.debug(f'TD FPGA VERSION: {self.td_fpga_version}') self.td_version_response_timestamp = timestamp @@ -251,24 +311,32 @@ @return: None if not successful, the version string if unpacked successfully """ + major = LocalVars('major') + minor = LocalVars('minor') + micro = LocalVars('micro') + build = LocalVars('build') + compatibility = LocalVars('compatibility') + msg_list = [] - msg_list.append(('major', DataTypes.U08)) - msg_list.append(('minor', DataTypes.U08)) - msg_list.append(('micro', DataTypes.U08)) - msg_list.append(('build', DataTypes.U16)) - msg_list.append(('compatibility', DataTypes.U32)) + msg_list.append((major, DataTypes.U08)) + msg_list.append((minor, DataTypes.U08)) + msg_list.append((micro, DataTypes.U08)) + msg_list.append((build, DataTypes.U16)) + msg_list.append((compatibility, DataTypes.U32)) - result = self.process_into_vars(decoder_list = msg_list, - message = message) + self.process_into_vars(decoder_list = msg_list, message = message) - if all([each is not None for each in [result['major'], result['minor'], result['micro'], result['build'], result['compatibility']]]): - self.ui_version = f"v{result['major']}.{result['minor']}.{result['micro']}-{result['build']}.{result['compatibility']}" + if all([each is not None for each in [major.value, minor.value, micro.value, build.value, compatibility.value]]): + self.ui_version = f"v{major.value}.{minor.value}.{micro.value}-{build.value}.{compatibility.value}" self.logger.debug(f'UI VERSION: {self.ui_version}') else: self.ui_version = None self.logger.debug("Failed to retrieve UI Version.") self.ui_version_info_response_timestamp = timestamp + + +# ============================================================ Overrides and Requests ============================================================ def cmd_op_mode_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the measured op mode broadcast interval override command @@ -310,7 +378,6 @@ if received_message is not None: if received_message['message'][CanMessage.PAYLOAD_START_INDEX] == 1: self.logger.debug("Success: Logged In") - self.td_set_logged_in_status(True) #self._send_td_checkin_message() # Timer starts interval first #self.can_interface.transmit_interval_dictionary[self.callback_id].start() else: