]> Repositories - Adafruit_Blinka-hackapet.git/blobdiff - src/adafruit_blinka/microcontroller/nova/i2c.py
Comment out pin import for i2c for now to get it working, implement the rest of spi...
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / nova / i2c.py
index 4e34a7dc1560f108432fa8277cd1d93ce1f5bf47..d6de705a6199f2437bac70acdce0eea246b641af 100644 (file)
@@ -1,37 +1,82 @@
-from adafruit_blinka.microcontroller.nova.pin import Pin
+#from adafruit_blinka.microcontroller.nova.pin import Pin
 
 class I2C:
 
     def __init__(self):
         # change GPIO controller to I2C
-        from pyftdi.i2c import I2cController
-        self._i2c = I2cController()
-        self._i2c.configure('ftdi:///1')
-        Pin.ft232h_gpio = self._i2c.get_gpio()
+        from binhoHostAdapter import binhoHostAdapter
+        from binhoHostAdapter import binhoUtilities
+
+        utilities = binhoUtilities.binhoUtilities()
+        devices = utilities.listAvailableDevices()
+
+        if len(devices) > 0:
+
+            self._nova = binhoHostAdapter.binhoHostAdapter(devices[0])
+            self._nova.setNumericalBase(10)
+            self._nova.setOperationMode(0, "I2C")
+            self._nova.setPullUpStateI2C(0, "EN")
+            self._nova.setClockI2C(0, 400000)
+
+        else:
+            raise RuntimeError('No Binho host adapter found!')
+
+        # Pin.ft232h_gpio = self._i2c.get_gpio()
 
     def scan(self):
-        return [addr for addr in range(0x79) if self._i2c.poll(addr)]
+
+        scanResults = []
+
+        for i in range(8, 121):
+            result = self._nova.scanAddrI2C(0, i<<1)
+
+            resp = result.split(" ")
+
+            if resp[3] == 'OK':
+                scanResults.append(i)
+
+        return scanResults
 
     def writeto(self, address, buffer, *, start=0, end=None, stop=True):
+
         end = end if end else len(buffer)
-        port = self._i2c.get_port(address)
-        port.write(buffer[start:end], relax=stop)
+
+        self._nova.startI2C(0, address)
+
+        for i in range(start, end): 
+            self._nova.writeByteI2C(0, buffer[i])
+
+        if stop:
+            self._nova.endI2C(0)
+        else:
+            self._nova.endI2C(0, True)
 
     def readfrom_into(self, address, buffer, *, start=0, end=None, stop=True):
+
         end = end if end else len(buffer)
-        port = self._i2c.get_port(address)
-        result = port.read(len(buffer[start:end]), relax=stop)
-        for i, b in enumerate(result):
-            buffer[start+i] = b
+
+        result = self._nova.readBytesI2C(0, address, len(buffer[start:end]))
+        resp = result.split(" ")
+
+        for i in range(len(buffer[start:end])):
+            buffer[start+i] = resp[2+i]
 
     def writeto_then_readfrom(self, address, buffer_out, buffer_in, *,
                               out_start=0, out_end=None,
                               in_start=0, in_end=None, stop=False):
+    
         out_end = out_end if out_end else len(buffer_out)
         in_end = in_end if in_end else len(buffer_in)
-        port = self._i2c.get_port(address)
-        result = port.exchange(buffer_out[out_start:out_end],
-                               in_end-in_start,
-                               relax=True).tobytes()
-        for i, b in enumerate(result):
-            buffer_in[in_start+i] = b
+
+        self._nova.startI2C(0, address)
+
+        for i in range(out_start, out_end): 
+            self._nova.writeByteI2C(0, buffer_out[i])
+
+        self._nova.endI2C(0, True)
+
+        result = self._nova.readBytesI2C(0, address, len(buffer_in[in_start:in_end]))
+        resp = result.split(" ")
+
+        for i in range(len(buffer_in[in_start:in_end])):
+            buffer_in[in_start+i] = resp[2+i]