Skip to content

Commit 6bc691f

Browse files
authored
Merge pull request #836 from brentru/support-platformdetect-generic-board
Support for generic board via PlatformDetect
2 parents 35a39ce + b7f31f2 commit 6bc691f

File tree

13 files changed

+114
-44
lines changed

13 files changed

+114
-44
lines changed

src/adafruit_blinka/board/generic_agnostic_board.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111
Dx_INPUT_TRUE_PULL_DOWN = pin.D3
1212
Dx_OUTPUT = pin.D4
1313
Dx_INPUT_TOGGLE = pin.D7
14-
# Special "digital" pins
15-
NEOPIXEL = pin.D6
1614

15+
# Special digital pins for pixels
16+
NEOPIXEL = pin.D6
17+
DOTSTAR_DATA = pin.D8
18+
DOTSTAR_CLK = pin.D9
1719

1820
# Analog pins
1921
Ax_INPUT_RAND_INT = pin.A0
@@ -33,6 +35,9 @@
3335
MISO = pin.MISO
3436
CS = pin.D6
3537

38+
# SPI port
39+
spiPorts = ((0, SCK, MOSI, MISO),)
40+
3641
# UART pins
3742
UART_TX = pin.UART_TX
3843
UART_RX = pin.UART_RX
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# SPDX-FileCopyrightText: 2024 Brent Rubell for Adafruit Industries
2+
#
3+
# SPDX-License-Identifier: MIT
4+
"""NeoPixel write mocks for a generic board."""
5+
6+
7+
# pylint: disable=unused-argument
8+
def neopixel_write(gpio, buf):
9+
"""Mocks a neopixel_write function"""
10+
# pad output buffer from 3 bpp to 4 bpp
11+
buffer = []
12+
for i in range(0, len(buf), 3):
13+
buffer.append(0)
14+
buffer.append(buf[i + 2])
15+
buffer.append(buf[i + 1])
16+
buffer.append(buf[i])
17+
18+
# then, do nothing

src/adafruit_blinka/microcontroller/generic_agnostic_board/pin.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,10 @@ def value(self, val=None):
204204
A3 = Pin(10)
205205
A4 = Pin(12)
206206

207+
# Special digital pins for pixels
207208
D7 = Pin(11)
209+
D8 = Pin(13)
210+
D9 = Pin(14)
208211

209212
# I2C pins
210213
SDA = Pin()
@@ -217,6 +220,9 @@ def value(self, val=None):
217220
MISO = Pin()
218221
CS = Pin()
219222

223+
spiPorts = ((0, SCK, MOSI, MISO),)
224+
225+
220226
# UART pins
221227
UART_TX = Pin()
222228
UART_RX = Pin()
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# SPDX-FileCopyrightText: 2024 Brent Rubell for Adafruit Industries
2+
#
3+
# SPDX-License-Identifier: MIT
4+
"""SPI class for a generic agnostic board."""
5+
# from .rp2040_u2if import rp2040_u2if
6+
7+
8+
# pylint: disable=protected-access, no-self-use
9+
class SPI:
10+
"""SPI Base Class for a generic agnostic board."""
11+
12+
MSB = 0
13+
14+
def __init__(self, index, *, baudrate=100000):
15+
self._index = index
16+
self._frequency = baudrate
17+
18+
# pylint: disable=too-many-arguments,unused-argument
19+
def init(
20+
self,
21+
baudrate=1000000,
22+
polarity=0,
23+
phase=0,
24+
bits=8,
25+
firstbit=MSB,
26+
sck=None,
27+
mosi=None,
28+
miso=None,
29+
):
30+
"""Initialize the Port"""
31+
self._frequency = baudrate
32+
33+
# pylint: enable=too-many-arguments
34+
35+
@property
36+
def frequency(self):
37+
"""Return the current frequency"""
38+
return self._frequency
39+
40+
# pylint: disable=unnecessary-pass
41+
def write(self, buf, start=0, end=None):
42+
"""Write data from the buffer to SPI"""
43+
pass
44+
45+
# pylint: disable=unnecessary-pass
46+
def readinto(self, buf, start=0, end=None, write_value=0):
47+
"""Read data from SPI and into the buffer"""
48+
pass
49+
50+
# pylint: disable=too-many-arguments, unnecessary-pass
51+
def write_readinto(
52+
self, buffer_out, buffer_in, out_start=0, out_end=None, in_start=0, in_end=None
53+
):
54+
"""Perform a half-duplex write from buffer_out and then
55+
read data into buffer_in
56+
"""
57+
pass

