Im git gibt es jetzt eine Beschreibung mit Bildern.
Verbesserungsvorschläge willkommen.
Im git gibt es jetzt eine Beschreibung mit Bildern.
Verbesserungsvorschläge willkommen.
Ich habe auf der linux-input Mail-Liste meinen Kernelpatch eingereicht.
Falls jemand den schon ausprobiert hat, wäre etwas Unterstützung dort schön
Möglicherweise hilft der Patch auch für den Flirc, dazu müsste man die USB IDs vom Flirc mit rein nehmen. Vielleicht hat ja jemand mal Lust, das auszuprobieren (ich selbst habe keinen Flirc).
Das sähe dann so aus in hid-irmp.c:
Ich arbeite an einem Userspace Progamm, das sich das Keyboard-Gerät schnappt und die Tastendrücke an uinput weiterleitet. Das ist vielleicht besser als ein Kernel Treiber und einfacher in Distributionen einzubauen.
Muss noch getestet werden und kommt dann in's git.
Ohne stm32kbd2uinput werden Wiederholungen als neue Tasten erkannt, während mit stm32kbd2uinput Wiederholungen als Wiederholungen erkannt werden.
Für den VDR ist das ziemlich egal, aber in Kodi funktionieren dann die langen Tastendrücke.
In allen Fällen gibt es keinerlei Nachlauf.
Wenn man doch einen extra Daemon braucht ist halt ein großer Vorteil von dem ganzen "Ohne Treiber weil als Tastatur erkannt" wieder dahin.
Wo genau ist eigentlich das Problem mit den "langen Tastendrücken"? Man kann Kodi ja auch mit einer "echten" Tastatur bedienen. Zumindest dort hat mich die Tastenwiederholung bisher nie gestört.
Ich zitiere mal:
There are remote control receivers, which register as an USB HID keyboard and
receive and decode signals from many IR remote controls with all kinds of IR
protocols (for instance IRMP, the Infra Red Multi Protocol library). Most of
those IR remote controls only send keys on key press, but not on key release.
Because of that, the receiver sends either a release after each key press or
after a timeout, when no key was pressed any more. The first has the
disadvantage, that each key is processed as new, even if it is a repeat. The
second has the disadvantage, that the autorepeat feature of the input core
may generate keys during the timeout, while the user actually already has
taken his finger of the remote control button.
In order to solve the problem, this driver was made. It processes keys
exactly as they were sent. Autorepeat is turned off and key repeats are taken
from raw events, get translated and are passed on to input.
Lange Tastendrücke in Kodi funktionieren nur, wenn Kodi sie als solche erkennen kann. Das geht nur wenn Tastenwiederholungen als solche erkannt werden. Kodi belegt kurze Tastendrücke mit anderen Funktionen als lange Tastendrücke.
Viele benutzen das gar nicht, und dann stört es auch nicht, wenn es nicht geht [1, 2].
Ein bisschen so wie mit den TSOP Boards mit extra Kondensator und Widerstand: Es geht auch ohne.
Probier es einfach mal aus. Es ist inzwischen schon ziemlich ausgereift.
Wo genau ist eigentlich das Problem mit den "langen Tastendrücken"?
Normale Tastaturen senden Key-Down und Key-Up Events (bzw. die gerade gedrückten Tasten werden engmaschig übermittelt, bei USB alle 1 - 8 ms, mit Hardware-Interrupt bei PS/2 geht das noch schneller). Die Tastenwiederholungen können in Software interpoliert werden (vgl. z.B. https://wiki.archlinux.org/ind…_typematic_delay_and_rate und https://wiki.archlinux.org/ind…_typematic_delay_and_rate). Du bekommst also in der Voreinstellung für Kernel Input Devices alle 250 ms einen wiederholten Tastendruck, wenn du eine Taste gedrückt gehalten lässt und das System bekommt ohne große Verzögerung mit, wann die Taste wieder losgelassen wurde, so dass praktisch keine ungewollten Wiederholungen generiert werden.
Bei den meisten IR-Protokollen hast du einen Frame-Abstand von mindestens 100 ms und bekommst pro Frame effektiv ein Key-Down Event (und ggf. über das Toggle-Bit oder einen speziellen Wiederholungsframe den Hinweis, ob die Taste in der Zwischenzeit gedrückt gehalten wurde), aber keine Key-Up Events.
Du weißt also nicht genau, ob und wann die Taste wieder losgelassen wurde, nur dass sie nicht mehr gerückt gehalten wurde, wenn nach dem typischen Abstand zwischen zwei Frames kein neuer Frame für die selbe Taste kommt (erst dann kann man ein Key-Release Event senden). Es könnten also in einem ca. 100 - 120 ms langen Fenster ungewollt Tastenwiederholungen produziert werden.
https://lifehacker.com/kodi-16…remotes-and-ev-1760558987
https://flirc.gitbooks.io/flir…s/content/long-press.html
Ist vor allem für Fernbedienungen mit wenig Tasten vorteilhaft.
Der andere Unterschied ist das Scrollen durch lange Listen.
Bei einem langen Tastendruck wird beschleunigt gescrollt.
Wenn aber der lange Tastendruck fälschlich als viele einzelne erkannt wird, wird nicht beschleunigt.
Auch dieses Feature ist Geschmackssache, ob man es gut findet mit Beschleunigung oder lieber nicht.
Unterm Strich hat man die Wahl:
* Einfach anstecken und geht
oder
* etwas Software drum herum und geht etwas besser
Als Perfektionist will ich natürlich, dass auf Wunsch jegliches Detail super funktioniert, deswegen der Kernel Treiber bzw. jetzt stm32kbd2uinput.
Ohne geht es gut, mit geht es etwas besser.
Beim Flirc (soweit ich da Bescheid weiß) gibt es gen1 und gen2.
gen1 hat einzelne Tastendrücke, gen2 hat Nachlauf.
Ohne Zusatzsoftware kann eben Beides bei einem Tastaturempfänger prinzipiell nicht gehen.
Mit stm32kbd2uinput gibt es unvorhergesehene Probleme, kann also noch dauern.
Der Kernelpatch funktioniert aber einwandfrei, und solange sollte man den nehmen.
Oder man akzeptiert die kleinen Einschränkungen und hat dafür den Vorteil, dass man ihn einfach ansteckt und er geht.
Er muss natürlich einmal mit stm32kbdIRconfig_gui konfiguriert werden, aber dass geht an jedem Windows oder Linux.
stm32kbd2uinput ist fertig und funktioniert bei mir tadellos.
Kurzanleitung:
In stm32IRconfig_gui die template.map laden. Die Tasten, die man nicht braucht, entfernen. Flashen. Dann die Fernbedienungstasten anlernen. Fertig.
Wo finde ich die template.map genau?
Das IRMP STM32 KBD Configuration Teil stürzt bei mir unter Windows 10 häufig ab.
Ich muss doch unter eeprom map -> flash eeprom die Configuraton in den Stick flashen?
Denn genau dabei stürzt er ab...
Oder anders gefragt: Wie bekomme ich das rechts eingegebene in den Stick?
Wo finde ich die template.map genau?
Im git.
Das IRMP STM32 KBD Configuration Teil stürzt bei mir unter Windows 10 häufig ab.
Ich muss doch unter eeprom map -> flash eeprom die Configuraton in den Stick flashen?
Denn genau dabei stürzt er ab...
Oder anders gefragt: Wie bekomme ich das rechts eingegebene in den Stick?
Bist du nach dieser Anleitung vorgegangen?
Ok, damit komme ich weiter.
Hatte mich ohne das Template an dem Screenshot aus Beitrag 7 orientiert.
Da fehlt ff|KEY... hinter dem Code. Was bei mir Abstürze und eben nicht flashen auslöste.
Moin,
hoffe es ist passend, ergänzend zu der grundsätzlichen Frage, wie ein STM32 IRMP HID-KBD-Device unter yavdr ansible zum laufen zu bringen ist.
Bei mir steht im Syslog:
...
Apr 18 10:51:18 vdr5 kernel: [ 1.625207] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Apr 18 10:51:18 vdr5 kernel: [ 1.625208] usb 1-3: Product: STM32 IRMP HID-KBD-Device
Apr 18 10:51:18 vdr5 kernel: [ 1.625210] usb 1-3: Manufacturer: STMicroelectronics
Apr 18 10:51:18 vdr5 kernel: [ 1.625211] usb 1-3: SerialNumber: 6D8E289B5455
Apr 18 10:51:18 vdr5 kernel: [ 1.716152] Freeing unused kernel memory: 2408K
Apr 18 10:51:18 vdr5 kernel: [ 1.724085] Write protecting the kernel read-only data: 20480k
Apr 18 10:51:18 vdr5 kernel: [ 1.725399] Freeing unused kernel memory: 2008K
Apr 18 10:51:18 vdr5 kernel: [ 1.728887] Freeing unused kernel memory: 1892K
Apr 18 10:51:18 vdr5 kernel: [ 1.734864] x86/mm: Checked W+X mappings: passed, no W+X pages found.
Apr 18 10:51:18 vdr5 kernel: [ 1.734864] x86/mm: Checking user space page tables
Apr 18 10:51:18 vdr5 kernel: [ 1.740720] x86/mm: Checked W+X mappings: passed, no W+X pages found.
Apr 18 10:51:18 vdr5 kernel: [ 1.752027] usb 1-4: new high-speed USB device number 3 using xhci_hcd
Apr 18 10:51:18 vdr5 kernel: [ 1.832270] pps_core: LinuxPPS API ver. 1 registered
Apr 18 10:51:18 vdr5 kernel: [ 1.832271] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
Apr 18 10:51:18 vdr5 kernel: [ 1.834031] PTP clock support registered
Apr 18 10:51:18 vdr5 kernel: [ 1.834226] ahci 0000:00:17.0: version 3.0
Apr 18 10:51:18 vdr5 kernel: [ 1.834495] ahci 0000:00:17.0: AHCI 0001.0301 32 slots 1 ports 6 Gbps 0x1 impl SATA mode
Apr 18 10:51:18 vdr5 kernel: [ 1.834499] ahci 0000:00:17.0: flags: 64bit ncq pm led clo only pio slum part deso sadm sds apst.
Apr 18 10:51:18 vdr5 kernel: [ 1.837367] nvme nvme0: pci function 0000:3b:00.0
Apr 18 10:51:18 vdr5 kernel: [ 1.838094] scsi host0: ahci
Apr 18 10:51:18 vdr5 kernel: [ 1.838139] ata1: SATA max UDMA/133 abar m2048@0xdc237000 port 0xdc237100 irq 123
Apr 18 10:51:18 vdr5 kernel: [ 1.862527] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
Apr 18 10:51:18 vdr5 kernel: [ 1.862528] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
Apr 18 10:51:18 vdr5 kernel: [ 1.862554] e1000e 0000:00:1f.6: enabling device (0000 -> 0002)
Apr 18 10:51:18 vdr5 kernel: [ 1.862804] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
Apr 18 10:51:18 vdr5 kernel: [ 1.869492] AVX2 version of gcm_enc/dec engaged.
Apr 18 10:51:18 vdr5 kernel: [ 1.869493] AES CTR mode by8 optimization enabled
Apr 18 10:51:18 vdr5 kernel: [ 1.908418] usb 1-4: New USB device found, idVendor=aaaa, idProduct=8816
Apr 18 10:51:18 vdr5 kernel: [ 1.908420] usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Apr 18 10:51:18 vdr5 kernel: [ 1.908421] usb 1-4: Product: MXT USB Device
Apr 18 10:51:18 vdr5 kernel: [ 1.908423] usb 1-4: Manufacturer: MXTronics
Apr 18 10:51:18 vdr5 kernel: [ 1.908424] usb 1-4: SerialNumber: 130818v01
Apr 18 10:51:18 vdr5 kernel: [ 1.913190] usb-storage 1-4:1.0: USB Mass Storage device detected
Apr 18 10:51:18 vdr5 kernel: [ 1.913365] scsi host1: usb-storage 1-4:1.0
Apr 18 10:51:18 vdr5 kernel: [ 1.913434] usbcore: registered new interface driver usb-storage
Apr 18 10:51:18 vdr5 kernel: [ 1.913699] hidraw: raw HID events driver (C) Jiri Kosina
Apr 18 10:51:18 vdr5 kernel: [ 1.914841] usbcore: registered new interface driver uas
Apr 18 10:51:18 vdr5 kernel: [ 1.915861] usbcore: registered new interface driver usbhid
Apr 18 10:51:18 vdr5 kernel: [ 1.915862] usbhid: USB HID core driver
Apr 18 10:51:18 vdr5 kernel: [ 1.917095] input: STMicroelectronics STM32 IRMP HID-KBD-Device as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/0003:1209:4445.0001/input/input3
Apr 18 10:51:18 vdr5 kernel: [ 1.976500] hid-generic 0003:1209:4445.0001: input,hiddev0,hidraw0: USB HID v1.11 Keyboard [STMicroelectronics STM32 IRMP HID-KBD-Device] on usb-0000:00:14.0-3/input0
Apr 18 10:51:18 vdr5 kernel: [ 2.073857] nvme0n1: p1
...
Display More
Die Entsprechenden Tastencodes (yavdr passend) habe ich auf die KEYs gelegt.
Paket: yavdr-hardware-irmp und eventlircd ist installiert...
Sehr vereinzelt kommen Tastendrücke an:
Weit weg von einer flüssigen Bedienung.
Wie kann ich weiter diagnostizieren? Was läuft da schief?
Danke
Paket: yavdr-hardware-irmp und eventlircd ist installiert...
Das sieht nach einem der neueren IRMP-Empfänger aus, die direkt als Keyboard arbeiten, statt die Tastendrücke über irmplircd weiterzureichen, für die USB-ID hat das Paket yavdr-hardware-irmp bislang keinen Effekt.
Die Entsprechenden Tastencodes (yavdr passend) habe ich auf die KEYs gelegt.
Hast du das mit einer evmap gemacht? Ich hatte jrie damals so verstanden, dass man https://github.com/j1rie/IRMP_…tlircd/03_1209_4445.evmap direkt nutzen kann, wenn man den Empfänger mit dem Konfigurationprogramm und dem Template angelernt hat.
Und dann braucht es noch eine udev-Regel, die dafür sorgt, dass sich eventlircd das Gerät schnappt (danach den Empfänger einmal ab- und wieder anstecken):
ACTION=="add", KERNEL=="event[0-9a-f]*", SUBSYSTEM=="input", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="4445", SYMLINK+="irmp_stm32", ENV{eventlircd_enable}="true", ENV{eventlircd_evmap}="03_1209_4445.evmap", TAG+="uaccess"
Wenn das für dich klappt, kann ich das gerne ins Paket aufnehmen.
Ok, das habe ich so umgesetzt.
Tastendrücke kommen nur vereinzelt an. Geprüft mit irw...
Die kleine LED auf dem Stick blinkt aber bei jedem Tastendruck der FB.
Konfiguration:
Stop mal eventlircd und schau dir mit evtest an, was da für "rohe" Tastendrücke ankommen:
systemctl mask --runtime --now eventlircd.{socket,service}
sudo evtest (muss ggf. auf dem gleichnamigen Paket installiert werden, dann den IRMP-Empfänger auswählen).
Da kommt nix an:
root@vdr5:/home/rossi# sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Sleep Button
/dev/input/event1: Power Button
/dev/input/event2: Power Button
/dev/input/event3: STMicroelectronics STM32 IRMP HID-KBD-Device
/dev/input/event4: Video Bus
Select the device event number [0-4]: 3
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x1209 product 0x4445 version 0x111
Input device name: "STMicroelectronics STM32 IRMP HID-KBD-Device"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 1 (KEY_ESC)
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 12 (KEY_MINUS)
Event code 13 (KEY_EQUAL)
Event code 14 (KEY_BACKSPACE)
Event code 15 (KEY_TAB)
Event code 16 (KEY_Q)
Event code 17 (KEY_W)
Event code 18 (KEY_E)
Event code 19 (KEY_R)
Event code 20 (KEY_T)
Event code 21 (KEY_Y)
Event code 22 (KEY_U)
Event code 23 (KEY_I)
Event code 24 (KEY_O)
Event code 25 (KEY_P)
Event code 26 (KEY_LEFTBRACE)
Event code 27 (KEY_RIGHTBRACE)
Event code 28 (KEY_ENTER)
Event code 29 (KEY_LEFTCTRL)
Event code 30 (KEY_A)
Event code 31 (KEY_S)
Event code 32 (KEY_D)
Event code 33 (KEY_F)
Event code 34 (KEY_G)
Event code 35 (KEY_H)
Event code 36 (KEY_J)
Event code 37 (KEY_K)
Event code 38 (KEY_L)
Event code 39 (KEY_SEMICOLON)
Event code 40 (KEY_APOSTROPHE)
Event code 41 (KEY_GRAVE)
Event code 42 (KEY_LEFTSHIFT)
Event code 43 (KEY_BACKSLASH)
Event code 44 (KEY_Z)
Event code 45 (KEY_X)
Event code 46 (KEY_C)
Event code 47 (KEY_V)
Event code 48 (KEY_B)
Event code 49 (KEY_N)
Event code 50 (KEY_M)
Event code 51 (KEY_COMMA)
Event code 52 (KEY_DOT)
Event code 53 (KEY_SLASH)
Event code 54 (KEY_RIGHTSHIFT)
Event code 55 (KEY_KPASTERISK)
Event code 56 (KEY_LEFTALT)
Event code 57 (KEY_SPACE)
Event code 58 (KEY_CAPSLOCK)
Event code 59 (KEY_F1)
Event code 60 (KEY_F2)
Event code 61 (KEY_F3)
Event code 62 (KEY_F4)
Event code 63 (KEY_F5)
Event code 64 (KEY_F6)
Event code 65 (KEY_F7)
Event code 66 (KEY_F8)
Event code 67 (KEY_F9)
Event code 68 (KEY_F10)
Event code 69 (KEY_NUMLOCK)
Event code 70 (KEY_SCROLLLOCK)
Event code 71 (KEY_KP7)
Event code 72 (KEY_KP8)
Event code 73 (KEY_KP9)
Event code 74 (KEY_KPMINUS)
Event code 75 (KEY_KP4)
Event code 76 (KEY_KP5)
Event code 77 (KEY_KP6)
Event code 78 (KEY_KPPLUS)
Event code 79 (KEY_KP1)
Event code 80 (KEY_KP2)
Event code 81 (KEY_KP3)
Event code 82 (KEY_KP0)
Event code 83 (KEY_KPDOT)
Event code 85 (KEY_ZENKAKUHANKAKU)
Event code 86 (KEY_102ND)
Event code 87 (KEY_F11)
Event code 88 (KEY_F12)
Event code 89 (KEY_RO)
Event code 90 (KEY_KATAKANA)
Event code 91 (KEY_HIRAGANA)
Event code 92 (KEY_HENKAN)
Event code 93 (KEY_KATAKANAHIRAGANA)
Event code 94 (KEY_MUHENKAN)
Event code 95 (KEY_KPJPCOMMA)
Event code 96 (KEY_KPENTER)
Event code 97 (KEY_RIGHTCTRL)
Event code 98 (KEY_KPSLASH)
Event code 99 (KEY_SYSRQ)
Event code 100 (KEY_RIGHTALT)
Event code 102 (KEY_HOME)
Event code 103 (KEY_UP)
Event code 104 (KEY_PAGEUP)
Event code 105 (KEY_LEFT)
Event code 106 (KEY_RIGHT)
Event code 107 (KEY_END)
Event code 108 (KEY_DOWN)
Event code 109 (KEY_PAGEDOWN)
Event code 110 (KEY_INSERT)
Event code 111 (KEY_DELETE)
Event code 113 (KEY_MUTE)
Event code 114 (KEY_VOLUMEDOWN)
Event code 115 (KEY_VOLUMEUP)
Event code 116 (KEY_POWER)
Event code 117 (KEY_KPEQUAL)
Event code 119 (KEY_PAUSE)
Event code 121 (KEY_KPCOMMA)
Event code 122 (KEY_HANGUEL)
Event code 123 (KEY_HANJA)
Event code 124 (KEY_YEN)
Event code 125 (KEY_LEFTMETA)
Event code 126 (KEY_RIGHTMETA)
Event code 127 (KEY_COMPOSE)
Event code 128 (KEY_STOP)
Event code 129 (KEY_AGAIN)
Event code 130 (KEY_PROPS)
Event code 131 (KEY_UNDO)
Event code 132 (KEY_FRONT)
Event code 133 (KEY_COPY)
Event code 134 (KEY_OPEN)
Event code 135 (KEY_PASTE)
Event code 136 (KEY_FIND)
Event code 137 (KEY_CUT)
Event code 138 (KEY_HELP)
Event code 140 (KEY_CALC)
Event code 142 (KEY_SLEEP)
Event code 150 (KEY_WWW)
Event code 152 (KEY_SCREENLOCK)
Event code 158 (KEY_BACK)
Event code 159 (KEY_FORWARD)
Event code 161 (KEY_EJECTCD)
Event code 163 (KEY_NEXTSONG)
Event code 164 (KEY_PLAYPAUSE)
Event code 165 (KEY_PREVIOUSSONG)
Event code 166 (KEY_STOPCD)
Event code 173 (KEY_REFRESH)
Event code 176 (KEY_EDIT)
Event code 177 (KEY_SCROLLUP)
Event code 178 (KEY_SCROLLDOWN)
Event code 179 (KEY_KPLEFTPAREN)
Event code 180 (KEY_KPRIGHTPAREN)
Event code 183 (KEY_F13)
Event code 184 (KEY_F14)
Event code 185 (KEY_F15)
Event code 186 (KEY_F16)
Event code 187 (KEY_F17)
Event code 188 (KEY_F18)
Event code 189 (KEY_F19)
Event code 190 (KEY_F20)
Event code 191 (KEY_F21)
Event code 192 (KEY_F22)
Event code 193 (KEY_F23)
Event code 194 (KEY_F24)
Event code 240 (KEY_UNKNOWN)
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)
Key repeat handling:
Repeat type 20 (EV_REP)
Repeat code 0 (REP_DELAY)
Value 250
Repeat code 1 (REP_PERIOD)
Value 33
Properties:
Testing ... (interrupt to exit)
Habe eben nochmal die Tastenbelegung/Codes geprüft. Der scheint das nicht 100% in den Stick zu flashen. Zumindest habe ich nach reconnect eine andere Belegung im Stick.
Obwohl er vorher den Flashvorgang mit ok bestätigt hat...
Da muss jrie was zu schreiben.
Meiner Erfahrung nach, ist das Programm etwäs mäkelig - wenn z.B. das Format nicht passt.
Bei Dummy Einträgen habe ich #Taste probiert und auch ffffffffffff ff|Taste
Mein Beispiel im Anhang. Passend zur silbernen Technotrend FB.
Don’t have an account yet? Register yourself now and be a part of our community!