IRMP2Keyboard IR Fernbedienung nach PS2/USB Tastatur Konverter

  • Wegen "EC" schaue ich mal. Kann man vielleicht einfach bestätigen und ignorieren. Dann wäre zumindest die Meldung weg. Im Prinzip lasse ich sowieso alle Meldungen faktisch einfach verfallen und bestätige so das der Controller zufrieden ist und weiter macht.


    Die "Release time" am besten etwas (wenige Millisekunden) über dem setzen was du mit dem Testprogramm ermittelt hast. Vereinfacht gesagt ist das ein Timer der, wenn abgelaufen, die Taste loslässt. Damit die Taste nicht losgelassen wird muss die Fernbedienung durch erneutes Senden des Codes also in der Zwischenzeit den Timer resettet haben. Etwas Reserve verhindert ungewünschtes "Loslassen und neudrücken" der Taste. Zu hoch setzen macht aber die Fernbedienung träge. Man muss da einen individuellen Mittelwert finden.


    Ich sollte dazu mal ein paar Zeilen Doku in die config.h bauen. Der Teil betrifft sowohl PS2 als auch USB. Fernbedienungen kennen kein "Gedrückt halten" sondern senden den Code beim Dauerdrücken einfach immer wieder. Für den PC muss ich das dann irgendwie in ein "Press"und "Release"-Event umbauen.

  • Fernbedienungen kennen kein "Gedrückt halten" sondern senden den Code beim Dauerdrücken einfach immer wieder.

    Das ist vom verwendeten Protkoll abhängig - da ist oft entweder ein Toggle-Bit vorgesehen, das einem erlaubt zu erkennen, ob die Taste zwischendrin losgelassen wurde - das gibt es z.B. bei RC-5 und RC-6 oder es gibt spezielle Wiederholungsframes, die signalisieren, dass die zuletzt gedrückte Taste weiterhin gedrückt gehalten wird - wie beim NEC-Protokoll. Das einfachste Protokoll von Samsung kann sowas z.B. nicht abbilden.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • seahawk1986 stimmt im Prinzip aber nicht jeder Code hat sowas. Ich verlasse mich aktuell nicht drauf. Könnte man ggf. als optionales Feature nachrüsten. Damit wird die Fernbedienung aber auch nicht reaktionsfreudiger, denn bis zum potentiell folgenden Code muss ich vor dem "Loslassen" doch warten.


    Wegen dem Code "EC" hab ich mal recherchiert. Der ist für Tastaturen ungültig. Das wird normalerweise nur an Mäuse gesendet. Bei vielen Mainboards mit nur einer PS2-Buchse kann entweder Tastatur oder Maus dran. Vielleicht prüft der Controller hier was dranhängt. Aktuell melde ich gar nicht zurück. Da müsste ich jetzt mal was improvisieren um den Code mal an meine "echte" Tastatur zu senden um zu sehen wie die reagiert.

  • Ich beobachte das jetzt mal, ob der Rechner nochmal hängt. Bisher war es nicht mehr reproduzierbar...

    My VDRs:

  • 0x15,0x000f,0x0422,0x00 => korrekt (RC6A)
    0x11,0x02aa,0x015a,0x00 => falscher Code (SIEMENS?)
    0x15,0x000f,0x0422,0x00

    Die SMK_RC6_MCE läuft hier mit einem TSOP4838 und auch mit einem TSOP31236 perfekt (beide AGC2).

    Ich habe jetzt mit zwei anderen SMK RC6 MCE 50GB getestet und beide machen ähnliche Fehler. Mal wird als Protokol 0x15 erkannt, mal 0x11, mal 0x17.

    Deswegen meine Frage: geht diese Fernbedienung jetzt bei dir oder hast du immer noch diese Fehler? Es gibt die ja sehr billig aus China, aber vielleicht haben manche miese Qualität oder abweichende timings?

  • Schonmal mit einem 38kHz Receiver getestet wie sie sich da verhalten?


    Meine Kathrein-Fernbedienung hatte ich wahrscheinlich schonmal erwähnt. Mit dem TSOP den ich auf meinem "Entwicklungs-Board" drauf habe wurde die auch mit allen möglichen Codes erkannt. Mit dem Receiver von der Kathrein-Platine hat dann alles bestens funktioniert.


    Edit: Sehe gerade das du einen TSOP4838 mit aufzählst (38kHz). Wurde damit getestet? Mit dem 36kHz-Receiver würde ich solche Fehler nicht überbewerten. Mit einem passenden Receiver sollte aber eigentlich alles funktionieren...

  • Das war sowohl mit 36kHz und mit 38 kHz.

    An denselben Empfängern haben andere Exemplare dieser Fernbedienung tadellos funktioniert, auch mit 36 kHz.

  • Hallo,


    schöne einfache Sache. Ich wollte schon länger mein IR von LIRC.SERIAL auf sowas umbauen.

    Bisher habe ich folgende Dateien anpassen müssen:

    /etc/lirc/lircd.conf.d/my.lircd.conf für das Mapping der IR-Keys.

    /etc/lirc/irexec.lircrc für zwei Macros (z.B. KODI an/aus), die per Taste ausführbar sind.

    /var/lib/vdr/keymacros.conf für ein paar Spezialitäten vom VDR.

    Für KODI war nichts spezielles nötig.


    Ich blicke noch nicht ganz durch, wo ich die Tasten für VDR und KODI anpassen muss, um spezielle Tasten unterzubringen.

    Für ein paar Tipps wäre ich sehr dankbar.


    Viele Grüße

    Frank


    PS:

    Hier meine Config:

  • Ja, meine config_keybindings.h habe ich ja oben beigepackt. Den Arduino Micro habe ich als USB-Tastatur angeschlossen. Die Arduinoseite ist klar. Das meiste funktioniert auch damit, weil ich wo möglich die Standardkeycodes genommen habe. Aber mit den User-Keys habe ich so meine Probleme F5, F6 sind auch doppelt belegt gewesen.


    Es geht hier mehr darum wie im yaVDR die Keycodes weiter verarbeitet werden. Das unterscheidet sich ja doch ein bisschen von LIRC.

  • Wenn ein Kernel Input Device nicht von eventlircd ausgewertet wird, greifen die Konfigurationsdateien der einzelnen Programme - also die XKeySym-Einträge in der remote.conf des VDR, die keyboard.xml von KODI und die Openbox-Hotkeys aus der /var/lib/vdr/.config/openbox/rc.xml


    Wenn es von eventlircd ausgewertet wird, ist es am einfachen die Tastennamen über eine evmap auf das Schema für Tastennamen zu mappen, für die der VDR und KODI vorkonfiguriert sind.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ich kapiere immer noch nicht was wo übersetzt wird

    In config_keybindings.h heißt es KEY_LEFT_ARROW = 0xE06B

    In /var/lib/vdr/remote.conf LIRC.Left KEY_LEFT und XKeySym.Left Left

    In /var/lib/vdr/.kodi/userdata/Lircmap.xml <left>KEY_LEFT</left>

    Wo wird aus der Taste KEY_LEFT_ARROW der Tastatur KEY_LEFT bzw. XKeySym.Left?


    Geht /etc/lirc/irexec.lircrc und /var/lib/vdr/keymacros.conf auch mit Tastaturen?

  • Wo wird aus der Taste KEY_LEFT_ARROW der Tastatur KEY_LEFT bzw. XKeySym.Left?

    KEY_LEFT_ARROW ist erst mal nur ein Name für die Daten, die über die PS/2 Schnittstelle für die Taste gesendet werden. Der PC sieht KEY_LEFT_ARROW nie, nur den Bytecode für die Taste gemäß dem PS/2 Protokoll.


    Mit den Linux-Tastennamen aus https://github.com/torvalds/li…linux/input-event-codes.h hat der Name also nichts direkt zu tun - Der PS/2 Controller des PCs bzw. der Kernel machen aus den gesendeten Daten Keyboard Events, die dann entsprechend dem Linux-Schema benannt und weitergereicht werden.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • KEY_LEFT_ARROW ist erst mal nur ein Name für die Daten, die über die PS/2 Schnittstelle für die Taste gesendet werden. Der PC sieht KEY_LEFT_ARROW nie, nur den Bytecode für die Taste gemäß dem PS/2 Protokoll.

    Ja, ist schon klar das 0xE06B weitergeht. Ich habe nur nicht gefunden, welcher Code in config_keybindings.h in welchen Code in input-event-codes.h übersetzt wird und zusätzlich verwirrt hat mich, dass in der remote.conf bei den den XKeySym Codes wieder andere Abkürzungen stehen.


    Auch wenn das bei vielen Tasten eindeutig ist, wird es bei Codes wie KEY_PROG1 oder User5 schwierig.

    M-Reimer : Wäre es nicht sinnvoll config_keybindings.h basierend auf den Input Event Codes aufzubauen?


    Wo steht denn welcher Tastencode welchen Input Event Code erzeugt?


    Geht /etc/lirc/irexec.lircrc und /var/lib/vdr/keymacros.conf auch mit Tastaturen?


    Ich schätze mal in /var/lib/vdr/keymacros.conf stehen die Codes vom VDR aus der linken Seite der remote.conf. Das konnte ich noch nicht richtig testen.


    Aber IREXEC scheint nicht zu funktionieren.

  • Wo steht denn welcher Tastencode welchen Input Event Code erzeugt?

    Im Keyboard-Treiber - das müsste wenn ich das richtig sehe müsste das in dem Array atkbd_set2_keycodehttps://github.com/torvalds/linux/blob/master/drivers/input/keyboard/atkbd.c#L79 ff. definiert sein.


    Also wenn man z.B. die Eingabetaste mit Bytecode 0x005A = 90 nimmt, dann schaut man an die Stelle im Array mit dem Index 90 und findet den Tastencode 28, was KEY_ENTER entspricht.


    Mit einem kleinen Python-Skript geht das leicht interaktiv (benötigt das Paket python3-evdev):

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Geht /etc/lirc/irexec.lircrc und /var/lib/vdr/keymacros.conf auch mit Tastaturen?

    Wenn die Tastatur von eventlircd eingebunden wird, kann man die Tastendrücke von irexec auswerten lassen. die keymacros.conf bezieht sich auf alle Eingaben, die der VDR sieht und da zählt nur der Tastenname innerhalb des VDR, der über die remote.conf gemappt wird.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • und zusätzlich verwirrt hat mich, dass in der remote.conf bei den den XKeySym Codes wieder andere Abkürzungen stehen.

    Der X-Server übersetzt die Tastencodes der KEY-Events der Kernel Input Devices wiederum in eigene Tastencodes (und dabei nur Tastencodes kleiner 255 nutzen) .


    Bei yavdr-ansible ist der X-Server konfiguriert, dass er Geräte ignoriert, bei denen per udev-Regel der Tag "eventlircd" gesetzt ist (vgl. https://github.com/yavdr/yavdr…ignore-eventlircd.conf.j2 und https://github.com/yavdr/yavdr…/98-eventlircd.rules#L176 bzw. https://github.com/yavdr/yavdr…ventlircd-names.rules#L62).

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • M-Reimer: Wäre es nicht sinnvoll config_keybindings.h basierend auf den Input Event Codes aufzubauen?

    "KEY_LEFT" ist gültig. Könntest du direkt verwenden.

    Bezüglich der Key-Codes richte ich mich nach der HID-Library die ich für USB nutze. Man kann ja mit ein und derselben config_keybindings.h wahlweise PS2 oder USB erstellen. Das geht nur wenn ich die gleichen Namen für meinen PS2-Code nutze.