Browse Source

nut: Add USB hotplug support

usbhid-ups has the necessary information in the source, so
let's support USB hotplugging out of the box.  Takes advantage of
the procd support now in nut-server initscript.

Signed-off-by: Daniel F. Dickinson <cshored@thecshore.com>
lilik-openwrt-22.03
Daniel F. Dickinson 6 years ago
parent
commit
1cd4dcfa99
3 changed files with 67 additions and 0 deletions
  1. +11
    -0
      net/nut/Makefile
  2. +51
    -0
      net/nut/files/30-libhid-ups.head
  3. +5
    -0
      net/nut/files/30-libhid-ups.tail

+ 11
- 0
net/nut/Makefile View File

@ -80,6 +80,16 @@ define Package/nut-server/install
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upsdrvctl $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/share/nut/driver.list $(1)/usr/share/nut/
ln -sf /var/etc/nut/ups.conf $(1)/etc/nut/ups.conf
# Mangle libhid.usermap into a format (hotplug shell script) useful for OpenWrt
$(INSTALL_DIR) $(1)/etc/hotplug.d/usb
$(INSTALL_BIN) ./files/30-libhid-ups.head $(1)/etc/hotplug.d/usb/30-libhid-ups
$(CP) $(PKG_INSTALL_DIR)/etc/hotplug/usb/libhid.usermap $(PKG_BUILD_DIR)/30-libhid-ups.middle
$(SED) '/^$$$$/d' \
-e '/^#/d' \
-E -e 's:^[^ ][^ ]* *0x0003 *0x0{0,3}([^ ][^ ]*) *0x{0,3}*([^ ][^ ]*).*:\1/\2/* | \\:' \
$(PKG_BUILD_DIR)/30-libhid-ups.middle
tail -n+2 $(PKG_BUILD_DIR)/30-libhid-ups.middle >>$(1)/etc/hotplug.d/usb/30-libhid-ups
cat ./files/30-libhid-ups.tail >>$(1)/etc/hotplug.d/usb/30-libhid-ups
endef
define Package/nut-common
@ -515,6 +525,7 @@ CONFIGURE_ARGS += \
--without-neon \
--without-powerman \
--without-wrap \
--with-hotplug-dir=/etc/hotplug \
--with-cgi \
--without-ipmi \
--without-freeipmi \


+ 51
- 0
net/nut/files/30-libhid-ups.head View File

@ -0,0 +1,51 @@
#!/bin/sh
. /lib/functions.sh
nut_driver_config() {
local cfg="$1"
local nomatch="$2"
config_get runas "$cfg" runas "nut"
config_get vendorid "$cfg" vendorid
config_get productid "$cfg" productid
[ "$ACTION" = "add" ] &&[ -n "$DEVNAME" ] && {
chmod 0660 /dev/"$DEVNAME"
chown ${runas:-root}:$(id -gn "${runas:-root}") /dev/"$DEVNAME"
}
if [ "$(printf "%04x" 0x"$pvendid")" = "$vendorid" ] && \
[ "$(printf "%04x" 0x"$pprodid")" = "$productid" ]; then
[ "$ACTION" = "add" ] && {
/etc/init.d/nut-server start "$cfg"
}
[ "$ACTION" = "remove" ] && {
/etc/init.d/nut-server stop "$cfg"
}
found=1
elif [ "$nomatch" = "1" ]; then
[ "$ACTION" = "add" ] && {
/etc/init.d/nut-server start "$cfg"
}
[ "$ACTION" = "remove" ] && {
/etc/init.d/nut-server stop "$cfg"
}
fi
}
perform_libhid_action() {
local vendorid productid runas
local pvendid pprodid found
pvendid=${PRODUCT%/*}
pvendid=${pvendid%/*}
pprodid=${PRODUCT%/*}
pprodid=${pprodid##*/}
config_load nut_server
config_foreach nut_driver_config driver 0
[ "$found" != "1" ] && config_foreach nut_driver_config driver 1
}
[ -n "$PRODUCT" ] && case "$PRODUCT" in

+ 5
- 0
net/nut/files/30-libhid-ups.tail View File

@ -0,0 +1,5 @@
"")
[ -d /var/run/nut ] && [ ! -f /var/run/nut/disable-hotplug ] && \
/etc/init.d/nut-server enabled && perform_libhid_action
;;
esac

Loading…
Cancel
Save