rules: Update udev rules and migrate to use hwdb

This makes rule matching more efficient. We just need to copy the
variables over into the hiddev device so that there is no need to change
the C code to match the parent USB device. That said, the change in C
wouldn't be that hard either.

See https://github.com/networkupstools/nut/pull/1342
This commit is contained in:
Benjamin Berg 2022-03-28 15:43:16 +02:00
parent 888b1afc6d
commit 90c25b4fd1
5 changed files with 221 additions and 141 deletions

View file

@ -94,6 +94,12 @@ if udevrulesdir == 'auto'
udevrulesdir = udev_dep.get_pkgconfig_variable('udev_dir') / 'rules.d' udevrulesdir = udev_dep.get_pkgconfig_variable('udev_dir') / 'rules.d'
endif endif
udevhwdbdir = get_option('udevhwdbdir')
if udevhwdbdir == 'auto'
udev_dep = dependency('udev', required: true)
udevhwdbdir = udev_dep.get_pkgconfig_variable('udev_dir') / 'hwdb.d'
endif
dbusdir = get_option('datadir') / 'dbus-1' dbusdir = get_option('datadir') / 'dbus-1'
systemdsystemunitdir = get_option('systemdsystemunitdir') systemdsystemunitdir = get_option('systemdsystemunitdir')
if systemdsystemunitdir == '' if systemdsystemunitdir == ''

View file

@ -14,6 +14,10 @@ option('udevrulesdir',
type : 'string', type : 'string',
value: 'auto', value: 'auto',
description : 'Directory for udev rules') description : 'Directory for udev rules')
option('udevhwdbdir',
type : 'string',
value: 'auto',
description : 'Directory for udev hwdb')
option('historydir', option('historydir',
type : 'string', type : 'string',
description : 'Directory for upower history files will be stored') description : 'Directory for upower history files will be stored')

200
rules/95-upower-hid.hwdb Normal file
View file

