Anleitung Lirc Installation für Antec Fusion mit Atric Empfänger

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Startskript)
Zeile 137: Zeile 137:
 
  [...]
 
  [...]
  
===Automatisch starten===
+
===Auto-Startskript===
 
Damit der lircd beim Booten automatisch gestartet wird legen wir ein init.d Skript an:
 
Damit der lircd beim Booten automatisch gestartet wird legen wir ein init.d Skript an:
  

Version vom 26. April 2009, 11:30 Uhr

Diese Anleitung beschreibt, wie man LIRC und LCDProc auf Ubuntu 9.04 installiert um das im Antec Fusion eingebaute LCD sowie einen externen IR-Empfänger zu nutzen. Die Anleitung funktioniert möglicherweise auch mit anderen Gehäusen, die das gleiche Soundgraph LCD verbaut haben, sowie mit anderen IR-Empfängern.

Inhaltsverzeichnis

Hintergrund

Das Gehäuse "Antec Fusion Remote" hat zwar einen IR-Empfänger eingebaut, dieser kann aber nur mit MCE Fernbedienungen umgehen. Ich habe deswegen in das Gehäuse einen Atric IR-Einschalter eingebaut. Damit man das verbaute LCD-Display, den Lautstärkeregler an der Front, sowie den zusätzlichen IR-Empfänger nutzen kann, muss man LIRC entsprechend installieren und konfigurieren. Den IR Empfänger des Atric Einschalter habe ich hinter dem Frontpanel platziert, wo standardmäßig der IR-Empfänger des integrierten Soundgraph Moduls verbaut ist.

LIRC

Vorbereitung

Diese Installationsanleitung ist geschrieben für Ubuntu Jaunty Jackalope (9.04) und das Imon Device von Soundgraph 15c2:0038.

Man kann mit lsub prüfen, ob man das richtige Modul installiert hat:

$ lsusb |grep -i sound
Bus 003 Device 003: ID 15c2:0038 SoundGraph Inc.


mkdir src
cd src
wget http://prdownloads.sourceforge.net/lirc/lirc-0.8.4a.tar.bz2
tar xvfj lirc-0.8.4a.tar.bz2
rm -r lirc-0.8.4a.tar.bz2
cd lirc-0.8.4a/

Der Trick besteht darin, zuerst Lirc jeweils einmal separat für das Imom zu installieren und anschließend für den IR-Emfpänger. Danach kann man beide zusammenbringen, dazu später mehr.

Installation

./configure --with-driver=imon
make -j2
sudo make install
./configure --with-driver=serial
make -j2
sudo make install

Leider installiert der make install die Kernel-Module unter Ubuntu 9.04 an einen falschen Ort. Deswegen müssen wir diese noch manuell anpassen:

cd /lib/modules/2.6.28-11-generic/kernel/ubuntu/lirc/lirc_imon
sudo mv lirc_imon.ko lirc_imon.ko.old
sudo ln -s /lib/modules/2.6.28-11-generic/misc/lirc_imon.ko lirc_imon.ko
cd /lib/modules/2.6.28-11-generic/kernel/ubuntu/lirc/lirc_serial
sudo mv lirc_serial.ko lirc_serial.ko.old
sudo ln -s /lib/modules/2.6.28-11-generic/misc/lirc_serial.ko lirc_serial.ko
cd /lib/modules/2.6.28-11-generic/kernel/ubuntu/lirc/lirc_dev
sudo mv lirc_dev.ko lirc_dev.ko.old
sudo ln -s /lib/modules/2.6.28-11-generic/misc/lirc_dev.ko lirc_dev.ko

Jetzt laden wir die Module in den Kernel:

sudo setserial /dev/ttyS0 uart none
sudo modprobe lirc_imon
sudo modprobe lirc_serial
sudo depmod -ae

Wenn alles gut geht, sollte es unter /dev mehrere lirc und lcd Devices geben:

$ ls /dev/li*
/dev/lirc  /dev/lirc0  /dev/lirc1  /dev/lirc2  /dev/lircd  /dev/lircm
$ ls /dev/lc*
/dev/lcd0  /dev/lcd1

Mit dem Befehl dmesg können wir nachsehen was passiert ist:

$ dmesg
[ 1898.112683] lirc_dev: IR Remote Control driver registered, major 61
[ 1898.114662] lirc_imon: Driver for Soundgraph iMON MultiMedia IR/VFD, v0.3
[ 1898.114666] lirc_imon: Venky Raju <dev@venky.ws>
[ 1898.114696] lirc_imon: imon_probe: found IMON device
[ 1898.114702] lirc_dev: lirc_register_plugin: sample_rate: 0
[ 1898.114767] lirc_imon: imon_probe: Registered iMON plugin(minor:0)
[ 1898.114806] lirc_imon: imon_probe: iMON device on usb<3:3> initialized
[ 1898.114817] lirc_imon: imon_probe: found IMON device
[ 1898.114822] lirc_dev: lirc_register_plugin: sample_rate: 0
[ 1898.114853] lirc_imon: imon_probe: Registered iMON plugin(minor:1)
[ 1898.114890] lirc_imon: imon_probe: iMON device on usb<3:3> initialized
[ 1898.114919] usbcore: registered new interface driver lirc_imon
[ 1922.820064] lirc_serial: auto-detected active low receiver
[ 1922.820071] lirc_dev: lirc_register_plugin: sample_rate: 0

