]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
fix merge conflict in branch
authorMelissa LeBlanc-Williams <melissa@adafruit.com>
Thu, 16 Apr 2020 15:37:06 +0000 (08:37 -0700)
committerMelissa LeBlanc-Williams <melissa@adafruit.com>
Thu, 16 Apr 2020 15:37:06 +0000 (08:37 -0700)
13 files changed:
src/adafruit_blinka/board/onion/__init__.py [new file with mode: 0644]
src/adafruit_blinka/board/onion/omega2.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/generic_linux/periphery_pin.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/generic_linux/spi.py
src/adafruit_blinka/microcontroller/mips24kec/__init__.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/mips24kec/pin.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/mips24kec/spi.py [new file with mode: 0755]
src/adafruit_blinka/microcontroller/mips24kec/spi2.py [new file with mode: 0755]
src/board.py
src/busio.py
src/digitalio.py
src/microcontroller/__init__.py
src/microcontroller/pin.py

diff --git a/src/adafruit_blinka/board/onion/__init__.py b/src/adafruit_blinka/board/onion/__init__.py
new file mode 100644 (file)
index 0000000..ab79770
--- /dev/null
@@ -0,0 +1 @@
+"""Boards definition from Onion"""
diff --git a/src/adafruit_blinka/board/onion/omega2.py b/src/adafruit_blinka/board/onion/omega2.py
new file mode 100644 (file)
index 0000000..2fccd66
--- /dev/null
@@ -0,0 +1,34 @@
+"""Pin definitions for the Onion Omega2+ Expansion Dock."""
+
+from adafruit_blinka.microcontroller.mips24kec import pin
+
+D0 = pin.GPIO0
+D1 = pin.GPIO1
+D2 = pin.GPIO2
+D3 = pin.GPIO3
+
+D4 = pin.GPIO4
+D5 = pin.GPIO5
+D6 = pin.GPIO6
+D7 = pin.GPIO7
+D8 = pin.GPIO8
+D9 = pin.GPIO9
+
+D11 = pin.GPIO11
+D15 = pin.GPIO15    #RGB LED Blue
+D16 = pin.GPIO16    #RGB LED Green
+D17 = pin.GPIO17    #RGB LED Red
+D18 = pin.GPIO18
+D19 = pin.GPIO19
+
+SDA = pin.I2C0_SDA
+SCL = pin.I2C0_SCL
+
+SCLK = pin.SPI0_SCLK
+MOSI = pin.SPI0_MOSI
+MISO = pin.SPI0_MISO
+CS = pin.SPI0_CS
+SCK = SCLK
+
+UART_TX = pin.UART1_TX
+UART_RX = pin.UART1_RX
diff --git a/src/adafruit_blinka/microcontroller/generic_linux/periphery_pin.py b/src/adafruit_blinka/microcontroller/generic_linux/periphery_pin.py
new file mode 100644 (file)
index 0000000..daa3240
--- /dev/null
@@ -0,0 +1,72 @@
+try:
+    from periphery import GPIO
+except ImportError:
+    raise ImportError("Periphery Python bindings not found, please install and try again! Try running 'pip3 install python-periphery'")
+
+# Pins dont exist in CPython so...lets make our own!
+class Pin:
+    IN = "in"
+    OUT = "out"
+    LOW = 0
+    HIGH = 1
+    PULL_NONE = 0
+    PULL_UP = 1
+    PULL_DOWN = 2
+    _CONSUMER = 'adafruit_blinka'
+
+    id = None
+    _value = LOW
+    _mode = IN
+
+    def __init__(self, pin_id):
+        self.id = pin_id
+        if type(pin_id) is tuple:
+            self._num = int(pin_id[1])
+            self._chippath = "/dev/gpiochip{}".format(pin_id[0])
+        else:
+            self._num = int(pin_id)
+            self._chippath = "/dev/gpiochip0"
+        self._line = None
+
+    def __repr__(self):
+        return str(self.id)
+
+    def __eq__(self, other):
+        return self.id == other
+
+    def init(self, mode=IN, pull=None):
+        if mode != None:
+            if mode == self.IN:
+                self._mode = self.IN
+                if self._line is not None:
+                    self._line.close()
+                self._line = GPIO(self._chippath, int(self._num), self.IN)
+            elif mode == self.OUT:
+                self._mode = self.OUT
+                if self._line is not None:
+                    self._line.close()
+                self._line = GPIO(self._chippath, int(self._num), self.OUT)
+            else:
+                raise RuntimeError("Invalid mode for pin: %s" % self.id)
+
+            if pull != None:
+                if pull == self.PULL_UP:
+                    raise NotImplementedError("Internal pullups not supported in periphery, use physical resistor instead!")
+                elif pull == self.PULL_DOWN:
+                    raise NotImplementedError("Internal pulldowns not supported in periphery, use physical resistor instead!")
+                else:
+                    raise RuntimeError("Invalid pull for pin: %s" % self.id)
+
+    def value(self, val=None):
+        if val != None:
+            if val == self.LOW:
+                self._value = val
+                self._line.write(False)
+            elif val == self.HIGH:
+                self._value = val
+                self._line.write(True)
+            else:
+                raise RuntimeError("Invalid value for pin")
+        else:
+            return self.HIGH if self._line.read() else self.LOW
+
index 520f491cf69558eca6664ad5d546544f9a148e3c..01b885bb50c35a629d72af9474767ced2b71d9c8 100755 (executable)
@@ -67,7 +67,7 @@ class SPI:
             end = len(buf)
         try:
             #self._spi.open(self._port, 0)
             end = len(buf)
         try:
             #self._spi.open(self._port, 0)
