From: Francis Guevarra Date: Wed, 20 Nov 2019 02:01:09 +0000 (-0800) Subject: Add support for digitalio pins X-Git-Tag: 3.1.0^2~13 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/28f9b9ec689e55a09366cc6bf8d03f170bec6db8 Add support for digitalio pins --- diff --git a/src/adafruit_blinka/board/binho_nova.py b/src/adafruit_blinka/board/binho_nova.py index cf33423..430abb3 100644 --- a/src/adafruit_blinka/board/binho_nova.py +++ b/src/adafruit_blinka/board/binho_nova.py @@ -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 diff --git a/src/adafruit_blinka/microcontroller/nova/i2c.py b/src/adafruit_blinka/microcontroller/nova/i2c.py index d6de705..bf36e2a 100644 --- a/src/adafruit_blinka/microcontroller/nova/i2c.py +++ b/src/adafruit_blinka/microcontroller/nova/i2c.py @@ -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 = [] diff --git a/src/adafruit_blinka/microcontroller/nova/pin.py b/src/adafruit_blinka/microcontroller/nova/pin.py index 30dbc66..945de25 100644 --- a/src/adafruit_blinka/microcontroller/nova/pin.py +++ b/src/adafruit_blinka/microcontroller/nova/pin.py @@ -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) diff --git a/src/digitalio.py b/src/digitalio.py index c02c4d5..ed497cc 100755 --- a/src/digitalio.py +++ b/src/digitalio.py @@ -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