softhddevice & XKeySym: Es funktionieren nur 5 Tasten

  • Code
    Oct 6 20:40:19 ckrvdr2 vdr: [3954] [softhddev]FeedKeyPress XKeySym, Num_Lock,
    Oct 6 20:40:19 ckrvdr2 vdr: [3954] [softhddev]FeedKeyPress XKeySym, KP_1, 1
    Oct 6 20:40:19 ckrvdr2 vdr: [3954] [softhddev]FeedKeyPress XKeySym, Num_Lock,


    Das wird direkt an VDR übergeben.


    cRemote::Put("Num_Lock")
    cRemote::Put("KP_1")
    cRemote::Put("Num_Lock")


    bzw. wenn KP_1 nicht geht, also Put einen Fehler meldet.


    cRemote::Put("Num_Lock")
    cRemote::Put("KP_1")
    cRemote::Put("1")
    cRemote::Put("Num_Lock")


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Hallo,
    der Fehler ligt anscheinend in:
    code = Utf8CharGet(conv.Convert(letter));
    if (code <= 0xFF) {
    cRemote::Put(KBDKEY(code)); // feed it for edit mode
    dsyslog("[softhddev] put code %s\n",code);
    }
    das dsyslog kommt von mir code ist immer null wenn ich eine Taste drücke.
    der Output davon ist, wenn ich 1 drücke:
    Oct 8 20:51:17 ckrvdr2 vdr: [7163] [softhddev] put code (null)


    tja, mit meinen Programmierkentnissen ist es nicht weit....
    nach ein paar segfaults ists auch gut... :wand


    was kann man da machen?


    vielleicht ist auch noch folgende Zeile im Log interessant:
    Oct 8 21:30:43 ckrvdr2 vdr: [15468] [softhddev]FeedKeyPress: remote 'XKeySym' not found


    Eventuell hilft auch das: die Nummerntasten haben auch kein repeat....



    Danke & lg


    christian

  • Hallo,


    da es offensichtlich unterschiedliche Fehler sind, hier kurz der aktuelle Status zum "Problem" von "derBert" und mir.
    Wir nutzen das Activy Frontpanel.
    Sowohl mit der vdr-2.0.6 als auch mit der vdr-2.1.6 müssen wir folgenden patch anwenden damit es funktioniert.


    Code
    //dsyslog("[softhddev]%s %s, %s, %s\n", __FUNCTION__, keymap, key, letter);
     if (key[1]) {                      // no single character
    -    if (!csoft->Put(key, repeat, release) && letter
    -        && !cRemote::IsLearning()) {
    if (key[1]) {                      // no single character
    +      if (!csoft->Put(key, repeat, release) && 0 && letter) {


    Dieses haben wir (derBert und ich) auf VIER unterschiedlichen VDRs mit Activy Frontpanel erfolgreich getestet.


    john: ist es möglich, dass Du diese Änderung in die Zukünftigen Release einbaust. Mir würde es auch reichen wenn es konfigurierbar ist.
    Als Standard Umlaute aus, damit der VDR bedienbar bleibt. Optional können die die es benötigen es ja anschalten :-).


    Danke !!


    Grüße
    kaminkehrer

    VDRMB2 (Wohnzimmer) :
    Gehäuse: Activy 330 FP mit TTL Wandler am Serial
    Intel DH61BE ; Geforce GT630 ; 2x2GB ; CineS2 5.6 ; 128GB SSD ; 1TB HDD
    Harmony 650 ; Samsung UE40C6200
    - Gen2VDR 6.0 -


    VDRMB1 (Schlafzimmer) :
    Gehäuse: Activy 330 FP mit TTL Wandler am Serial
    Zotac ionitx G-E ; 240GB SSD ; CineS2 5.4 ; 2x2 GB RAM
    Harmony 650 ; LG 32LG450
    - Gen2VDR 6.0 -


    VDRMB3 (Test) :
    Gehäuse: Activy 300 FP mit TTL Wandler am Serial
    POV 330-1 ; 240GB SSD ; Mystique SaTiX-S2-PCI ; 2x2 GB RAM
    Harmony 300
    - Gen2VDR 6.0 -


    und weitere ...

  • Als Standard Umlaute aus, damit der VDR bedienbar bleibt. Optional können die die es benötigen es ja anschalten :-).


    Andersherum wird ein Schuh daraus. Ihr beide habt das Problem, und alle anderen sollen dann was konfigurieren, obwohl sie kein Problem haben und gar nicht wissen, warum es plötzlich nicht mehr geht?
    Besser wäre es, wenn ihr etwas konfiguriert und der Standard so bleibt, wie er ist, oder?


    Lars.

  • Es könnte beides noch das gleiche Problem sein.


    Code
    cCharSetConv conv;
                unsigned code;
    
    
                code = Utf8CharGet(conv.Convert(letter));
                if (code <= 0xFF) {
                    cRemote::Put(KBDKEY(code));        // feed it for edit mode
                }


    Leider habe ich es schlecht eingecheckt und man erkennt nicht von wem der Patch war.
    Auf jeden Fall nicht auf meinem Mist gewachsen. http://projects.vdr-developer.…9d305572554e6638198753a00


    Das Problem sind z.b. die Keypad Tasten, die produzieren "KP_1", "1" und die gehen mit neuerem VDR nicht mehr.
    "KP_1" wird nicht in der remote.conf behandelt bzw. funktioniert nicht, warum auch immer?
    Dann wird "1" nach UTF8 probiert, geht auch schief und damit gehen diese Tasten nicht.


    Zitat

    Oct 8 21:30:43 ckrvdr2 vdr: [15468] [softhddev]FeedKeyPress: remote 'XKeySym' not found


    Ist normal kommt immer. Ist - denke ich - Info und nicht Fehler.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Leider habe ich es schlecht eingecheckt und man erkennt nicht von wem der Patch war.


    Ich könnte meine Finger da mit im Spiel gehabt haben.


    Ich versuche mal herauszufinden, warum der vdr KP_1 nicht mag. Das sollte er eigentlich.


    Lars.

  • der Output davon ist, wenn ich 1 drücke:
    Oct 8 20:51:17 ckrvdr2 vdr: [7163] [softhddev] put code (null)


    "code" ist ein Integer, dann kannst du nicht %s, sondern musst %d benutzen.


    Lars.

  • Moin!


    Ich hab hier jetzt keinen Rechner zum Testen, sondern lese nur den Code. "Num_Lock" ist 8 Zeichen lang, vielleicht bringt es den Buffer im vdr zum Überlaufen und es gehen Tasten verloren?
    Was passiert, wenn man Num_Lock ignoriert?


    Code
    //dsyslog("[softhddev]%s %s, %s, %s\n", __FUNCTION__, keymap, key, letter);
    +    if (strcmp(key, "Num_Lock") == 0)
    +        return;
         if (key[1]) {                        // no single character
             if (!csoft->Put(key, repeat, release) && letter


    Ich weiß nicht, ob man den vdr diese Taste ignorieren lassen kann, wenn man folgendes stattdessen in die remote.conf übernimmt:

    Code
    XKeySym. Num_Lock


    Lars.

  • Hallo,


    der beschriebene Patch das NumLock auszufiltern funktioniert nicht.


    Code
    //dsyslog("[softhddev]%s %s, %s, %s\n", __FUNCTION__, keymap, key, letter);
    +    if (strcmp(key, "Num_Lock") == 0)
    +        return;
         if (key[1]) {                        // no single character
             if (!csoft->Put(key, repeat, release) && letter


    Grüße
    kaminkehrer

    VDRMB2 (Wohnzimmer) :
    Gehäuse: Activy 330 FP mit TTL Wandler am Serial
    Intel DH61BE ; Geforce GT630 ; 2x2GB ; CineS2 5.6 ; 128GB SSD ; 1TB HDD
    Harmony 650 ; Samsung UE40C6200
    - Gen2VDR 6.0 -


    VDRMB1 (Schlafzimmer) :
    Gehäuse: Activy 330 FP mit TTL Wandler am Serial
    Zotac ionitx G-E ; 240GB SSD ; CineS2 5.4 ; 2x2 GB RAM
    Harmony 650 ; LG 32LG450
    - Gen2VDR 6.0 -


    VDRMB3 (Test) :
    Gehäuse: Activy 300 FP mit TTL Wandler am Serial
    POV 330-1 ; 240GB SSD ; Mystique SaTiX-S2-PCI ; 2x2 GB RAM
    Harmony 300
    - Gen2VDR 6.0 -


    und weitere ...

  • Ich bin jetzt auch zu Hause und versuche, das ganze mal nachzustellen.
    Mit welchen locale-Einstellungen laufen denn eure vdrs?


    Lars.

  • Hm, bei mir funktioniert alles.
    In der remote.conf habe ich

    Code
    XKeySym.0          KP_0
    XKeySym.1          KP_1
    XKeySym.2          KP_2
    XKeySym.3          KP_3
    XKeySym.4          KP_4
    XKeySym.5          KP_5
    XKeySym.6          KP_6
    XKeySym.7          KP_7
    XKeySym.8          KP_8
    XKeySym.9          KP_9


    und softhddevice gibt aus:


    Was mich jetzt ein wenig verwirrt, ist das wechselnde Zeichen hinten an der Zahl, das muss ich mal untersuchen.


    Die 1 und 3 nach Home sind die normalen Zahlentasten, alle mit KP_ vorweg sind vom Nummernblock.


    locale:


    Lars.


  • Sowohl mit der vdr-2.0.6 als auch mit der vdr-2.1.6 müssen wir folgenden patch anwenden damit es funktioniert.


    Code
    //dsyslog("[softhddev]%s %s, %s, %s\n", __FUNCTION__, keymap, key, letter);
     if (key[1]) {                      // no single character
    -    if (!csoft->Put(key, repeat, release) && letter
    -        && !cRemote::IsLearning()) {
    if (key[1]) {                      // no single character
    +      if (!csoft->Put(key, repeat, release) && 0 && letter) {


    Was ich an diesem Patch nicht verstehe: durch das "&& 0" wird dafür gesorgt, dass die Bedingung immer false ist.
    Bei einem optimierenden Compiler würde ich fast davon ausgehen, dass der ganze if-Zweig entfernt werden würde. Das würde bedeuten, dass das Put gar nicht ausgeführt wird.
    Aber selbst wenn es ausgeführt werden würde, ohne den Patch wird es auch aufgerufen.


    Irgendwie mysteriös...


    Lars.

  • Ok, das wechselnde Symbol hinten dran sind Überreste von nicht initialisiertem Speicher und wird durch folgenden Patch behoben:

    Diff
    --- a/video.c
    +++ b/video.c
    @@ -9775,6 +9775,7 @@
                break;
            case KeyPress:
                VideoThreadLock();
    +           memset(letter, 0, sizeof(letter));
                XLookupString(&event.xkey, letter, sizeof(letter), &keysym, NULL);
                VideoThreadUnlock();
                if (keysym == NoSymbol) {


    Dann sehen die Zahlen auf dem Zehnerblock schöner aus:

    Code
    Oct  9 18:54:01 hdvdr vdr: [30551] [softhddev]FeedKeyPress XKeySym, KP_0, 0
    Oct  9 18:54:03 hdvdr vdr: [30551] [softhddev]FeedKeyPress XKeySym, KP_1, 1
    Oct  9 18:54:04 hdvdr vdr: [30551] [softhddev]FeedKeyPress XKeySym, KP_2, 2
    Oct  9 18:54:05 hdvdr vdr: [30551] [softhddev]FeedKeyPress XKeySym, KP_3, 3
    Oct  9 18:54:06 hdvdr vdr: [30551] [softhddev]FeedKeyPress XKeySym, KP_4, 4
    Oct  9 18:54:06 hdvdr vdr: [30551] [softhddev]FeedKeyPress XKeySym, KP_5, 5
    Oct  9 18:54:07 hdvdr vdr: [30551] [softhddev]FeedKeyPress XKeySym, KP_6, 6
    Oct  9 18:54:08 hdvdr vdr: [30551] [softhddev]FeedKeyPress XKeySym, KP_7, 7
    Oct  9 18:54:08 hdvdr vdr: [30551] [softhddev]FeedKeyPress XKeySym, KP_8, 8
    Oct  9 18:54:09 hdvdr vdr: [30551] [softhddev]FeedKeyPress XKeySym, KP_9, 9


    Lars.

  • Bitte den memset patch testen, der könnte es schon gewesen sein.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch


  • Was ich an diesem Patch nicht verstehe: durch das "&& 0" wird dafür gesorgt, dass die Bedingung immer false ist.
    Bei einem optimierenden Compiler würde ich fast davon ausgehen, dass der ganze if-Zweig entfernt werden würde. Das würde bedeuten, dass das Put gar nicht ausgeführt wird.
    Aber selbst wenn es ausgeführt werden würde, ohne den Patch wird es auch aufgerufen.


    Irgendwie mysteriös...


    Das war der Trick der Rest wurde garnicht mehr ausgewertet.


    Und && werden immer von links nach rechts ausgewertet, der Compiler darf dann den if Inhalt weglassen, aber csoft->Put wird immer aufgerufen.


    Bei mir klappt es immer mit KP_1 Einträgen in remote.conf und auch ohne.
    Bei »prometheus« klappt erst die KP_x Einträge nicht und dann geht der Versuch mit "letter" schief.
    Aber das könnte am memset liegen.


    Wobei richtig wäre i = XLookupString ... letter[i] = '\0'.
    Und der Buffer müsste 1 kleiner sein, für die 0.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Wobei richtig wäre i = XLookupString ... letter = '\0'.
    Und der Buffer müsste 1 kleiner sein, für die 0.


    Stimmt, XLookupString liefert ja die Länge zurück, dann braucht man keinen memset und muss dann nur ein "- 1" an das sizeof anhängen.


    Leider hab ich hier auf Arbeit nur einen alten git-Stand und das git bei vdr-developer.org streikt noch.
    Gibt es ein "Backup" bei github oder so? Dann würde ich einen schöneren Patch fertig machen.


    Lars.

  • Bei mir klappt es immer mit KP_1 Einträgen in remote.conf und auch ohne.
    Bei »prometheus« klappt erst die KP_x Einträge nicht und dann geht der Versuch mit "letter" schief.
    Aber das könnte am memset liegen.


    Nur mal eine dumme Frage: wie viele Leerzeichen habt ihr zwischen dem ersten und den zweiten Teil? Nicht, dass nur ein Leerzeichen evtl. zu wenig ist. Ich hab da mehrere.


    Lars.

  • Hallo,


    bei funktioniert dieser patch:

    Diff
    --- a/video.c
    +++ b/video.c
    @@ -9775,6 +9775,7 @@
                break;
            case KeyPress:
                VideoThreadLock();
    +           memset(letter, 0, sizeof(letter));
                XLookupString(&event.xkey, letter, sizeof(letter), &keysym, NULL);
                VideoThreadUnlock();
                if (keysym == NoSymbol) {


    NICHT.


    Das verhalten ist wie vorher.


    Grüße
    kaminkehrer

    VDRMB2 (Wohnzimmer) :
    Gehäuse: Activy 330 FP mit TTL Wandler am Serial
    Intel DH61BE ; Geforce GT630 ; 2x2GB ; CineS2 5.6 ; 128GB SSD ; 1TB HDD
    Harmony 650 ; Samsung UE40C6200
    - Gen2VDR 6.0 -


    VDRMB1 (Schlafzimmer) :
    Gehäuse: Activy 330 FP mit TTL Wandler am Serial
    Zotac ionitx G-E ; 240GB SSD ; CineS2 5.4 ; 2x2 GB RAM
    Harmony 650 ; LG 32LG450
    - Gen2VDR 6.0 -


    VDRMB3 (Test) :
    Gehäuse: Activy 300 FP mit TTL Wandler am Serial
    POV 330-1 ; 240GB SSD ; Mystique SaTiX-S2-PCI ; 2x2 GB RAM
    Harmony 300
    - Gen2VDR 6.0 -


    und weitere ...

  • Hallo,


    vielen Dank an alle,
    der Patch:

    hat bei mir funktioniert.
    Fließt das auch in die GIT Version von softhddevice ein?


    Danke&lg
    christian


    ps.: ich setzte den Threadnamen noch nicht auf gelöst, da die anderen anscheinend noch Probleme haben.

Jetzt mitmachen!

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