-            self.set_no_cs()
+            #self.set_no_cs()
             self._spi.max_speed_hz = self.baudrate
             self._spi.mode = self.mode
             self._spi.bits_per_word = self.bits
             self._spi.max_speed_hz = self.baudrate
             self._spi.mode = self.mode
             self._spi.bits_per_word = self.bits
@@ -91,7 +91,7 @@ class SPI:
             raise RuntimeError('Buffer slices must be of equal length.')
         try:
             #self._spi.open(self._port, 0)
             raise RuntimeError('Buffer slices must be of equal length.')
         try:
             #self._spi.open(self._port, 0)
-            self.set_no_cs()
+            #self.set_no_cs()
             self._spi.max_speed_hz = self.baudrate
             self._spi.mode = self.mode
             self._spi.bits_per_word = self.bits
             self._spi.max_speed_hz = self.baudrate
             self._spi.mode = self.mode
             self._spi.bits_per_word = self.bits
diff --git a/src/adafruit_blinka/microcontroller/mips24kec/__init__.py b/src/adafruit_blinka/microcontroller/mips24kec/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/adafruit_blinka/microcontroller/mips24kec/pin.py b/src/adafruit_blinka/microcontroller/mips24kec/pin.py
new file mode 100644 (file)
index 0000000..980ee7d
--- /dev/null
@@ -0,0 +1,69 @@
+from adafruit_blinka.microcontroller.generic_linux.periphery_pin import Pin
+
+GPIO0 = Pin(0)
+GPIO1 = Pin(1)
+GPIO2 = Pin(2)
+GPIO3 = Pin(3)
+GPIO4 = Pin(4)  #I2C SDA
+GPIO5 = Pin(5)  #I2C SCL
+GPIO6 = Pin(6)  #SPI CS
+GPIO7 = Pin(7)  #SPI SCLK
+GPIO8 = Pin(8)  #SPI MOSI
+GPIO9 = Pin(9)  #SPI MISO
+GPIO10 = Pin(10)
+
+GPIO11 = Pin(11)
+GPIO12 = Pin(12)
+GPIO13 = Pin(13)
+GPIO14 = Pin(14)
+GPIO15 = Pin(15)
+GPIO16 = Pin(16)
+GPIO17 = Pin(17)
+
+GPIO18 = Pin(18)
+GPIO19 = Pin(19)
+
+GPIO20 = Pin(20)
+GPIO21 = Pin(21)
+GPIO22 = Pin(22)
+GPIO23 = Pin(23)
+
+GPIO37 = Pin((1, 5))
+GPIO38 = Pin((1, 6))
+GPIO43 = Pin((1, 11))
+GPIO44 = Pin((1, 12))
+GPIO45 = Pin((1, 13))
+GPIO46 = Pin((1, 14))
+
+UART0_TX = GPIO12
+UART0_RX = GPIO13
+
+UART1_TX = GPIO45
+UART1_RX = GPIO46
+
+UART2_TX = GPIO20
+UART2_RX = GPIO21
+
+SPI0_MOSI = GPIO8
+SPI0_MISO = GPIO9
+SPI0_SCLK = GPIO7
+SPI0_CS = GPIO6
+
+I2C0_SDA = GPIO4
+I2C0_SCL = GPIO5
+
+# ordered as i2cId, sclId, sdaId
+i2cPorts = (
+    (0, I2C0_SCL, I2C0_SDA),
+)
+
+# ordered as spiId, sckId, mosiId, misoId
+spiPorts = (
+    ((0, 1), SPI0_SCLK, SPI0_MOSI, SPI0_MISO),
+)
+
+# ordered as uartId, txId, rxId
+uartPorts = (
+    (0, UART0_TX, UART0_RX),
+    (1, UART1_TX, UART1_RX),
+)
diff --git a/src/adafruit_blinka/microcontroller/mips24kec/spi.py b/src/adafruit_blinka/microcontroller/mips24kec/spi.py
new file mode 100755 (executable)
index 0000000..4c802ea
--- /dev/null
@@ -0,0 +1,106 @@
+import spidev
+import time
+from adafruit_blinka.agnostic import detector
+
+class SPI:
+    MSB = 0
+    LSB = 1
+    CPHA = 1
+    CPOL = 2
+
+    baudrate = 100000
+    mode = 0
+    bits = 8
+
+    def __init__(self, portid):
+        if isinstance(portid, tuple):
+            self._bus_id = portid[0]
+            self._device_id = portid[1]
+        else:
+            self._bus_id = portid
+            self._device_id = 0
+        self._spi = spidev.SpiDev()
+
+    def init(self, baudrate=100000, polarity=0, phase=0, bits=8,
+                  firstbit=MSB, sck=None, mosi=None, miso=None):
+        mode = 0
+        if polarity:
+            mode |= self.CPOL
+        if phase:
+            mode |= self.CPHA
+
+        self.clock_pin = sck
+        self.mosi_pin = mosi
+        self.miso_pin = miso
+        self.baudrate = baudrate
+        self.mode = mode
+        self.bits = bits
+        self.chip = detector.chip
+
+    def set_no_cs(self):
+        # No kernel seems to support this, so we're just going to pass
+        pass
+
+    @property
+    def frequency(self):
+        return self.baudrate
+
+    def write(self, buf, start=0, end=None):
+        if not buf:
+            return
+        if end is None:
+            end = len(buf)
+        try:
+            self._spi.open(self._bus_id, self._device_id)
+            self.set_no_cs()
+            self._spi.max_speed_hz = self.baudrate
+            self._spi.mode = self.mode
+            self._spi.bits_per_word = self.bits
+            self._spi.writebytes(buf[start:end])
+            self._spi.close()
+        except FileNotFoundError as not_found:
+            print("Could not open SPI device - check if SPI is enabled in kernel!")
+            raise
+
+    def readinto(self, buf, start=0, end=None, write_value=0):
+        if not buf:
+            return
+        if end is None:
+            end = len(buf)
+        try:
+            self._spi.open(self._bus_id, self._device_id)
+            self.set_no_cs()
+            self._spi.max_speed_hz = self.baudrate
+            self._spi.mode = self.mode
+            self._spi.bits_per_word = self.bits
+            data = self._spi.xfer3([write_value],(end-start))
+            for i in range(end-start):  # 'readinto' the given buffer
+              buf[start+i] = data[i]
+            self._spi.close()
+        except FileNotFoundError as not_found:
+            print("Could not open SPI device - check if SPI is enabled in kernel!")
+            raise
+
+    def write_readinto(self, buffer_out, buffer_in, out_start=0,
+                       out_end=None, in_start=0, in_end=None):
+        if not buffer_out or not buffer_in:
+            return
+        if out_end is None:
+            out_end = len(buffer_out)
+        if in_end is None:
+            in_end = len(buffer_in)
+        if out_end - out_start != in_end - in_start:
+            raise RuntimeError('Buffer slices must be of equal length.')
+        try:
+            self._spi.open(self._bus_id, self._device_id)
+            self.set_no_cs()
+            self._spi.max_speed_hz = self.baudrate
+            self._spi.mode = self.mode
+            self._spi.bits_per_word = self.bits
+            data = self._spi.xfer(list(buffer_out[out_start:out_end+1]))
+            for i in range((in_end - in_start)):
+                buffer_in[i+in_start] = data[i]
+            self._spi.close()
+        except FileNotFoundError as not_found:
+            print("Could not open SPI device - check if SPI is enabled in kernel!")
+            raise
diff --git a/src/adafruit_blinka/microcontroller/mips24kec/spi2.py b/src/adafruit_blinka/microcontroller/mips24kec/spi2.py
new file mode 100755 (executable)
index 0000000..1ad3c9b
--- /dev/null
@@ -0,0 +1,93 @@
+from periphery import SPI
+import time
+from adafruit_blinka.agnostic import detector
+
+class SPI:
+    MSB = 0
+    LSB = 1
+    CPHA = 1
+    CPOL = 2
+
+    baudrate = 100000
+    mode = 0
+    bits = 8
+
+    def __init__(self, portid):
+        if isinstance(portid, tuple):
+            self._bus_id = portid[0]
+            self._device_id = portid[1]
+        else:
+            self._bus_id = portid
+            self._device_id = 0
+
+    def init(self, baudrate=100000, polarity=0, phase=0, bits=8,
+                  firstbit=MSB, sck=None, mosi=None, miso=None):
+        mode = 0
+        if polarity:
+            mode |= self.CPOL
+        if phase:
+            mode |= self.CPHA
+
+        self.clock_pin = sck
+        self.mosi_pin = mosi
+        self.miso_pin = miso
+        self.baudrate = baudrate
+        self.mode = mode
+        self.bits = bits
+        self.chip = detector.chip
+
+    def set_no_cs(self):
+        # No kernel seems to support this, so we're just going to pass
+        pass
+
+    @property
+    def frequency(self):
+        return self.baudrate
+
+    def write(self, buf, start=0, end=None):
+        if not buf:
+            return
+        if end is None:
+            end = len(buf)
+        try:
+            self._spi = SPI("/dev/spidev{}.{}".format(self._bus_id, self._device_id), self.mode, self.baudrate, bits_per_word=self.bits)
+            data_in = spi.transfer(buf[start:end])
+            self._spi.close()
+        except FileNotFoundError as not_found:
+            print("Could not open SPI device - check if SPI is enabled in kernel!")
+            raise
+
+    def readinto(self, buf, start=0, end=None, write_value=0):
+        if not buf:
+            return
+        if end is None:
+            end = len(buf)
+        try:
+            self._spi = SPI("/dev/spidev{}.{}".format(self._bus_id, self._device_id), self.mode, self.baudrate, bits_per_word=self.bits)
+            data = spi.transfer([write_value]*(end-start))
+            for i in range(end-start):  # 'readinto' the given buffer
+              buf[start+i] = data[i]
+            self._spi.close()
+        except FileNotFoundError as not_found:
+            print("Could not open SPI device - check if SPI is enabled in kernel!")
+            raise
+
+    def write_readinto(self, buffer_out, buffer_in, out_start=0,
+                       out_end=None, in_start=0, in_end=None):
+        if not buffer_out or not buffer_in:
+            return
+        if out_end is None:
+            out_end = len(buffer_out)
+        if in_end is None:
+            in_end = len(buffer_in)
+        if out_end - out_start != in_end - in_start:
+            raise RuntimeError('Buffer slices must be of equal length.')
+        try:
+            self._spi = SPI("/dev/spidev{}.{}".format(self._bus_id, self._device_id), self.mode, self.baudrate, bits_per_word=self.bits)
+            data = spi.transfer(list(buffer_out[out_start:out_end+1]))
+            for i in range((in_end - in_start)):
+                buffer_in[i+in_start] = data[i]
+            self._spi.close()
+        except FileNotFoundError as not_found:
+            print("Could not open SPI device - check if SPI is enabled in kernel!")
+            raise
index ac44458151c39efd2c34bca279b14e9c0dfdbf29..30b9f0ac077ce9a846164ef8c1aad9d0db30f765 100755 (executable)
@@ -143,6 +143,9 @@ elif board_id == ap_board.PINE64:
 elif board_id == ap_board.CLOCKWORK_CPI3:
     from adafruit_blinka.board.clockworkcpi3 import *
 
 elif board_id == ap_board.CLOCKWORK_CPI3:
     from adafruit_blinka.board.clockworkcpi3 import *
 
