54 lines
1.5 KiB
Python
Executable File
54 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
from glob import glob
|
|
import os
|
|
import re
|
|
import sys
|
|
import struct
|
|
from collections import defaultdict
|
|
|
|
|
|
def main():
|
|
error = 0
|
|
uid_to_keyboards = defaultdict(set)
|
|
|
|
for filename in glob("keyboards/**/vial.json", recursive=True):
|
|
keyboard = filename[10:-10].split("/keymaps/")[0]
|
|
|
|
path = os.path.dirname(filename)
|
|
uid = None
|
|
while True:
|
|
config_h = os.path.join(path, "config.h")
|
|
if os.path.exists(config_h):
|
|
with open(config_h, "r") as inf:
|
|
for line in inf:
|
|
uid = re.findall(r"#define.*VIAL_KEYBOARD_UID.*{(.*)}", line)
|
|
if uid:
|
|
break
|
|
if uid:
|
|
break
|
|
path = os.path.dirname(path)
|
|
if path.endswith("keyboards"):
|
|
break
|
|
|
|
if not uid:
|
|
print("Keyboard {} does not define a VIAL_KEYBOARD_UID".format(keyboard))
|
|
error = 1
|
|
continue
|
|
|
|
uid = uid[0].split(",")
|
|
uid = [int(x, 16) for x in uid]
|
|
uid = struct.pack("BBBBBBBB", *uid).hex()
|
|
uid_to_keyboards[uid].add(keyboard)
|
|
|
|
print("{} uses UID {}".format(keyboard, uid))
|
|
|
|
for uid, keyboards in uid_to_keyboards.items():
|
|
if len(keyboards) > 1:
|
|
print("UID {} duplicated: {}".format(uid, keyboards))
|
|
error = 1
|
|
|
|
return error
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|