Merge pull request #6831 from jepler/issue8628
Check uniqueness of creatorid:creationid
This commit is contained in:
commit
142c3a4fb9
@ -56,9 +56,12 @@ DEFAULT_CLUSTERLIST = {
|
|||||||
"espressif_esp32s3_devkitc_1_n8r8",
|
"espressif_esp32s3_devkitc_1_n8r8",
|
||||||
],
|
],
|
||||||
"0x303A:0x7009": ["espressif_esp32s2_devkitc_1_n4", "espressif_esp32s2_devkitc_1_n4r2"],
|
"0x303A:0x7009": ["espressif_esp32s2_devkitc_1_n4", "espressif_esp32s2_devkitc_1_n4r2"],
|
||||||
|
"0x70010001:0x00100001": ["ai_thinker_esp32-c3s", "ai_thinker_esp32-c3s-2m"],
|
||||||
}
|
}
|
||||||
|
|
||||||
cli_parser = argparse.ArgumentParser(description="USB VID/PID Duplicate Checker")
|
cli_parser = argparse.ArgumentParser(
|
||||||
|
description="USB VID/PID and Creator/Creation ID Duplicate Checker"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def configboard_files():
|
def configboard_files():
|
||||||
@ -71,29 +74,38 @@ def configboard_files():
|
|||||||
return working_dir.glob("ports/**/boards/**/mpconfigboard.mk")
|
return working_dir.glob("ports/**/boards/**/mpconfigboard.mk")
|
||||||
|
|
||||||
|
|
||||||
|
VID_PATTERN = re.compile(r"^USB_VID\s*=\s*(.*)", flags=re.M)
|
||||||
|
PID_PATTERN = re.compile(r"^USB_PID\s*=\s*(.*)", flags=re.M)
|
||||||
|
CREATOR_PATTERN = re.compile(r"^CIRCUITPY_CREATOR_ID\s*=\s*(.*)", flags=re.M)
|
||||||
|
CREATION_PATTERN = re.compile(r"^CIRCUITPY_CREATION_ID\s*=\s*(.*)", flags=re.M)
|
||||||
|
|
||||||
|
|
||||||
def check_vid_pid(files, clusterlist):
|
def check_vid_pid(files, clusterlist):
|
||||||
"""Compiles a list of USB VID & PID values for all boards, and checks
|
"""Compiles a list of USB VID & PID values for all boards, and checks
|
||||||
for duplicates. Exits with ``sys.exit()`` (non-zero exit code)
|
for duplicates. Exits with ``sys.exit()`` (non-zero exit code)
|
||||||
if duplicates are found, and lists the duplicates.
|
if duplicates are found, and lists the duplicates.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
vid_pattern = re.compile(r"^USB_VID\s*=\s*(.*)", flags=re.M)
|
|
||||||
pid_pattern = re.compile(r"^USB_PID\s*=\s*(.*)", flags=re.M)
|
|
||||||
usb_pattern = re.compile(r"^CIRCUITPY_USB\s*=\s*0$|^IDF_TARGET = (esp32|esp32c3)$", flags=re.M)
|
usb_pattern = re.compile(r"^CIRCUITPY_USB\s*=\s*0$|^IDF_TARGET = (esp32|esp32c3)$", flags=re.M)
|
||||||
|
|
||||||
usb_ids = defaultdict(set)
|
usb_ids = defaultdict(set)
|
||||||
for board_config in files:
|
for board_config in files:
|
||||||
src_text = board_config.read_text()
|
src_text = board_config.read_text()
|
||||||
|
|
||||||
usb_vid = vid_pattern.search(src_text)
|
usb_vid = VID_PATTERN.search(src_text)
|
||||||
usb_pid = pid_pattern.search(src_text)
|
usb_pid = PID_PATTERN.search(src_text)
|
||||||
|
creator = CREATOR_PATTERN.search(src_text)
|
||||||
|
creation = CREATION_PATTERN.search(src_text)
|
||||||
non_usb = usb_pattern.search(src_text)
|
non_usb = usb_pattern.search(src_text)
|
||||||
board_name = board_config.parts[-2]
|
board_name = board_config.parts[-2]
|
||||||
|
|
||||||
if usb_vid and usb_pid:
|
if usb_vid and usb_pid:
|
||||||
id_group = f"0x{int(usb_vid.group(1), 16):04X}:0x{int(usb_pid.group(1), 16):04X}"
|
id_group = f"0x{int(usb_vid.group(1), 16):04X}:0x{int(usb_pid.group(1), 16):04X}"
|
||||||
elif non_usb:
|
elif non_usb:
|
||||||
continue
|
if creator is None or creation is None:
|
||||||
|
print(f"{board_name=} {creator=} {creation=}", file=sys.stderr)
|
||||||
|
continue
|
||||||
|
id_group = f"0x{int(creator.group(1), 16):08X}:0x{int(creation.group(1), 16):08X}"
|
||||||
else:
|
else:
|
||||||
raise SystemExit(f"Could not find expected settings in {board_config}")
|
raise SystemExit(f"Could not find expected settings in {board_config}")
|
||||||
|
|
||||||
@ -117,18 +129,19 @@ def check_vid_pid(files, clusterlist):
|
|||||||
duplicate_message = (
|
duplicate_message = (
|
||||||
f"Duplicate VID/PID usage found!\n{duplicates}\n"
|
f"Duplicate VID/PID usage found!\n{duplicates}\n"
|
||||||
f"If you are open source maker, then you can request a PID from http://pid.codes\n"
|
f"If you are open source maker, then you can request a PID from http://pid.codes\n"
|
||||||
|
f"For boards without native USB, you can request a Creator ID from https://github.com/creationid/creators/\n"
|
||||||
f"Otherwise, companies should pay the USB-IF for a vendor ID: https://www.usb.org/getting-vendor-id"
|
f"Otherwise, companies should pay the USB-IF for a vendor ID: https://www.usb.org/getting-vendor-id"
|
||||||
)
|
)
|
||||||
sys.exit(duplicate_message)
|
sys.exit(duplicate_message)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print("No USB PID duplicates found.")
|
print("No unexpected ID duplicates found.")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
arguments = cli_parser.parse_args()
|
arguments = cli_parser.parse_args()
|
||||||
|
|
||||||
print("Running USB VID/PID Duplicate Checker...")
|
print("Running USB VID/PID and Creator/Creation ID Duplicate Checker...")
|
||||||
|
|
||||||
board_files = configboard_files()
|
board_files = configboard_files()
|
||||||
check_vid_pid(board_files, DEFAULT_CLUSTERLIST)
|
check_vid_pid(board_files, DEFAULT_CLUSTERLIST)
|
||||||
|
Loading…
Reference in New Issue
Block a user