+elif board_id == ap_board.ONION_OMEGA2:
+    from adafruit_blinka.board.onion.omega2 import *
+
 elif "sphinx" in sys.modules:
     pass
 
 elif "sphinx" in sys.modules:
     pass
 
index 160dd9b0f4b4973981fc02de684bb738076a7d0f..43045d0138e1e0605be05067bd6e30dcef174c27 100755 (executable)
@@ -69,7 +69,7 @@ class I2C(Lockable):
         return self._i2c.scan()
 
     def readfrom_into(self, address, buffer, *, start=0, end=None):
         return self._i2c.scan()
 
     def readfrom_into(self, address, buffer, *, start=0, end=None):
-        if start is not 0 or end is not None:
+        if start != 0 or end is not None:
             if end is None:
                 end = len(buffer)
             buffer = memoryview(buffer)[start:end]
             if end is None:
                 end = len(buffer)
             buffer = memoryview(buffer)[start:end]
@@ -79,7 +79,7 @@ class I2C(Lockable):
     def writeto(self, address, buffer, *, start=0, end=None, stop=True):
         if isinstance(buffer, str):
             buffer = bytes([ord(x) for x in buffer])
     def writeto(self, address, buffer, *, start=0, end=None, stop=True):
         if isinstance(buffer, str):
             buffer = bytes([ord(x) for x in buffer])
