Index: leahi_dialin/td/treatment_delivery.py =================================================================== diff -u -r3e8c15745640db0568536912a36704a567bd73c2 -r3f4937e339925dde0b95f08e49969f8983c5cba4 --- leahi_dialin/td/treatment_delivery.py (.../treatment_delivery.py) (revision 3e8c15745640db0568536912a36704a567bd73c2) +++ leahi_dialin/td/treatment_delivery.py (.../treatment_delivery.py) (revision 3f4937e339925dde0b95f08e49969f8983c5cba4) @@ -40,13 +40,13 @@ 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.constants import NO_RESET, MSG_HEADER_SIZE +from ..common.msg_defs import MsgIds 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.abstract_classes import AbstractSubSystem, LocalVars from ..utils.base import publish, LogManager from ..utils.conversions import integer_to_bytearray, bytearray_to_byte @@ -113,19 +113,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 @@ -148,18 +145,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 current 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 current 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) -> int: + """ + 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) -> int: + """ + 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 @@ -171,16 +232,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): """ @@ -191,11 +243,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 @@ -208,26 +259,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 @@ -247,24 +307,44 @@ @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 + + +# ============================================================ Support ============================================================ + 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 + + + +# ============================================================ 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