8000 Merge remote-tracking branch 'origin/main' · pepijndevos/circuitpython@047d958 · GitHub
[go: up one dir, main page]

10000
Skip to content

Commit 047d958

Browse files
committed
Merge remote-tracking branch 'origin/main'
2 parents 6ec5ae1 + 142c3a4 commit 047d958

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

tools/ci_check_duplicate_usb_vid_pid.py

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,12 @@
5656
"espressif_esp32s3_devkitc_1_n8r8",
5757
],
5858
"0x303A:0x7009": ["espressif_esp32s2_devkitc_1_n4", "espressif_esp32s2_devkitc_1_n4r2"],
59+
"0x70010001:0x00100001": ["ai_thinker_esp32-c3s", "ai_thinker_esp32-c3s-2m"],
5960
}
6061

61-
cli_parser = argparse.ArgumentParser(description="USB VID/PID Duplicate Checker")
62+
cli_parser = argparse.ArgumentParser(
63+
description="USB VID/PID and Creator/Creation ID Duplicate Checker"
64+
)
6265

6366

6467
def configboard_files():
@@ -71,29 +74,38 @@ def configboard_files():
7174
return working_dir.glob("ports/**/boards/**/mpconfigboard.mk")
7275

7376

77+
VID_PATTERN = re.compile(r"^USB_VID\s*=\s*(.*)", flags=re.M)
78+
PID_PATTERN = re.compile(r"^USB_PID\s*=\s*(.*)", flags=re.M)
79+
CREATOR_PATTERN = re.compile(r"^CIRCUITPY_CREATOR_ID\s*=\s*(.*)", flags=re.M)
80+
CREATION_PATTERN = re.compile(r"^CIRCUITPY_CREATION_ID\s*=\s*(.*)", flags=re.M)
81+
82+
7483
def check_vid_pid(files, clusterlist):
7584
"""Compiles a list of USB VID & PID values for all boards, and checks
7685
for duplicates. Exits with ``sys.exit()`` (non-zero exit code)
7786
if duplicates are found, and lists the duplicates.
7887
"""
7988

80-
vid_pattern = re.compile(r"^USB_VID\s*=\s*(.*)", flags=re.M)
81-
pid_pattern = re.compile(r"^USB_PID\s*=\s*(.*)", flags=re.M)
8289
usb_pattern = re.compile(r"^CIRCUITPY_USB\s*=\s*0$|^IDF_TARGET = (esp32|esp32c3)$", flags=re.M)
8390

8491
usb_ids = defaultdict(set)
8592
for board_config in files:
8693
src_text = board_config.read_text()
8794

88-
usb_vid = vid_pattern.search(src_text)
89-
usb_pid = pid_pattern.search(src_text)
95+
usb_vid = VID_PATTERN.search(src_text)
96+
usb_pid = PID_PATTERN.search(src_text)
97+
creator = CREATOR_PATTERN.search(src_text)
98+
creation = CREATION_PATTERN.search(src_text)
9099
non_usb = usb_pattern.search(src_text)
91100
board_name = board_config.parts[-2]
92101

93102
if usb_vid and usb_pid:
94103
id_group = f"0x{int(usb_vid.group(1), 16):04X}:0x{int(usb_pid.group(1), 16):04X}"
95104
elif non_usb:
96-
continue
105+
if creator is None or creation is None:
106+
print(f"{board_name=} {creator=} {creation=}", file=sys.stderr)
107+
continue
108+
id_group = f"0x{int(creator.group(1), 16):08X}:0x{int(creation.group(1), 16):08X}"
97109
else:
98110
raise SystemExit(f"Could not find expected settings in {board_config}")
99111

@@ -117,18 +129,19 @@ def check_vid_pid(files, clusterlist):
117129
duplicate_message = (
118130
f"Duplicate VID/PID usage found!\n{duplicates}\n"
119131
f"If you are open source maker, then you can request a PID from http://pid.codes\n"
132+
f"For boards without native USB, you can request a Creator ID from https://github.com/creationid/creators/\n"
120133
f"Otherwise, companies should pay the USB-IF for a vendor ID: https://www.usb.org/getting-vendor-id"
121134
)
122135
sys.exit(duplicate_message)
123136

124137
else:
125-
print("No USB PID duplicates found.")
138+
print("No unexpected ID duplicates found.")
126139

127140

128141
if __name__ == "__main__":
129142
arguments = cli_parser.parse_args()
130143

131-
print("Running USB VID/PID Duplicate Checker...")
144+
print("Running USB VID/PID and Creator/Creation ID Duplicate Checker...")
132145

133146
board_files = configboard_files()
134147
check_vid_pid(board_files, DEFAULT_CLUSTERLIST)

0 commit comments

Comments
 (0)
0