-        if start is not 0 or end is not None:
+        if start != 0 or end is not None:
             if end is None:
                 return self._i2c.writeto(address, memoryview(buffer)[start:], stop=stop)
             else:
             if end is None:
                 return self._i2c.writeto(address, memoryview(buffer)[start:], stop=stop)
             else:
@@ -178,6 +178,9 @@ class SPI(Lockable):
         elif board_id == ap_board.CLOCKWORK_CPI3:
             from adafruit_blinka.microcontroller.allwinner.a33.pin import Pin
             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
         elif board_id == ap_board.CLOCKWORK_CPI3:
             from adafruit_blinka.microcontroller.allwinner.a33.pin import Pin
             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+        elif board_id == ap_board.ONION_OMEGA2:
+            from adafruit_blinka.microcontroller.mips24kec.pin import Pin
+            from adafruit_blinka.microcontroller.mips24kec.spi import SPI as _SPI
         else:
             from machine import SPI as _SPI
             from machine import Pin
         else:
             from machine import SPI as _SPI
             from machine import Pin
index 56e005b7c4f03c7e8a645902b64cacc5cfac4164..3d1fd86bfba39cdfa3c6308e2b609fec3a7e944b 100755 (executable)
@@ -41,6 +41,8 @@ elif detector.chip.A64:
     from adafruit_blinka.microcontroller.allwinner.a64.pin import Pin
 elif detector.chip.A33:
     from adafruit_blinka.microcontroller.allwinner.a33.pin import Pin
     from adafruit_blinka.microcontroller.allwinner.a64.pin import Pin
 elif detector.chip.A33:
     from adafruit_blinka.microcontroller.allwinner.a33.pin import Pin
