Hi Hias, On Sat, Jul 21, 2018 at 08:13:27PM +0200, Matthias Reichl wrote: > Hi Sean, > > thanks a lot, this is a really nice new feature! Thank you for testing it and finding all those issues, it has become much better from your testing. > On Fri, Jul 13, 2018 at 03:30:06PM +0100, Sean Young wrote: > > Once kernel v4.18 is released with IR BPF decoding, this can be merged > > to v4l-utils. > > > > The idea is that IR decoders can be written in C, compiled to BPF relocatable > > object file. Any global variables can overriden, so we can supports lots > > of variants of similiar protocols (just like in the lircd.conf file). > > > > The existing rc_keymap file format can't be used for variables, so I've > > converted the format to toml. An alternative would be to use the existing > > lircd.conf file format, but it's a very awkward file to parse in C and it > > contains many features which are irrelevant to us. > > > > We use libelf to load the bpf relocatable object file. > > > > After loading our example grundig keymap with bpf decoder, the output of > > ir-keytable is: > > > > Found /sys/class/rc/rc0/ (/dev/input/event8) with: > > Name: Winbond CIR > > Driver: winbond-cir, table: rc-rc6-mce > > LIRC device: /dev/lirc0 > > Attached BPF protocols: grundig > > Supported kernel protocols: lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp imon > > Enabled protocols: lirc > > bus: 25, vendor/product: 10ad:00f1, version: 0x0004 > > Repeat delay = 500 ms, repeat period = 125 ms > > > > Alternatively, you simply specify the path to the object file on the command > > line: > > > > $ ir-keytable -e header_pulse=9000,header_space=4500 -p ./pulse_distance.o > > > > Derek, please note that you can now convert the dish lircd.conf to toml > > and load the keymap; it should just work. It would be great to have your > > feedback, thank you. > > I did a few tests with one of my RC-5 remotes, this lircd.conf file > https://github.com/PiSupply/JustBoom/blob/master/LIRC/lircd.conf > and kernel 4.18-rc5 on RPi2, with the 32bit ARM kernel and > gpio-ir-recv, and on LePotato / aarch64 with meson-ir. > > lircd2toml.py did a really good job on converting it, the only > thing missing was the toggle_bit. Right, there was a bug in lirc2html.py. I've added a fix to my bpf branch: https://git.linuxtv.org/syoung/v4l-utils.git/log/?h=bpf > When testing the converted toml (with "toggle_bit = 11" added > and the obvious volume keycode fixes) I noticed a couple of issues: > > Buttons seem to be "stuck". The scancode is decoded, key_down > event is generated, but after release the key_down events repeat > indefinitely - with the built-in rc-5 decoder this works fine. > > root@upstream:/home/hias/ir-test# ir-keytable -c -w justboom.toml -t > Old keytable cleared > Wrote 12 keycode(s) to driver > Protocols changed to > Loaded BPF protocol manchester > Testing events. Please, press CTRL-C to abort. > 29.065820: lirc protocol(66): scancode = 0x141b > 29.065890: event type EV_MSC(0x04): scancode = 0x141b > 29.065890: event type EV_KEY(0x01) key_down: KEY_DOWN(0x006c) > 29.065890: event type EV_SYN(0x00). > 29.570059: event type EV_KEY(0x01) key_down: KEY_DOWN(0x006c) > 29.570059: event type EV_SYN(0x00). > 29.710062: event type EV_KEY(0x01) key_down: KEY_DOWN(0x006c) > 29.710062: event type EV_SYN(0x00). > 29.850057: event type EV_KEY(0x01) key_down: KEY_DOWN(0x006c) > 29.850057: event type EV_SYN(0x00). > 29.990057: event type EV_KEY(0x01) key_down: KEY_DOWN(0x006c) > 29.990057: event type EV_SYN(0x00). > 30.130055: event type EV_KEY(0x01) key_down: KEY_DOWN(0x006c) > 30.130055: event type EV_SYN(0x00). > ... Thanks, I had not seen this yet either. There is a fix here: https://www.mail-archive.com/linux-media@xxxxxxxxxxxxxxx/msg133813.html > Even scancodes, eg KEY_UP / scancode 0x141a, aren't decoded at > all, only odd scancodes work. My guess is the manchester decoder > could have a problem when the last bit is zero and the message > doesn't end with a pulse, but a (rather long) timeout. Yep, yet another bug! I'v added a fix here: https://git.linuxtv.org/syoung/v4l-utils.git/log/?h=bpf > (Re-)loading a bpf decoder only works 8 times. The 9th attempt > gives an error message. > > # for i in `seq 1 9` ; do ir-keytable -p manchester ; done > Protocols changed to > Loaded BPF protocol manchester > Protocols changed to > Loaded BPF protocol manchester > Protocols changed to > Loaded BPF protocol manchester > Protocols changed to > Loaded BPF protocol manchester > Protocols changed to > Loaded BPF protocol manchester > Protocols changed to > Loaded BPF protocol manchester > Protocols changed to > Loaded BPF protocol manchester > Protocols changed to > Loaded BPF protocol manchester > Protocols changed to > failed to create a map: 1 Operation not permitted > Loaded BPF protocol manchester There was a bug where bpf programs were leaked on detach. Unfortunately the fix had not made it to the branch when you were testing. https://www.mail-archive.com/linux-media@xxxxxxxxxxxxxxx/msg133273.html Sean