]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
Merge pull request #817 from burberius/raxda-zero3
authorMelissa LeBlanc-Williams <melissa@adafruit.com>
Mon, 3 Jun 2024 19:30:50 +0000 (12:30 -0700)
committerGitHub <noreply@github.com>
Mon, 3 Jun 2024 19:30:50 +0000 (12:30 -0700)
Add Raxda ZERO 3 support

13 files changed:
src/adafruit_blinka/board/generic_agnostic_board.py
src/adafruit_blinka/microcontroller/generic_agnostic_board/neopixel.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/generic_agnostic_board/pin.py
src/adafruit_blinka/microcontroller/generic_agnostic_board/spi.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
tests/test_generic_agnostic_board_analogio.py
tests/test_generic_agnostic_board_digitalio.py

index 925e7baf936d1055db6dd86e6a42ca2a124b892d..7cdfa802e010c71bf2a8bd4c0e018f87167ed705 100644 (file)
@@ -11,9 +11,11 @@ Dx_INPUT_TRUE_PULL_UP = pin.D2
 Dx_INPUT_TRUE_PULL_DOWN = pin.D3
 Dx_OUTPUT = pin.D4
 Dx_INPUT_TOGGLE = pin.D7
-# Special "digital" pins
-NEOPIXEL = pin.D6
 
+# Special digital pins for pixels
+NEOPIXEL = pin.D6
+DOTSTAR_DATA = pin.D8
+DOTSTAR_CLK = pin.D9
 
 # Analog pins
 Ax_INPUT_RAND_INT = pin.A0
@@ -33,6 +35,9 @@ MOSI = pin.MOSI
 MISO = pin.MISO
 CS = pin.D6
 
+# SPI port
+spiPorts = ((0, SCK, MOSI, MISO),)
+
 # UART pins
 UART_TX = pin.UART_TX
 UART_RX = pin.UART_RX
diff --git a/src/adafruit_blinka/microcontroller/generic_agnostic_board/neopixel.py b/src/adafruit_blinka/microcontroller/generic_agnostic_board/neopixel.py
new file mode 100644 (file)
index 0000000..30102d1
--- /dev/null
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2024 Brent Rubell for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+"""NeoPixel write mocks for a generic board."""
+
+
+# pylint: disable=unused-argument
+def neopixel_write(gpio, buf):
+    """Mocks a neopixel_write function"""
+    # pad output buffer from 3 bpp to 4 bpp
+    buffer = []
+    for i in range(0, len(buf), 3):
+        buffer.append(0)
+        buffer.append(buf[i + 2])
+        buffer.append(buf[i + 1])
+        buffer.append(buf[i])
+
+    # then, do nothing
index 47d97545661e59b0c05c2a09905b46565f99a956..5830c30ef601bf17f6f52b6ef3892c0fdf082b99 100644 (file)
@@ -204,7 +204,10 @@ A2 = Pin(9)
 A3 = Pin(10)
 A4 = Pin(12)
 
+# Special digital pins for pixels
 D7 = Pin(11)
+D8 = Pin(13)
+D9 = Pin(14)
 
 # I2C pins
 SDA = Pin()
@@ -217,6 +220,9 @@ MOSI = Pin()
 MISO = Pin()
 CS = Pin()
 
+spiPorts = ((0, SCK, MOSI, MISO),)
+
+
 # UART pins
 UART_TX = Pin()
 UART_RX = Pin()
