~ruther/qmk_firmware

8f47e62b36cae15f989aaaa93caf05d4de258fb7 — Erovia 5 years ago e905d86
Make the udev rules easier to read and manage
1 files changed, 19 insertions(+), 10 deletions(-)

M lib/python/qmk/cli/doctor.py
M lib/python/qmk/cli/doctor.py => lib/python/qmk/cli/doctor.py +19 -10
@@ 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