Skip to content

Commit baae6d5

Browse files
dlechnkarstens
authored andcommitted
pybricksdev.usb: add new usb subpackage
We were starting to get repeated defines of USB stuff, so let's put it all in one place.
1 parent d748a9b commit baae6d5

File tree

4 files changed

+38
-19
lines changed

4 files changed

+38
-19
lines changed

pybricksdev/connections/ev3.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@
1010
import hid
1111

1212
from ..tools import chunk
13-
14-
LEGO_VENDOR_ID = 0x0694
15-
EV3_PRODUCT_ID = 0x0005
16-
EV3_BOOTLOADER_PRODUCT_ID = 0x0006
13+
from ..usb import LEGO_USB_VID, LegoUsbPid
1714

1815

1916
class MessageType(enum.IntEnum):
@@ -70,9 +67,7 @@ def open(self) -> None:
7067
"""
7168
Opens an HID connection to the EV3 bootloader.
7269
"""
73-
self._device.open(
74-
vendor_id=LEGO_VENDOR_ID, product_id=EV3_BOOTLOADER_PRODUCT_ID
75-
)
70+
self._device.open(vendor_id=LEGO_USB_VID, product_id=LegoUsbPid.EV3_FW_UPDATE)
7671

7772
def close(self) -> None:
7873
"""

pybricksdev/connections/lego.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from serial.tools import list_ports
99

1010
from ..tools import chunk
11+
from ..usb import LEGO_USB_VID
1112
from .pybricks import PybricksHub
1213

1314
FILE_PACKET_SIZE = 1024
@@ -77,7 +78,10 @@ async def connect(self, device=None):
7778
port = None
7879
devices = list_ports.comports()
7980
for dev in devices:
80-
if dev.product == "LEGO Technic Large Hub in FS Mode" or dev.vid == 0x0694:
81+
if (
82+
dev.product == "LEGO Technic Large Hub in FS Mode"
83+
or dev.vid == LEGO_USB_VID
84+
):
8185
port = dev.device
8286
break
8387

pybricksdev/dfu.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,17 @@
1616
from . import resources
1717
from ._vendored import dfu_create, dfu_upload
1818
from .ble.lwp3.bytecodes import HubKind
19+
from .usb import LEGO_USB_VID, LegoUsbPid
1920

2021
FIRMWARE_ADDRESS = 0x08008000
2122
FIRMWARE_SIZE = 1 * 1024 * 1024 - 32 * 1024 # 1MiB - 32KiB
22-
LEGO_VID = 0x0694
23-
SPIKE_PRIME_PID = 0x0008
24-
SPIKE_ESSENTIAL_PID = 0x000C
25-
MINDSTORMS_INVENTOR_PID = 0x0011
2623

2724
ALL_PIDS = {
28-
MINDSTORMS_INVENTOR_PID: HubKind.TECHNIC_LARGE,
29-
SPIKE_ESSENTIAL_PID: HubKind.TECHNIC_SMALL,
30-
SPIKE_PRIME_PID: HubKind.TECHNIC_LARGE,
25+
LegoUsbPid.SPIKE_PRIME_DFU: HubKind.TECHNIC_LARGE,
26+
LegoUsbPid.SPIKE_ESSENTIAL_DFU: HubKind.TECHNIC_SMALL,
27+
LegoUsbPid.ROBOT_INVENTOR_DFU: HubKind.TECHNIC_LARGE,
3128
}
32-
ALL_DEVICES = [f"{LEGO_VID:04x}:{pid:04x}" for pid in ALL_PIDS.keys()]
29+
ALL_DEVICES = [f"{LEGO_USB_VID:04x}:{pid:04x}" for pid in ALL_PIDS.keys()]
3330

3431

3532
def _get_dfu_util() -> ContextManager[os.PathLike]:
@@ -165,7 +162,7 @@ def flash_dfu(firmware_bin: bytes, metadata: dict) -> None:
165162
try:
166163
# Determine correct product ID
167164

168-
devices = dfu_upload.get_dfu_devices(idVendor=LEGO_VID)
165+
devices = dfu_upload.get_dfu_devices(idVendor=LEGO_USB_VID)
169166
if not devices:
170167
print(
171168
"No DFU devices found.",
@@ -184,11 +181,11 @@ def flash_dfu(firmware_bin: bytes, metadata: dict) -> None:
184181
exit(1)
185182

186183
# Create dfu file
187-
device = "0x{0:04x}:0x{1:04x}".format(LEGO_VID, product_id)
184+
device = "0x{0:04x}:0x{1:04x}".format(LEGO_USB_VID, product_id)
188185
dfu_create.build(outfile, [[target]], device)
189186

190187
# Init dfu tool
191-
dfu_upload.__VID = LEGO_VID
188+
dfu_upload.__VID = LEGO_USB_VID
192189
dfu_upload.__PID = product_id
193190
dfu_upload.init()
194191
elements = dfu_upload.read_dfu_file(outfile)

pybricksdev/usb/__init__.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
"""
2+
Common USB definitions.
3+
"""
4+
5+
import enum as _enum
6+
7+
LEGO_USB_VID = 0x0694
8+
NXT_SAMBA_VID = 0x03EB
9+
NXT_SAMBA_PID = 0x6124
10+
11+
12+
class LegoUsbPid(_enum.IntEnum):
13+
RCX_IR_TOWER = 0x0001
14+
NXT = 0x0002
15+
WEDO = 0x0003
16+
EV3 = 0x0005
17+
EV3_FW_UPDATE = 0x0006
18+
SPIKE_PRIME_DFU = 0x0008
19+
SPIKE_PRIME = 0x0009
20+
SPIKE_ESSENTIAL_DFU = 0x000C
21+
SPIKE_ESSENTIAL = 0x000D
22+
ROBOT_INVENTOR = 0x0010
23+
ROBOT_INVENTOR_DFU = 0x0011

0 commit comments

Comments
 (0)