]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/nova/i2c.py
Fixed pylint to check all files and linted
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / nova / i2c.py
1 """I2C Class for Binho Nova"""
2
3 from adafruit_blinka.microcontroller.nova import Connection
4
5
6 class I2C:
7     """Custom I2C Class for Binho Nova"""
8
9     def __init__(self, *, frequency=400000):
10         self._nova = Connection.getInstance()
11         self._nova.setNumericalBase(10)
12         self._nova.setOperationMode(0, "I2C")
13         self._nova.setPullUpStateI2C(0, "EN")
14         self._nova.setClockI2C(0, frequency)
15
16     def scan(self):
17         """Perform an I2C Device Scan"""
18         scanResults = []
19
20         for i in range(8, 121):
21             result = self._nova.scanAddrI2C(0, i << 1)
22
23             resp = result.split(" ")
24
25             if resp[3] == "OK":
26                 scanResults.append(i)
27
28         return scanResults
29
30     def writeto(self, address, buffer, *, start=0, end=None, stop=True):
31         """Write data from the buffer to an address"""
32         end = end if end else len(buffer)
33
34         self._nova.startI2C(0, address << 1)
35
36         for i in range(start, end):
37             self._nova.writeByteI2C(0, buffer[i])
38
39         if stop:
40             self._nova.endI2C(0)
41         else:
42             self._nova.endI2C(0, True)
43
44     # pylint: disable=unused-argument
45     def readfrom_into(self, address, buffer, *, start=0, end=None, stop=True):
46         """Read data from an address and into the buffer"""
47         end = end if end else len(buffer)
48
49         result = self._nova.readBytesI2C(0, address << 1, len(buffer[start:end]))
50
51         if result != "-NG":
52             resp = result.split(" ")
53
54             for i in range(len(buffer[start:end])):
55                 buffer[start + i] = int(resp[2 + i])
56         else:
57             raise RuntimeError(
58                 "Received error response from Binho Nova, result = " + result
59             )
60
61     def writeto_then_readfrom(
62         self,
63         address,
64         buffer_out,
65         buffer_in,
66         *,
67         out_start=0,
68         out_end=None,
69         in_start=0,
70         in_end=None,
71         stop=False
72     ):
73         """Write data from buffer_out to an address and then
74         read data from an address and into buffer_in
75         """
76         out_end = out_end if out_end else len(buffer_out)
77         in_end = in_end if in_end else len(buffer_in)
78
79         self._nova.startI2C(0, address << 1)
80
81         for i in range(out_start, out_end):
82             self._nova.writeByteI2C(0, buffer_out[i])
83
84         self._nova.endI2C(0, True)
85
86         result = self._nova.readBytesI2C(
87             0, address << 1, len(buffer_in[in_start:in_end])
88         )
89
90         if result != "-NG":
91             resp = result.split(" ")
92
93             for i in range(len(buffer_in[in_start:in_end])):
94                 buffer_in[in_start + i] = int(resp[2 + i])
95         else:
96             raise RuntimeError(
97                 "Received error response from Binho Nova, result = " + result
98             )
99
100
101 # pylint: enable=unused-argument