diff --git a/src/adafruit_blinka/microcontroller/generic_agnostic_board/spi.py b/src/adafruit_blinka/microcontroller/generic_agnostic_board/spi.py
new file mode 100644 (file)
index 0000000..a7ca140
--- /dev/null
@@ -0,0 +1,57 @@
+# SPDX-FileCopyrightText: 2024 Brent Rubell for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+"""SPI class for a generic agnostic board."""
+# from .rp2040_u2if import rp2040_u2if
+
+
+# pylint: disable=protected-access, no-self-use
+class SPI:
+    """SPI Base Class for a generic agnostic board."""
+
+    MSB = 0
+
+    def __init__(self, index, *, baudrate=100000):
+        self._index = index
+        self._frequency = baudrate
+
+    # pylint: disable=too-many-arguments,unused-argument
+    def init(
+        self,
+        baudrate=1000000,
+        polarity=0,
+        phase=0,
+        bits=8,
+        firstbit=MSB,
+        sck=None,
+        mosi=None,
+        miso=None,
+    ):
+        """Initialize the Port"""
+        self._frequency = baudrate
+
+    # pylint: enable=too-many-arguments
+
+    @property
+    def frequency(self):
+        """Return the current frequency"""
+        return self._frequency
+
+    # pylint: disable=unnecessary-pass
+    def write(self, buf, start=0, end=None):
+        """Write data from the buffer to SPI"""
+        pass
+
+    # pylint: disable=unnecessary-pass
+    def readinto(self, buf, start=0, end=None, write_value=0):
+        """Read data from SPI and into the buffer"""
+        pass
+
+    # pylint: disable=too-many-arguments, unnecessary-pass
+    def write_readinto(
+        self, buffer_out, buffer_in, out_start=0, out_end=None, in_start=0, in_end=None
+    ):
+        """Perform a half-duplex write from buffer_out and then
+        read data into buffer_in
+        """
+        pass
index f1b9a55986fe9370e144230abd11ee4430fa360e..032c0163fc1a91b7c8adb9c48bb6e82985c669ad 100644 (file)
@@ -9,7 +9,6 @@ Not supported by all boards.
 
 * Author(s): Carter Nelson, Melissa LeBlanc-Williams
 """
-import os
 import sys
 
 from adafruit_blinka.agnostic import detector
@@ -63,10 +62,7 @@ elif detector.board.itsybitsy_u2if:
     from adafruit_blinka.microcontroller.rp2040_u2if.analogio import (
         AnalogIn_ItsyBitsy as AnalogIn,
     )
-elif (
-    "BLINKA_FORCECHIP" in os.environ
-    and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD"
-):
+elif detector.board.OS_AGNOSTIC_BOARD:
     from adafruit_blinka.microcontroller.generic_agnostic_board.analogio import AnalogIn
     from adafruit_blinka.microcontroller.generic_agnostic_board.analogio import (
         AnalogOut,
index 085743a693b60d263f25ca785036602923b289b4..8915316130a074a862c0564dcfda36dea0df53a3 100644 (file)
@@ -17,7 +17,6 @@ __blinka__ = True
 
 
 import sys
-import os
 import adafruit_platformdetect.constants.boards as ap_board
 from adafruit_blinka.agnostic import board_id, detector
 
@@ -391,10 +390,7 @@ elif board_id == ap_board.LICHEEPI_4A:
 elif board_id == ap_board.MILKV_DUO:
     from adafruit_blinka.board.milkv_duo import *
 
-elif (
-    "BLINKA_FORCECHIP" in os.environ
-    and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD"
-):
+elif board_id == ap_board.OS_AGNOSTIC_BOARD:
     from adafruit_blinka.board.generic_agnostic_board import *
 
 elif "sphinx" in sys.modules:
index 70ead8822875364f40ebb40bdf109db15ad05b25..ffb63fd667301da460bec126f90b1715839b20f1 100644 (file)
@@ -9,8 +9,6 @@ See `CircuitPython:busio` in CircuitPython for more details.
 
 * Author(s): cefn
 """
-import os
-
 try:
     import threading
 except ImportError:
@@ -56,10 +54,7 @@ class I2C(Lockable):
             self._i2c = _I2C(frequency=frequency)
             return
 
-        if (
-            "BLINKA_FORCECHIP" in os.environ
-            and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD"
-        ):
+        if detector.board.OS_AGNOSTIC_BOARD:
             from adafruit_blinka.microcontroller.generic_agnostic_board.i2c import (
                 I2C as _I2C,
             )
@@ -363,6 +358,10 @@ class SPI(Lockable):
             from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
         elif detector.board.ftdi_ft2232h:
             from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.spi import SPI as _SPI
