[Pkg-lirc-maint] Bug#549425: Add dual device handling for some sorts of lirc_imon
Kevin Baradon
kevin.baradon at gmail.com
Sat Oct 3 09:54:11 UTC 2009
Package: lirc
Version: 0.8.3-5
Severity: wishlist
Tags: patch
I own a iMon USB device (0036) which is detected by lirc kernel driver as two different USB devices.
I need lirc to listen on both these two devices to get full functionalities of my remote control.
I have made a patch to lirc init.d script to start two instances of lirc:
8><--------------------------
--- lirc.old 2009-10-03 11:44:30.000000000 +0200
+++ lirc.new 2009-10-03 11:44:46.000000000 +0200
@@ -10,12 +10,16 @@
# infrared receivers and transceivers.
### END INIT INFO
+PIDFILE=/var/run/lircd.pid
+SLAVE_PIDFILE=/var/run/lircd_slave.pid
+
load_modules ()
{
MODULES_MISSING=false
log_daemon_msg "Loading LIRC modules"
for mod in $*; do
+ log_progress_msg $mod
modprobe $mod 2> /dev/null || MODULES_MISSING=true
done
@@ -57,8 +61,30 @@
if [ -n "$DRIVER" ] && [ "$DRIVER" != "none" ]; then
ARGS="--driver=$DRIVER $ARGS"
fi
+ if [ "$DUAL_DEVICE" = "true" ]; then
+ ARGS="--connect=localhost:$SLAVE_LIRCD_PORT --pidfile=$PIDFILE $ARGS"
+ fi
+ echo $ARGS
+
+ unset -v ARGS
+}
+
+build_slave_args ()
+{
+ ARGS="$*"
+
+ if [ -n "$SLAVE_DEVICE" ] && [ "$SLAVE_DEVICE" != "none" ]; then
+ ARGS="--device=$SLAVE_DEVICE $ARGS"
+ fi
+ if [ -n "$SLAVE_DRIVER" ] && [ "$SLAVE_DRIVER" != "none" ]; then
+ ARGS="--driver=$SLAVE_DRIVER $ARGS"
+ fi
+
+ ARGS="--listen=$SLAVE_LIRCD_PORT --pidfile=$SLAVE_PIDFILE $ARGS"
echo $ARGS
+
+ unset -v ARGS
}
. /lib/lsb/init-functions
@@ -104,44 +130,57 @@
fi
if [ "$START_LIRCD" = "true" ]; then
- log_daemon_msg "Starting remote control daemon(s) : LIRC "
- LIRCD_ARGS=`build_args $LIRCD_ARGS`
+ log_daemon_msg "Starting remote control daemon"
+ if [ "$DUAL_DEVICE" = "true" ]; then
+ log_progress_msg "lircd_slave"
+ REAL_LIRCD_ARGS=`build_slave_args $LIRCD_ARGS`
+ if ! start-stop-daemon --start --pidfile $SLAVE_PIDFILE --quiet --exec /usr/sbin/lircd -- $REAL_LIRCD_ARGS < /dev/null; then
+ log_end_msg $?
+ exit $?
+ fi
+ fi
- if [ ! -z "$LIRCD_ARGS" ]; then
- start-stop-daemon --start --quiet --exec /usr/sbin/lircd -- $LIRCD_ARGS < /dev/null
+ log_progress_msg "lircd"
+ REAL_LIRCD_ARGS=`build_args $LIRCD_ARGS`
+ if ! start-stop-daemon --start --pidfile $PIDFILE --quiet --exec /usr/sbin/lircd -- $REAL_LIRCD_ARGS < /dev/null; then
log_end_msg $?
- else
- log_end_msg 1
+ exit $?
fi
+ log_end_msg 0
fi
if [ "$START_LIRCMD" = "true" ]; then
- log_daemon_msg "Starting remote control mouse daemon : LIRCMD "
+ log_daemon_msg "Starting remote control mouse daemon"
+ log_progress_msg "lircmd"
start-stop-daemon --start --quiet --exec /usr/sbin/lircmd < /dev/null
log_end_msg $?
fi
if [ "$START_IREXEC" = "true" ]; then
- log_daemon_msg "Starting execution daemon: irexec"
+ log_daemon_msg "Starting remote control execution daemon"
+ log_progress_msg "irexec"
start-stop-daemon --start --quiet --exec /usr/bin/irexec -- -d /etc/lirc/lircrc < /dev/null
log_end_msg $?
fi
;;
stop)
if [ "$START_IREXEC" = "true" ]; then
- log_daemon_msg "Stopping execution daemon: irexec"
+ log_daemon_msg "Stopping remote control execution daemon"
+ log_progress_msg "irexec"
start-stop-daemon --stop --quiet --exec /usr/bin/irexec
log_end_msg $?
fi
if [ "$START_LIRCMD" = "true" ]; then
- log_daemon_msg "Stopping remote control mouse daemon: LIRCMD"
+ log_daemon_msg "Stopping remote control mouse daemon"
+ log_progress_msg "lircmd"
start-stop-daemon --stop --quiet --exec /usr/sbin/lircmd
log_end_msg $?
fi
if [ "$START_LIRCD" = "true" ]; then
- log_daemon_msg "Stopping remote control daemon(s): LIRC"
+ log_daemon_msg "Stopping remote control daemon"
+ log_progress_msg "lircd"
start-stop-daemon --stop --quiet --exec /usr/sbin/lircd
log_end_msg $?
fi
8><--------------------------
Can you include this functionality in your package ?
-- System Information:
Debian Release: squeeze/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.6.31 (SMP w/2 CPU cores; PREEMPT)
Locale: LANG=C, LC_CTYPE=C (charmap=UTF-8) (ignored: LC_ALL set to fr_FR.UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages lirc depends on:
ii debconf [debconf-2.0] 1.5.27 Debian configuration management sy
ii libasound2 1.0.21a-1 shared library for ALSA applicatio
ii libc6 2.9-27 GNU C Library: Shared libraries
ii liblircclient0 0.8.3-5 infra-red remote control support -
ii libusb-0.1-4 2:0.1.12-13 userspace USB programming library
ii lsb-base 3.2-23 Linux Standard Base 3.2 init scrip
lirc recommends no packages.
Versions of packages lirc suggests:
ii lirc-modules-source 0.8.3-5 infra-red remote control support -
pn lirc-svga <none> (no description available)
pn lirc-x <none> (no description available)
-- debconf information:
lirc/take_care_of_old_config:
lirc/install_devices: true
lirc/irq:
lirc/lircd_conf:
lirc/reconfigure: false
lirc/lircmd_conf:
lirc/remove_var-log-lircd: true
lirc/driver:
lirc/port:
lirc/device:
lirc/should-use-IntelliMouse:
lirc/cflags:
lirc/timer:
lirc/modules:
-------------- next part --------------
--- lirc.old 2009-10-03 11:44:30.000000000 +0200
+++ lirc.new 2009-10-03 11:44:46.000000000 +0200
@@ -10,12 +10,16 @@
# infrared receivers and transceivers.
### END INIT INFO
+PIDFILE=/var/run/lircd.pid
+SLAVE_PIDFILE=/var/run/lircd_slave.pid
+
load_modules ()
{
MODULES_MISSING=false
log_daemon_msg "Loading LIRC modules"
for mod in $*; do
+ log_progress_msg $mod
modprobe $mod 2> /dev/null || MODULES_MISSING=true
done
@@ -57,8 +61,30 @@
if [ -n "$DRIVER" ] && [ "$DRIVER" != "none" ]; then
ARGS="--driver=$DRIVER $ARGS"
fi
+ if [ "$DUAL_DEVICE" = "true" ]; then
+ ARGS="--connect=localhost:$SLAVE_LIRCD_PORT --pidfile=$PIDFILE $ARGS"
+ fi
+ echo $ARGS
+
+ unset -v ARGS
+}
+
+build_slave_args ()
+{
+ ARGS="$*"
+
+ if [ -n "$SLAVE_DEVICE" ] && [ "$SLAVE_DEVICE" != "none" ]; then
+ ARGS="--device=$SLAVE_DEVICE $ARGS"
+ fi
+ if [ -n "$SLAVE_DRIVER" ] && [ "$SLAVE_DRIVER" != "none" ]; then
+ ARGS="--driver=$SLAVE_DRIVER $ARGS"
+ fi
+
+ ARGS="--listen=$SLAVE_LIRCD_PORT --pidfile=$SLAVE_PIDFILE $ARGS"
echo $ARGS
+
+ unset -v ARGS
}
. /lib/lsb/init-functions
@@ -104,44 +130,57 @@
fi
if [ "$START_LIRCD" = "true" ]; then
- log_daemon_msg "Starting remote control daemon(s) : LIRC "
- LIRCD_ARGS=`build_args $LIRCD_ARGS`
+ log_daemon_msg "Starting remote control daemon"
+ if [ "$DUAL_DEVICE" = "true" ]; then
+ log_progress_msg "lircd_slave"
+ REAL_LIRCD_ARGS=`build_slave_args $LIRCD_ARGS`
+ if ! start-stop-daemon --start --pidfile $SLAVE_PIDFILE --quiet --exec /usr/sbin/lircd -- $REAL_LIRCD_ARGS < /dev/null; then
+ log_end_msg $?
+ exit $?
+ fi
+ fi
- if [ ! -z "$LIRCD_ARGS" ]; then
- start-stop-daemon --start --quiet --exec /usr/sbin/lircd -- $LIRCD_ARGS < /dev/null
+ log_progress_msg "lircd"
+ REAL_LIRCD_ARGS=`build_args $LIRCD_ARGS`
+ if ! start-stop-daemon --start --pidfile $PIDFILE --quiet --exec /usr/sbin/lircd -- $REAL_LIRCD_ARGS < /dev/null; then
log_end_msg $?
- else
- log_end_msg 1
+ exit $?
fi
+ log_end_msg 0
fi
if [ "$START_LIRCMD" = "true" ]; then
- log_daemon_msg "Starting remote control mouse daemon : LIRCMD "
+ log_daemon_msg "Starting remote control mouse daemon"
+ log_progress_msg "lircmd"
start-stop-daemon --start --quiet --exec /usr/sbin/lircmd < /dev/null
log_end_msg $?
fi
if [ "$START_IREXEC" = "true" ]; then
- log_daemon_msg "Starting execution daemon: irexec"
+ log_daemon_msg "Starting remote control execution daemon"
+ log_progress_msg "irexec"
start-stop-daemon --start --quiet --exec /usr/bin/irexec -- -d /etc/lirc/lircrc < /dev/null
log_end_msg $?
fi
;;
stop)
if [ "$START_IREXEC" = "true" ]; then
- log_daemon_msg "Stopping execution daemon: irexec"
+ log_daemon_msg "Stopping remote control execution daemon"
+ log_progress_msg "irexec"
start-stop-daemon --stop --quiet --exec /usr/bin/irexec
log_end_msg $?
fi
if [ "$START_LIRCMD" = "true" ]; then
- log_daemon_msg "Stopping remote control mouse daemon: LIRCMD"
+ log_daemon_msg "Stopping remote control mouse daemon"
+ log_progress_msg "lircmd"
start-stop-daemon --stop --quiet --exec /usr/sbin/lircmd
log_end_msg $?
fi
if [ "$START_LIRCD" = "true" ]; then
- log_daemon_msg "Stopping remote control daemon(s): LIRC"
+ log_daemon_msg "Stopping remote control daemon"
+ log_progress_msg "lircd"
start-stop-daemon --stop --quiet --exec /usr/sbin/lircd
log_end_msg $?
fi
More information about the Pkg-lirc-maint
mailing list