Skip to content

Commit 9a0657b

Browse files
For U2IF have a single value of RP2040_U2IF in chips and a value for each board in boards.
Note: This will need a matching update to Adafruit_Blinka if this is merged.
1 parent 9fcb7a4 commit 9a0657b

File tree

5 files changed

+60
-49
lines changed

5 files changed

+60
-49
lines changed

adafruit_platformdetect/board.py

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
# imports
4040
import os
4141
import re
42-
from adafruit_platformdetect.constants import boards, chips, u2if
42+
from adafruit_platformdetect.constants import boards, chips
4343

4444
__version__ = "0.0.0-auto.0"
4545
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_PlatformDetect.git"
@@ -159,16 +159,8 @@ def id(self):
159159
board_id = self._stm32mp1_id()
160160
elif chip_id == chips.MT8167:
161161
board_id = boards.CORAL_EDGE_TPU_DEV_MINI
162-
elif chip_id == u2if.PICO_U2IF:
163-
board_id = u2if.PICO_U2IF
164-
elif chip_id == u2if.FEATHER_U2IF:
165-
board_id = u2if.FEATHER_U2IF
166-
elif chip_id == u2if.ITSYBITSY_U2IF:
167-
board_id = u2if.ITSYBITSY_U2IF
168-
elif chip_id ==u2if.QTPY_U2IF:
169-
board_id = u2if.QTPY_U2IF
170-
elif chip_id == u2if.QT2040_TRINKEY_U2IF:
171-
board_id = u2if.QT2040_TRINKEY_U2IF
162+
elif chip_id == chips.RP2040_U2IF:
163+
board_id = self._rp2040_u2if_id()
172164
self._board_id = board_id
173165
return board_id
174166

@@ -468,6 +460,32 @@ def _allwinner_variants_id(self):
468460
# TODO: Add other specifc board contexts here
469461
return board
470462

463+
def _rp2040_u2if_id(self):
464+
import hid
465+
466+
# look for it based on PID/VID
467+
for dev in hid.enumerate():
468+
# Raspberry Pi Pico
469+
vendor = dev["vendor_id"]
470+
product = dev["product_id"]
471+
if vendor == 0xCAFE and product == 0x4005:
472+
return boards.PICO_U2IF
473+
if vendor == 0x239A:
474+
# Feather RP2040
475+
if product == 0x00F1:
476+
return boards.FEATHER_U2IF
477+
# Itsy Bitsy RP2040
478+
if product == 0x00FD:
479+
return boards.ITSYBITSY_U2IF
480+
# QT Py RP2040
481+
if product == 0x00F7:
482+
return boards.QTPY_U2IF
483+
# QT2040 Trinkey
484+
if product == 0x0109:
485+
return boards.QT2040_TRINKEY_U2IF
486+
# Will only reach here if a device was added in chip.py but here.
487+
raise RuntimeError("RP2040_U2IF device was added to chip but not board.")
488+
471489
@property
472490
def any_nanopi(self):
473491
"""Check whether the current board is any defined Nano Pi."""
@@ -618,27 +636,27 @@ def microchip_mcp2221(self):
618636
@property
619637
def pico_u2if(self):
620638
"""Check whether the current board is a RPi Pico w/ u2if."""
621-
return self.id == u2if.PICO_U2IF
639+
return self.id == boards.PICO_U2IF
622640

623641
@property
624642
def feather_u2if(self):
625643
"""Check whether the current board is a Feather RP2040 w/ u2if."""
626-
return self.id == u2if.FEATHER_U2IF
644+
return self.id == boards.FEATHER_U2IF
627645

628646
@property
629647
def itsybitsy_u2if(self):
630648
"""Check whether the current board is a Itsy Bitsy w/ u2if."""
631-
return self.id == u2if.ITSYBITSY_U2IF
649+
return self.id == boards.ITSYBITSY_U2IF
632650