src/analogio.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
1010
* Author(s): Carter Nelson, Melissa LeBlanc-Williams
1111
"""
12-
import os
1312
import sys
1413

1514
from adafruit_blinka.agnostic import detector
@@ -63,10 +62,7 @@
6362
from adafruit_blinka.microcontroller.rp2040_u2if.analogio import (
6463
AnalogIn_ItsyBitsy as AnalogIn,
6564
)
66-
elif (
67-
"BLINKA_FORCECHIP" in os.environ
68-
and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD"
69-
):
65+
elif detector.board.OS_AGNOSTIC_BOARD:
7066
from adafruit_blinka.microcontroller.generic_agnostic_board.analogio import AnalogIn
7167
from adafruit_blinka.microcontroller.generic_agnostic_board.analogio import (
7268
AnalogOut,

src/board.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818

1919
import sys
20-
import os
2120
import adafruit_platformdetect.constants.boards as ap_board
2221
from adafruit_blinka.agnostic import board_id, detector
2322

@@ -388,10 +387,7 @@
388387
elif board_id == ap_board.MILKV_DUO:
389388
from adafruit_blinka.board.milkv_duo import *
390389

391-
elif (
392-
"BLINKA_FORCECHIP" in os.environ
393-
and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD"
394-
):
390+
elif board_id == ap_board.OS_AGNOSTIC_BOARD:
395391
from adafruit_blinka.board.generic_agnostic_board import *
396392

397393
elif "sphinx" in sys.modules:

src/busio.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
1010
* Author(s): cefn
1111
"""
12-
import os
13-
1412
try:
1513
import threading
1614
except ImportError:
@@ -56,10 +54,7 @@ def init(self, scl, sda, frequency):
5654
self._i2c = _I2C(frequency=frequency)
5755
return
5856

59-
if (
60-
"BLINKA_FORCECHIP" in os.environ
61-
and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD"
62-
):
57+
if detector.board.OS_AGNOSTIC_BOARD:
6358
from adafruit_blinka.microcontroller.generic_agnostic_board.i2c import (
6459
I2C as _I2C,
6560
)
@@ -363,6 +358,10 @@ def __init__(self, clock, MOSI=None, MISO=None):
363358
from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
364359
elif detector.board.ftdi_ft2232h:
365360
from adafruit_blinka.microcontroller.ftdi_mpsse.mpsse.spi import SPI as _SPI
361+
elif detector.board.OS_AGNOSTIC_BOARD:
362+
from adafruit_blinka.microcontroller.generic_agnostic_board.spi import (
363+
SPI as _SPI,
364+
)
366365
else:
367366
from adafruit_blinka.microcontroller.generic_micropython.spi import (
368367
SPI as _SPI,

src/digitalio.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
1010
* Author(s): cefn
1111
"""
12-
import os
1312
from adafruit_blinka.agnostic import board_id, detector
1413

1514
# pylint: disable=ungrouped-imports,wrong-import-position,unused-wildcard-import,wildcard-import
@@ -137,10 +136,7 @@
137136
from machine import Pin
138137
elif detector.chip.CV1800B:
139138
from adafruit_blinka.microcontroller.cv1800b.pin import Pin
140-
elif (
141-
"BLINKA_FORCECHIP" in os.environ
142-
and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD"
143-
):
139+
elif detector.chip.OS_AGNOSTIC:
144140
from adafruit_blinka.microcontroller.generic_agnostic_board.pin import Pin
145141

146142
from adafruit_blinka import Enum, ContextManaged

src/microcontroller/__init__.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,7 @@ def delay_us(delay):
150150
from adafruit_blinka.microcontroller.thead.th1520 import *
151151
elif chip_id == ap_chip.GENERIC_X86:
152152
print("WARNING: GENERIC_X86 is not fully supported. Some features may not work.")
153-
elif (
154-
"BLINKA_FORCECHIP" in os.environ
155-
and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD"
156-
):
153+
elif chip_id == ap_chip.OS_AGNOSTIC:
157154
from adafruit_blinka.microcontroller.generic_agnostic_board import *
158155
elif chip_id is None:
159156
print(

src/microcontroller/pin.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
#
33
# SPDX-License-Identifier: MIT
44
"""Pins named after their chip name."""
5-
import os
65
import sys
76
from adafruit_platformdetect.constants import chips as ap_chip, boards as ap_boards
87
from adafruit_blinka.agnostic import board_id, chip_id
@@ -96,6 +95,8 @@
9695
from adafruit_blinka.microcontroller.nova.pin import *
9796
elif chip_id == ap_chip.LPC4330:
9897
from adafruit_blinka.microcontroller.nxp_lpc4330.pin import *
98+
elif chip_id == ap_chip.OS_AGNOSTIC:
99+
from adafruit_blinka.microcontroller.generic_agnostic_board.pin import *
99100
elif chip_id == ap_chip.MCP2221:
100101
from adafruit_blinka.microcontroller.mcp2221.pin import *
101102
elif chip_id == ap_chip.A10:
@@ -149,11 +150,6 @@
149150
elif chip_id == ap_chip.GENERIC_X86:
150151
print("WARNING: GENERIC_X86 is not fully supported. Some features may not work.")
151152
from adafruit_blinka.microcontroller.generic_micropython import Pin
152-
elif (
153-
"BLINKA_FORCECHIP" in os.environ
154-
and os.environ["BLINKA_FORCEBOARD"] == "GENERIC_AGNOSTIC_BOARD"
155-
):
156-
from adafruit_blinka.microcontroller.generic_agnostic_board.pin import *
157153
elif chip_id is None:
158154
print(
159155
"WARNING: chip_id == None is not fully supported. Some features may not work."

0 commit comments

Comments
 (0)