[patch]Keyboard lässt sich nicht anlernen

  • Hallo
    Ich habe auf meinem Raspberry Pi einen Flic Dongle angeschlossen der Signale jeder FB empfängt und Keyboard signale an den Computer sendet.
    Beim anlernen der FB ist mir aufgefallen dass ich jede Taste 2 mal anlernen kann, und dabei 2 unterschiedliche Codes beim VDR ankommen.
    z.B.:

    Code
    Oct 20 22:38:46 raspberrypi vdr: [2391] new KBD code: 00000000010C0039 = Up
    Oct 20 22:38:48 raspberrypi vdr: [2391] new KBD code: 00000000001B5B41 = UP
    Oct 20 22:38:49 raspberrypi vdr: [2391] new KBD code: 00000000010D0039 = Down
    Oct 20 22:38:51 raspberrypi vdr: [2391] new KBD code: 00000000001B5B42 = Down


    Ich habe die Taste hinten editiert um zu zeigen was ich gedrückt habe.


    Dadurch war es mir auch nicht möglich Tasten zu überspringen oder sonstige Funktionen aus dem Anlern Menü zu benutzen, weil diese Tasten mit anderem Code angelernt wurden und dann nicht mehr benutzbar waren in dem Menü.
    Um den Flirc Dongle als Fehler auszuschließen habe ich es auch mit einer Kabellosen usb Tastatur versucht mit dem gleichen Resultat.
    Verwendet habe ich vdr-2.0.2.


    mfg Thomas


    [edit]
    Hier ein patch der das Problem löst:
    [Fehler gefunden]Keyboard lässt sich nicht anlernen
    [/edit]

    VDR:
    Hardware: Thermaltake DH102, Zotac ION ITX-F-E, 2Gig Ram, TechnoTrend
    dual DVB-S2 6400, TechnoTrend Connect CT-3650,


    Software: EasyVDR 1.0

    2 Mal editiert, zuletzt von googles () aus folgendem Grund: Lösung gefunden

  • Ich habe mir jetzt mal mit showkey -a ( zeigt die dezimalen/oktalen/hexadezimalen Tastencodes) die Werte der Tasten Up und Down angesehen.
    Up:

    Code
    ^[[A   27   0033   0x1b
             91   0133   0x5b
             65   0101   0x41


    Down:

    Code
    ^[[B   27   0033   0x1b
             91   0133   0x5b
             66   0102   0x42


    Also sollten laut dem obigen Log doch der zweite Tastendruck den richtigen Wert senden.
    Wie liest der VDR diese Werte? Woher kommen zuerst diese Falschen Werte?

    VDR:
    Hardware: Thermaltake DH102, Zotac ION ITX-F-E, 2Gig Ram, TechnoTrend
    dual DVB-S2 6400, TechnoTrend Connect CT-3650,


    Software: EasyVDR 1.0

  • Hi,


    könntest Du mir mal zu den obigen Codes mal die passende Zeile aus deiner remote.conf posten? Ich verstehe nicht ganz die Zuordnung?

  • Im ersteb beitrag im log stehen diese zwei Tasten.
    In der letzten Spalte steht der Hex Wert das 0x must du weglassen und ein bar nullen davor schreiben.

    VDR:
    Hardware: Thermaltake DH102, Zotac ION ITX-F-E, 2Gig Ram, TechnoTrend
    dual DVB-S2 6400, TechnoTrend Connect CT-3650,


    Software: EasyVDR 1.0

  • Hallo
    Ich habe mir jetzt mal den source vom VDR angesehen und verstehe leider nicht woher diese key sequenzen herkommen.
    kann das mit UTF8 zusammen hängen?


    wenn ich mir die Funktion ReadKeySequence ansehe:



    sollte doch jed sequence mit 0x1B anfangen.
    oder wird beim anlernen nicht auf diese Funktion zurückgegriffen?
    Bei jedem zweiten Tastendruck auf die selbe Taste wird dann auch die richtige keysequece gespeichert.
    Wäre schön wenn das wieder funktionieren würde. Und ich nicht eine Stunde lang die Codes händisch eintragen müsste.
    mfg Thomas

    VDR:
    Hardware: Thermaltake DH102, Zotac ION ITX-F-E, 2Gig Ram, TechnoTrend
    dual DVB-S2 6400, TechnoTrend Connect CT-3650,


    Software: EasyVDR 1.0

  • Mit 0x1b fangen nur die Escape-Sequenzen an, alle anderen Tasten werden 1:1 zurückgegeben (return k).
    Aber UTF8 kann schon ein Faktor sein. Protokolliere doch einfach mal die Werte, die ReadKey zurückgibt, dann wird man sicherlich ein Muster erkennen. Zumindest bei Umlauten wird's auf alle Fälle ein Problem geben.


    Lars.

  • Mit 0x1b fangen nur die Escape-Sequenzen an, alle anderen Tasten werden 1:1 zurückgegeben (return k).
    Aber UTF8 kann schon ein Faktor sein. Protokolliere doch einfach mal die Werte, die ReadKey zurückgibt, dann wird man sicherlich ein Muster erkennen. Zumindest bei Umlauten wird's auf alle Fälle ein Problem geben.


    Lars.


    Aber alle Funktions bzw. Steuerungstasten sollten doch escape sequenzen sein.
    Habe zumindest mit showkey -a nie was anderes gesehen. Ich habe angenommen, das "return k" nur ein byte zurück liefert und nur sequenzen die mit 0x1B anfangen aus mehreren bytes bestehen.


    mfg Thomas

    VDR:
    Hardware: Thermaltake DH102, Zotac ION ITX-F-E, 2Gig Ram, TechnoTrend
    dual DVB-S2 6400, TechnoTrend Connect CT-3650,


    Software: EasyVDR 1.0

  • k ist ein uint64_t, da ist also Platz für diverse Bytes. Meistens ist aber nur eins belegt.
    Ich hab da jetzt aber auch nur rudimentäre Kenntnisse, hab mich da mal mit den Umlauten beschäftigt, siehe http://www.vdr-portal.de/board…eine-umlaute/#post1175461.


    Wo jetzt aber genau dein Problem ist, vemag ich nicht zu sagen. Ich muss sowas immer erst debuggen und ein paar Daten sehen, bevor mir was sinnvolles einfällt.
    Und dann müsste man noch nachsehen, welches Byte der Taste entspricht (siehe keys.h).


    Ach, es geht um einen Raspberry Pi? Das spielt sicherlich auch noch eine Rolle. Wie kommen die Tasten denn genau in den vdr? Werden die auf dem Weg dahin vielleicht noch irgendwie verarbeitet?


    Lars.


  • Habs eigentlich über eine Normale usb Funktastatur getestet.
    Ich verstehe nur nicht wie der VDR die Keyboard eingaben liest, weil ich habe mir selber auch ein Kleine Programm geschrieben welches mir Tastatur eingaben erkennt aund darauf reagieren kann (als irexec ersatz).
    und bekam eigentlich immer die richtigen Werte zurück. muss es mal auf meinem normale VDR testen kann mir aber nicht vorstellen dass der Raspberry was anders macht.
    Sonst muss ich debuggen oder hoffen dass kls noch was dazu sagt.

    VDR:
    Hardware: Thermaltake DH102, Zotac ION ITX-F-E, 2Gig Ram, TechnoTrend
    dual DVB-S2 6400, TechnoTrend Connect CT-3650,


    Software: EasyVDR 1.0

  • Noch eine Anmerkung:
    Da ich softhddevice nutze, kommt cKbdRemote bei mir gar nicht zum Einsatz, da softhddevice die Tasten von X bekommt und an den vdr mit einem eigenen cRemote-Objekt weiterleitet.
    Wie sieht es bei dir aus? Welche Ausgabe benutzt du und kommen die Tasten wirklich über stdin?


    Lars

  • Also ich kann die Tasten mit dem Patch von Lars anlernen (siehe Beitrag darunter): [Ursache gefunden] Tastatur im VDR ist deutsch erzeugt aber keine Umlaute


    Ich nutze auf dem Raspberry Pi die Mittel von Systemd um die Eingaben von einem tty auf stdin für den VDR-Prozess weiterzuleiten:

    StandardInput=
    Controls where file descriptor 0 (STDIN) of the executed processes is connected to. Takes one of null, tty, tty-force, tty-fail or socket. If null is selected, standard input will be connected to /dev/null, i.e. all read attempts by the process will result in immediate EOF. If tty is selected, standard input is connected to a TTY (as configured by TTYPath=, see below) and the executed process becomes the controlling process of the terminal. If the terminal is already being controlled by another process, the executed process waits until the current controlling process releases the terminal. tty-force is similar to tty, but the executed process is forcefully and immediately made the controlling process of the terminal, potentially removing previous controlling processes from the terminal. tty-fail is similar to tty but if the terminal already has a controlling process start-up of the executed process fails. The socket option is only valid in socket-activated services, and only when the socket configuration file (see systemd.socket(5) for details) specifies a single socket only. If this option is set, standard input will be connected to the socket the service was activated from, which is primarily useful for compatibility with daemons designed for use with the traditional inetd(8) daemon. This setting defaults to null.


    Mir fehlt nur noch die Texteingabe über die Tastatur in der Eingabemaske...

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • mini73
    Nicht direkt über stdin aber vdr kann sich ja an ein bestimmtes tty hängen und von dort lesen.


    Also ich kann die Tasten mit dem Patch von Lars anlernen (siehe Beitrag darunter): [Ursache gefunden] Tastatur im VDR ist deutsch erzeugt aber keine Umlaute


    Ich nutze auf dem Raspberry Pi die Mittel von Systemd um die Eingaben von einem tty auf stdin für den VDR-Prozess weiterzuleiten:


    Mir fehlt nur noch die Texteingabe über die Tastatur in der Eingabemaske...


    Das verstehe ich nicht. Vdr muss ja nicht von stdin lesen mit einem Startparameter kann man ja sagen von wo er lesen soll.
    Hattest du die gleichen Probleme wie ich?


    Mfg Thomas

    VDR:
    Hardware: Thermaltake DH102, Zotac ION ITX-F-E, 2Gig Ram, TechnoTrend
    dual DVB-S2 6400, TechnoTrend Connect CT-3650,


    Software: EasyVDR 1.0

  • Das verstehe ich nicht. Vdr muss ja nicht von stdin lesen mit einem Startparameter kann man ja sagen von wo er lesen soll.


    Ja, aber dazu braucht er das Recht auf die Konsole zugreifen zu dürfen. Und anstatt da viel rumzufummeln oder ihn gar dauerhaft als root laufen zu lassen erledige ich das einfach über systemd statt über das VDR-Startargument.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)


  • Ja, aber dazu braucht er das Recht auf die Konsole zugreifen zu dürfen. Und anstatt da viel rumzufummeln oder ihn gar dauerhaft als root laufen zu lassen erledige ich das einfach über systemd statt über das VDR-Startargument.


    OK verstehe. Bei mir läuft er allerdings als root weil ich in der Vergangenheit immer wieder Probleme hatte mit irgend welchen rechten bei den Befehlen.

    VDR:
    Hardware: Thermaltake DH102, Zotac ION ITX-F-E, 2Gig Ram, TechnoTrend
    dual DVB-S2 6400, TechnoTrend Connect CT-3650,


    Software: EasyVDR 1.0

  • Hallo mini73
    Kannst du mir bitte sagen wie ich mir hier eine debug Ausgabe einbauen kann?

    VDR:
    Hardware: Thermaltake DH102, Zotac ION ITX-F-E, 2Gig Ram, TechnoTrend
    dual DVB-S2 6400, TechnoTrend Connect CT-3650,


    Software: EasyVDR 1.0

  • Ok hat sich erledigt wieso wollte ich das auch in safe_read einbauen :wand
    Habs jetzt in ReadKey eingebaut da gabs keinen void pointer

    VDR:
    Hardware: Thermaltake DH102, Zotac ION ITX-F-E, 2Gig Ram, TechnoTrend
    dual DVB-S2 6400, TechnoTrend Connect CT-3650,


    Software: EasyVDR 1.0

  • Hänge mal das LOG an:


    Wenn man das mit dem vorherigen log vergleicht stimmen jetzt die meisten Tasten hab aber nur eine debug Ausgabe eingebaut.
    Key Back stimmt noch nicht sollte einfach 7F sein wie im debug Log.
    Woher kommt dann der rest (0039)?
    Und warum stimmen jetzt die meisten Keys?


    mfg Thomas

    VDR:
    Hardware: Thermaltake DH102, Zotac ION ITX-F-E, 2Gig Ram, TechnoTrend
    dual DVB-S2 6400, TechnoTrend Connect CT-3650,


    Software: EasyVDR 1.0

  • Habs jetzt noch mal mit den zifferntasten debuged:


    wieder ganz ein anderes Bild.
    die debug ausgaben passen ja nicht mit den gespeicherten werten zusammen z.b.:


    Code
    Dec 23 21:40:33 raspberrypi vdr: [5100] debug ReadKey: 1B
    Dec 23 21:40:33 raspberrypi vdr: [5100] debug ReadKey: 5B
    Dec 23 21:40:33 raspberrypi vdr: [5100] debug ReadKey: 43
    Dec 23 21:40:33 raspberrypi vdr: [5084] new KBD code: 00000000010F0039 = Right


    komisch :rolleyes:

    VDR:
    Hardware: Thermaltake DH102, Zotac ION ITX-F-E, 2Gig Ram, TechnoTrend
    dual DVB-S2 6400, TechnoTrend Connect CT-3650,


    Software: EasyVDR 1.0

  • Das ist in der Tat komisch. Irgendwo auf dem Weg von ReadKeySequence über den PutKey usw. verändert sich der Inhalt, aber auch nicht immer.
    Da hilft nur, an allen Stellen entsprechende Debugausgaben einzubauen, insbesondere cRemote::Put mit dem uint64 als Argument und der snprintf interessiert mich.


    Aber vor Weihnachten wird das bei mir nichts, die nächsten Tage bin ich nur unterwegs...


    Lars

Jetzt mitmachen!

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