Index: leahi_dialin/fp/filtration_purification.py =================================================================== diff -u -r4bbcf07a714e5b38fb117023694cb0be0bd3815d -rba415df9f8e76d6b0f21e8f69ba99346e42f7b09 --- leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision 4bbcf07a714e5b38fb117023694cb0be0bd3815d) +++ leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision ba415df9f8e76d6b0f21e8f69ba99346e42f7b09) @@ -31,13 +31,13 @@ from .proxies.dd_proxy import DDProxy -from ..common.constants import NO_RESET +from ..common.constants import NO_RESET, MSG_HEADER_SIZE from ..common import fp_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 @@ -103,20 +103,19 @@ self.cmd_log_in_to_fp() # configuration records - self.fp_defeatured = False #: The FP is defeaturized or not + self.fp_defeatured = False self.fp_defeatured_timestamp = 0.0 #: The timestamp of the latest defeatured message - self.fp_p40_installed = False #: The P40 Boost Pump is installed or not + self.fp_p40_installed = False self.fp_p40_installed_timestamp = 0.0 #: The timestamp of the latest P40 Boost Pump is installed message # create properties self.fp_op_mode_timestamp = 0.0 #: The timestamp of the latest operation mode message self.fp_debug_events_timestamp = 0.0 #: The timestamp of the latest events message self.fp_version_response_timestamp = 0.0 #: The timestamp of the latest FP version info message - self.fp_operation_mode = fp_enum_repository.FPOpModes.MODE_INIT.value #: The Operation Mode's value - self.fp_operation_sub_mode = 0 #: The Operation Sub-Mode's value - self.fp_logged_in = False #: The value showing if the user is logged in or not - self.fp_version = None #: The FP's version value - self.fp_fpga_version = None #: The FP's FPGA version value + self.fp_operation_mode = fp_enum_repository.FPOpModes.MODE_INIT.value + self.fp_operation_sub_mode = 0 + self.fp_version = None + self.fp_fpga_version = None self.fp_debug_events = [''] * self._FP_DEBUG_EVENT_LIST_COUNT #: The Debug Event's list self.fp_debug_event_index = 0 #: The index of the last Event self.fp_last_debug_event = '' #: The name of the last Event @@ -139,6 +138,82 @@ self.dd_proxy = DDProxy(self.can_interface, self.logger, fp = self) #: The DD Proxy module (imitates commands sent by DD) + +# ============================================================ Properties ============================================================ + @property + def fp_operation_mode(self) -> int: + """ + The current Operation Mode + """ + return self._op_mode + + @fp_operation_mode.setter + def fp_operation_mode(self, value): + self._op_mode = value + + + @property + def fp_operation_sub_mode(self) -> int: + """ + The current Operation Sub Mode + """ + return self._sub_mode + + @fp_operation_sub_mode.setter + def fp_operation_sub_mode(self, value): + self._sub_mode = value + + + @property + def fp_version(self) -> str: + """ + The FP Version data + """ + return self._fp_version + + @fp_version.setter + def fp_version(self, value): + self._fp_version = value + + + @property + def fp_fpga_version(self) -> str: + """ + The FP FPGA Version data + """ + return self._fpga_version + + @fp_fpga_version.setter + def fp_fpga_version(self, value): + self._fpga_version = value + + + @property + def fp_defeatured(self) -> bool: + """ + The FP Defeatured data + """ + return self._defeatured + + @fp_defeatured.setter + def fp_defeatured(self, value: bool): + self._defeatured = value + + + @property + def fp_p40_installed(self) -> bool: + """ + The FP P40 (Boost Pump) installed information + """ + return self._p40_installed + + @fp_p40_installed.setter + def fp_p40_installed(self, value: bool): + self._p40_installed = value + + + +# ============================================================ Handlers ============================================================ @publish(["msg_id_fp_debug_event", "fp_debug_events_timestamp","fp_debug_events"]) def _handler_fp_debug_event_sync(self, message, timestamp = 0.0): """ @@ -151,7 +226,7 @@ message_length = payload[self._FP_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 @@ -176,28 +251,37 @@ @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.fp_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.fp_version = f"v{major.value}.{minor.value}.{micro.value}-{build.value}.{compatibility.value}" self.logger.debug(f'FP VERSION: {self.fp_version}') - if all([each is not None for each in [result['fpga_id'], result['fpga_major'], result['fpga_minor'], result['fpga_lab']]]): - self.fp_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.fp_fpga_version = f"v{fpga_id.value}.{fpga_major.value}.{fpga_minor.value}-{fpga_lab.value}" self.logger.debug(f'FP FPGA VERSION: {self.fp_fpga_version}') - + self.fp_version_response_timestamp = timestamp @@ -211,11 +295,10 @@ @return: None """ msg_list = [] - msg_list.append(('self.fp_operation_mode', DataTypes.U32)) - msg_list.append(('self.fp_operation_sub_mode', DataTypes.U32)) + msg_list.append((type(self).fp_operation_mode, DataTypes.U32)) + msg_list.append((type(self).fp_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.fp_op_mode_timestamp = timestamp @@ -228,10 +311,9 @@ @return: None """ msg_list = [] - msg_list.append(('self.fp_defeatured', DataTypes.BOOL)) + msg_list.append((type(self).fp_defeatured, DataTypes.BOOL)) - self.process_into_vars(decoder_list = msg_list, - message = message) + self.process_into_vars(decoder_list = msg_list, message = message) self.fp_defeatured_timestamp = timestamp @@ -244,13 +326,14 @@ @return: None """ msg_list = [] - msg_list.append(('self.fp_p40_installed', DataTypes.BOOL)) + msg_list.append((type(self).fp_p40_installed, DataTypes.BOOL)) - self.process_into_vars(decoder_list = msg_list, - message = message) + self.process_into_vars(decoder_list = msg_list, message = message) self.fp_p40_installed_timestamp = timestamp + +# ============================================================ Overrides and Requests ============================================================ def cmd_request_defeatured_status(self) -> int: """ Constructs and sends the FP defeatured status request @@ -260,7 +343,7 @@ @return: 1 if successful, zero otherwise """ message = CanMessage.build_message(channel_id=CanChannels.dialin_to_fp_ch_id, - message_id=MsgIds.MSG_ID_FP_DEF_STATUS_REQUEST.value) + message_id=MsgIds.MSG_ID_FP_DEF_STATUS_REQUEST.value) self.logger.debug('Getting FP defeatured status') received_message = self.can_interface.send(message) @@ -285,7 +368,7 @@ """ # ToDo: Update the msg id when FW part of LDT-3779 is implemented message = CanMessage.build_message(channel_id=CanChannels.dialin_to_fp_ch_id, - message_id=MsgIds.MSG_ID_FP_BOOST_PUMP_INSTALL_STATUS_REQUEST.value) + message_id=MsgIds.MSG_ID_FP_BOOST_PUMP_INSTALL_STATUS_REQUEST.value) self.logger.debug('Getting FP P40 Boost Pump installed status') received_message = self.can_interface.send(message) @@ -331,8 +414,8 @@ @return: 1 if logged in, 0 if log in failed """ message = CanMessage.build_message(channel_id=CanChannels.dialin_to_fp_ch_id, - message_id=MsgIds.MSG_ID_FP_TESTER_LOGIN_REQUEST.value, - payload=list(map(int, map(ord, self.FP_LOGIN_PASSWORD)))) + message_id=MsgIds.MSG_ID_FP_TESTER_LOGIN_REQUEST.value, + payload=list(map(int, map(ord, self.FP_LOGIN_PASSWORD)))) self.logger.debug("Logging in...") @@ -342,7 +425,6 @@ if received_message is not None: if received_message['message'][CanMessage.PAYLOAD_START_INDEX] == 1: self.logger.debug("Success: Logged In") - self.fp_logged_in = True self.cmd_request_defeatured_status() #self._send_ro_checkin_message() # Timer starts interval first #self.can_interface.transmit_interval_dictionary[self.callback_id].start()