Fernbedienung - USB X10 mit Kerneltreibern
(→Variante 2 Kernelmodul ersetzen) |
(→Kernel) |
||
Zeile 52: | Zeile 52: | ||
"neuen" Dateien weglöschen. Die Auswahl, welche Dateien zu löschen sind, trifft man anhand des<br> | "neuen" Dateien weglöschen. Die Auswahl, welche Dateien zu löschen sind, trifft man anhand des<br> | ||
Timestamps und der Endung der Datei.<br> | Timestamps und der Endung der Datei.<br> | ||
− | Gelöscht werden können die | + | Gelöscht werden können die Dateienn:<br> |
− | + | ati_remote.ko | |
+ | ati_remote.o | ||
+ | ati_remote.mod.o | ||
+ | ati_remote.mod.c | ||
+ | ... | ||
+ | Also alle dateien mit ati_remote '''ausser ati_remote.c''' | ||
+ | |||
Nun sollte das Verzeichniss präpariert sein.<br> | Nun sollte das Verzeichniss präpariert sein.<br> | ||
− | + | ||
− | Nun | + | Nun wechselt man ins Verzeichniss des Kernels mittels<br> |
'''cd /usr/src/linux/''' und starten '''make menuconfig'''<br> | '''cd /usr/src/linux/''' und starten '''make menuconfig'''<br> | ||
− | + | Man aktiviert hier den Support für die Fernbedienung, indem man ein Modul bauen lässt.<br> | |
Zu finden unter:<br> | Zu finden unter:<br> | ||
'''Device Drivers ---> Input device support ---> Miscellaneous devices ---> <M> ATI / X10 USB RF remote control'''<br> | '''Device Drivers ---> Input device support ---> Miscellaneous devices ---> <M> ATI / X10 USB RF remote control'''<br> | ||
Zeile 67: | Zeile 73: | ||
'''make modules_install'''<br> | '''make modules_install'''<br> | ||
Jetzt sollte das Modul installiert sein.<br> | Jetzt sollte das Modul installiert sein.<br> | ||
− | + | Man testet dies durch '''modprobe ati_remote''' | |
<br> | <br> | ||
Version vom 11. März 2009, 02:15 Uhr
Die Nutzung dieser Fernbedienung unter Verwendung von lirc erwies sich als schwierig.
Konfiguration Medion USB X10 mit LIRC
Es kam öfters dazu, dass der VDR nicht mehr auf Eingabe durch die Fernbedienung reagierte.Leider ließ es sich jedoch nicht eindeutig isolieren, ob es direkt am lirc lag, oder der VDR nicht gut genug mit lirc zusammenarbeiten konnte.
Aus diesem Grunde suchte ich nach einer anderen Möglichkeit meine Fernbedienung nutzen zu können. Mein VDR Rechner läuft mit einem 2.6 Kernel. Dieser bietet bereits Support für diese Fernbedienung mit dem Kernel Module ati_remote an. Leider sind jedoch nicht alle Tasten der Fernbedienung nutzbar, da im Sourcecode des Treibers nicht alle Tasten eingetragen sind. Dieses Problem lässt sich jedoch lösen.
Inhaltsverzeichnis |
Variante 1 Kernelmodul patchen
Damit alle Tasten funktionieren muss man das Kernelmodul patchen.
Was es mit einem Patch auf sich hat kann man hier nachlesen: [1]
Download hier:
Den Patch einfach im Sourceverzeichnis des Kernels /usr/src/linux-2.6.XX/ mit dem Befehl
patch -p1 < ati_remote.c_all_keys_and_keychange.patch
einspielen.
Variante 2 Kernelmodul ersetzen
Nicht mein präferierter Weg aber der vorherige Autor hatte ursprünglich diesen Weg beschrieben
Das Originalmodul befindet sich im Verzeichniss
/usr/src/linux-2.6.XX/drivers/input/misc
Man sichert dies zuerst durch:
cp /usr/src/linux-2.6.XX/drivers/input/misc/ati_remote.c /usr/src/linux-2.6.XX/drivers/input/misc/ati_remote.c.bak
Als nächstes ersetzt man die Originaldatei mit der vorgepatchten ati_remote.c.
Download hier:
Kernel
Als nächstes sollte man sich das Verzeichniss /usr/src/linux-2.6.XX/drivers/input/misc genauer anschauen:
ls -lh /usr/src/linux-2.6.XX/drivers/input/misc
Sind hier schon die Dateien
.ati_remote.ko.cmd .ati_remote.mod.o.cmd .ati_remote.o.cmd
vorhanden, so bedeutet dies, dass das Modul (mit dem "alten" Sourcecode) bereits übersetzt wurde.
Man kann dies auch an den Timestamps der Dateien erkennen.
Um später beim Compilieren zu Erreichen, dass das Modul erneut übersetzt wird, sollte man die
"neuen" Dateien weglöschen. Die Auswahl, welche Dateien zu löschen sind, trifft man anhand des
Timestamps und der Endung der Datei.
Gelöscht werden können die Dateienn:
ati_remote.ko ati_remote.o ati_remote.mod.o ati_remote.mod.c ...
Also alle dateien mit ati_remote ausser ati_remote.c
Nun sollte das Verzeichniss präpariert sein.
Nun wechselt man ins Verzeichniss des Kernels mittels
cd /usr/src/linux/ und starten make menuconfig
Man aktiviert hier den Support für die Fernbedienung, indem man ein Modul bauen lässt.
Zu finden unter:
Device Drivers ---> Input device support ---> Miscellaneous devices ---> <M> ATI / X10 USB RF remote control
Nachdem man mittels Exit wieder in der Shell ist, nun das Compilieren anstossen mittels:
make
Wenn dies erledigt ist, müssen die Module installiert werden mittels:
make modules_install
Jetzt sollte das Modul installiert sein.
Man testet dies durch modprobe ati_remote
VDR anpassen
Mich hat immer gestört, dass bei USB Geräten nicht sicher davon ausgegangen werden konnte, dass der VDR
das richtige Inputdevice anspricht, nachdem man ein anderes USB Gerät an oder abgesteckt hat.
Beim nächsten Neustart konnte man nicht sicher sein, dass die Fernbedienung immer noch z.B. /dev/input/event4 ist.
Eine leichte Modifikation des Skriptes runvdr hilft mir bei diesem Problem:
Folgenden 3zeiler in die runvdr mit einfügen (am Besten eine Zeile vor while (true) do)
ln -sf $(for x in `ls /dev/input/event*` ; do if [ -n "$(udevinfo -a -p `udevinfo -q path -n $x` | grep 'X10 Wireless Technology')" ] ; then echo $x; fi ; done) /dev/input/tmx10
Das remote Plugin des VDR nutzt nun /dev/input/tmx10
-P 'remote -i /dev/input/tmx10'
gestartet.
Durch den 3zeiler wurde ein Symlink von /dev/input/tmx10 auf das korrekte Inputdevice gelegt.
Wenn man die Fernbedienung neu anlernen möchte (man hat ja nun die Farbtasten), den VDR stoppen, die remote.conf löschen und danach den VDR neu starten.
Problem: Tasten müssen immer zweimal gedrückt werden
Wenn man beim Anlernen der Tasten im VDR jede Taste immer zweimal drücken muss und in den /var/log/messages folgendes Erscheint:
... ati_remote 3-4.4.3:1.0: channel 0x07; data 63,1e; index 44; keycode 352 ati_remote 3-4.4.3:1.0: channel 0x07; data 63,1e; index 44; keycode 352 ati_remote 3-4.4.3:1.0: channel 0x07; data 63,1e; index 44; keycode 352 ati_remote 3-4.4.3:1.0: channel 0x07; data 63,1e; index 44; keycode 352 ati_remote 3-4.4.3:1.0: channel 0x07; data 63,1e; index 44; keycode 352 ati_remote 3-4.4.3:1.0: Unknown input from channel 0x07: data e3,9e ati_remote 3-4.4.3:1.0: Unknown input from channel 0x07: data e3,9e ati_remote 3-4.4.3:1.0: Unknown input from channel 0x07: data e3,9e ati_remote 3-4.4.3:1.0: Unknown input from channel 0x07: data e3,9e ati_remote 3-4.4.3:1.0: Unknown input from channel 0x07: data e3,9e ...
hat man aller Wahrscheinlichkeit nach eine Fernbedienung mit Wechselcode. (Die Zeilen mit keycode erhält man wenn man das Modul mit debug=1 lädt)
Das ist der Treiberoutput beim doppelten drücken einer Taste. Man erkennt den Offset 0x63 + 0x80 = 0xe3, 0x1e + 0x80 = 0x9e
Wie gesagt für eine andere Taste sieht das natürlich anderst aus aber man hat immer den Unterschied von 0x80.
Der Patch bietet eine Lösung für dieses Problem indem man das Modul mit der option keychange=1 lädt. Diese Option ist neu und wird mit dme Patch eingespielt
also erstmal Modul entladen:
rmmod ati-remote
und mit Optienen neu laden:
modprobe ati-remote keychange=1
und damit das beim Neustart des Systems nicht alles verloren geht einfach
echo 'options ati_remote keychange=1' > /etc/modprobe.d/ati-remote
Fertig :)