Pulse8 usb-cec: Nicht alle Tasten der TV-Fernbedienung lassen sich belegen

  • Guten Abend,


    weil wir grad beim Thema Pulse Eight USB-CEC-Adapter sind (anderer Thread von gda):


    Hab mich diese WE endlich mal damit auseinandergesetzt und hab das Ding nun am laufen. Damit lässt sich der VDR jetzt mit der TV-FB bedienen. Is ja auch (ein) Sinn der Sache. udev-Regel erstellt, libcec & libcec-daemon kompiliert/installiert und am VDR per remote-Plugin angebunden.


    Funktioniert super, nur lassen sich nicht alle Tasten meiner Samsung-TV-FB nutzen!


    Taste INFO: Bringt ein Info-Fenster vom Fernseher.
    Taste GUIDE: Zeigt Fernseher-Meldung "Nicht verfügbar".
    Taste RETURN mach gar nichts.
    Taste PRE-CH schaltet auf TV-Modus des Fernsehers um


    Diese Tasten werden als vom libcec-daemon also gar nicht "in Beschlag" genommen. Man sieht auch keine Reaktion der Tasten, wenn man per

    Code
    evtest /dev/input/libcec-daemon

    testet. Ich hab das ganze mal mit einem Raspberry Pi ausprobiert, natürlich ohne den USB-CEC-Adapter, eben nur über HDMI-Kabel. Der Pi unterstützt das ja ootb. Da sind diese Tasten sehr wohl in XBMC nutzbar.


    1. Hat jemand das gleiche Problem und schon eine Lösung gefunden? So ist das ganze leider nicht so komfortabel nutzbar.


    2. Beim Start des libcec-daemons wird automatisch der Fernseher angeschaltet. Lässt sich dieses Verhalten irgendwie abstellen?


    3. Die Wiederholrate der FB am Fernseher ist gut. Per remote-Plugin am VDR leider sehr langsam. Kann man das irgendwo steuern?


    4. Wenn der libcec-daemon läuft, kann man keiner "Befehle" mehr an den Fernseher per cec-client absetzen. Das Device ist gesperrt. Geht das auch anders? FIFO einbauen?


    Grüße
    caps!

  • 3. Die Wiederholrate der FB am Fernseher ist gut. Per remote-Plugin am VDR leider sehr langsam. Kann man das irgendwo steuern?


    Hast du mal geschaut was evtest Liefert, wenn du eine Taste einmal drückst und was passiert, wenn du die gedrückt hältst? Soweit ich das mitbekommen habe macht CEC keine Tastenwiederholung sondern kennt nur Einzeltastendrücke - falls es doch ein Unterscheidungskriterium zwischen gedrückt gehalten und einem einzelnen Tastendruck geben sollte, kann man was machen, sonst eher nicht.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hi


    Hast du mal probiert libcec-deamon im verbose mode (-v [ --verbose ]) zu starten um zu sehen ob er die Tasten erkennt?


  • Hast du mal geschaut was evtest Liefert, wenn du eine Taste einmal drückst und was passiert, wenn du die gedrückt hältst? Soweit ich das mitbekommen habe macht CEC keine Tastenwiederholung sondern kennt nur Einzeltastendrücke - falls es doch ein Unterscheidungskriterium zwischen gedrückt gehalten und einem einzelnen Tastendruck geben sollte, kann man was machen, sonst eher nicht.


    Manche Tasten (z.B. "Up" oder "Down") zeigen per evtest eine Wiederholung, "Enter" jedoch nicht. Die Wiederholrate ist allerdings schon bei evtest so lahm. Na dann bin ich da ja schon mal ein Stück weiter. Am remote-Plugin liegt es nicht... Danke für die Antwort.


    Kann man da bzgl. uinput ewtas "drehen"?

  • Manche Tasten (z.B. "Up" oder "Down") zeigen per evtest eine Wiederholung, "Enter" jedoch nicht. Die Wiederholrate ist allerdings schon bei evtest so lahm. Na dann bin ich da ja schon mal ein Stück weiter.


    Wenn du mal die Ausgabe bei gedrückt gehaltener Taste postest, schau ich gerne mal, ob man da ein "Autofeuer" nutzen kann. Dazu müsste der Tastendruck mit dem value 1 beginnen, optional zwischendrin Value 2 liefern und mit einem Value 0 abschließen - in etwa so:

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hi


    Hast du mal probiert libcec-deamon im verbose mode (-v [ --verbose ]) zu starten um zu sehen ob er die Tasten erkennt?


    Gute Idee avjui, danke. Leider sieht man da in der Ausgabe nicht viel:



    Müsste da was zu den Tasten auftauchen? Bei den letzten beiden "Meldeblöcke" hab ich mal auf "Enter" gedrückt...


  • Wenn du mal die Ausgabe bei gedrückt gehaltener Taste postest, schau ich gerne mal, ob man da ein "Autofeuer" nutzen kann. Dazu müsste der Tastendruck mit dem value 1 beginnen, optional zwischendrin Value 2 liefern und mit einem Value 0 abschließen - in etwa so:


    Hmm, das verstehe ich nicht ganz. Was meinst Du mit "mit dem value 1 beginnen"? Wie "steuere" ich das? Hier mal die Ausgabe bei gedrückter "Down"-Taste:


  • Damit meine ich das was der libcec-daemon als value für den Tastendruck sendet ( https://github.com/bramp/libce…aster/src/uinput.cpp#L124 )
    In evtest sieht das dann z.B. so aus:

    Code
    Event: time 1368382469.863759, type 1 (EV_KEY), code 108 (KEY_DOWN), value 1 # Taste wird herunter gedrückt
    Event: time 1368382470.153134, type 1 (EV_KEY), code 108 (KEY_DOWN), value 2 # Wiederholungssignal wird gesendet
    Event: time 1368382470.544566, type 1 (EV_KEY), code 108 (KEY_DOWN), value 0 # Taste losgelassen


    Der libcec-daemon scheint ja ca. drei Tastendrücke pro Sekunde zu liefern.

    Wie "steuere" ich das?


    Man könnte z.B. den libcec-daemon so modifizieren, dass er Tastendrücke mit value 2 wegwirft. Dann springt die Autofeuer-Funktion des remote-Plugins ein (kann man z.B. mit der PS3 Remote beobachten). Oder man setzt ein Programm dazwischen, das zusätzliche Tastendrücke mit dem value 2 generiert.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hi,


    das ist das Problem mit den combo keys siehe libcec git issues oder hier libcec.


    CU
    9000h


    Ah, Du hast ja im p8-Forum fleißig gepostet und einiges dazu beigetragen! Ich hoffe, es macht Dir nichts aus, wenn ich hier mal Deine Anleitung vom anderen Thread poste:


    Ich hab das jetzt mal eingebaut, aber die "STOP"-Taste funktioniert leider immer noch nicht. Allerdings weiß ich nicht, ob ich es an die richtigen Stellen eingefügt habe. Sieht bei mir jetzt so aus:
    src/libcec.cpp:


    src/Main.cpp:


    War das richtig? Scheinbar nicht... ;)

  • Man könnte z.B. den libcec-daemon so modifizieren, dass er Tastendrücke mit value 2 wegwirft. Dann springt die Autofeuer-Funktion des remote-Plugins ein (kann man z.B. mit der PS3 Remote beobachten). Oder man setzt ein Programm dazwischen, das zusätzliche Tastendrücke mit dem value 2 generiert.


    Ah, verstehe. Ich hab mal in der Main.cpp aus

    Code
    uinput.send_event(EV_KEY, uinputKey, key.duration == 0 ? 2 : 0);
    Code
    uinput.send_event(EV_KEY, uinputKey, key.duration == 0 ? 1 : 0);

    gemacht. Jetzt ist es ein wenig besser, aber immer noch nicht zufriedenstellend. Leider reichen meine Programmierkenntnisse dafür nicht aus.

  • ch hab mal in der Main.cpp aus

    Code
    uinput.send_event(EV_KEY, uinputKey, key.duration == 0 ? 2 : 0);
    uinput.send_event(EV_KEY, uinputKey, key.duration == 0 ? 1 : 0);


    gemacht.


    So genau hatte ich mir den libcec-daemon noch nicht angesehen, aber das ist ja doof (von Programm her - kein Wunder, dass der das rausgenommen hatte: https://github.com/bramp/libce…1a242cf068ca6fd0a1f7a3375).


    Dann weiß ich so auch nicht weiter (ohne die Hardware und einen passenden TV zu haben) - aber was der da ans uinput-Device liefert ist nicht wirklich standard-konform...

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hi,


    im upstart /etc/init/eventlircd.conf Script muss unbedingt --repeat-filter angegeben werden sonst filtert eventlircd alle events vom libcec-daemon aus.


    Code
    exec /usr/sbin/eventlircd -f --socket=/var/run/lirc/lircd --repeat-filter


    CU
    9000h

    Es ist eagl in wlehcer Reiehnfogle die Bchustebaen in Woeretrn vokrmomen. Huapstache der estre und leztte Bchustbae sitmmen.

  • caps! ist doch mit gentoo und remote-Plugin unterwegs :)
    Da du da schon tiefer drin steckst - weißt du was libcec da an Infos für einen Tastedruck liefert? Ist das nur die Info, dass die Taste gedrückt wurde oder gibt es da eine Möglichkeit Repeats und Loslassen zu erkennen ?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hi,


    also wenn ich mich richtig erinnere dann geht das auch mit dem remote plugin, allerdings ging dann kein repeat.


    der fix fuer repeat mit dem remote plugin war glaub ich

    Code
    uinput.send_event(EV_KEY, uinputKey, key.duration == 0 ? 2 : 0);


    am besten mit lircd oder eventlircd verwenden.


    CU
    9000h

    Es ist eagl in wlehcer Reiehnfogle die Bchustebaen in Woeretrn vokrmomen. Huapstache der estre und leztte Bchustbae sitmmen.

  • Müsste da was zu den Tasten auftauchen? Bei den letzten beiden "Meldeblöcke" hab ich mal auf "Enter" gedrückt...


    Jepp sieht man ja "SELECT" Was kommt da wenn du die Tasten drückst was nicht gehen. Evtl. Muß man da was ummappen main.cpp ab Zeile 97 glaub ich

  • der fix fuer repeat mit dem remote plugin war glaub ich


    Das ist ja kein wirklicher Fix, das ist ganz einfach (und hässlich) das Senden von Wiederholungsevents ohne mit einem Einzeltastendruck anzufangen und ohne sauber mit einem value 0 abzuschließen - daher die Frage, ob man nicht an bessere Infos gelangt...
    Mit einem (vermutlich langsamen, aber korrekten) Einzeltastendruck müsste es ja eher so aussehen:

    Code
    if (uinputKey != 0) {
    		LOG4CPLUS_DEBUG(logger, "sent " << uinputKey);
    
    
    		uinput.send_event(EV_KEY, uinputKey, key.duration == 0 ? 1 : 0);
    		uinput.send_event(EV_KEY, uinputKey, 0);
    		uinput.sync();
    	}


    Bei 320 ms Abstand zwischen den Tastendrücken sieht der VDR mit eventlircd -> Lirc Sockel sowieso nur Einzeltastendrücke.


    Was sagt denn die key.duration aus? Weiß man damit, dass eine Taste gedrückt gehalten wurde?
    Hier scheint das ja durchaus auswertbar zu sein: https://github.com/Pulse-Eight…s/32#issuecomment-8042687


    Wenn das so ist, dass key.duration=0 ein Signal für Taste gedrückt und key.duration > 0 beim Loslassen kommt (sollte man ja mit der Verbose-Option sehen können), wäre für das remote-Plugin ja vermutlich eher so etwas interessant, weil es dann die automatische Tastenwiederholung nutzen kann:

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hi,


    ja ist hässlich und war auch nicht meine Idee :-), aber das combo key Thema ist auch nicht sauber, ist es aktiv geht die STOP Taste und Return/OK Taste nicht mehr richtig, schaltet man es mit "config.iComboKeyTimeoutMs = 0;" ab kommt von der lib nur noch Key release fuer STOP. Geht hier im Moment halt nur mit workaround.


    CU
    9000h

    Es ist eagl in wlehcer Reiehnfogle die Bchustebaen in Woeretrn vokrmomen. Huapstache der estre und leztte Bchustbae sitmmen.

  • aber das combo key Thema ist auch nicht sauber, ist es aktiv geht die STOP Taste und Return/OK Taste nicht mehr richtig, schaltet man es mit "config.iComboKeyTimeoutMs = 0;" ab kommt von der lib nur noch Key release fuer STOP. Geht hier im Moment halt nur mit workaround.


    Wie sieht das dann im Debug-Modus von der Tastenfolge her aus? Muss man da evtl. nicht einfach nur den Zustand einer oder mehrerer Tasten zwischenspeichern?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!