]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
add pixels
authorbrentru <brent@adafruit.com>
Fri, 24 May 2024 17:34:18 +0000 (13:34 -0400)
committerbrentru <brent@adafruit.com>
Fri, 24 May 2024 17:34:18 +0000 (13:34 -0400)
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/busio.py
src/microcontroller/pin.py
src/neopixel_write.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
 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
 
 # Analog pins
 Ax_INPUT_RAND_INT = pin.A0
@@ -33,6 +35,9 @@ MOSI = pin.MOSI
 MISO = pin.MISO
 CS = pin.D6
 
 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
 # 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..c14cbd2
--- /dev/null
@@ -0,0 +1,17 @@
+# SPDX-FileCopyrightText: 2024 Brent Rubell for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+"""NeoPixel write mocks for a generic board."""
+
+
+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)
 
 A3 = Pin(10)
 A4 = Pin(12)
 
+# Special digital pins for pixels
 D7 = Pin(11)
 D7 = Pin(11)
+D8 = Pin(13)
+D9 = Pin(14)
 
 # I2C pins
 SDA = Pin()
 
 # I2C pins
 SDA = Pin()
@@ -217,6 +220,9 @@ MOSI = Pin()
 MISO = Pin()
 CS = Pin()
 
 MISO = Pin()
 CS = Pin()
 
+spiPorts = ((0, SCK, MOSI, MISO),)
+
+
 # UART pins
 UART_TX = Pin()
 UART_RX = Pin()
 # 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..3012573
--- /dev/null
@@ -0,0 +1,55 @@
+# 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
+
+    def write(self, buf, start=0, end=None):
+        """Write data from the buffer to SPI"""
+        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
+    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 70ead8822875364f40ebb40bdf109db15ad05b25..2ebc23d826e1fff3365ecf799d4914621cec2c46 100644 (file)
@@ -363,6 +363,13 @@ 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
             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 (
+            "BLINKA_FORCECHIP" in os.environ
+            and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_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,
         else:
             from adafruit_blinka.microcontroller.generic_micropython.spi import (
                 SPI as _SPI,
index 0d083a0ad3a9b6b557e745f953c1abb7e4babdc5..0585d50c1cc074c2899495988f47912bf38ff882 100644 (file)
@@ -96,6 +96,11 @@ 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 *
     from adafruit_blinka.microcontroller.nova.pin import *
 elif chip_id == ap_chip.LPC4330:
     from adafruit_blinka.microcontroller.nxp_lpc4330.pin import *
+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 == ap_chip.MCP2221:
     from adafruit_blinka.microcontroller.mcp2221.pin import *
 elif chip_id == ap_chip.A10:
 elif chip_id == ap_chip.MCP2221:
     from adafruit_blinka.microcontroller.mcp2221.pin import *
 elif chip_id == ap_chip.A10:
@@ -149,11 +154,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 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."
 elif chip_id is None:
     print(
         "WARNING: chip_id == None is not fully supported. Some features may not work."
index 7c4f757a0fdb3d68481e5618f7d87055f5d707dd..09b832bc7206acbb02b2185fd6a1b233dca5e9a9 100644 (file)
@@ -11,6 +11,7 @@ Currently supported on Raspberry Pi only.
 * Author(s): ladyada
 """
 # pylint: disable=too-many-boolean-expressions
 * Author(s): ladyada
 """
 # pylint: disable=too-many-boolean-expressions
+import os
 import sys
 
 from adafruit_blinka.agnostic import detector
 import sys
 
 from adafruit_blinka.agnostic import detector
@@ -19,6 +20,13 @@ 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
     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 (
+    "BLINKA_FORCECHIP" in os.environ
+    and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD"
+):
+    from adafruit_blinka.microcontroller.generic_agnostic_board import (
+        neopixel as _neopixel,
+    )
 elif (
     detector.board.feather_u2if
     or detector.board.feather_can_u2if
 elif (
     detector.board.feather_u2if
     or detector.board.feather_can_u2if