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?
Pulse8 usb-cec: Nicht alle Tasten der TV-Fernbedienung lassen sich belegen
-
-
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-8042687Wenn 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. -
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!Code
Alles anzeigenEvent: time 1368456350.965052, type 1 (EV_KEY), code 28 (KEY_ENTER), value 1 Event: time 1368456350.965055, -------------- SYN_REPORT ------------ Event: time 1368456351.970673, type 1 (EV_KEY), code 28 (KEY_ENTER), value 0 Event: time 1368456351.970677, -------------- SYN_REPORT ------------ Event: time 1368456361.322506, type 1 (EV_KEY), code 108 (KEY_DOWN), value 1 Event: time 1368456361.322510, -------------- SYN_REPORT ------------ Event: time 1368456366.558031, type 1 (EV_KEY), code 108 (KEY_DOWN), value 0 Event: time 1368456366.558035, -------------- SYN_REPORT ------------ Event: time 1368456374.353434, type 1 (EV_KEY), code 28 (KEY_ENTER), value 1 Event: time 1368456374.353437, -------------- SYN_REPORT ------------ Event: time 1368456375.353689, type 1 (EV_KEY), code 28 (KEY_ENTER), value 0
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).CodeRcRepeatDelay = 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:Code
Alles anzeigen// --------------------------------------------------------------------------- cRemoteGeneric::cRemoteGeneric(const char *name, int f, char *d) :cRemote(name) // --------------------------------------------------------------------------- { fh = f; device = d; polldelay = 40; // ms repeatdelay = 350; // ms repeatfreq = 100; // ms repeattimeout = 500; // ms }
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
-
Hi,
hier wie gewuenscht meine gepatchte libcec-daemon Version (mein default HDMI Port ist 2 "config.iHDMIPort=2;")
Edit:
die Keys sind fuer meinen Loewe Indi mit der Assist FBCU
9000h -
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:Code
Alles anzeigen// --------------------------------------------------------------------------- cRemoteGeneric::cRemoteGeneric(const char *name, int f, char *d) :cRemote(name) // --------------------------------------------------------------------------- { fh = f; device = d; polldelay = 40; // ms repeatdelay = 3350; // ms repeatfreq = 3000; // ms repeattimeout = 1500; // ms }
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...
Codeg++ -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... -
Alles anzeigen
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".Event: time 1368479183.190434, type 1 (EV_KEY), code 364 (KEY_FAVORITES), value 1
Event: time 1368479183.190437, -------------- SYN_REPORT ------------
Event: time 1368479183.440214, type 1 (EV_KEY), code 364 (KEY_FAVORITES), value 2
Event: time 1368479183.440215, -------------- SYN_REPORT ------------
Event: time 1368479183.473213, type 1 (EV_KEY), code 364 (KEY_FAVORITES), value 2
Event: time 1368479183.473214, -------------- SYN_REPORT ------------
Event: time 1368479183.506212, type 1 (EV_KEY), code 364 (KEY_FAVORITES), value 2
Event: time 1368479183.506214, -------------- SYN_REPORT ------------
Event: time 1368479183.539212, type 1 (EV_KEY), code 364 (KEY_FAVORITES), value 2
Event: time 1368479183.539213, -------------- SYN_REPORT ------------
Event: time 1368479183.572213, type 1 (EV_KEY), code 364 (KEY_FAVORITES), value 2
Event: time 1368479183.572214, -------------- SYN_REPORT ------------
Event: time 1368479183.581051, type 1 (EV_KEY), code 364 (KEY_FAVORITES), value 0
Event: time 1368479183.581053, -------------- SYN_REPORT ------------
Event: time 1368479192.703590, type 1 (EV_KEY), code 402 (KEY_CHANNELUP), value 1
Event: time 1368479192.703594, -------------- SYN_REPORT ------------
Event: time 1368479192.953213, type 1 (EV_KEY), code 402 (KEY_CHANNELUP), value 2
Event: time 1368479192.953215, -------------- SYN_REPORT ------------
Event: time 1368479192.986213, type 1 (EV_KEY), code 402 (KEY_CHANNELUP), value 2
Event: time 1368479192.986214, -------------- SYN_REPORT ------------
Event: time 1368479193.019212, type 1 (EV_KEY), code 402 (KEY_CHANNELUP), value 2
Event: time 1368479193.019213, -------------- SYN_REPORT ------------
Event: time 1368479193.052214, type 1 (EV_KEY), code 402 (KEY_CHANNELUP), value 2
Event: time 1368479193.052215, -------------- SYN_REPORT ------------
Event: time 1368479193.085213, type 1 (EV_KEY), code 402 (KEY_CHANNELUP), value 2
Event: time 1368479193.085214, -------------- SYN_REPORT ------------
Event: time 1368479193.088459, type 1 (EV_KEY), code 402 (KEY_CHANNELUP), value 0
Event: time 1368479193.088461, -------------- SYN_REPORT ------------
Event: time 1368479193.744834, type 1 (EV_KEY), code 403 (KEY_CHANNELDOWN), value 1
Event: time 1368479193.744837, -------------- SYN_REPORT ------------
Event: time 1368479193.994214, type 1 (EV_KEY), code 403 (KEY_CHANNELDOWN), value 2
Event: time 1368479193.994215, -------------- SYN_REPORT ------------
Event: time 1368479194.027213, type 1 (EV_KEY), code 403 (KEY_CHANNELDOWN), value 2
Event: time 1368479194.027214, -------------- SYN_REPORT ------------
Event: time 1368479194.060214, type 1 (EV_KEY), code 403 (KEY_CHANNELDOWN), value 2
Event: time 1368479194.060215, -------------- SYN_REPORT ------------
Event: time 1368479194.093214, type 1 (EV_KEY), code 403 (KEY_CHANNELDOWN), value 2
Event: time 1368479194.093215, -------------- SYN_REPORT ------------
Event: time 1368479194.126212, type 1 (EV_KEY), code 403 (KEY_CHANNELDOWN), value 2
Event: time 1368479194.126213, -------------- SYN_REPORT ------------
Event: time 1368479194.139518, type 1 (EV_KEY), code 403 (KEY_CHANNELDOWN), value 0
Event: time 1368479194.139521, -------------- SYN_REPORT ------------
Event: time 1368479195.894463, type 1 (EV_KEY), code 365 (KEY_EPG), value 1
Event: time 1368479195.894467, -------------- SYN_REPORT ------------
Event: time 1368479196.144213, type 1 (EV_KEY), code 365 (KEY_EPG), value 2
Event: time 1368479196.144215, -------------- SYN_REPORT ------------
Event: time 1368479196.166519, type 1 (EV_KEY), code 365 (KEY_EPG), value 0
Event: time 1368479196.166522, -------------- SYN_REPORT ------------
Event: time 1368479198.631107, type 1 (EV_KEY), code 14 (KEY_BACKSPACE), value 1
Event: time 1368479198.631110, -------------- SYN_REPORT ------------
Event: time 1368479198.880213, type 1 (EV_KEY), code 14 (KEY_BACKSPACE), value 2
Event: time 1368479198.880215, -------------- SYN_REPORT ------------
Event: time 1368479198.909074, type 1 (EV_KEY), code 14 (KEY_BACKSPACE), value 0
Event: time 1368479198.909077, -------------- SYN_REPORT ------------
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.
Das war's, danke!! -
-
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:
Samsung Return:
DEBUG - Main::onCecLogMessage(18103 [T]>> 01:8a:91
)
DEBUG - Main::onCecLogMessage(18103 [D]>> TV (0) -> Recorder 1 (1): vendor remote button down (8A)
)
DEBUG - Main::onCecLogMessage(18103 [D]key pressed: return (Samsung) (91)
)
DEBUG - Main::onCecKeyPress(Key press: AN_RETURN for 125ms)
DEBUG - sent 355Stop:
DEBUG - Main::onCecLogMessage(44888 [T]>> 01:42:03
)
DEBUG - Main::onCecLogMessage(44888 [D]>> TV (0) -> Recorder 1 (1): deck control (42)
)Play:
DEBUG - Main::onCecLogMessage(79146 [T]>> 01:41:24
)
DEBUG - Main::onCecLogMessage(79146 [D]>> TV (0) -> Recorder 1 (1): play (41)
)Ch. List:
DEBUG - Main::onCecLogMessage(130279 [T]>> 01:8a:96
)
DEBUG - Main::onCecLogMessage(130279 [D]>> TV (0) -> Recorder 1 (1): vendor remote button down (8A)
)
DEBUG - Main::onCecLogMessage(130279 [D]key pressed: channels list (Samsung) (96)
)
DEBUG - Main::onCecKeyPress(Key press: UNKNOWN for 125ms)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 -
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:CodeDEBUG - 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):
Code
Alles anzeigenInput driver version is 1.0.1 Input device ID: bus 0x1 vendor 0x1 product 0x1 version 0x1 Input device name: "libcec-daemon" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 2 (KEY_1) Event code 3 (KEY_2) Event code 4 (KEY_3) Event code 5 (KEY_4) Event code 6 (KEY_5) Event code 7 (KEY_6) Event code 8 (KEY_7) Event code 9 (KEY_8) Event code 10 (KEY_9) Event code 11 (KEY_0) Event code 13 (KEY_EQUAL) Event code 14 (KEY_BACKSPACE) Event code 28 (KEY_ENTER) Event code 63 (KEY_F5) Event code 103 (KEY_UP) Event code 104 (KEY_PAGEUP) Event code 105 (KEY_LEFT) Event code 106 (KEY_RIGHT) Event code 108 (KEY_DOWN) Event code 109 (KEY_PAGEDOWN) Event code 113 (KEY_MUTE) Event code 114 (KEY_VOLUMEDOWN) Event code 115 (KEY_VOLUMEUP) Event code 116 (KEY_POWER) Event code 119 (KEY_PAUSE) Event code 128 (KEY_STOP) Event code 138 (KEY_HELP) Event code 139 (KEY_MENU) Event code 141 (KEY_SETUP) Event code 161 (KEY_EJECTCD) Event code 163 (KEY_NEXTSONG) Event code 165 (KEY_PREVIOUSSONG) Event code 167 (KEY_RECORD) Event code 168 (KEY_REWIND) Event code 207 (KEY_PLAY) Event code 208 (KEY_FASTFORWARD) Event code 353 (KEY_SELECT) Event code 355 (KEY_CLEAR) Event code 358 (KEY_INFO) Event code 359 (KEY_TIME) Event code 364 (KEY_FAVORITES) Event code 365 (KEY_EPG) Event code 370 (KEY_SUBTITLE) Event code 371 (KEY_ANGLE) Event code 375 (KEY_SCREEN) Event code 388 (KEY_TEXT) Event code 398 (KEY_RED) Event code 399 (KEY_GREEN) Event code 400 (KEY_YELLOW) Event code 401 (KEY_BLUE) Event code 402 (KEY_CHANNELUP) Event code 403 (KEY_CHANNELDOWN) Event type 2 (EV_REL) Event type 20 (EV_REP)
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.
Code
Alles anzeigen# # libcec-daemon - start libcec-daemon # description "start libcec-daemon" start on ( local-filesystems and started openbox ) stop on runlevel [!23] respawn pre-start script #prepare uinput driver, load kernel module if neccessary if ! grep -q uinput /proc/modules ; then modprobe uinput fi # wait for /dev/uinput to come ready, otherwise vdr will ask to learn the keys... #Syslog "libcec-daemon wait for /dev/uinput to come ready" j=0 while [ ! -c /dev/uinput ] ; do j=$((j+1)) [ $j -gt 15 ] && break sleep 1 done end script script test -f /usr/bin/libcec-daemon || exit 0 export DISPLAY=:1 exec /usr/bin/libcec-daemon -a #-v -p 2.0.0.0 end script
CU
9000h
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!