+        elif detector.board.OS_AGNOSTIC_BOARD:
+            from adafruit_blinka.microcontroller.generic_agnostic_board.spi import (
+                SPI as _SPI,
+            )
         else:
             from adafruit_blinka.microcontroller.generic_micropython.spi import (
                 SPI as _SPI,
index ecdc98e9003d22f6ab1d3468d94562c8aac5e9df..8577765b4a6e5020a47f830bb4b2af4b74db285d 100644 (file)
@@ -9,7 +9,6 @@ See `CircuitPython:digitalio` in CircuitPython for more details.
 
 * Author(s): cefn
 """
-import os
 from adafruit_blinka.agnostic import board_id, detector
 
 # pylint: disable=ungrouped-imports,wrong-import-position,unused-wildcard-import,wildcard-import
@@ -137,10 +136,7 @@ elif detector.chip.RP2040:
     from machine import Pin
 elif detector.chip.CV1800B:
     from adafruit_blinka.microcontroller.cv1800b.pin import Pin
-elif (
-    "BLINKA_FORCECHIP" in os.environ
-    and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD"
-):
+elif detector.chip.OS_AGNOSTIC:
     from adafruit_blinka.microcontroller.generic_agnostic_board.pin import Pin
 
 from adafruit_blinka import Enum, ContextManaged
index 394d2746a3cd859ffee705ec82685bdfc41bcd02..cf51a81e3e782cae1ce8486cc71b01b1663e36bd 100644 (file)
@@ -150,10 +150,7 @@ elif chip_id == ap_chip.TH1520:
     from adafruit_blinka.microcontroller.thead.th1520 import *
 elif chip_id == ap_chip.GENERIC_X86:
     print("WARNING: GENERIC_X86 is not fully supported. Some features may not work.")
-elif (
-    "BLINKA_FORCECHIP" in os.environ
-    and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD"
-):
+elif chip_id == ap_chip.OS_AGNOSTIC:
     from adafruit_blinka.microcontroller.generic_agnostic_board import *
 elif chip_id is None:
     print(
index 0d083a0ad3a9b6b557e745f953c1abb7e4babdc5..fcaa155c0fe2080c29aad13b25f2c85e598c9014 100644 (file)
@@ -2,7 +2,6 @@
 #
 # SPDX-License-Identifier: MIT
 """Pins named after their chip name."""
-import os
 import sys
 from adafruit_platformdetect.constants import chips as ap_chip, boards as ap_boards
 from adafruit_blinka.agnostic import board_id, chip_id
@@ -96,6 +95,8 @@ elif chip_id == ap_chip.BINHO:
     from adafruit_blinka.microcontroller.nova.pin import *
 elif chip_id == ap_chip.LPC4330:
     from adafruit_blinka.microcontroller.nxp_lpc4330.pin import *
+elif chip_id == ap_chip.OS_AGNOSTIC:
+    from adafruit_blinka.microcontroller.generic_agnostic_board.pin import *
 elif chip_id == ap_chip.MCP2221:
     from adafruit_blinka.microcontroller.mcp2221.pin import *
 elif chip_id == ap_chip.A10:
@@ -149,11 +150,6 @@ elif "sphinx" in sys.modules:
 elif chip_id == ap_chip.GENERIC_X86:
     print("WARNING: GENERIC_X86 is not fully supported. Some features may not work.")
     from adafruit_blinka.microcontroller.generic_micropython import Pin
-elif (
-    "BLINKA_FORCECHIP" in os.environ
-    and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD"
-):
-    from adafruit_blinka.microcontroller.generic_agnostic_board.pin import *
 elif chip_id is None:
     print(
         "WARNING: chip_id == None is not fully supported. Some features may not work."
index 7c4f757a0fdb3d68481e5618f7d87055f5d707dd..77e577674498522bc1396ac44da3c7863185ca17 100644 (file)
@@ -19,6 +19,10 @@ if detector.board.any_raspberry_pi:
     from adafruit_blinka.microcontroller.bcm283x import neopixel as _neopixel
 elif detector.board.pico_u2if:
     from adafruit_blinka.microcontroller.rp2040_u2if import neopixel as _neopixel
+elif detector.board.OS_AGNOSTIC_BOARD:
+    from adafruit_blinka.microcontroller.generic_agnostic_board import (
+        neopixel as _neopixel,
+    )
 elif (
     detector.board.feather_u2if
     or detector.board.feather_can_u2if
index 3658380d6a269a501783ed758d25a2e08d4e6c5e..aa36907dc5bed7fb3d5baf682a3e29f8df87aaa7 100644 (file)
@@ -9,7 +9,7 @@ import analogio
 # Analog Outputs
 def test_Ax_OUTPUT():
     """Test analog output pin functionality."""
-    assert board.board_id == "GENERIC_AGNOSTIC_BOARD"
+    assert board.board_id == "OS_AGNOSTIC_BOARD"
     pin_out = analogio.AnalogOut(board.Ax_OUTPUT)
 
     # Test boundaries of setting the value and reading it back
@@ -76,7 +76,7 @@ sawtooth_wave = [
 
 def test_Ax_INPUT_RAND_INT():
     """Test random integer from pin Ax_INPUT_RAND_INT"""
-    assert board.board_id == "GENERIC_AGNOSTIC_BOARD"
+    assert board.board_id == "OS_AGNOSTIC_BOARD"
     pin_random = analogio.AnalogIn(board.Ax_INPUT_RAND_INT)
 
     assert isinstance(pin_random.value, int)
@@ -86,7 +86,7 @@ def test_Ax_INPUT_RAND_INT():
 
 def test_Ax_INPUT_FIXED_INT_PI():
     """Test fixed integer from pin Ax_INPUT_FIXED_INT_PI"""
-    assert board.board_id == "GENERIC_AGNOSTIC_BOARD"
+    assert board.board_id == "OS_AGNOSTIC_BOARD"
     pin_pi = analogio.AnalogIn(board.Ax_INPUT_FIXED_INT_PI)
 
     assert pin_pi.value == 31415
@@ -96,7 +96,7 @@ def test_Ax_INPUT_FIXED_INT_PI():
 
 def test_Ax_INPUT_WAVE_SINE():
     """Test sine wave from pin Ax_INPUT_WAVE_SINE"""
-    assert board.board_id == "GENERIC_AGNOSTIC_BOARD"
+    assert board.board_id == "OS_AGNOSTIC_BOARD"
     pin_sine_wave = analogio.AnalogIn(board.Ax_INPUT_WAVE_SINE)
 
     # Run through the sine wave once
@@ -112,7 +112,7 @@ def test_Ax_INPUT_WAVE_SINE():
 
 def test_Ax_INPUT_WAVE_SAW():
     """Test sawtooth wave from pin Ax_INPUT_WAVE_SAW"""
-    assert board.board_id == "GENERIC_AGNOSTIC_BOARD"
+    assert board.board_id == "OS_AGNOSTIC_BOARD"
     pin_saw_wave = analogio.AnalogIn(board.Ax_INPUT_WAVE_SAW)
 
     # Run through the sine wave once
index a9ebb322d67f5cd1b07ac1cebe64965eabd8d559..47a112fef7e68d5fc1967fda19925cf26ae07a07 100644 (file)
@@ -10,7 +10,7 @@ import digitalio
 
 def test_Dx_OUTPUT_TRUE():
     """Test digital output pin functionality."""
-    assert board.board_id == "GENERIC_AGNOSTIC_BOARD"
+    assert board.board_id == "OS_AGNOSTIC_BOARD"
     pin_out = digitalio.DigitalInOut(board.Dx_OUTPUT)
     pin_out.direction = digitalio.Direction.OUTPUT
     # Test setting the value and reading it back
@@ -26,7 +26,7 @@ def test_Dx_OUTPUT_TRUE():
 
 def test_Dx_INPUT_TRUE():
     """Test digital input pin Dx_INPUT_TRUE."""
-    assert board.board_id == "GENERIC_AGNOSTIC_BOARD"
+    assert board.board_id == "OS_AGNOSTIC_BOARD"
     pin_true = digitalio.DigitalInOut(board.Dx_INPUT_TRUE)
     pin_true.direction = digitalio.Direction.INPUT
     assert pin_true.value is True
@@ -36,7 +36,7 @@ def test_Dx_INPUT_TRUE():
 
 def test_Dx_INPUT_TRUE_PULL_DOWN():
     """Test digital input pin Dx_INPUT_TRUE w/pull down."""
-    assert board.board_id == "GENERIC_AGNOSTIC_BOARD"
+    assert board.board_id == "OS_AGNOSTIC_BOARD"
     pin_true = digitalio.DigitalInOut(board.Dx_INPUT_TRUE)
     pin_true.direction = digitalio.Direction.INPUT
     assert pin_true.value is True
@@ -48,7 +48,7 @@ def test_Dx_INPUT_TRUE_PULL_DOWN():
 
 def test_Dx_INPUT_FALSE_PULL_UP():
     """Test digital input pin Dx_INPUT_FALSE w/pull up."""
-    assert board.board_id == "GENERIC_AGNOSTIC_BOARD"
+    assert board.board_id == "OS_AGNOSTIC_BOARD"
     pin_false = digitalio.DigitalInOut(board.Dx_INPUT_FALSE)
     pin_false.direction = digitalio.Direction.INPUT
     assert pin_false.value is False
@@ -60,7 +60,7 @@ def test_Dx_INPUT_FALSE_PULL_UP():
 
 def test_Dx_INPUT_FALSE():
     """Test digital input pin Dx_INPUT_FALSE"""
-    assert board.board_id == "GENERIC_AGNOSTIC_BOARD"
+    assert board.board_id == "OS_AGNOSTIC_BOARD"
     pin_false = digitalio.DigitalInOut(board.Dx_INPUT_FALSE)
     pin_false.direction = digitalio.Direction.INPUT
     assert pin_false.value is False
@@ -70,7 +70,7 @@ def test_Dx_INPUT_FALSE():
 
 def test_Dx_INPUT_TOGGLE():
     """Test digital input pin Dx_INPUT_TOGGLE"""
-    assert board.board_id == "GENERIC_AGNOSTIC_BOARD"
+    assert board.board_id == "OS_AGNOSTIC_BOARD"
     pin_toggle = digitalio.DigitalInOut(board.Dx_INPUT_TOGGLE)
     pin_toggle.direction = digitalio.Direction.INPUT
     assert pin_toggle.value is True