nbus_slave_device.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. from abc import abstractmethod, ABCMeta
  2. from nbus_types.nbus_data_fomat import *
  3. from nbus_types.nbus_parameter_type import *
  4. from nbus_types.nbus_address_type import NBusDeviceAddress
  5. @beartype
  6. class NBusSlaveDevice(metaclass=ABCMeta):
  7. def __init__(self, address: NBusDeviceAddress):
  8. self.__address = address
  9. self.__data_format = None
  10. self.__parameters = None
  11. @property
  12. def address(self):
  13. return self.__address
  14. @property
  15. def data_format(self):
  16. return self.__data_format
  17. @data_format.setter
  18. def data_format(self, data_format: NBusDataFormat) -> None:
  19. self.__data_format = data_format
  20. @property
  21. def parameters(self):
  22. return self.__parameters
  23. @parameters.setter
  24. def parameters(self, values):
  25. self.__parameters = values
  26. """
  27. ================================================================================================================
  28. Device Interface
  29. ================================================================================================================
  30. """
  31. @abstractmethod
  32. def data_params_loaded(self) -> bool:
  33. """
  34. Verify that all necessary parameters are loaded
  35. before performing data get/set conversion.
  36. :return: true if ready for conversion, otherwise False
  37. """
  38. pass
  39. @abstractmethod
  40. def map_param_get(self, param_id: NBusParameterType, param_value: int) -> NBusParameterValue:
  41. """
  42. Convert a parameter from cmd_get_param() to its engineering range.
  43. :param param_id: the ID of the parameter
  44. :param param_value: the value of the parameter in binary format
  45. :return: the converted parameter value in engineering units
  46. """
  47. pass
  48. @abstractmethod
  49. def map_param_set(self, param_id: NBusParameterType, param_value: NBusParameterValue) -> int:
  50. """
  51. Convert a parameter to its binary range for cmd_set_data().
  52. :param param_id: the ID of the parameter
  53. :param param_value: the value of the parameter in engineering units
  54. :return: the converted parameter value in binary format
  55. """
  56. pass
  57. @abstractmethod
  58. def map_data_get(self, values: list[int]) -> list[NBusDataValue]:
  59. """
  60. Convert data from cmd_get_data() to its engineering range.
  61. :param values: a list of values in binary format to be converted
  62. :return: a list of converted values in engineering units
  63. """
  64. pass
  65. @abstractmethod
  66. def map_data_set(self, values: list[NBusDataValue]) -> list[int]:
  67. """
  68. Convert data to its binary range for cmd_set_data().
  69. :param values: a list of values in engineering range to be converted
  70. :return: a list of converted values in binary format
  71. """
  72. pass