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

  • Und das mit Key 1,2,3 Stop war nur die Stop-Taste oder ist das Problem, dass die libcec nur das Release-Event bringt?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Servus,


    konnte gestern leider nicht mehr weitertesten, die Familie wollte dann doch mehr Aufmerksamkeit... Vielen Dank schon mal, daß ihr hier Vorschläge einbringt!


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


    Hmm, auf eventlircd werde ich dann wohl auch umsteigen. Ich wollte erstmal das ganze so am Laufen haben und mich dann um eventlircd kümmern. Aber das scheint ja ein Problem zu lösen. Das teste ich heute Abend mal.



    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


    Da kommt leider bei besagten Tasten (GUIDE, INFO, PRE-CH usw.) leider gar nichts an. Die werden von libcec (oder libcec-daemon?) gar nicht "verwendet"/"gemapped". D.h. die werden nicht an den cec-client weitergegeben sondern sprechen immer noch Funktionen des Fernsehers an. Das war damals mit dem RPi anders. Da wurden die Tasten von XBMC angesprochen.


    Das ist übrigens mein Hauptproblem. Diese Tasten belegbar / von libcec verwendbar machen. Evtl. bringen ja die Änderungen von 9000H was, aber das scheine ich nicht richtig eingepflegt zu haben.


    9000H: Könnest Du mir einen Patch für die Main.cpp und libcec.cpp mit Deinen Änderungen zukommen lassen? Das wäre der Oberknaller. Funktionieren damit nur die Tasten "STOP" und "RETURN" oder lassen sich damit auch die "Problemtasten" einbinden?



    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:


    Das werde ich heute Abend mal ausprobieren, danke. Ist für mich halt "trail&error". Ahnung, was ich da mache, hab ich nicht.

  • Das werde ich heute Abend mal ausprobieren, danke. Ist für mich halt "trail&error".


    Da ich keine Hardware zum Testen habe ist es das für mich auch ;) Die Idee wäre die automatische Tastenwiederholung des Remote-Plugin zu nutzen, die einsetzt wenn ein Gerät nur die values 1 (wenn die Taste gedrückt wird) und 0 (wenn die Taste losgelassen wird) sendet.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)


  • Da ich keine Hardware zum Testen habe ist es das für mich auch ;) Die Idee wäre die automatische Tastenwiederholung des Remote-Plugin zu nutzen, die einsetzt wenn ein Gerät nur die values 1 (wenn die Taste gedrückt wird) und 0 (wenn die Taste losgelassen wird) sendet.


    Sodala, hab das mal eingebaut. Das scheint schon mal viel besser zu funktionieren! Es kommt im Log so an wie von Dir gedacht: Taste drücken -> Value 1, Taste loslassen -> Value 0. Danke für den Code!


    Das remote-Plugin scheint das auch als "Dauerfeuer" zu interpretieren (bis eben Ende per value 0 getriggert wird), nur läuft das ganze dann scheinbar so schnell ab, daß im OSD teilweise 10 Einträge auf einmal übersprungen werden. Könnte man das jetzt wieder am remote-Plugin einstellen/regeln? Evtl. sollte ich mir doch eventlircd angucken...


    Leider werden die Problem-Tasten (inkl. STOP) immer noch nicht angesprochen. Da kommt nix am Device an... :( Hoffe, 9000H kann mir da weiterhelfen...

  • Könnte man das jetzt wieder am remote-Plugin einstellen/regeln?


    Evtl. könnte das über den VDR gehen, wenn sich das Remote-Plugin an die Parameter aus der setup.conf des VDR hält (hab ich noch nicht ausprobiert).

    Code
    RcRepeatDelay = 300 # Zeit bis ein erster wiederholter Tastendruck akzeptiert wird
    RcRepeatDelta = 100 # minimale Abstände zwischen wiederholten Tastendrücken


    Sonst gäbe es glaube ich noch noch die Möglichkeit das das im Quelltext des Plugins zu ändern - müsste repeatfreq in der remote.c sein:


    Mit eventlircd funktioniert das leider so nicht, denn das kann kein Autorepeat - da müsste man dann den libcec-daemon umschreiben, damit er Wiederholungsevents erzeugt (kein Ahnung wie man das in C++ am besten macht, evtl. kann man sich was beim remote-Pluginabschauen) oder ein Programm dazwischen hängen, das das die Wiederholungsevents erzeugt - für die PS3 Fernbedienung hatte ich mal eines geschrieben, um sie an eventlircd hängen zu können: https://github.com/seahawk1986…mon/blob/master/ps3remote - das braucht als "exotische" Abhängigkeit noch python-uinput

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

    Einmal editiert, zuletzt von seahawk1986 ()

  • Evtl. könnte das über den VDR gehen, wenn sich das Remote-Plugin an die Parameter aus der setup.conf des VDR hält (hab ich noch nicht ausprobiert).


    Das hatte ich gleich beim ersten Test ausprobiert. Ändert leider nichts...


    Sonst gäbe es glaube ich noch noch die Möglichkeit das das im Quelltext des Plugins zu ändern - müsste repeatfreq in der remote.c sein:


    Das war ne gute Idee, aber leider ändert sich da ebenfalls nichts. Mist... Ich hab mal das hier (einfach ein paar Tausender dran) ausprobiert:


    Spielt überhaupt keine Rolle. :( Es läuft wohl auf eine Änderung am libcec-daemon hinaus. Oder ich schaue mir wirklich mal Dein ps3remote Programm an. Allerdings seh ich da aus Mangel an C++-Kenntnis schwarz. Ich werd mich mal an Andrew Brampton, dem Autor von libcec-daemon, wenden. Wahrscheinlich ist dem allerdings eine Abhängigkeit zum remote-Plugin herzlich egal. Mal sehen... Trotzdem vielen Dank für Deine Hilfe!

  • Hi,


    hier wie gewuenscht meine gepatchte libcec-daemon Version (mein default HDMI Port ist 2 "config.iHDMIPort=2;")


    CU
    9000h


    Hey! Das ging ja flott. Dankeschön! Hab mir Deine Version mal gezogen und nen Diff gemacht. Du hast ja einiges geändert. Ich kompiliere das mal und teste...

  • Hmm...

    Code
    g++ -c -std=c++0x -g -Wall -I/usr/include/libcec src/main.cpp -o src/main.o
    In file included from src/main.h:2:0,
                     from src/main.cpp:9:
    src/libcec.h:2:17: schwerwiegender Fehler: cec.h: Datei oder Verzeichnis nicht gefunden
    Kompilierung beendet.
    make: *** [src/main.o] Fehler 1


    cec.h ist die von libcec, oder? Die liegt bei mir unter "/usr/local/include/libcec/cec.h" oder eben im libcec-src-Verzeichnis. Muß ich das irgendwo hinkopieren oder in main.cpp einen Pfad angeben? Sorry für die blöden Fragen, aber ich kann kein C++.

  • Oder ich schaue mir wirklich mal Dein ps3remote Programm an. Allerdings seh ich da aus Mangel an C++-Kenntnis schwarz.


    Du musst einfach das Gerät das der libcec-daemon anlegt ps3remote übergeben und das Gerät, das ps3remote anlegt dann eventlircd (über eine udev-Regel).

    Die liegt bei mir unter "/usr/local/include/libcec/cec.h"


    Dein Compiler sucht aber unter /usr/include/libcec - also musst du als Include noch das zusätzliche Verzeichnis übergeben oder die Dateien dorthin kopieren wo sie erwartet werden...

    Code
    -I/usr/local/include/libcec

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)


  • Wie cool! Jetzt bin ich schon mal einen riesen Schritt weiter. Riesen Dank für Deine libcec-daemon Sourcen! Jetzt funktionieren schon mal die Tasten "GUIDE", "FAV.CH", "CHAN UP", "CHAN DOWN".


    Leider sind "RETURN", die "INFO"-Taste und die Medien-Tasten "PAUSE", "PLAY", "STOP" und "RECORD". Noch nicht dabei. Aber da kann man vielleicht in der main.cpp etwas nachhelfen. Muß ich jetzt ausprobieren.


    Nochmals Danke an 9000H und seahawk1986!


  • Du musst einfach das Gerät das der libcec-daemon anlegt ps3remote übergeben und das Gerät, das ps3remote anlegt dann eventlircd (über eine udev-Regel).


    Alles klar, das probier ich mal aus.



    Dein Compiler sucht aber unter /usr/include/libcec - also musst du als Include noch das zusätzliche Verzeichnis übergeben oder die Dateien dorthin kopieren wo sie erwartet werden...

    Code
    -I/usr/local/include/libcec


    Das war's, danke!! :)

  • Hi


    der combo key bug scheint jetzt im libcec git gefixed zu sein libcec issue


    CU
    9000h


    Sehr schön! Mit den Änderungen lassen sich die "Problemtasten" bei mir jetzt direkt per cec-client ansprechen. Endlich gehen auch die Multimedia- und die Samsung RETURN-Taste!


    Leider habe ich (aus Mangel an Zeit im Moment) es nicht geschafft, Deinen libcec-daemon daran anzupassen. Da werden die Tasten leider nicht durchgereicht. Auch mit dem "originalen" libcec-daemon geht's nicht. Aber da kann ich ja am verlängerten Wochenende rumspielen...


    Vielen Dank für Deine Mühen im P8-Forum und das ich davon profitieren kann!
    Grüße
    caps!

  • Sodala, das mit dem "ComboKey" ist nun wohl tatsächlich kein Problem mehr. Tastenwiederholung funktionieren hier sehr angenehm.


    Leider habe ich es immer noch nicht geschafft, alle FB-Tasten zuzuordnen und per uinput anprechbar zu machen. Mit dem aktuellen libcec-daemon (inkl. Patches von 9000H) reagieren alle Tasten wie gewünscht. Im Log von libcec-daemon werden auch die entsprechenden "Responses" protokolliert:


    Leider erkennt uinput (getestet mittels evtest) die Signale AN_RETURN oder UNKOWN nicht und reicht sie deshalb auch nicht weiter. Habe auch mal die Buttons anders gemappt (z.b. CLEAR oder KEY_CLEAR), das funktioniert aber auch nicht. Damit bin ich leider mit meine Latein am Ende... Schade. Die Bedienung ist echt spitze mit der Fernbedienung vom Fernseher. Da muß ich wohl auf kommende libcec(-daemon) Versionen warten.


    Grüße
    caps!

  • Habe auch mal die Buttons anders gemappt (z.b. CLEAR oder KEY_CLEAR), das funktioniert aber auch nicht.


    KEY_CLEAR durch den libcec-daemon hätte eigentlich klappen sollen (remappen über eventlircd geht nur bei namespace-konformen Tastennamen) - möglich sind alle KEY_* Tasten aus http://lxr.free-electrons.com/…nclude/uapi/linux/input.h

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)


  • KEY_CLEAR durch den libcec-daemon hätte eigentlich klappen sollen (remappen über eventlircd geht nur bei namespace-konformen Tastennamen) - möglich sind alle KEY_* Tasten aus http://lxr.free-electrons.com/…nclude/uapi/linux/input.h


    Danke, seahawk1986, daß Du mir weiterhin zu helfen versuchst. Habe mir mal für die Samsung-Return Taste "KEY_EQUAL" (Code13) ausgesucht. Kommt auch im libcec-daemon Log an:

    Code
    DEBUG - Main::onCecLogMessage(123236 [T]>> 01:8a:91
    )
    DEBUG - Main::onCecLogMessage(123236 [D]>> TV (0) -> Recorder 1 (1): vendor remote button down (8A)
    )
    DEBUG - Main::onCecLogMessage(123237 [D]key pressed: return (Samsung) (91)
    )
    DEBUG - Main::onCecKeyPress(Key press: EQUAL for 125ms)
    DEBUG - sent 13


    Beim Aufruf von evtest wird "KEY_EQUAL" auch "announced" (KEY_EQUAL gab's vorher nicht in der Liste):


    Es kommt dennoch nichts bei evtest an!?! Kapier ich nicht. Wo ist der Hund begraben? Wie debugged man sowas?

  • Hi,


    yavdr upstart Script für die neue libcec-2.2.0, die kann jetzt den HDMI Port auch via xrandr auslesen.



    CU
    9000h

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

Jetzt mitmachen!

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