Fast genauso dumm wie der Rest…

ATI Remote Wonder und Debian Etch

November 29th, 2008 @ 0:05 by lookshe

Ein Krampf, mehr fällt mir zu dem ganzen nicht ein…
Verzweifelt habe ich mehrere Stunden versucht meine Remote Wonder unter Debian Etch zum Laufen zu bekommen mit LIRC. Viel wollte ich ja nicht, eigentlich nur ein paar Systemaufrufe absetzen um meinen MPD damit steuern zu können, zumindest vorerst in den Grundfunktionalitäten. Leider liessen sich die LIRC-Module mit 2.6.18 nicht kompilieren. Erkannt hat sie das System allerdings korrekt und auch ein Input-Device angelegt. Irgendwann bin ich zufällig auf das Tool evtest aus dem Paket dvb-utils gestossen. Damit konnte ich direkt auf das Event unter /dev connecten und die Keycodes auslesen. Somit wusste ich, dass die Fernbedienung unter dem System ordentlich funktioniert. Weitere Stunden des Rumprobierens mit LIRC vergingen, leider erfolglos.
Aber dann kam, nachdem ich eine Nacht drüber geschlafen habe, die zündende Idee. Evtest kann doch alles korrekt auslesen. Warum guck ich mir also nicht mal den Source davon an und bastel ggf. etwas eigenes um die eingelesenen Keycodes auszuwerten. Gesagt getan. Erst nur mit einem simplen switch-case-Block. Funktionierte wunderbar. Aber jedesmal den Code ändern, wenn sich das Event unter den Devices ändert oder ich neue Funktionen hinzufügen will, das wollte ich auch nicht. Also musste eine Konfigurationsdatei her. Dann stellte sich noch die Frage, wie ich die Keycodes und entsprechende Systembefehle sinnvoll speichere um auch einfach darauf zuzugreifen. Spontan viel mir da eine Hashmap ein, was unter C aber etwas problematisch ist. Also ein wenig gegooglet und eine mehr oder weniger passende Implementierung gefunden. Eine Zeit hatte ich noch mit Speicherleaks und verkorksten Pointern zu kämpfen, was sich aber einfach abschaffen liess, indem ich die Hashmap auf char* geändert habe und zum speichern der Datensätze strcpy verwendet habe.

Für diejenigen, die es interessiert, hier die Programmdateien:
evtest.c
hashmap.c
hashmap.h
config