From 5ce57469d8b847b0ef5521920c93f311e186b503 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 8 Mar 2014 02:40:54 +0100 Subject: [PATCH] eventlircd: seperate udev rules and scripts and move to package 'lirc' Signed-off-by: Stephan Raue --- .../sysutils/remote/eventlircd/package.mk | 1 + .../eventlircd-42-002-custom_config.patch | 19 ----- packages/sysutils/remote/lirc/package.mk | 6 +- .../sysutils/remote/lirc/scripts/lircd_helper | 74 +++++++++++++++++++ .../remote/lirc/scripts/lircd_wakeup_enable | 17 +++++ .../remote/lirc/udev.d/98-lircd.rules | 60 +++++++++++++++ 6 files changed, 157 insertions(+), 20 deletions(-) delete mode 100644 packages/sysutils/remote/eventlircd/patches/eventlircd-42-002-custom_config.patch create mode 100755 packages/sysutils/remote/lirc/scripts/lircd_helper create mode 100755 packages/sysutils/remote/lirc/scripts/lircd_wakeup_enable create mode 100644 packages/sysutils/remote/lirc/udev.d/98-lircd.rules diff --git a/packages/sysutils/remote/eventlircd/package.mk b/packages/sysutils/remote/eventlircd/package.mk index f64951bc58..057203be81 100644 --- a/packages/sysutils/remote/eventlircd/package.mk +++ b/packages/sysutils/remote/eventlircd/package.mk @@ -38,6 +38,7 @@ post_makeinstall_target() { # install our own evmap files and udev rules rm -rf $INSTALL/etc/eventlircd.d rm -rf $INSTALL/usr/lib/udev/rules.d + rm -rf $INSTALL/usr/lib/udev/lircd_helper mkdir -p $INSTALL/etc/eventlircd.d cp $PKG_DIR/evmap/*.evmap $INSTALL/etc/eventlircd.d diff --git a/packages/sysutils/remote/eventlircd/patches/eventlircd-42-002-custom_config.patch b/packages/sysutils/remote/eventlircd/patches/eventlircd-42-002-custom_config.patch deleted file mode 100644 index 7b1f89cbfd..0000000000 --- a/packages/sysutils/remote/eventlircd/patches/eventlircd-42-002-custom_config.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff --git a/udev/lircd_helper.in b/udev/lircd_helper.in -index f580cc6..d4d7f3f 100644 ---- a/udev/lircd_helper.in -+++ b/udev/lircd_helper.in -@@ -41,7 +41,13 @@ - daemon="${daemon} --uinput" - daemon="${daemon} --output=@localstatedir@/run/lirc/lircd-${devname_instance}" - daemon="${daemon} --pidfile=@localstatedir@/run/lirc/lircd-${devname_instance}.pid" -- daemon="${daemon} ${lircd_conf}" -+ if test -e "/storage/.config/lircd.conf" ; then -+ daemon="${daemon} /storage/.config/lircd.conf" -+ elif test -e "${lircd_conf}" ; then -+ daemon="${daemon} ${lircd_conf}" -+ else -+ exit 1 -+ fi - ${daemon} - for devlink in ${DEVLINKS} ; do - devlink_instance=`echo ${devlink} | /bin/sed -e 's/\/\+/~/g' -e 's/^~dev~//'` diff --git a/packages/sysutils/remote/lirc/package.mk b/packages/sysutils/remote/lirc/package.mk index 7cdbcf9758..c699edd707 100644 --- a/packages/sysutils/remote/lirc/package.mk +++ b/packages/sysutils/remote/lirc/package.mk @@ -44,7 +44,7 @@ PKG_CONFIGURE_OPTS_TARGET="ac_cv_path_LIBUSB_CONFIG= / if [ "$DEBUG" = yes ]; then PKG_CONFIGURE_OPTS_TARGET="$PKG_CONFIGURE_OPTS_TARGET --enable-debug" else - PKG_CONFIGURE_OPTS_TARGET="$PKG_CONFIGURE_OPTS_TARGET --disable-debug" + PKG_CONFIGURE_OPTS_TARGET="$PKG_CONFIGURE_OPTS_TARGET --enable-debug" fi pre_make_target() { @@ -57,4 +57,8 @@ post_makeinstall_target() { mkdir -p $INSTALL/etc/lirc cp $PKG_DIR/config/lircd.conf.xbox $INSTALL/etc/lirc cp $PKG_DIR/config/lircd.conf.rpi $INSTALL/etc/lirc + + mkdir -p $INSTALL/usr/lib/udev + cp $PKG_DIR/scripts/lircd_helper $INSTALL/usr/lib/udev + cp $PKG_DIR/scripts/lircd_wakeup_enable $INSTALL/usr/lib/udev } diff --git a/packages/sysutils/remote/lirc/scripts/lircd_helper b/packages/sysutils/remote/lirc/scripts/lircd_helper new file mode 100755 index 0000000000..4e331b0d25 --- /dev/null +++ b/packages/sysutils/remote/lirc/scripts/lircd_helper @@ -0,0 +1,74 @@ +#!/bin/sh +################################################################################ +# lircd_helper +# +# This script can be used by udev to start or stop lircd when a remote control +# device is added or removed. +# +# lircd_helper configures lircd to output using a uinput event device so that +# eventlircd can aggregate the outputs into a single lircd socket. +# +# lircd_helper configures lircd to use an lircd socket name that is derived +# from the device name. In addition, lircd_helper creates symbolic links to this +# lircd socket that are derived from the device symbolic links. You can use this +# socket and the symbolic link to this socket when using commands such as +# irsend. +# +# lircd_helper understands two lircd_helper specific device properites set +# using ENV{} and passed as environment variables: +# lircd_driver: +# Used to tell lircd_helper the name of the lircd driver. +# lircd_conf: +# Used to tell lircd_helper the path to the lircd.conf file to use. +################################################################################ + +case "${ACTION}" in + add) + if test "x${lircd_driver}" = "x" ; then + exit 1; + fi + if test "x${lircd_conf}" = "x" ; then + exit 1; + fi + if test ! -e '/run/lirc' ; then + mkdir -p '/run/lirc' + fi + devname_instance=`echo ${DEVNAME} | sed -e 's/\/\+/~/g' -e 's/^~dev~//'` + if test ! -e "/run/lirc/lircd-${devname_instance}.pid" ; then + daemon='/usr/sbin/lircd' + daemon="${daemon} --driver=${lircd_driver}" + daemon="${daemon} --device=${DEVNAME}" + daemon="${daemon} --uinput" + daemon="${daemon} --output=/run/lirc/lircd-${devname_instance}" + daemon="${daemon} --pidfile=/run/lirc/lircd-${devname_instance}.pid" + if test -e "/storage/.config/lircd.conf" ; then + daemon="${daemon} /storage/.config/lircd.conf" + elif test -e "${lircd_conf}" ; then + daemon="${daemon} ${lircd_conf}" + else + exit 1 + fi + ${daemon} + for devlink in ${DEVLINKS} ; do + devlink_instance=`echo ${devlink} | /bin/sed -e 's/\/\+/~/g' -e 's/^~dev~//'` + rm -f "/run/lirc/lircd-${devlink_instance}" + ln -s "lircd-${devname_instance}" "/run/lirc/lircd-${devlink_instance}" + done + fi + ;; + remove) + instance=`echo $DEVNAME | sed -e 's/\/\+/~/g' -e 's/^~dev~//'` + if test -e "/run/lirc/lircd-${instance}.pid" ; then + pid=`cat /run/lirc/lircd-${instance}.pid` + if test ! "x${pid}" = "x" ; then + kill ${pid} + fi + for devlink in ${DEVLINKS} ; do + devlink_instance=`echo ${devlink} | sed -e 's/\/\+/~/g' -e 's/^~dev~//'` + rm -f "/run/lirc/lircd-${devlink_instance}" + done + fi + ;; +esac + +exit 0 diff --git a/packages/sysutils/remote/lirc/scripts/lircd_wakeup_enable b/packages/sysutils/remote/lirc/scripts/lircd_wakeup_enable new file mode 100755 index 0000000000..fb2203dce3 --- /dev/null +++ b/packages/sysutils/remote/lirc/scripts/lircd_wakeup_enable @@ -0,0 +1,17 @@ +#!/bin/sh +################################################################################ +# wakeup_enable +################################################################################ + +devpath=`readlink -f "/sys/${DEVPATH}"` +while echo "${devpath}" | grep -q '^/sys/devices/' > /dev/null 2>&1 ; do + if test -e "${devpath}/power/wakeup" ; then + state=`cat "${devpath}/power/wakeup"` + if test "x${state}" = "xdisabled" ; then + echo "enabled" > "${devpath}/power/wakeup" + fi + fi + devpath=`dirname "${devpath}"` +done + +exit 0 diff --git a/packages/sysutils/remote/lirc/udev.d/98-lircd.rules b/packages/sysutils/remote/lirc/udev.d/98-lircd.rules new file mode 100644 index 0000000000..30654b408b --- /dev/null +++ b/packages/sysutils/remote/lirc/udev.d/98-lircd.rules @@ -0,0 +1,60 @@ +################################################################################ +# An example udev rules file for lircd. +################################################################################ + +# lircd_helper only does something for "add" and "remove" actions. +ACTION!="add|remove", GOTO="end" + +KERNEL=="hiddev[0-9]*", SUBSYSTEM=="usb", SUBSYSTEMS=="usb", GOTO="begin" +KERNEL=="ttyACM[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", GOTO="begin" +KERNEL=="lirc[0-9]*", SUBSYSTEM=="lirc", SUBSYSTEMS=="i2c", GOTO="begin" +KERNEL=="lirc[0-9]*", SUBSYSTEM=="lirc", SUBSYSTEMS=="usb", GOTO="begin" +KERNEL=="lirc[0-9]*", SUBSYSTEM=="lirc", SUBSYSTEMS=="platform", GOTO="begin" +KERNEL=="lirc[0-9]*", SUBSYSTEM=="lirc", SUBSYSTEMS=="pnp", GOTO="begin" +GOTO="end" +LABEL="begin" + +#------------------------------------------------------------------------------- +# Ask lircd_helper to lirc devices. +#------------------------------------------------------------------------------- +SUBSYSTEM=="lirc", \ + ENV{lircd_driver}="default", \ + ENV{lircd_conf}="/etc/lirc/lircd.conf" + +### Microsoft Xbox DVD dongle +SUBSYSTEM=="lirc", DRIVERS=="lirc_xbox", \ + ENV{lircd_driver}="default", \ + ENV{lircd_conf}="/etc/lirc/lircd.conf.xbox" + +### RPi GPIO IR Receiver +SUBSYSTEM=="lirc", DRIVERS=="lirc_rpi", \ + ENV{lircd_driver}="default", \ + ENV{lircd_conf}="/etc/lirc/lircd.conf.rpi" + +#------------------------------------------------------------------------------- +# Ask lircd_helper to handle USB devices that do not show up as lirc devices +# and are supported by lircd. Remote controls that are USB HID devices that show +# up as event devices are not included as as they are handled by eventlircd. +#------------------------------------------------------------------------------- +SUBSYSTEMS=="usb", GOTO="begin-usb" +GOTO="end-usb" +LABEL="begin-usb" + +ENV{ID_USB_INTERFACES}=="", IMPORT{builtin}="usb_id" + +ENV{ID_VENDOR_ID}=="04d8", ENV{ID_MODEL_ID}=="fd08", \ + ENV{lircd_driver}="usb_irtoy", \ + ENV{lircd_conf}="/storage/.config/lircd.conf" + +ENV{ID_VENDOR_ID}=="0fe9", ENV{ID_MODEL_ID}=="9010", \ + ENV{lircd_driver}="dvico", \ + ENV{lircd_conf}="/etc/lirc/lircd.conf" + +# Enable wake-on-usb for the USB remotes. +ENV{lircd_driver}=="?*", ENV{lircd_conf}=="?*", RUN+="lircd_wakeup_enable" + +LABEL="end-usb" + +ENV{lircd_driver}=="?*", ENV{lircd_conf}=="?*", RUN+="lircd_helper" + +LABEL="end"