]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/nova/i2c.py
f62e73e95ba82fbd09c5c8171f0798dac26e57b1
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / nova / i2c.py
1 from adafruit_blinka.microcontroller.nova.pin import Pin
2
3 class I2C:
4
5     def __init__(self):
6         # change GPIO controller to I2C
7         from binhoHostAdapter import binhoHostAdapter
8         from binhoHostAdapter import binhoUtilities
9
10         utilities = binhoUtilities.binhoUtilities()
11         devices = utilities.listAvailableDevices()
12
13         if len(devices) > 0:
14
15             self._nova = binhoHostAdapter.binhoHostAdapter(devices[0])
16             self._nova.setNumericalBase(10)
17             self._nova.setOperationMode(0, "I2C")
18             self._nova.setPullUpStateI2C(0, "EN")
19             self._nova.setClockI2C(0, 400000)
20
21         else:
22             raise RuntimeError('No Binho host adapter found!')
23
24         # Pin.ft232h_gpio = self._i2c.get_gpio()
25
26     def scan(self):
27
28         scanResults = []
29
30         for i in range(8, 121):
31             result = self._nova.scanAddrI2C(0, i<<1)
32
33             resp = result.split(" ")
34
35             if resp[3] == 'OK':
36                 scanResults.append(i)
37
38         return scanResults
39
40     def writeto(self, address, buffer, *, start=0, end=None, stop=True):
41
42         end = end if end else len(buffer)
43
44         self._nova.startI2C(0, address)
45
46         for i in range(start, end): 
47             self._nova.writeByteI2C(0, buffer[i])
48
49         if stop:
50             self._nova.endI2C(0)
51         else:
52             self._nova.endI2C(0, True)
53
54     def readfrom_into(self, address, buffer, *, start=0, end=None, stop=True):
55
56         end = end if end else len(buffer)
57
58         result = self._nova.readBytesI2C(0, address, len(buffer(start:end)))
59         resp = result.split(" ")
60
61         for i in range(len(buffer(start:end))):
62             buffer[start+i] = resp[2+i]
63
64     def writeto_then_readfrom(self, address, buffer_out, buffer_in, *,
65                               out_start=0, out_end=None,
66                               in_start=0, in_end=None, stop=False):
67     
68         out_end = out_end if out_end else len(buffer_out)
69         in_end = in_end if in_end else len(buffer_in)
70
71         self._nova.startI2C(0, address)
72
73         for i in range(out_start, out_end): 
74             self._nova.writeByteI2C(0, buffer_out[i])
75
76         self._nova.endI2C(0, True)
77
78         result = self._nova.readBytesI2C(0, address, len(buffer_in(in_start:in_end)))
79         resp = result.split(" ")
80
81         for i in range(len(buffer_in(in_start:in_end))):
82             buffer_in[in_start+i] = resp[2+i]