]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
Merge pull request #1 from adafruit/master
authortwa127 <46624596+twa127@users.noreply.github.com>
Sat, 19 Dec 2020 20:16:06 +0000 (20:16 +0000)
committerGitHub <noreply@github.com>
Sat, 19 Dec 2020 20:16:06 +0000 (20:16 +0000)
Merge

22 files changed:
README.rst
docs/api.rst
docs/conf.py
src/adafruit_blinka/board/coral_dev_board.py [new file with mode: 0644]
src/adafruit_blinka/board/coral_dev_board_mini.py [new file with mode: 0644]
src/adafruit_blinka/board/coral_edge_tpu.py [deleted file]
src/adafruit_blinka/board/pineH64.py [new file with mode: 0644]
src/adafruit_blinka/board/soPine.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/allwinner/h6/__init__.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/allwinner/h6/pin.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/bcm283x/pulseio/PulseIn.py
src/adafruit_blinka/microcontroller/generic_linux/sysfs_pwmout.py
src/adafruit_blinka/microcontroller/mt8167/__init__.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/mt8167/pin.py [new file with mode: 0644]
src/analogio.py
src/board.py
src/busio.py
src/digitalio.py
src/microcontroller/__init__.py
src/microcontroller/pin.py
src/neopixel_write.py
src/pulseio.py

index 24db28b576cbd5c7ff2b51e3f24ee6315f52a763..40df1a97b8ed2197ea54b64aa0a611136aa30b58 100755 (executable)
@@ -6,7 +6,7 @@ Introduction
     :alt: Documentation Status
 
 .. image:: https://img.shields.io/discord/327254708534116352.svg
-    :target: https://discord.gg/nBQh6qu
+    :target: https://adafru.it/discord
     :alt: Discord
 
 .. image:: https://travis-ci.com/adafruit/Adafruit_Blinka.svg?branch=master
@@ -26,8 +26,10 @@ on hosts running micropython. Working code exists to emulate the CircuitPython p
 * **digitalio** - digital input/output pins, using pin identities from board+microcontroller packages
 * **bitbangio** - software-driven interfaces for I2C, SPI
 * **busio** - hardware-driven interfaces for I2C, SPI, UART
-* **time** * - substitute functions monkey-patched to time module
+* **pulseio** - contains classes that provide access to basic pulse IO (PWM)
 
+For details, see the `Blinka API reference
+<https://circuitpython.readthedocs.io/projects/blinka/en/latest/index.html>`_.
 
 Dependencies
 =============
@@ -97,7 +99,7 @@ install dependencies (feel free to reuse the virtual environment from above):
 
     python3 -m venv .env
     source .env/bin/activate
-    pip install Sphinx sphinx-rtd-theme
+    pip install Sphinx sphinx-rtd-theme Adafruit-PlatformDetect
 
 Now, once you have the virtual environment activated:
 
index 66bca16197c56cba3c0d2b6c4d56710261d609a8..61e9bbee5fc477d73425faa0a99dea71c333b0fb 100755 (executable)
 
 .. automodule:: digitalio
   :members:
