]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/nova/i2c.py
Add support for digitalio pins
[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     def scan(self):
25
26         scanResults = []
27
28         for i in range(8, 121):
29             result = self._nova.scanAddrI2C(0, i<<1)
30
31             resp = result.split(" ")
32
33             if resp[3] == 'OK':
34                 scanResults.append(i)
35
36         return scanResults
37
38     def writeto(self, address, buffer, *, start=0, end=None, stop=True):
39
40         end = end if end else len(buffer)
41
42         self._nova.startI2C(0, address)
43
44         for i in range(start, end): 
45             self._nova.writeByteI2C(0, buffer[i])
46
47         if stop:
48             self._nova.endI2C(0)
49         else:
50             self._nova.endI2C(0, True)
51
52     def readfrom_into(self, address, buffer, *, start=0, end=None, stop=True):
53
54         end = end if end else len(buffer)
55
56         result = self._nova.readBytesI2C(0, address, len(buffer[start:end]))
57         resp = result.split(" ")
58
59         for i in range(len(buffer[start:end])):
60             buffer[start+i] = resp[2+i]
61
62     def writeto_then_readfrom(self, address, buffer_out, buffer_in, *,
63                               out_start=0, out_end=None,
64                               in_start=0, in_end=None, stop=False):
65     
66         out_end = out_end if out_end else len(buffer_out)
67         in_end = in_end if in_end else len(buffer_in)
68
69         self._nova.startI2C(0, address)
70
71         for i in range(out_start, out_end): 
72             self._nova.writeByteI2C(0, buffer_out[i])
73
74         self._nova.endI2C(0, True)
75
76         result = self._nova.readBytesI2C(0, address, len(buffer_in[in_start:in_end]))
77         resp = result.split(" ")
78
79         for i in range(len(buffer_in[in_start:in_end])):
80             buffer_in[in_start+i] = resp[2+i]