From 8f47e62b36cae15f989aaaa93caf05d4de258fb7 Mon Sep 17 00:00:00 2001 From: Erovia Date: Thu, 7 Nov 2019 19:53:03 +0100 Subject: Make the udev rules easier to read and manage --- lib/python/qmk/cli/doctor.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) (limited to 'lib/python') diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py index 80bd013b2..28bf57a7d 100755 --- a/lib/python/qmk/cli/doctor.py +++ b/lib/python/qmk/cli/doctor.py @@ -2,6 +2,7 @@ Check up for QMK environment. """ +import os import platform import shutil import subprocess @@ -9,6 +10,13 @@ import glob from milc import cli +def _udev_rule(vid, pid = None): + """ Helper function that return udev rules + """ + if pid: + return 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="%s", ATTRS{idProduct}=="%s", MODE:="0666"' % (vid, pid) + else: + return 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="%s", MODE:="0666"' % vid @cli.subcommand('Basic QMK environment checks') def doctor(cli): @@ -18,7 +26,6 @@ def doctor(cli): TODO(unclaimed): * [ ] Compile a trivial program with each compiler - * [ ] Check for udev entries on linux """ cli.log.info('QMK Doctor is checking your environment.') @@ -50,15 +57,17 @@ def doctor(cli): # Checking for udev rules udev_dir = "/etc/udev/rules.d/" # These are the recommended udev rules - desired_rules = {"dfu": {'SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", MODE:="0666"', - 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", MODE:="0666"', - 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="0666"'}, - "tmk": {'SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"'}, - "input-club": {'SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"'}, - "stm32": {'SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", MODE:="0666"', - 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666"'}, - "caterina": {'ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"', - 'ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"'}} + desired_rules = dict(dfu = {_udev_rule("03eb", "2ff4"),_udev_rule("03eb", "2ffb"), _udev_rule("03eb", "2ff0")}, + + tmk = {_udev_rule("feed")}, + + input_club = {_udev_rule("1c11")}, + + stm32 = {_udev_rule("1eaf", "0003"),_udev_rule("0483", "df11")}, + + caterina = {'ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"', + 'ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"'} + ) if os.path.exists(udev_dir): udev_rules = [rule for rule in glob.iglob(os.path.join(udev_dir, "*.rules")) if os.path.isfile(rule)] # Collect all rules from the config files -- cgit v1.2.3