from abc import abstractmethod, ABCMeta from nbus_types.nbus_data_fomat import * from nbus_types.nbus_parameter_type import * from nbus_types.nbus_address_type import NBusDeviceAddress @beartype class NBusSlaveDevice(metaclass=ABCMeta): def __init__(self, address: NBusDeviceAddress): self.__address = address self.__data_format = None self.__parameters = None @property def address(self): return self.__address @property def data_format(self): return self.__data_format @data_format.setter def data_format(self, data_format: NBusDataFormat) -> None: self.__data_format = data_format @property def parameters(self): return self.__parameters @parameters.setter def parameters(self, values): self.__parameters = values """ ================================================================================================================ Device Interface ================================================================================================================ """ @abstractmethod def data_params_loaded(self) -> bool: """ Verify that all necessary parameters are loaded before performing data get/set conversion. :return: true if ready for conversion, otherwise False """ pass @abstractmethod def map_param_get(self, param_id: NBusParameterType, param_value: int) -> NBusParameterValue: """ Convert a parameter from cmd_get_param() to its engineering range. :param param_id: the ID of the parameter :param param_value: the value of the parameter in binary format :return: the converted parameter value in engineering units """ pass @abstractmethod def map_param_set(self, param_id: NBusParameterType, param_value: NBusParameterValue) -> int: """ Convert a parameter to its binary range for cmd_set_data(). :param param_id: the ID of the parameter :param param_value: the value of the parameter in engineering units :return: the converted parameter value in binary format """ pass @abstractmethod def map_data_get(self, values: list[int]) -> list[NBusDataValue]: """ Convert data from cmd_get_data() to its engineering range. :param values: a list of values in binary format to be converted :return: a list of converted values in engineering units """ pass @abstractmethod def map_data_set(self, values: list[NBusDataValue]) -> list[int]: """ Convert data to its binary range for cmd_set_data(). :param values: a list of values in engineering range to be converted :return: a list of converted values in binary format """ pass