Index: leahi_dialin/dd/dialysate_delivery.py =================================================================== diff -u -r4c11f61e1e328407ed98a1b81a3e8b0adb278bd5 -rba415df9f8e76d6b0f21e8f69ba99346e42f7b09 --- leahi_dialin/dd/dialysate_delivery.py (.../dialysate_delivery.py) (revision 4c11f61e1e328407ed98a1b81a3e8b0adb278bd5) +++ leahi_dialin/dd/dialysate_delivery.py (.../dialysate_delivery.py) (revision ba415df9f8e76d6b0f21e8f69ba99346e42f7b09) @@ -43,13 +43,13 @@ from .proxies.ro_proxy import ROProxy from .proxies.td_proxy import TDProxy -from ..common.constants import NO_RESET +from ..common.constants import NO_RESET, MSG_HEADER_SIZE from ..common import dd_enum_repository from ..common.generic_defs import DataTypes from ..common.msg_ids import MsgIds from ..common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from ..protocols.CAN import CanMessage, CanMessenger, CanChannels -from leahi_dialin.utils.abstract_classes import AbstractSubSystem +from leahi_dialin.utils.abstract_classes import AbstractSubSystem, LocalVars from leahi_dialin.utils.base import publish, LogManager from ..utils.conversions import integer_to_bytearray, bytearray_to_byte @@ -107,18 +107,16 @@ self.cmd_log_in_to_dd() # create properties - self.dd_op_mode_timestamp = 0.0 #: The timestamp of the latest operation mode message - self.dd_debug_events_timestamp = 0.0 #: The timestamp of the latest events message - self.dd_version_response_timestamp = 0.0 #: The timestamp of the latest DD version info message - self.dd_operation_mode = dd_enum_repository.DDOpModes.MODE_INIT.value #: The Operation Mode's value - self.dd_operation_sub_mode = 0 #: The Operation Sub-Mode's value - self.dd_logged_in = False #: The value showing if the user is logged in or not - self.dd_set_logged_in_status(False) - self.dd_version = None #: The DD's version value - self.dd_fpga_version = None #: The DD's FPGA version value - self.dd_debug_events = [''] * self._DD_DEBUG_EVENT_LIST_COUNT #: The Debug Event's list - self.dd_debug_event_index = 0 #: The index of the last Event - self.dd_last_debug_event = '' #: The name of the last Event + self.dd_op_mode_timestamp = 0.0 #: The timestamp of the latest operation mode message + self.dd_debug_events_timestamp = 0.0 #: The timestamp of the latest events message + self.dd_version_response_timestamp = 0.0 #: The timestamp of the latest DD version info message + self.dd_operation_mode = dd_enum_repository.DDOpModes.MODE_INIT.value + self.dd_operation_sub_mode = 0 + self.dd_version = None + self.dd_fpga_version = None + self.dd_debug_events = [''] * self._DD_DEBUG_EVENT_LIST_COUNT #: The Debug Event's list + self.dd_debug_event_index = 0 #: The index of the last Event + self.dd_last_debug_event = '' #: The name of the last Event # Create command groups self.alarms = DDAlarms(self.can_interface, self.logger) #: The Alarms module @@ -150,23 +148,66 @@ self.td_proxy = TDProxy(self.can_interface, self.logger) #: The TD Proxy module (imitates commands sent by UI) - def dd_set_logged_in_status(self, logged_in: bool = False): + + +# ============================================================ Properties ============================================================ + @property + def dd_operation_mode(self) -> int: """ - Callback for dd logged in status change. - - @param logged_in: Logged in status for DD - @return: None + The current Operation Mode """ - self.dd_logged_in = logged_in + return self._op_mode + @dd_operation_mode.setter + def dd_operation_mode(self, value): + self._op_mode = value + + @property + def dd_operation_sub_mode(self) -> int: + """ + The current Operation Sub Mode + """ + return self._sub_mode + + @dd_operation_sub_mode.setter + def dd_operation_sub_mode(self, value): + self._sub_mode = value + + + @property + def dd_version(self) -> str: + """ + The DD Version data + """ + return self._dd_version + + @dd_version.setter + def dd_version(self, value): + self._dd_version = value + + + @property + def dd_fpga_version(self) -> str: + """ + The DD FPGA Version data + """ + return self._fpga_version + + @dd_fpga_version.setter + def dd_fpga_version(self, value): + self._fpga_version = value + + + +# ============================================================ Handlers ============================================================ @publish(["msg_id_dd_debug_event", "dd_debug_events_timestamp","dd_debug_events"]) def _handler_dd_debug_event_sync(self, message, timestamp = 0.0): payload = message['message'] message_length = payload[self._DD_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 @@ -192,11 +233,10 @@ @return: None """ msg_list = [] - msg_list.append(('self.dd_operation_mode', DataTypes.U32)) - msg_list.append(('self.dd_operation_sub_mode', DataTypes.U32)) + msg_list.append((type(self).dd_operation_mode, DataTypes.U32)) + msg_list.append((type(self).dd_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.dd_op_mode_timestamp = timestamp @@ -209,31 +249,42 @@ @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) - - if all([each is not None for each in [result['major'], result['minor'], result['micro'], result['build'], result['compatibility']]]): - self.dd_version = f"v{result['major']}.{result['minor']}.{result['micro']}-{result['build']}.{result['compatibility']}" - self.logger.debug(f'DD VERSION: {self.dd_version}') + self.process_into_vars(decoder_list = msg_list, message = message) - if all([each is not None for each in [result['fpga_id'], result['fpga_major'], result['fpga_minor'], result['fpga_lab']]]): - self.dd_fpga_version = f"v{result['fpga_id']}.{result['fpga_major']}.{result['fpga_minor']}-{result['fpga_lab']}" - self.logger.debug(f'DD FPGA VERSION: {self.dd_fpga_version}') + if all([each is not None for each in [major.value, minor.value, micro.value, build.value, compatibility.value]]): + self.dd_version = f"v{major.value}.{minor.value}.{micro.value}-{build.value}.{compatibility.value}" + self.logger.debug(f'TD VERSION: {self.dd_version}') + if all([each is not None for each in [fpga_id.value, fpga_major.value, fpga_minor.value, fpga_lab.value]]): + self.dd_fpga_version = f"v{fpga_id.value}.{fpga_major.value}.{fpga_minor.value}-{fpga_lab.value}" + self.logger.debug(f'TD FPGA VERSION: {self.dd_fpga_version}') + self.dd_version_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