Sehr schön, dass die Sonderzeichen gehen (mit export XKB_DEFAULT_LAYOUT=de)!
Es gibt noch ein paar kleine Problemchen, aber die bekommen wir sicherlich in den Griff.
Sehr schön, dass die Sonderzeichen gehen (mit export XKB_DEFAULT_LAYOUT=de)!
Es gibt noch ein paar kleine Problemchen, aber die bekommen wir sicherlich in den Griff.
Wenn man ein wenig länger auf die Shift Taste drückt, scheint die "einzurasten", jedenfalls bekomme ich danach nur noch Großbuchstaben.
Das mit nur noch Großbuchstaben hatte ich auch schon beobachtet, nur hatte ich den Ursprung bisher nicht erkannt.
Außerdem funktionieren die Umlaute noch nicht. Mal schauen wo dran das liegt. Ich tippe mal auf ein utf8 (multibyte) Problem.
Ich habe jetzt die Optionen hinzugefügt, über die die beiden Zifferntasten Behandlungs Varianten aktiviert werden können. Außerdem habe ich das Einrasten der Shift Taste behoben: https://gitlab.com/MLD-6/meta-mld…es/00_mld.patch
So, und nun funktionieren auch die Umlaute und andere (erlaubte) UTF-8 Zeichen: https://gitlab.com/MLD-6/meta-mld…es/00_mld.patch
Der Patch ist weiterhin gegen diese Version erstellt: https://github.com/j1rie/vdr-plug…efe1e774f71f791
So, und hier nun auch noch mit ergänzter Readme: https://gitlab.com/MLD-6/meta-mld…es/00_mld.patch
v0.2.1
use xkbcommon, patch from clausmuus@vdr-portal.de
remove not needed parts, indentation, more debug messages
Es muss neu angelernt werden.
if (!InEditMode() || !state) {
Put(key, repeat);
} else {
if (str_len > 0 && (unsigned char)str[0] >= 0x20 && (unsigned char)str[0] != 0x7F)
Put((eKeys)(kKbd|str[0]<<16));
else
Put(key, repeat); // control must work in edit mode, too, F1,F2,F3,F4 have str_len 0, Backspace and Return are below 0x20
}
Der Code ist dadurch schön einfach geworden.
Der Codeblock ist noch nicht ganz korrekt. Das müsste so lauten damit auch utf8 Zeichen (z.B. Umlaute) funktionieren:
if (!InEditMode()) {
Put(key, repeat);
} else {
if (str_len > 0 && (unsigned char)str[0] >= 0x20 && (unsigned char)str[0] != 0x7F)
if (str_len == 1)
Put((eKeys)(kKbd|str[0]<<16));
else if (state) {
xkb_keysym_t sym = xkb_state_key_get_one_sym(state, xkb_code);
Put((eKeys)(kKbd|sym << 16));
}
else
Put(key, repeat); // control must work in edit mode, too, F1,F2,F3,F4 have str_len 0, Backspace and Return are below 0x20
}
Display More
Es könnte auch überlegt werden ob die Action Funktion in Zeile 143 ganz abgebrochen wird, wenn state nicht existiert, und dann im späteren Verlauf auf die Prüfung auf state verzichtet wird. Denn ohne state können sowieso keine Tasten eingelesen werden.
Und dann ist mir noch aufgefallen, dass in Zeile 12 das #include "input-event-codes.h" raus muss.
Der Ganze ist jetzt aber schon mal schön aufgeräumt ![]()
Es könnte auch überlegt werden ob die Action Funktion in Zeile 143 ganz abgebrochen wird, wenn state nicht existiert, und dann im späteren Verlauf auf die Prüfung auf state verzichtet wird. Denn ohne state können sowieso keine Tasten eingelesen werden.
Ja.
Der Codeblock ist noch nicht ganz korrekt. Das müsste so lauten damit auch utf8 Zeichen (z.B. Umlaute) funktionieren:
Ups. Zuviel aufgeräumt. Danke.
https://github.com/j1rie/vdr-plug…f4e60291c768e5b
Ungetestet. Dazu komme ich erst nächste Woche.
Scheint soweit alles zu stimmen. Ich habe vor meinem Test nur noch meine Änderungen hinzugefügt, damit die Funktion der Zifferntasten automatisch umschalten: https://gitlab.com/MLD-6/meta-mld…es/00_mld.patch
Vielleicht wäre es besser die ganze xkbcommon Initialisierung in Start() zu machen, und mit false raus zu gehen, wenn das scheitert.
Dann startet VDR nicht, und man sieht gleich, dass ein Problem besteht.
Das würde auch besser zur VDR Philosophie passen, siehe PLUGINS.html -> Getting started.
root@CoreELEC ~/vdr/PLUGINS/src/usbkbd # make
CC usbkbd.o
g++ -g -O3 -Wall -Wno-parentheses -fPIC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -c -DPLUGIN_NAME_I18N='"usbkbd"' -o usbkbd.o usbkbd.c
usbkbd.c: In member function ‘virtual void cUsbkbdRemote::Action()’:
usbkbd.c:224:18: error: ‘InEditMode’ was not declared in this scope
224 | if (!InEditMode()) {
| ^~~~~~~~~~
make: *** [Makefile:69: usbkbd.o] Error 1
ich habe versucht, #include <vdr/menuitems.h> zu ergänzen, aber das hilft auch nicht.
Da fehlen die includes.Hast du das Makefile verändert?Am besten holst du das Plugin nochmal komplett neu aus dem git.
Da fehlt der VDR Patch von kls. Erst mit diesem gibt es die Funktion InEditMode: RE: vdr-plugin-usbkbd für alle Eingabe Geräte, die Tastendrücke senden
Danke clausmuus , mit dem gepatchten vdr kompiliert es.
Beim Anlernprozess werden diverse Tasten nicht erkannt, z.B. alle Farbtasten (KEY_RED, KEY_GREEN etc.), aber auch z.B. KEY_INFO.
Für die Konfiguration des input-devices (IR-Empfänger) habe ich linux eventcodes genommen. Hätte ich nur solche nehmen dürfen, die explizit zu einer Tastatur gehören?
Erkannt wurden
USBKBD.Up Up
USBKBD.Down Down
USBKBD.Menu c
USBKBD.Ok NoSymbol
USBKBD.Back Escape
USBKBD.Left Left
USBKBD.Right Right
USBKBD.0 0
USBKBD.1 1
USBKBD.2 2
USBKBD.3 3
USBKBD.4 4
USBKBD.5 5
USBKBD.6 6
USBKBD.7 7
USBKBD.8 8
USBKBD.9 9
USBKBD.Pause Pause
Display More
wobei die ersten 7 diesen event codes entsprechen:
KEY_UP
KEY_DOWN
KEY_C
KEY_OK
KEY_ESC
KEY_LEFT
KEY_RIGHT
Die Ziffern waren auch kein Problem (als z.B. KEY_0 und nicht KEY_NUMERIC_0 definiert). Pause entspricht KEY_PAUSE.
Wo ist die Logik, welche event codes gehen und welche nicht?
Hätte ich nur solche nehmen dürfen, die explizit zu einer Tastatur gehören?
Ja.
Das kommt durch die Unterstützung der Sonderzeichen.
Don’t have an account yet? Register yourself now and be a part of our community!