Skip to content

Commit

Permalink
Make the udev rules easier to read and manage
Browse files Browse the repository at this point in the history
  • Loading branch information
Erovia authored and skullydazed committed Jan 11, 2020
1 parent e905d86 commit 8f47e62
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions lib/python/qmk/cli/doctor.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,21 @@
Check up for QMK environment.
"""
import os
import platform
import shutil
import subprocess
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):
Expand All @@ -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.')

Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 8f47e62

Please sign in to comment.