+
+.. automodule:: analogio
+  :members:
+
+.. automodule:: pulseio
+  :members:
+
+.. automodule:: neopixel_write
+  :members:
+
+
index cadf23f9d371f9e9c96c30577e3f90d0f6f00eaa..c51cebd0e72a7ac62e9f4e192aa42daeb6f4ecf5 100755 (executable)
@@ -19,7 +19,14 @@ extensions = [
 # Uncomment the below if you use native CircuitPython modules such as
 # digitalio, micropython and busio. List the modules you use. Without it, the
 # autodoc module docs will fail to generate with a warning.
-autodoc_mock_imports = ["machine", "Adafruit_GPIO"]
+autodoc_mock_imports = [
+    "machine",
+    "Adafruit_GPIO",
+    "RPi",
+    "RPi.GPIO",
+    "hid",
+    "sysv_ipc",
+]
 
 intersphinx_mapping = {
     "python": ("https://docs.python.org/3.4", None),
diff --git a/src/adafruit_blinka/board/coral_dev_board.py b/src/adafruit_blinka/board/coral_dev_board.py
new file mode 100644 (file)
index 0000000..fd860d2
--- /dev/null
@@ -0,0 +1,24 @@
+"""Pin definitions for the Coral Dev Board."""
+
+from adafruit_blinka.microcontroller.nxp_imx8m import pin
+
+# Board name = RPI name [= alias] = pin name
+I2C2_SDA = D2 = SDA = pin.I2C2_SDA
+I2C2_SCL = D3 = SCL = pin.I2C2_SCL
+
+PWM1 = D12 = pin.PWM1
+PWM2 = D13 = pin.PWM2
+PWM3 = D22 = pin.PWM3
+
+GPIO_P13 = D27 = pin.GPIO6
+GPIO_P16 = D23 = pin.GPIO73
+GPIO_P18 = D24 = pin.GPIO138
+GPIO_P29 = D5 = pin.GPIO7
+GPIO_P31 = D6 = pin.GPIO8
+GPIO_P36 = D16 = pin.GPIO141
+GPIO_P37 = D26 = pin.GPIO77
+
+ECSPI1_MISO = D9 = MISO = pin.ECSPI1_MISO
+ECSPI1_MOSI = D10 = MOSI = pin.ECSPI1_MOSI
+ECSPI1_SCLK = D11 = SCLK = SCK = pin.ECSPI1_SCLK
+ECSPI1_SS0 = D8 = SS0 = pin.ECSPI1_SS0
diff --git a/src/adafruit_blinka/board/coral_dev_board_mini.py b/src/adafruit_blinka/board/coral_dev_board_mini.py
new file mode 100644 (file)
index 0000000..b0b425c
--- /dev/null
@@ -0,0 +1,38 @@
+"""Pin definitions for the Coral Dev Board Mini."""
+
+from adafruit_blinka.microcontroller.mt8167 import pin
+
+# Board name = RPI name [= alias] = pin name
+GPIO22 = D4 = pin.GPIO22  # Pin 7
+GPIO9 = D17 = pin.GPIO9  # Pin 11
+GPIO36 = D18 = pin.GPIO36  # Pin 12
+GPIO10 = D27 = pin.GPIO10  # Pin 13
+GPIO0 = D23 = pin.GPIO0  # Pin 16
+GPIO1 = D24 = pin.GPIO1  # Pin 18
+GPIO7 = D25 = pin.GPIO7  # Pin 22
+GPIO8 = D7 = pin.GPIO8  # Pin 26
+GPIO37 = D19 = pin.GPIO37  # Pin 35
+GPIO13 = D16 = pin.GPIO13  # Pin 36
+GPIO45 = D26 = pin.GPIO45  # Pin 37
+GPIO38 = D20 = pin.GPIO38  # Pin 38
+GPIO39 = D21 = pin.GPIO39  # Pin 40
+
+I2C1_SDA = D2 = SDA1 = pin.I2C1_SDA  # Pin 3
+I2C1_SCL = D3 = SCL1 = pin.I2C1_SCL  # Pin 5
+I2C2_SDA = D0 = SDA2 = pin.I2C2_SDA  # Pin 27
+I2C2_SCL = D1 = SCL2 = pin.I2C2_SCL  # Pin 28
+
+PWM_A = D12 = pin.PWM_A  # Pin 32
+PWM_B = D13 = pin.PWM_B  # Pin 33
+PWM_C = D22 = pin.PWM_C  # Pin 15
+
+SPI_MO = D10 = MOSI = pin.SPI_MO  # Pin 19
+SPI_MI = D9 = MISO = pin.SPI_MI  # Pin 21
+SPI_CLK = D11 = SCLK = pin.SPI_CLK  # Pin 23
+SPI_CSB = D8 = CS0 = pin.SPI_CSB  # Pin 24
+
+# UART currently not supported
+GPIO63 = D14 = pin.GPIO63  # UART0_TX, Pin 8
+GPIO62 = D15 = pin.GPIO62  # UART0_RX, Pin 10
+GPIO65 = D5 = pin.GPIO65  # UART1_TX, Pin 29
+GPIO64 = D6 = pin.GPIO64  # UART1_RX, Pin 31
diff --git a/src/adafruit_blinka/board/coral_edge_tpu.py b/src/adafruit_blinka/board/coral_edge_tpu.py
deleted file mode 100644 (file)
index 667e245..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-"""Pin definitions for the Coral Edge TPU Dev board."""
-
-from adafruit_blinka.microcontroller.nxp_imx8m import pin
-
-SDA = pin.I2C2_SDA
-SCL = pin.I2C2_SCL
-
-PWM1 = pin.PWM1
-PWM2 = pin.PWM2
-PWM3 = pin.PWM3
-
-GPIO_P13 = pin.GPIO6
-GPIO_P16 = pin.GPIO73
-GPIO_P18 = pin.GPIO138
-GPIO_P29 = pin.GPIO7
-GPIO_P31 = pin.GPIO8
-GPIO_P36 = pin.GPIO141
-GPIO_P37 = pin.GPIO77
-
-MISO = pin.ECSPI1_MISO
-MOSI = pin.ECSPI1_MOSI
-SCLK = pin.ECSPI1_SCLK
-SCK = pin.ECSPI1_SCLK
-SS0 = pin.ECSPI1_SS0
diff --git a/src/adafruit_blinka/board/pineH64.py b/src/adafruit_blinka/board/pineH64.py
new file mode 100644 (file)
index 0000000..9a51362
--- /dev/null
@@ -0,0 +1,41 @@
+"""Pin definitions for the PineH64."""
+
+from adafruit_blinka.microcontroller.allwinner.h6 import pin
+
+D2 = pin.PD26
+D3 = pin.PD25
+D4 = pin.PL8
+D5 = pin.PH2
+D6 = pin.PG14
+D7 = pin.PC16
+D8 = pin.PH3
+D9 = pin.PH6
+D10 = pin.PH5
+D11 = pin.PH4
+D12 = pin.PD22
+D13 = pin.PD21
+D14 = pin.PD19
+D15 = pin.PD20
+D16 = pin.PD24
+D17 = pin.PL9
+D18 = pin.PG11
+D19 = pin.PG10
+D21 = pin.PG12
+D22 = pin.PG13
+D23 = pin.PD16
+D24 = pin.PD17
+D25 = pin.PD18
+D26 = pin.PD23
+D27 = pin.PD14
+
+SDA = D2
+SCL = D3
+
+SCLK = D11
+MOSI = D10
+MISO = D9
+CS = D8
+SCK = SCLK
+
+UART_TX = D14
+UART_RX = D15
diff --git a/src/adafruit_blinka/board/soPine.py b/src/adafruit_blinka/board/soPine.py
new file mode 100644 (file)
index 0000000..00ba5b6
--- /dev/null
@@ -0,0 +1,51 @@
+"""Pin definitions for the SoPine."""
+
+from adafruit_blinka.microcontroller.allwinner.a64 import pin
+
+D2 = pin.PH3
+D3 = pin.PH2
+D4 = pin.PL10
+D5 = pin.PH5
+D6 = pin.PH6
+D7 = pin.PH7
+D8 = pin.PC3
+D9 = pin.PC1
+D10 = pin.PC0
+D11 = pin.PC2
+D12 = pin.PC4
+D13 = pin.PC5
+D14 = pin.PB0
+D15 = pin.PB1
+D16 = pin.PC6
+D17 = pin.PC7
+D18 = pin.PC8
+D19 = pin.PC9
+D20 = pin.PC10
+D21 = pin.PC11
+D22 = pin.PC12
+D23 = pin.PC13
+D24 = pin.PC14
+D25 = pin.PC15
+D26 = pin.PC16
+D27 = pin.PH9
+
+SDA = D2
+SCL = D3
+
+SCL2 = pin.PL8
+SDA2 = pin.PL9
+
+SCLK = D11
+MOSI = D10
+MISO = D9
+CS = D8
+SCK = SCLK
+
+UART_TX = D14
+UART_RX = D15
+
+UART3_TX = pin.PD0
+UART3_RX = pin.PD1
+
+UART4_TX = pin.PD2
+UART4_RX = pin.PD3
diff --git a/src/adafruit_blinka/microcontroller/allwinner/h6/__init__.py b/src/adafruit_blinka/microcontroller/allwinner/h6/__init__.py
new file mode 100644 (file)
index 0000000..0eabf00
--- /dev/null
@@ -0,0 +1 @@
+"""Definition for the AllWinner H6 chip"""
diff --git a/src/adafruit_blinka/microcontroller/allwinner/h6/pin.py b/src/adafruit_blinka/microcontroller/allwinner/h6/pin.py
new file mode 100644 (file)
index 0000000..af944e3
--- /dev/null
@@ -0,0 +1,47 @@
+"""Allwinner H6 Pin Names"""
+from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin
+
+PC16 = Pin((1, 79))
+
+PD14 = Pin((1, 110))
+PD15 = Pin((1, 111))
+PD16 = Pin((1, 112))
+PD17 = Pin((1, 113))
+PD18 = Pin((1, 114))
+PD19 = Pin((1, 115))
+UART2_TX = PD19
+PD20 = Pin((1, 116))
+UART2_RX = PD20
+PD21 = Pin((1, 117))
+PD22 = Pin((1, 118))
+PD23 = Pin((1, 119))
+PD24 = Pin((1, 120))
+PD25 = Pin((1, 121))
+TWI0_SCL = PD25
+PD26 = Pin((1, 122))
+TWI0_SDA = PD26
+
+PG10 = Pin((1, 202))
+PG11 = Pin((1, 203))
+PG12 = Pin((1, 204))
+PG13 = Pin((1, 205))
+PG14 = Pin((1, 206))
+
+PH2 = Pin((1, 226))
+PH3 = Pin((1, 227))
+SPI1_CS = PH3
+PH4 = Pin((1, 228))
+SPI1_SCLK = PH4
+PH5 = Pin((1, 229))
+SPI1_MOSI = PH5
+PH6 = Pin((1, 230))
+SPI1_MISO = PH6
+PH8 = Pin((1, 230))
+PH9 = Pin((1, 231))
+
+PL8 = Pin((1, 360))
+PL9 = Pin((1, 361))
+
+i2cPorts = ((0, TWI0_SCL, TWI0_SDA),)
+spiPorts = ((0, SPI1_SCLK, SPI1_MOSI, SPI1_MISO),)
+uartPorts = ((2, UART2_TX, UART2_RX),)
index aef942a6c93319a37578bfb503ec07ebb56bbc4a..19dc98f32089364b6e266712f07ce39038dda5e1 100644 (file)
@@ -70,26 +70,29 @@ class PulseIn:
         # wait for it to start up
         if DEBUG:
             print("Waiting for startup success message from subprocess")
-        message = self._wait_receive_msg()
+        message = self._wait_receive_msg(timeout=0.25)
         if message[0] != b"!":
             raise RuntimeError("Could not establish message queue with subprocess")
         self._paused = False
 
     # pylint: disable=redefined-builtin
-    def _wait_receive_msg(self, timeout=0.25, type=2):
+    def _wait_receive_msg(self, timeout=0, type=2):
         """Internal helper that will wait for new messages of a given type,
         and throw an exception on timeout"""
-        stamp = time.monotonic()
-        while (time.monotonic() - stamp) < timeout:
-            try:
-                message = self._mq.receive(block=False, type=type)
-                return message
-            except sysv_ipc.BusyError:
-                time.sleep(0.001)  # wait a bit then retry!
-        # uh-oh timed out
-        raise RuntimeError(
-            "Timed out waiting for PulseIn message. Make sure libgpiod is installed."
-        )
+        if timeout > 0:
+            stamp = time.monotonic()
+            while (time.monotonic() - stamp) < timeout:
+                try:
+                    message = self._mq.receive(block=False, type=type)
+                    return message
+                except sysv_ipc.BusyError:
+                    time.sleep(0.001)  # wait a bit then retry!
+            # uh-oh timed out
+            raise RuntimeError(
+                "Timed out waiting for PulseIn message. Make sure libgpiod is installed."
+            )
+        message = self._mq.receive(block=True, type=type)
+        return message
 
     # pylint: enable=redefined-builtin
 
index 4fc8e23b0fab29bdafb563476b3c9bb58e2b7a28..f751b71a4a017dc3870da1e1445820b6c521e1ce 100644 (file)
@@ -5,6 +5,8 @@ License: MIT
 """
 
 import os
+from time import sleep
+from errno import EACCES
 
 try:
     from microcontroller.pin import pwmOuts
@@ -25,6 +27,11 @@ class PWMError(IOError):
 class PWMOut:
     """Pulse Width Modulation Output Class"""
 
+    # Number of retries to check for successful PWM export on open
+    PWM_STAT_RETRIES = 10
+    # Delay between check for scucessful PWM export on open (100ms)
+    PWM_STAT_DELAY = 0.1
+
     # Sysfs paths
     _sysfs_path = "/sys/class/pwm/"
     _channel_path = "pwmchip{}"
@@ -109,6 +116,25 @@ class PWMOut:
         except IOError as e:
             raise PWMError(e.errno, "Exporting PWM pin: " + e.strerror) from IOError
 
+        # Loop until 'period' is writable, because application of udev rules
+        # after the above pin export is asynchronous.
+        # Without this loop, the following properties may not be writable yet.
+        for i in range(PWMOut.PWM_STAT_RETRIES):
+            try:
+                with open(
+                    os.path.join(
+                        channel_path, self._pin_path.format(self._pwmpin), "period"
+                    ),
+                    "w",
+                ):
+                    break
+            except IOError as e:
+                if e.errno != EACCES or (
+                    e.errno == EACCES and i == PWMOut.PWM_STAT_RETRIES - 1
+                ):
+                    raise PWMError(e.errno, "Opening PWM period: " + e.strerror) from e
+            sleep(PWMOut.PWM_STAT_DELAY)
+
         # self._set_enabled(False) # This line causes a write error when trying to enable
 
         # Look up the period, for fast duty cycle updates
diff --git a/src/adafruit_blinka/microcontroller/mt8167/__init__.py b/src/adafruit_blinka/microcontroller/mt8167/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/adafruit_blinka/microcontroller/mt8167/pin.py b/src/adafruit_blinka/microcontroller/mt8167/pin.py
new file mode 100644 (file)
index 0000000..ff5e0e5
--- /dev/null
@@ -0,0 +1,64 @@
+"""MediaTek MT8167 pin names"""
+from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin
+
+# All pins
+GPIO52 = Pin(52)  # SDA1      (pin 3)
+GPIO53 = Pin(53)  # SCL1      (pin 5)
+GPIO22 = Pin(22)  # EINT22    (pin 7)
+GPIO63 = Pin(63)  # UTXD0     (pin 8)
+GPIO62 = Pin(62)  # URXD0     (pin 10)
+GPIO9 = Pin(9)  # EINT9     (pin 11)
+GPIO36 = Pin(36)  # MRG_CLK   (pin 12)
+GPIO10 = Pin(10)  # EINT10    (pin 13)
+GPIO11 = Pin(11)  # EINT11    (pin 15)
+GPIO0 = Pin(0)  # EINT0     (pin 16)
+GPIO1 = Pin(1)  # EINT1     (pin 18)
+GPIO4 = Pin(4)  # EINT4     (pin 19)
+GPIO3 = Pin(3)  # EINT3     (pin 21)
+GPIO7 = Pin(7)  # EINT7     (pin 22)
+GPIO6 = Pin(6)  # EINT6     (pin 23)
+GPIO5 = Pin(5)  # EINT5     (pin 24)
+GPIO8 = Pin(8)  # EINT8     (pin 26)
+GPIO60 = Pin(60)  # SDA2      (pin 27)
+GPIO61 = Pin(61)  # SCL2      (pin 28)
+GPIO65 = Pin(65)  # UTXD1     (pin 29)
+GPIO64 = Pin(64)  # URXD1     (pin 31)
+GPIO12 = Pin(12)  # EINT12    (pin 32)
+GPIO25 = Pin(25)  # EINT25    (pin 33)
+GPIO37 = Pin(37)  # MRG_SYNC  (pin 35)
+GPIO13 = Pin(13)  # EINT13    (pin 36)
+GPIO45 = Pin(45)  # JTCLK     (pin 37)
+GPIO38 = Pin(38)  # MRG_DI    (pin 38)
+GPIO39 = Pin(39)  # MRG_DO    (pin 40)
+
+# Aliases
+PWM_A = GPIO25  # EINT12  (pin 32)
+PWM_B = GPIO11  # EINT25  (pin 33)
+PWM_C = GPIO12  # EINT11  (pin 15)
+
+I2C1_SDA = GPIO52  # SDA1  (pin 3)
+I2C1_SCL = GPIO53  # SCL1  (pin 5)
+
+I2C2_SDA = GPIO60  # SDA2  (pin 27)
+I2C2_SCL = GPIO61  # SCL2  (pin 28)
+
+SPI_MO = GPIO4  # EINT4  (pin 19)
+SPI_MI = GPIO3  # EINT3  (pin 21)
+SPI_CLK = GPIO6  # EINT6  (pin 23)
+SPI_CSB = GPIO5  # EINT5  (pin 24)
+
+# SysFS pwm outputs, pwm channel and pin in first tuple
+pwmOuts = (
+    ((0, 0), PWM_A),
+    ((0, 1), PWM_B),
+    ((0, 2), PWM_C),
+)
+
+# ordered as i2cId, sclId, sdaId
+i2cPorts = (
+    (3, I2C1_SCL, I2C1_SDA),
+    (0, I2C2_SCL, I2C2_SDA),
+)
+
+# ordered as spiId, sckId, mosiId, misoId
+spiPorts = ((0, SPI_CLK, SPI_MO, SPI_MI),)
index f126ef326b9d146d5f5d720a34e26ecca888b8c9..97323e48dbab9b11cad8f930648c4cb5670bda0c 100644 (file)
@@ -1,10 +1,14 @@
 """
 `analogio` - Analog input and output control
-=================================================
+============================================
 See `CircuitPython:analogio` in CircuitPython for more details.
+Not supported by all boards.
+
 * Author(s): Carter Nelson, Melissa LeBlanc-Williams
 """
 
+import sys
+
 from adafruit_blinka.agnostic import detector
 
 # pylint: disable=ungrouped-imports,wrong-import-position,unused-import
@@ -17,5 +21,7 @@ elif detector.board.greatfet_one:
     from adafruit_blinka.microcontroller.nxp_lpc4330.analogio import AnalogOut
 elif detector.chip.RK3308:
     from adafruit_blinka.microcontroller.generic_linux.sysfs_analogin import AnalogIn
+elif "sphinx" in sys.modules:
+    pass
 else:
     raise NotImplementedError("analogio not supported for this board.")
index 9710f679cd965efc4b470b0982bd35390e215225..63c41e1820ef66e9f940e473b4dc42b887b1879d 100755 (executable)
@@ -121,7 +121,10 @@ elif board_id == ap_board.CLARA_AGX_XAVIER:
     from adafruit_blinka.board.nvidia.clara_agx_xavier import *
 
 elif board_id == ap_board.CORAL_EDGE_TPU_DEV:
-    from adafruit_blinka.board.coral_edge_tpu import *
+    from adafruit_blinka.board.coral_dev_board import *
+
+elif board_id == ap_board.CORAL_EDGE_TPU_DEV_MINI:
+    from adafruit_blinka.board.coral_dev_board_mini import *
 
 elif board_id == ap_board.ODROID_C2:
     from adafruit_blinka.board.hardkernel.odroidc2 import *
@@ -156,6 +159,12 @@ elif board_id == ap_board.SIFIVE_UNLEASHED:
 elif board_id == ap_board.PINE64:
     from adafruit_blinka.board.pine64 import *
 
+elif board_id == ap_board.PINEH64:
+    from adafruit_blinka.board.pineH64 import *
+
+elif board_id == ap_board.SOPINE:
+    from adafruit_blinka.board.soPine import *
+
 elif board_id == ap_board.CLOCKWORK_CPI3:
     from adafruit_blinka.board.clockworkcpi3 import *
 
index 1cad051eaedfb50ed3c16217acdc4a4a108a3629..35e7c88eb26d61d5722cf90bc8159d1e9c06f845 100755 (executable)
@@ -210,6 +210,9 @@ class SPI(Lockable):
         elif board_id == ap_board.CORAL_EDGE_TPU_DEV:
             from adafruit_blinka.microcontroller.nxp_imx8m.pin import Pin
             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
+        elif board_id == ap_board.CORAL_EDGE_TPU_DEV_MINI:
+            from adafruit_blinka.microcontroller.mt8167.pin import Pin
+            from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
         elif board_id == ap_board.ODROID_C2:
             from adafruit_blinka.microcontroller.amlogic.s905.pin import Pin
             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
@@ -252,7 +255,12 @@ class SPI(Lockable):
         elif detector.board.greatfet_one:
             from adafruit_blinka.microcontroller.nxp_lpc4330.spi import SPI as _SPI
             from adafruit_blinka.microcontroller.nxp_lpc4330.pin import Pin
-        elif board_id in (ap_board.PINE64, ap_board.PINEBOOK, ap_board.PINEPHONE):
+        elif board_id in (
+            ap_board.PINE64,
+            ap_board.PINEBOOK,
+            ap_board.PINEPHONE,
+            ap_board.SOPINE,
+        ):
             from adafruit_blinka.microcontroller.allwinner.a64.pin import Pin
             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
         elif board_id == ap_board.CLOCKWORK_CPI3:
index 080abbf2c008bfd3507395d5863d913215f4c8f5..0ed3ab412de2f12fed20f4a51a9f8fcda433ef0a 100755 (executable)
@@ -1,6 +1,6 @@
 """
-`digitalio` - Digital input and output control
-=================================================
+`digitalio` - Digital input and output control (GPIO)
+=====================================================
 
 See `CircuitPython:digitalio` in CircuitPython for more details.
 
@@ -61,6 +61,8 @@ elif detector.chip.PENTIUM_N3710:
     from adafruit_blinka.microcontroller.pentium.n3710.pin import Pin
 elif detector.chip.STM32MP157:
     from adafruit_blinka.microcontroller.stm32.stm32mp157.pin import Pin
+elif detector.chip.MT8167:
+    from adafruit_blinka.microcontroller.mt8167.pin import Pin
 
 from adafruit_blinka import Enum, ContextManaged
 
index afca22ac7339ec0287a57f5c33a0e42a9ea67949..8f352e5cc01738f1246e4fbbaf8db97bff8e9d19 100755 (executable)
@@ -82,5 +82,7 @@ elif chip_id == ap_chip.PENTIUM_N3710:
     from adafruit_blinka.microcontroller.pentium.n3710.pin import *
 elif chip_id == ap_chip.STM32MP157:
     from adafruit_blinka.microcontroller.stm32.stm32mp157.pin import *
+elif chip_id == ap_chip.MT8167:
+    from adafruit_blinka.microcontroller.mt8167.pin import *
 else:
     raise NotImplementedError("Microcontroller not supported:", chip_id)
index fe89bd9361da90e8ae46350315daa8add9ec4eed..3e5a6e21c3099fa5bff2eb81f3d69afcbaf685f0 100755 (executable)
@@ -60,5 +60,7 @@ elif chip_id == ap_chip.PENTIUM_N3710:
     from adafruit_blinka.microcontroller.pentium.n3710.pin import *
 elif chip_id == ap_chip.STM32MP157:
     from adafruit_blinka.microcontroller.stm32.stm32mp157.pin import *
+elif chip_id == ap_chip.MT8167:
+    from adafruit_blinka.microcontroller.mt8167.pin import *
 else:
     raise NotImplementedError("Microcontroller not supported: ", chip_id)
index 5626bc632bace3df0884ecfad19edc8c210310f5..2c85f0166ff1b79555e6127563b6c7f78155bb16 100644 (file)
@@ -1,8 +1,9 @@
 """
 `neopixel_write` - NeoPixel precision timed writing support
-=================================================
+===========================================================
 
 See `CircuitPython:neopixel_write` in CircuitPython for more details.
+Currently supported on Raspberry Pi only.
 
 * Author(s): ladyada
 """
index 7c53457a9c223bd7b6f4a24fb25ccaebd3ff3f3c..848ff1400bb3a985814a1f5bbdea68e580813c18 100644 (file)
@@ -1,10 +1,14 @@
 """
-`pulseio` - Pulse Width Modulation Input and Output control
-=================================================
+`pulseio` - Pulse Width Modulation input and output control
+===========================================================
 See `CircuitPython:pulseio` in CircuitPython for more details.
+Not supported by all boards.
+
 * Author(s): Melissa LeBlanc-Williams
 """
 
+import sys
+
 from adafruit_blinka.agnostic import detector
 
 # pylint: disable=unused-import
@@ -12,15 +16,19 @@ from adafruit_blinka.agnostic import detector
 if detector.board.any_raspberry_pi:
     from adafruit_blinka.microcontroller.bcm283x.pulseio.PulseIn import PulseIn
     from adafruit_blinka.microcontroller.bcm283x.pulseio.PWMOut import PWMOut
-if detector.board.any_coral_board:
+elif detector.board.any_coral_board:
     from adafruit_blinka.microcontroller.generic_linux.sysfs_pwmout import PWMOut
-if detector.board.any_giant_board:
+elif detector.board.any_giant_board:
     from adafruit_blinka.microcontroller.generic_linux.sysfs_pwmout import PWMOut
-if detector.board.any_beaglebone:
+elif detector.board.any_beaglebone:
     from adafruit_blinka.microcontroller.am335x.sysfs_pwmout import PWMOut
-if detector.board.any_rock_pi_board:
+elif detector.board.any_rock_pi_board:
     from adafruit_blinka.microcontroller.generic_linux.sysfs_pwmout import PWMOut
-if detector.board.binho_nova:
+elif detector.board.binho_nova:
     from adafruit_blinka.microcontroller.nova.pwmout import PWMOut
-if detector.board.greatfet_one:
+elif detector.board.greatfet_one:
     from adafruit_blinka.microcontroller.nxp_lpc4330.pwmout import PWMOut
+elif "sphinx" in sys.modules:
+    pass
+else:
+    raise NotImplementedError("pulseio not supported for this board.")