]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
Add support for digitalio pins
authorFrancis Guevarra <francis@binho.io>
Wed, 20 Nov 2019 02:01:09 +0000 (18:01 -0800)
committerFrancis Guevarra <francis@binho.io>
Mon, 2 Dec 2019 23:32:21 +0000 (15:32 -0800)
src/adafruit_blinka/board/binho_nova.py
src/adafruit_blinka/microcontroller/nova/i2c.py
src/adafruit_blinka/microcontroller/nova/pin.py
src/digitalio.py

index cf33423851e7737e19ff218f471539bdd0aaa591..430abb39e2207a384b32218fecb7c30af9ab012e 100644 (file)
@@ -1,24 +1,7 @@
-"""
 from adafruit_blinka.microcontroller.nova import pin
 
-D4 = pin.D4
-D5 = pin.D5
-D6 = pin.D6
-D7 = pin.D7
-C0 = pin.C0
-C1 = pin.C1
-C2 = pin.C2
-C3 = pin.C3
-C4 = pin.C4
-C5 = pin.C5
-C6 = pin.C6
-C7 = pin.C7
-
-SDA = pin.SDA
-SCL = pin.SCL
-
-SCK = pin.SCK
-SCLK = pin.SCLK
-MOSI = pin.MOSI
-MISO = pin.MISO
-"""
+IO0 = pin.IO0
+IO1 = pin.IO1
+IO2 = pin.IO2
+IO3 = pin.IO3
+IO4 = pin.IO4
index d6de705a6199f2437bac70acdce0eea246b641af..bf36e2acd455b630e346b536d33d827159a0d283 100644 (file)
@@ -21,8 +21,6 @@ class I2C:
         else:
             raise RuntimeError('No Binho host adapter found!')
 
-        # Pin.ft232h_gpio = self._i2c.get_gpio()
-
     def scan(self):
 
         scanResults = []
index 30dbc6688905cec2019a106b371964d6f3f95811..945de2573fc6bbdd7bc6506b74e6b53a670166c3 100644 (file)
@@ -1,80 +1,55 @@
 class Pin:
-    """A basic Pin class for use with FT232H."""
+    """A basic Pin class for use with Binho Nova."""
 
-    IN = 0
-    OUT = 1
+    IN = 'DIN'
+    OUT = 'DOUT'
+    AIN = 'AIN'
+    AOUT = 'AOUT'
+    PWM = 'PWM'
     LOW = 0
     HIGH = 1
 
-    ft232h_gpio = None
+    _nova = None
 
     def __init__(self, pin_id=None):
-        # setup GPIO controller if not done yet
-        # use one provided by I2C as default
-        if not Pin.ft232h_gpio:
-            from pyftdi.i2c import I2cController
-            i2c = I2cController()
-            i2c.configure("ftdi:///1")
-            Pin.ft232h_gpio = i2c.get_gpio()
+        if not Pin._nova:
+            from binhoHostAdapter import binhoHostAdapter
+            from binhoHostAdapter import binhoUtilities
+
+            utilities = binhoUtilities.binhoUtilities()
+            devices = utilities.listAvailableDevices()
+
+            if len(devices) > 0:
+                Pin._nova = binhoHostAdapter.binhoHostAdapter(devices[0])
         # check if pin is valid
-        if pin_id:
-            if Pin.ft232h_gpio.all_pins & 1 << pin_id == 0:
-                raise ValueError("Can not use pin {} as GPIO.".format(pin_id))
-        # ID is just bit position
+        if pin_id > 4:
+            raise ValueError("Invalid pin {}.".format(pin_id))
+
         self.id = pin_id
 
     def init(self, mode=IN, pull=None):
-        if not self.id:
+        if self.id is None:
             raise RuntimeError("Can not init a None type pin.")
-        # FT232H does't have configurable internal pulls?
+        # Nova does't have configurable internal pulls for 
         if pull:
             raise ValueError("Internal pull up/down not currently supported.")
-        pin_mask = Pin.ft232h_gpio.pins | 1 << self.id
-        current = Pin.ft232h_gpio.direction
-        if mode == self.OUT:
-            current |= 1 << self.id
-        else:
-            current &= ~(1 << self.id)
-        Pin.ft232h_gpio.set_direction(pin_mask, current)
+        Pin._nova.setIOpinMode(self.id, mode)
 
     def value(self, val=None):
-        if not self.id:
+        if self.id is None:
             raise RuntimeError("Can not access a None type pin.")
-        current = Pin.ft232h_gpio.read(with_output=True)
         # read
         if val is None:
-            return 1 if current & 1 << self.id != 0 else 0
+            return int(Pin._nova.getIOpinValue(self.id).split('VALUE ')[1])
         # write
         elif val in (self.LOW, self.HIGH):
-            if val == self.HIGH:
-                current |= 1 << self.id
-            else:
-                current &= ~(1 << self.id)
-            # must mask out any input pins
-            Pin.ft232h_gpio.write(current & Pin.ft232h_gpio.direction)
-        # release the kraken
+            Pin._nova.setIOpinValue(self.id, val)
         else:
             raise RuntimeError("Invalid value for pin")
 
 # create pin instances for each pin
-# D0 to D3 are used by I2C/SPI
-D4 = Pin(4)
-D5 = Pin(5)
-D6 = Pin(6)
-D7 = Pin(7)
-C0 = Pin(8)
-C1 = Pin(9)
-C2 = Pin(10)
-C3 = Pin(11)
-C4 = Pin(12)
-C5 = Pin(13)
-C6 = Pin(14)
-C7 = Pin(15)
-# C8 and C9 are not GPIO
-
-# create None type pins for I2C and SPI since they are expected to be defined
-SCL = Pin()
-SDA = Pin()
-SCK = SCLK = Pin()
-MOSI = Pin()
-MISO = Pin()
+IO0 = Pin(0)
+IO1 = Pin(1)
+IO2 = Pin(2)
+IO3 = Pin(3)
+IO4 = Pin(4)
index c02c4d51d8de45a5761f85418a17a63dd8d0a018..ed497cc76addd339b7ad68c9a43fab9be11bf58c 100755 (executable)
@@ -35,6 +35,8 @@ elif detector.chip.IMX8MX:
     from adafruit_blinka.microcontroller.nxp_imx8m.pin import Pin
 elif detector.board.ftdi_ft232h:
     from adafruit_blinka.microcontroller.ft232h.pin import Pin
+elif detector.board.binho_nova:
+    from adafruit_blinka.microcontroller.nova.pin import Pin
 elif detector.chip.STM32:
     from machine import Pin
 from adafruit_blinka import Enum, ContextManaged