BH1750

Форк
0
/
bus_service.py 
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

6
from machine import I2C
7

8

9
class BusAdapter:
10
    """Proxy between I/O bus and device I/O class"""
11
    def __init__(self, bus):
12
        self.bus = bus
13

14
    def read_register(self, device_addr: int, reg_addr: int, bytes_count: int) -> bytes:
15
        """считывает из регистра датчика значение.
16
        device_addr - адрес датчика на шине.
17
        reg_addr - адрес регистра в адресном пространстве датчика.
18
        bytes_count - размер значения в байтах.
19
        reads value from sensor register.
20
        device_addr - address of the sensor on the bus.
21
        reg_addr - register address in the address space of the sensor"""
22
        raise NotImplementedError
23

24
    def write_register(self, device_addr: int, reg_addr: int, value: [int, bytes, bytearray],
25
                       bytes_count: int, byte_order: str):
26
        """записывает данные value в датчик, по адресу reg_addr.
27
        bytes_count - кол-во записываемых байт из value.
28
        byte_order - порядок расположения байт в записываемом значении.
29
        writes value data to the sensor, at reg_addr.
30
        bytes_count - number of bytes written from value.
31
        byte_order - the order of bytes in the value being written.
32
        """
33
        raise NotImplementedError
34

35
    def read(self, device_addr, n_bytes: int) -> bytes:
36
        raise NotImplementedError
37

38
    def write(self, device_addr, buf: bytes):
39
        raise NotImplementedError
40

41

42
class I2cAdapter(BusAdapter):
43
    def __init__(self, bus: I2C):
44
        super().__init__(bus)
45

46
    def write_register(self, device_addr: int, reg_addr: int, value: [int, bytes, bytearray],
47
                       bytes_count: int, byte_order: str):
48
        """записывает данные value в датчик, по адресу reg_addr.
49
        bytes_count - кол-во записываемых данных
50
        value - должно быть типов int, bytes, bytearray"""
51
        buf = None
52
        if isinstance(value, int):
53
            buf = value.to_bytes(bytes_count, byte_order)
54
        if isinstance(value, (bytes, bytearray)):
55
            buf = value
56

57
        return self.bus.writeto_mem(device_addr, reg_addr, buf)
58

59
    def read_register(self, device_addr: int, reg_addr: int, bytes_count: int) -> bytes:
60
        """считывает из регистра датчика значение.
61
        bytes_count - размер значения в байтах"""
62
        return self.bus.readfrom_mem(device_addr, reg_addr, bytes_count)
63

64
    def read(self, device_addr, n_bytes: int) -> bytes:
65
        return self.bus.readfrom(device_addr, n_bytes)
66
    
67
    def read_buf_from_mem(self, device_addr, mem_addr, buf):
68
        """Читает из устройства с адресом device_addr в буфер buf, начиная с адреса в устройстве mem_addr.
69
        Количество считываемых байт определяется длинной буфера buf.
70
        Reads from device address device_addr into buf, starting at the address in device mem_addr.
71
        The number of bytes read is determined by the length of the buffer buf"""
72
        return self.bus.readfrom_mem_into(device_addr, mem_addr, buf)
73

74
    def write(self, device_addr, buf: bytes):
75
        return self.bus.writeto(device_addr, buf)
76

77
    def write_buf_to_mem(self, device_addr, mem_addr, buf):
78
        """Записывает в устройство с адресом device_addr все байты из буфера buf.
79
        Запись начинается с адреса в устройстве: mem_addr.
80
        Writes to device address device_addr all the bytes in buf.
81
        The entry starts at an address in the device: mem_addr."""
82
        return self.bus.writeto_mem(device_addr, mem_addr, buf)
83

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.