@ -0,0 +1,200 @@
##############################################################################################################
# Uninterruptible Power Supplies with USB HID interfaces
#
# This file was automatically generated by NUT:
# https://github.com/networkupstools/nut/
#
# To keep up to date, monitor upstream NUT
# https://github.com/networkupstools/nut/commits/master/scripts/upower/95-upower-hid.hwdb
# or checkout the NUT repository and call 'tools/nut-usbinfo.pl'
# Hewlett Packard
usb:v03F0p0001*
usb:v03F0p1F06*
usb:v03F0p1F08*
usb:v03F0p1F09*
usb:v03F0p1F0A*
usb:v03F0p1FE0*
usb:v03F0p1FE1*
usb:v03F0p1FE2*
usb:v03F0p1FE3*
usb:v03F0p1FE5*
usb:v03F0p1FE6*
usb:v03F0p1FE7*
usb:v03F0p1FE8*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Hewlett Packard
# Eaton
usb:v0463p0001*
usb:v0463pFFFF*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Eaton
# Dell
usb:v047CpFFFF*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Dell
# ST Microelectronics
usb:v0483pA113*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=ST Microelectronics
# IBM
usb:v04B3p0001*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=IBM
# Minibox
usb:v04D8pD004*
usb:v04D8pD005*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Minibox
# Belkin
usb:v050Dp0375*
usb:v050Dp0551*
usb:v050Dp0750*
usb:v050Dp0751*
usb:v050Dp0900*
usb:v050Dp0910*
usb:v050Dp0912*
usb:v050Dp0980*
usb:v050Dp0F51*
usb:v050Dp1100*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Belkin
# APC
usb:v051Dp0000*
usb:v051Dp0002*
usb:v051Dp0003*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=APC
# Powerware
usb:v0592p0004*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Powerware
# Delta UPS
usb:v05DDp041B*
usb:v05DDpA011*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Delta UPS
# Phoenixtec Power Co., Ltd
usb:v06DApFFFF*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Phoenixtec Power Co., Ltd
# iDowell
usb:v075Dp0300*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=iDowell
# Cyber Power Systems
usb:v0764p0005*
usb:v0764p0501*
usb:v0764p0601*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Cyber Power Systems
# TrippLite
usb:v09AEp1003*
usb:v09AEp1007*
usb:v09AEp1008*
usb:v09AEp1009*
usb:v09AEp1010*
usb:v09AEp1330*
usb:v09AEp2005*
usb:v09AEp2007*
usb:v09AEp2008*
usb:v09AEp2009*
usb:v09AEp2010*
usb:v09AEp2011*
usb:v09AEp2012*
usb:v09AEp2013*
usb:v09AEp2014*
usb:v09AEp3008*
usb:v09AEp3009*
usb:v09AEp3010*
usb:v09AEp3011*
usb:v09AEp3012*
usb:v09AEp3013*
usb:v09AEp3014*
usb:v09AEp3015*
usb:v09AEp3016*
usb:v09AEp3024*
usb:v09AEp4001*
usb:v09AEp4002*
usb:v09AEp4003*
usb:v09AEp4004*
usb:v09AEp4005*
usb:v09AEp4006*
usb:v09AEp4007*
usb:v09AEp4008*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=TrippLite
# PowerCOM
usb:v0D9Fp0001*
usb:v0D9Fp0004*
usb:v0D9Fp00A2*
usb:v0D9Fp00A3*
usb:v0D9Fp00A4*
usb:v0D9Fp00A5*
usb:v0D9Fp00A6*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=PowerCOM
# Liebert
usb:v10AFp0001*
usb:v10AFp0004*
usb:v10AFp0008*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Liebert
# Legrand
usb:v1CB0p0032*
usb:v1CB0p0038*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Legrand
# Arduino
usb:v2341p0036*
usb:v2341p8036*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Arduino
# Arduino
usb:v2A03p0036*
usb:v2A03p0040*
usb:v2A03p8036*
usb:v2A03p8040*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Arduino
# AEG
usb:v2B2DpFFFF*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=AEG
# Ever
usb:v2E51pFFFF*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Ever
# Salicru
usb:v2E66p0201*
usb:v2E66p0202*
usb:v2E66p0203*
usb:v2E66p0300*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Salicru
# Powervar
usb:v4234p0002*
UPOWER_BATTERY_TYPE=ups
UPOWER_VENDOR=Powervar

View file