+elif detector.chip.MIPS24KEC:
+    from adafruit_blinka.microcontroller.mips24kec.pin import Pin
 elif detector.board.ftdi_ft232h:
     from adafruit_blinka.microcontroller.ft232h.pin import Pin
 elif detector.board.binho_nova:
 elif detector.board.ftdi_ft232h:
     from adafruit_blinka.microcontroller.ft232h.pin import Pin
 elif detector.board.binho_nova:
@@ -119,7 +121,7 @@ class DigitalInOut(ContextManaged):
 
     @property
     def value(self):
 
     @property
     def value(self):
-        return self._pin.value() is 1
+        return self._pin.value() == 1
 
     @value.setter
     def value(self, val):
 
     @value.setter
     def value(self, val):
index 528ae14f9469301ba0ced1b2025774f1d52a32fe..2bec277f208b64fba89bf016f23fdc162c0f658b 100755 (executable)
@@ -62,5 +62,7 @@ elif chip_id == ap_chip.BINHO:
     from adafruit_blinka.microcontroller.nova import *
 elif chip_id == ap_chip.MIPS24KC:
     from adafruit_blinka.microcontroller.atheros.ar9331.pin import *
     from adafruit_blinka.microcontroller.nova import *
 elif chip_id == ap_chip.MIPS24KC:
     from adafruit_blinka.microcontroller.atheros.ar9331.pin import *
+elif chip_id == ap_chip.MIPS24KEC:
+    from adafruit_blinka.microcontroller.mips24kec.pin import *
 else:
     raise NotImplementedError("Microcontroller not supported:", chip_id)
 else:
     raise NotImplementedError("Microcontroller not supported:", chip_id)
index 74149d8a98bc707ae0bdc7b6da597e42f2bbb147..8d0b8b0660443a3efbdd7e449aa33c57fdf5b4df 100755 (executable)
@@ -48,5 +48,7 @@ elif chip_id == ap_chip.A33:
     from adafruit_blinka.microcontroller.allwinner.a33.pin import *
 elif chip_id == ap_chip.MIPS24KC:
     from adafruit_blinka.microcontroller.atheros.ar9331.pin import *
     from adafruit_blinka.microcontroller.allwinner.a33.pin import *
 elif chip_id == ap_chip.MIPS24KC:
     from adafruit_blinka.microcontroller.atheros.ar9331.pin import *
+elif chip_id == ap_chip.MIPS24KEC:
+    from adafruit_blinka.microcontroller.mips24kec.pin import *
 else:
     raise NotImplementedError("Microcontroller not supported: ", chip_id)
 else:
     raise NotImplementedError("Microcontroller not supported: ", chip_id)