Blob Blame History Raw
#!/bin/sh
#
# lirc         Startup script for the Linux Infrared Remote Control daemons
#
# chkconfig:   - 29 71
# description: Enables infrared controls through LIRC.
# processname: lircd
# processname: lircmd
# config:      /etc/lirc/lircd.conf
# config:      /etc/lirc/lircmd.conf
# pidfile:     /var/run/lirc/lircd.pid

### BEGIN INIT INFO
# Provides: lirc
# Should-Start: $syslog $network
# Should-Stop: $syslog $network
# Short-Description: Linux Infrared Remote Control daemon
# Description: Enables remote control devices through LIRC.
### END INIT INFO

# Source function library.
. /etc/init.d/functions

exec="/usr/sbin/lircd"
exec2="/usr/sbin/lircmd"
prog=$(basename $exec)
prog2=$(basename $exec2)

[ -e /etc/sysconfig/lirc ] && . /etc/sysconfig/lirc

lockfile=/var/lock/subsys/lirc

# Default to first lirc character device and the lirc chardev driver
LIRC_DEVICE=${LIRC_DEVICE:-/dev/lirc0}
LIRC_DRIVER=${LIRC_DRIVER:-default}

start() {
    echo -n $"Starting infrared remote control daemon ($prog): "
    daemon $exec --driver=$LIRC_DRIVER --device=$LIRC_DEVICE $LIRCD_OPTIONS
    retval=$?
    echo
    status $prog >/dev/null 2>&1
    if [ $? -eq 0 -a "$ENABLE_LIRCMD" = "yes" ] ; then
        echo -n $"Starting infrared remote control mouse daemon ($prog2): "
        daemon $exec2 $LIRCMD_OPTIONS
        retval=$?
        echo
    fi
    [ $retval -eq 0 ] && touch $lockfile

    # To prevent double key events w/both in-kernel and lirc decode,
    # we disable the in-kernel decoding when lircd is started up
    # successfully with a raw IR rc-core receiver
    if [ $retval -eq 0 ]; then
        if [ $(echo "$LIRC_DRIVER" | grep -c "default") -ge 1 ]; then
            lircdev=$(basename $LIRC_DEVICE)
            rcdev=$(find -L /sys/class/rc/ -maxdepth 2 -name $lircdev 2> /dev/null)
            if [ ! -z ${rcdev} ]; then
	        (echo lirc > ${rcdev}/../protocols) 2> /dev/null
            fi
        fi
    fi

    return $retval
}

stop() {
    retval=0
    if status $prog2 >/dev/null 2>&1 ; then
        echo -n $"Stopping infrared remote control mouse daemon ($prog2): "
        killproc $prog2
        retval=$?
        echo
    fi
    if [ $retval -eq 0 ] ; then
        echo -n $"Stopping infrared remote control daemon ($prog): "
        killproc $prog
        retval=$?
        echo
    fi
    [ $retval -eq 0 ] && rm -f $lockfile

    # On lircd shutdown, turn all the in-kernel IR decoders back on
    lircdev=$(basename $LIRC_DEVICE)
    rcdev=$(find -L /sys/class/rc/ -maxdepth 2 -name $lircdev 2> /dev/null)
    if [ ! -z ${rcdev} ]; then
        protonode=${rcdev}/../protocols
        echo none > ${protonode}
        protos=$(cat ${protonode})
        for p in $protos
        do
            (echo "+${p}" > ${protonode}) 2> /dev/null
        done
    fi

    return $retval
}

restart() {
    stop
    start
}

reload() {
    # lircmd doesn't apparently respond to HUP, so if it's running, restart.
    if status $prog2 >/dev/null 2>&1 ; then
        restart
    else
        echo -n $"Reloading infrared remote control daemon ($prog): "
        killproc $prog -HUP
        retval=$?
        echo
        return $retval
    fi
}

case "$1" in
    start|stop|restart|reload)
        $1
        ;;
    force-reload)
        reload || restart
        ;;
    status)
        status $prog2
        status $prog
        ;;
    try-restart|condrestart)
  	[ ! -f $lockfile ] || restart
	;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload}"
        exit 2
esac