BH1750
82 строки · 4.0 Кб
1# micropython
2# MIT license
3# Copyright (c) 2022 Roman Shevchik goctaprog@gmail.com
4"""service class for I/O bus operation"""
5
6from machine import I2C7
8
9class BusAdapter:10"""Proxy between I/O bus and device I/O class"""11def __init__(self, bus):12self.bus = bus13
14def read_register(self, device_addr: int, reg_addr: int, bytes_count: int) -> bytes:15"""считывает из регистра датчика значение.16device_addr - адрес датчика на шине.
17reg_addr - адрес регистра в адресном пространстве датчика.
18bytes_count - размер значения в байтах.
19reads value from sensor register.
20device_addr - address of the sensor on the bus.
21reg_addr - register address in the address space of the sensor"""
22raise NotImplementedError23
24def write_register(self, device_addr: int, reg_addr: int, value: [int, bytes, bytearray],25bytes_count: int, byte_order: str):26"""записывает данные value в датчик, по адресу reg_addr.27bytes_count - кол-во записываемых байт из value.
28byte_order - порядок расположения байт в записываемом значении.
29writes value data to the sensor, at reg_addr.
30bytes_count - number of bytes written from value.
31byte_order - the order of bytes in the value being written.
32"""
33raise NotImplementedError34
35def read(self, device_addr, n_bytes: int) -> bytes:36raise NotImplementedError37
38def write(self, device_addr, buf: bytes):39raise NotImplementedError40
41
42class I2cAdapter(BusAdapter):43def __init__(self, bus: I2C):44super().__init__(bus)45
46def write_register(self, device_addr: int, reg_addr: int, value: [int, bytes, bytearray],47bytes_count: int, byte_order: str):48"""записывает данные value в датчик, по адресу reg_addr.49bytes_count - кол-во записываемых данных
50value - должно быть типов int, bytes, bytearray"""
51buf = None52if isinstance(value, int):53buf = value.to_bytes(bytes_count, byte_order)54if isinstance(value, (bytes, bytearray)):55buf = value56
57return self.bus.writeto_mem(device_addr, reg_addr, buf)58
59def read_register(self, device_addr: int, reg_addr: int, bytes_count: int) -> bytes:60"""считывает из регистра датчика значение.61bytes_count - размер значения в байтах"""
62return self.bus.readfrom_mem(device_addr, reg_addr, bytes_count)63
64def read(self, device_addr, n_bytes: int) -> bytes:65return self.bus.readfrom(device_addr, n_bytes)66
67def read_buf_from_mem(self, device_addr, mem_addr, buf):68"""Читает из устройства с адресом device_addr в буфер buf, начиная с адреса в устройстве mem_addr.69Количество считываемых байт определяется длинной буфера buf.
70Reads from device address device_addr into buf, starting at the address in device mem_addr.
71The number of bytes read is determined by the length of the buffer buf"""
72return self.bus.readfrom_mem_into(device_addr, mem_addr, buf)73
74def write(self, device_addr, buf: bytes):75return self.bus.writeto(device_addr, buf)76
77def write_buf_to_mem(self, device_addr, mem_addr, buf):78"""Записывает в устройство с адресом device_addr все байты из буфера buf.79Запись начинается с адреса в устройстве: mem_addr.
80Writes to device address device_addr all the bytes in buf.
81The entry starts at an address in the device: mem_addr."""
82return self.bus.writeto_mem(device_addr, mem_addr, buf)83