633651
@property
634652
def qtpy_u2if(self):
635653
"""Check whether the current board is a QT Py w/ u2if."""
636-
return self.id == u2if.QTPY_U2IF
654+
return self.id == boards.QTPY_U2IF
637655

638656
@property
639657
def qt2040_trinkey_u2if(self):
640658
"""Check whether the current board is a QT Py w/ u2if."""
641-
return self.id == u2if.QT2040_TRINKEY_U2IF
659+
return self.id == boards.QT2040_TRINKEY_U2IF
642660

643661
@property
644662
def binho_nova(self):

adafruit_platformdetect/chip.py

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -110,29 +110,26 @@ def id(
110110
)
111111
if os.environ.get("BLINKA_U2IF"):
112112
import hid
113-
from adafruit_platformdetect.constants import u2if
114113

115114
# look for it based on PID/VID
116115
for dev in hid.enumerate():
117-
# Raspberry Pi Pico
118-
if dev["vendor_id"] == 0xCAFE and dev["product_id"] == 0x4005:
119-
self._chip_id = u2if.PICO_U2IF
120-
return self._chip_id
121-
# Feather RP2040
122-
if dev["vendor_id"] == 0x239A and dev["product_id"] == 0x00F1:
123-
self._chip_id = u2if.FEATHER_U2IF
124-
return self._chip_id
125-
# Itsy Bitsy RP2040
126-
if dev["vendor_id"] == 0x239A and dev["product_id"] == 0x00FD:
127-
self._chip_id = u2if.ITSYBITSY_U2IF
128-
return self._chip_id
129-
# QT Py RP2040
130-
if dev["vendor_id"] == 0x239A and dev["product_id"] == 0x00F7:
131-
self._chip_id = u2if.QTPY_U2IF
132-
return self._chip_id
133-
# QT2040 Trinkey
134-
if dev["vendor_id"] == 0x239A and dev["product_id"] == 0x0109:
135-
self._chip_id = u2if.QT2040_TRINKEY_U2IF
116+
vendor = dev["vendor_id"]
117+
product = dev["product_id"]
118+
# NOTE: If any products are added here, they need added
119+
# to _rp2040_u2if_id() in board.py as well.
120+
if (
121+
# Raspberry Pi Pico
122+
vendor == 0xCAFE
123+
and product == 0x4005
124+
) or (
125+
# Feather RP2040
126+
# Itsy Bitsy RP2040
127+
# QT Py RP2040
128+
# QT2040 Trinkey
129+
vendor == 0x239A
130+
and product in (0x00F1, 0x00FD, 0x00F7, 0x0109)
131+
):
132+
self._chip_id = chips.RP2040_U2IF
136133
return self._chip_id
137134
raise RuntimeError(
138135
"BLINKA_U2IF environment variable "

adafruit_platformdetect/constants/boards.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,14 @@
115115

116116
MICROCHIP_MCP2221 = "MICROCHIP_MCP2221"
117117

118+
# Boards with u2if firmware
119+
# https://github.com/execuc/u2if
120+
PICO_U2IF = "PICO_U2IF"
121+
FEATHER_U2IF = "FEATHER_U2IF"
122+
ITSYBITSY_U2IF = "ITSYBITSY_U2IF"
123+
QTPY_U2IF = "QTPY_U2IF"
124+
QT2040_TRINKEY_U2IF = "QT2040_TRINKEY_U2IF"
125+
118126
BINHO_NOVA = "BINHO_NOVA"
119127

120128
ONION_OMEGA = "ONION_OMEGA"

adafruit_platformdetect/constants/chips.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
STM32MP157 = "STM32MP157"
4747
MT8167 = "MT8167"
4848
ATOM_X5_Z8350 = "X5-Z8350"
49+
RP2040_U2IF = "RP2040_U2IF"
4950

5051

5152
BCM_RANGE = {"BCM2708", "BCM2709", "BCM2711", "BCM2835", "BCM2837"}

adafruit_platformdetect/constants/u2if.py

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)