########################################################################### # # Copyright (c) 2020-2024 Diality Inc. - All Rights Reserved. # # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN # WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. # # @file records_get_responses.py # # @author (last) Zoltan Miskolci # @date (last) 11-Aug-2026 # @author (original) Zoltan Miskolci # @date (original) 11-Aug-2026 # ############################################################################ # Project imports from leahi_dialin.common import dd_enum_repository, disp_enum_repository, fp_enum_repository from leahi_dialin.common.generic_defs import DataTypes from leahi_dialin.common.msg_defs import RequestRejectReasons from leahi_dialin.common.msg_ids import MsgIds from leahi_dialin.protocols.CAN import CanChannels from leahi_dialin.utils.abstract_classes import AbstractSubSystem, LocalVars from leahi_dialin.utils.base import publish class FPRecordsGetHandlers(AbstractSubSystem): """ Part of the FP Records """ def __init__(self, *args, **kwargs): """ The sub record class to handle all the get handlers. """ if self.can_interface is not None: # Data Request Response messages self.can_interface.register_receiving_publication_function(channel_id = CanChannels.fp_sync_broadcast_ch_id, message_id = MsgIds.MSG_ID_FP_UI_NVM_GET_SERVICE_RECORD_RESPONSE.value, function = self._handler_service_record_sync) self.can_interface.register_receiving_publication_function(channel_id = CanChannels.fp_sync_broadcast_ch_id, message_id = MsgIds.MSG_ID_FP_UI_NVM_GET_USAGE_INFO_RECORD_RESPONSE.value, function = self._handler_usage_info_record_sync) # Passing the arguments over to the next class too super().__init__(*args, **kwargs) # ================================================= CAN Message Handler Methods ================================================= @publish([MsgIds.MSG_ID_FP_UI_NVM_GET_SERVICE_RECORD_RESPONSE.name.lower(), "get_service_rec_ack", "get_service_rec_rr", "service_records", "get_service_rec_timestamp"]) def _handler_service_record_sync(self, message, timestamp = 0.0): """ Handles published FP Service Record data messages. FP Service Records are captured for reference. @param message: published data message @return: none """ msg_list = [] msg_list.append((type(self).get_service_rec_ack, DataTypes.BOOL)) msg_list.append((type(self).get_service_rec_rr, DataTypes.U32)) for member in fp_enum_repository.FPServiceRecordFields: if member is not fp_enum_repository.FPServiceRecordFields.NUM_OF_SERVICE_RECORD_FIELDS: msg_list.append((self.service_records, member.name, member.datatype())) self.process_into_vars(decoder_list = msg_list, message = message) # Convert to enum if isinstance(self.get_service_rec_rr, int): self.get_service_rec_rr = RequestRejectReasons(self.get_service_rec_rr) self.get_service_rec_timestamp = timestamp @publish([MsgIds.MSG_ID_FP_UI_NVM_GET_USAGE_INFO_RECORD_RESPONSE.name.lower(), "get_usage_info_rec_ack", "get_usage_info_rec_rr", "usage_info_records", "get_usage_info_rec_timestamp"]) def _handler_usage_info_record_sync(self, message, timestamp = 0.0): """ Handles published FP Usage Information Record data messages. FP Usage Information Records are captured for reference. @param message: published data message @return: none """ msg_list = [] msg_list.append((type(self).get_usage_info_rec_ack, DataTypes.BOOL)) msg_list.append((type(self).get_usage_info_rec_rr, DataTypes.U32)) for member in fp_enum_repository.FPUsageInformationRecordFields: if member is not fp_enum_repository.FPUsageInformationRecordFields.NUM_OF_USAGE_INFO_RECORD_FIELDS: msg_list.append((self.usage_info_records, member.name, member.datatype())) self.process_into_vars(decoder_list = msg_list, message = message) # Convert to enum if isinstance(self.get_usage_info_rec_rr, int): self.get_usage_info_rec_rr = RequestRejectReasons(self.get_usage_info_rec_rr) self.get_usage_info_rec_timestamp = timestamp