@ -1,141 +1,2 @@
############################################################################################################## # Copy some attributes from the USB device to the hiddev device
# Uninterruptible Power Supplies with USB HID interfaces SUBSYSTEM=="usbmisc", SUBSYSTEMS=="usb", KERNEL=="hiddev*", IMPORT{parent}="UPOWER_*", IMPORT{parent}="ID_VENDOR", IMPORT{parent}="ID_PRODUCT"
#
# This file was automatically generated by NUT:
# https://github.com/networkupstools/nut/
#
# To keep up to date, monitor upstream NUT
# https://github.com/networkupstools/nut/commits/master/scripts/upower/95-upower-hid.rules
# or checkout the NUT repository and call 'tools/nut-usbinfo.pl'
# newer hiddev are part of the usbmisc class
SUBSYSTEM=="usbmisc", GOTO="up_hid_chkdev"
# only support USB, else ignore
SUBSYSTEM!="usb", GOTO="up_hid_end"
# if usbraw device, ignore
LABEL="up_hid_chkdev"
KERNEL!="hiddev*", GOTO="up_hid_end"
# if an interface, ignore
ENV{DEVTYPE}=="usb_interface", GOTO="up_hid_end"
ATTRS{idVendor}=="03f0", ENV{UPOWER_VENDOR}="Hewlett Packard"
ATTRS{idVendor}=="0463", ENV{UPOWER_VENDOR}="Eaton"
ATTRS{idVendor}=="047c", ENV{UPOWER_VENDOR}="Dell"
ATTRS{idVendor}=="04d8", ENV{UPOWER_VENDOR}="Minibox"
ATTRS{idVendor}=="050d", ENV{UPOWER_VENDOR}="Belkin"
ATTRS{idVendor}=="051d", ENV{UPOWER_VENDOR}="APC"
ATTRS{idVendor}=="0592", ENV{UPOWER_VENDOR}="Powerware"
ATTRS{idVendor}=="06da", ENV{UPOWER_VENDOR}="Phoenixtec Power Co., Ltd"
ATTRS{idVendor}=="075d", ENV{UPOWER_VENDOR}="iDowell"
ATTRS{idVendor}=="0764", ENV{UPOWER_VENDOR}="Cyber Power Systems"
ATTRS{idVendor}=="09ae", ENV{UPOWER_VENDOR}="TrippLite"
ATTRS{idVendor}=="0d9f", ENV{UPOWER_VENDOR}="PowerCOM"
ATTRS{idVendor}=="10af", ENV{UPOWER_VENDOR}="Liebert"
# Hewlett Packard
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="0001", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1f06", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1f08", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1f09", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1f0a", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe0", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe1", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe2", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe3", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe5", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe6", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe7", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe8", ENV{UPOWER_BATTERY_TYPE}="ups"
# Eaton
ATTRS{idVendor}=="0463", ATTRS{idProduct}=="0001", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="0463", ATTRS{idProduct}=="ffff", ENV{UPOWER_BATTERY_TYPE}="ups"
# Dell
ATTRS{idVendor}=="047c", ATTRS{idProduct}=="ffff", ENV{UPOWER_BATTERY_TYPE}="ups"
# Minibox
ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="d004", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="d005", ENV{UPOWER_BATTERY_TYPE}="ups"
# Belkin
ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0375", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0551", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0750", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0751", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0900", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0910", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0912", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0980", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0f51", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="050d", ATTRS{idProduct}=="1100", ENV{UPOWER_BATTERY_TYPE}="ups"
# APC
ATTRS{idVendor}=="051d", ATTRS{idProduct}=="0000", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="051d", ATTRS{idProduct}=="0002", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="051d", ATTRS{idProduct}=="0003", ENV{UPOWER_BATTERY_TYPE}="ups"
# Powerware
ATTRS{idVendor}=="0592", ATTRS{idProduct}=="0004", ENV{UPOWER_BATTERY_TYPE}="ups"
# Phoenixtec Power Co., Ltd
ATTRS{idVendor}=="06da", ATTRS{idProduct}=="ffff", ENV{UPOWER_BATTERY_TYPE}="ups"
# iDowell
ATTRS{idVendor}=="075d", ATTRS{idProduct}=="0300", ENV{UPOWER_BATTERY_TYPE}="ups"
# Cyber Power Systems
ATTRS{idVendor}=="0764", ATTRS{idProduct}=="0005", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="0764", ATTRS{idProduct}=="0501", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="0764", ATTRS{idProduct}=="0601", ENV{UPOWER_BATTERY_TYPE}="ups"
# TrippLite
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="1003", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="1007", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="1008", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="1009", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="1010", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2005", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2007", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2008", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2009", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2010", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2011", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2012", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2013", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="2014", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3008", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3009", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3010", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3011", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3012", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3013", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3014", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3015", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3016", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4001", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4002", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4003", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4004", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4005", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4006", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4007", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4008", ENV{UPOWER_BATTERY_TYPE}="ups"
# PowerCOM
ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="0001", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="0004", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a2", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a3", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a4", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a5", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a6", ENV{UPOWER_BATTERY_TYPE}="ups"
# Liebert
ATTRS{idVendor}=="10af", ATTRS{idProduct}=="0001", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="10af", ATTRS{idProduct}=="0004", ENV{UPOWER_BATTERY_TYPE}="ups"
ATTRS{idVendor}=="10af", ATTRS{idProduct}=="0008", ENV{UPOWER_BATTERY_TYPE}="ups"
LABEL="up_hid_end"

View file

@ -3,7 +3,16 @@ rules = [
'95-upower-hid.rules', '95-upower-hid.rules',
] ]
hwdb = [
'95-upower-hid.hwdb',
]
install_data( install_data(
rules, rules,
install_dir: udevrulesdir, install_dir: udevrulesdir,
) )
install_data(
hwdb,
install_dir: udevhwdbdir,
)