Konfiguration

Damit wir den setserial nicht bei jedem Boot absetzen müssen, tragen wir ihn in die /etc/serial.conf ein.

sudo nano /etc/serial.conf

Folgende Zeile am Ende einfügen, falls bereits eine Zeile drin steht die mit /dev/ttyS0 beginnt, diese mit # auskommentieren.

/dev/ttyS0 uart none

In der autoserial.conf deaktivieren wir noch den letzten Eintrag mit #.

sudo nano /var/lib/setserial/autoserial.conf

Damit die Module beim Systemstart automatisch geladen werden editieren wir noch die /etc/modules:

sudo nano /etc/modules

Am Ende fügen wir folgende Zeilen ein:

alias char-major-61 lirc_serial
options lirc_serial irq=4 io=0x3f8   
lirc_imon is_lcd=1
lirc_serial

Jetzt müssen wir noch die Reihenfolge beim Boot anpassen, dass der setserial abgesetzt wird bevor die Kernel-Module geladen werden:

cd /etc/rcS.d/
sudo mv S30etc-setserial S05etc-setserial

So, jetzt können wir einmal rebooten um zu testen ob auch alles funktioniert. Nach dem Reboot sollte es folgendermaßen aussehen:

$ ls /dev/lirc*
/dev/lirc0  /dev/lirc1  /dev/lirc2
$ ls /dev/lcd*
/dev/lcd0  /dev/lcd1

Die Devices lirc0 und lirc1 sind die Geräte die vom Soundgraph Modul kommen, wobei der Volume-Regler an der Gehäusefront auf lirc1 liegen sollte. Das Device lirc2 ist der serielle Empfänger.

Test

Mit mode2 kann man die Geräte testen, hier habe ich am Regler gedreht:

$ sudo mode2 -r -d /dev/lirc1
code: 0x00010000
code: 0x01000000

Hier auf der RC5-Ferbedienung gedrückt:

$ sudo mode2 -d /dev/lirc2
pulse 33
space 9410461
pulse 880
space 778
pulse 1760
space 1591
[...]

Auto-Startskript

Damit der lircd beim Booten automatisch gestartet wird legen wir ein init.d Skript an:

sudo nano /etc/init.d/lircd

Folgenden Inhalt kopieren wir in das Skript:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          lirc
# Required-Start:    $etc-setserial
# Required-Stop:     $etc-setserial
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts the lircd
### END INIT INFO

# Author: Stephan Häuslschmid

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="LIRC"
NAME=lircd
DAEMON=/usr/local/sbin/$NAME
DAEMON_ARGS0="--driver=default --pidfile=/var/run/lircd.0.pid --device=/dev/lirc0 --listen=8765"
DAEMON_ARGS1="--driver=default --pidfile=/var/run/lircd.1.pid --device=/dev/lirc1 --listen=8766"
DAEMON_ARGS2="--driver=default --pidfile=/var/run/lircd.2.pid --device=/dev/lirc2 --output=/dev/lircd --connect=localhost:8765 --connect=localhost:8766"
PIDFILE0=/var/run/$NAME.0.pid
PIDFILE1=/var/run/$NAME.1.pid
PIDFILE2=/var/run/$NAME.2.pid
SCRIPTNAME=/etc/init.d/$NAME

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

# Function that starts the daemon/service
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --start --quiet --pidfile $PIDFILE0 --exec $DAEMON -- $DAEMON_ARGS0

        start-stop-daemon --start --quiet --pidfile $PIDFILE1 --exec $DAEMON -- $DAEMON_ARGS1

        start-stop-daemon --start --quiet --pidfile $PIDFILE2 --exec $DAEMON -- $DAEMON_ARGS2

        return 0

}

# Function that stops the daemon/service
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE0 --name $NAME
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE1 --name $NAME
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE2 --name $NAME

        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2

        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2

        # Many daemons don't delete their pidfiles when they exit.
        rm -f $PIDFILE0
        rm -f $PIDFILE1
        rm -f $PIDFILE2

        return "$RETVAL"
}

# Function that sends a SIGHUP to the daemon/service
do_reload() {
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE0 --name $NAME
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE1 --name $NAME
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE2 --name $NAME
        return 0
}

case "$1" in
  start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 3
        ;;
esac

:

Anschließend das Skript speichern, schließen und ausführbar machen:

sudo chmod 755 /etc/init.d/lircd

LCD