Skip to contentSkip to conversation

Add BPF decoders to ir-keytable

RFC PATCH Superseded Sean Young 2 participants 6 messages Jun 2, 2018 – Jun 5, 2018

Subsystems (4)

v1 of 4 Superseded Latest is v4 →

lore
Share & tools
lore

Sean Young

author
#0 lore raw

cover Add BPF decoders to ir-keytable

This is not ready for merging yet, however while I finish this work I would like some feedback and ideas.

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 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

Steps to complete this work:
- Write more IR decoders
- More rc_keymaps
- More testing
- lircd.conf to toml converter script (python/perl?)

Sean Young (4):
keytable: add toml keymap reader
keytable: convert keymaps to new toml format
keytable: add support for BPF based decoders
keytable: add bpf protocols

 Makefile.am                                   |    4 +-
 configure.ac                                  |   16 +
 include/linux/bpf.h                           | 2644 +++++++++++++++++
 utils/keytable/Makefile.am                    |   13 +-
 utils/keytable/bpf.c                          |  515 ++++
 utils/keytable/bpf.h                          |  110 +
 utils/keytable/bpf_load.c                     |  457 +++
 utils/keytable/bpf_load.h                     |   41 +
 utils/keytable/bpf_protocols/Makefile.am      |   14 +
 utils/keytable/bpf_protocols/bpf_helpers.h    |  302 ++
 utils/keytable/bpf_protocols/grundig.c        |  113 +
 utils/keytable/gen_keytables.pl               |   33 +-
 utils/keytable/ir-keytable.1.in               |    4 +-
 utils/keytable/keytable.c                     |  370 ++-
 utils/keytable/rc_keymaps/adstech_dvb_t_pci   |   45 -
 .../rc_keymaps/adstech_dvb_t_pci.toml         |   47 +
 utils/keytable/rc_keymaps/af9005              |   37 -
 utils/keytable/rc_keymaps/af9005.toml         |   39 +
 utils/keytable/rc_keymaps/alink_dtu_m         |   19 -
 utils/keytable/rc_keymaps/alink_dtu_m.toml    |   23 +
 .../keytable/rc_keymaps/allwinner_ba10_tv_box |   15 -
 .../rc_keymaps/allwinner_i12_a20_tv_box       |   28 -
 utils/keytable/rc_keymaps/anysee              |   45 -
 utils/keytable/rc_keymaps/anysee.toml         |   49 +
 utils/keytable/rc_keymaps/apac_viewcomp       |   32 -
 utils/keytable/rc_keymaps/apac_viewcomp.toml  |   34 +
 utils/keytable/rc_keymaps/astrometa_t2hybrid  |   22 -
 .../rc_keymaps/astrometa_t2hybrid.toml        |   26 +
 utils/keytable/rc_keymaps/asus_pc39           |   40 -
 utils/keytable/rc_keymaps/asus_pc39.toml      |   44 +
 utils/keytable/rc_keymaps/asus_ps3_100        |   42 -
 utils/keytable/rc_keymaps/asus_ps3_100.toml   |   46 +
 .../keytable/rc_keymaps/ati_tv_wonder_hd_600  |   25 -
 .../rc_keymaps/ati_tv_wonder_hd_600.toml      |   27 +
 utils/keytable/rc_keymaps/ati_x10             |   49 -
 utils/keytable/rc_keymaps/ati_x10.toml        |   51 +
 utils/keytable/rc_keymaps/avermedia           |   37 -
 utils/keytable/rc_keymaps/avermedia.toml      |   39 +
 utils/keytable/rc_keymaps/avermedia_a16d      |   35 -
 utils/keytable/rc_keymaps/avermedia_a16d.toml |   37 +
 utils/keytable/rc_keymaps/avermedia_cardbus   |   55 -
 .../rc_keymaps/avermedia_cardbus.toml         |   57 +
 utils/keytable/rc_keymaps/avermedia_dvbt      |   35 -
 utils/keytable/rc_keymaps/avermedia_dvbt.toml |   37 +
 utils/keytable/rc_keymaps/avermedia_m135a     |   81 -
 .../keytable/rc_keymaps/avermedia_m135a.toml  |   85 +
 .../keytable/rc_keymaps/avermedia_m733a_rm_k6 |   45 -
 .../rc_keymaps/avermedia_m733a_rm_k6.toml     |   49 +
 utils/keytable/rc_keymaps/avermedia_rm_ks     |   28 -
 .../keytable/rc_keymaps/avermedia_rm_ks.toml  |   32 +
 utils/keytable/rc_keymaps/avertv_303          |   37 -
 utils/keytable/rc_keymaps/avertv_303.toml     |   39 +
 utils/keytable/rc_keymaps/az6027              |    3 -
 utils/keytable/rc_keymaps/az6027.toml         |    5 +
 utils/keytable/rc_keymaps/azurewave_ad_tu700  |   54 -
 .../rc_keymaps/azurewave_ad_tu700.toml        |   58 +
 utils/keytable/rc_keymaps/behold              |   35 -
 utils/keytable/rc_keymaps/behold.toml         |   39 +
 utils/keytable/rc_keymaps/behold_columbus     |   29 -
 .../keytable/rc_keymaps/behold_columbus.toml  |   31 +
 utils/keytable/rc_keymaps/budget_ci_old       |   46 -
 utils/keytable/rc_keymaps/budget_ci_old.toml  |   48 +
 utils/keytable/rc_keymaps/cec                 |   98 -
 utils/keytable/rc_keymaps/cec.toml            |  100 +
 utils/keytable/rc_keymaps/cinergy             |   37 -
 utils/keytable/rc_keymaps/cinergy.toml        |   39 +
 utils/keytable/rc_keymaps/cinergy_1400        |   38 -
 utils/keytable/rc_keymaps/cinergy_1400.toml   |   40 +
 utils/keytable/rc_keymaps/cinergyt2           |   38 -
 utils/keytable/rc_keymaps/cinergyt2.toml      |   40 +
 utils/keytable/rc_keymaps/d680_dmb            |   36 -
 utils/keytable/rc_keymaps/d680_dmb.toml       |   38 +
 utils/keytable/rc_keymaps/delock_61959        |   33 -
 utils/keytable/rc_keymaps/delock_61959.toml   |   37 +
 utils/keytable/rc_keymaps/dib0700_nec         |   71 -
 utils/keytable/rc_keymaps/dib0700_nec.toml    |   75 +
 utils/keytable/rc_keymaps/dib0700_rc5         |  181 --
 utils/keytable/rc_keymaps/dib0700_rc5.toml    |  185 ++
 utils/keytable/rc_keymaps/dibusb              |  112 -
 utils/keytable/rc_keymaps/dibusb.toml         |  114 +
 utils/keytable/rc_keymaps/digitalnow_tinytwin |   50 -
 .../rc_keymaps/digitalnow_tinytwin.toml       |   54 +
 utils/keytable/rc_keymaps/digittrade          |   29 -
 utils/keytable/rc_keymaps/digittrade.toml     |   33 +
 utils/keytable/rc_keymaps/digitv              |   56 -
 utils/keytable/rc_keymaps/digitv.toml         |   58 +
 utils/keytable/rc_keymaps/dm1105_nec          |   32 -
 utils/keytable/rc_keymaps/dm1105_nec.toml     |   34 +
 utils/keytable/rc_keymaps/dntv_live_dvb_t     |   33 -
 .../keytable/rc_keymaps/dntv_live_dvb_t.toml  |   35 +
 utils/keytable/rc_keymaps/dntv_live_dvbt_pro  |   54 -
 .../rc_keymaps/dntv_live_dvbt_pro.toml        |   56 +
 utils/keytable/rc_keymaps/dtt200u             |   19 -
 utils/keytable/rc_keymaps/dtt200u.toml        |   23 +
 utils/keytable/rc_keymaps/dvbsky              |   33 -
 utils/keytable/rc_keymaps/dvbsky.toml         |   37 +
 utils/keytable/rc_keymaps/dvico_mce           |   46 -
 utils/keytable/rc_keymaps/dvico_mce.toml      |   50 +
 utils/keytable/rc_keymaps/dvico_portable      |   37 -
 utils/keytable/rc_keymaps/dvico_portable.toml |   41 +
 utils/keytable/rc_keymaps/em_terratec         |   29 -
 utils/keytable/rc_keymaps/em_terratec.toml    |   31 +
 utils/keytable/rc_keymaps/encore_enltv        |   53 -
 utils/keytable/rc_keymaps/encore_enltv.toml   |   55 +
 utils/keytable/rc_keymaps/encore_enltv2       |   40 -
 utils/keytable/rc_keymaps/encore_enltv2.toml  |   42 +
 utils/keytable/rc_keymaps/encore_enltv_fm53   |   30 -
 .../rc_keymaps/encore_enltv_fm53.toml         |   32 +
 utils/keytable/rc_keymaps/evga_indtube        |   17 -
 utils/keytable/rc_keymaps/evga_indtube.toml   |   19 +
 utils/keytable/rc_keymaps/eztv                |   45 -
 utils/keytable/rc_keymaps/eztv.toml           |   47 +
 utils/keytable/rc_keymaps/flydvb              |   33 -
 utils/keytable/rc_keymaps/flydvb.toml         |   35 +
 utils/keytable/rc_keymaps/flyvideo            |   28 -
 utils/keytable/rc_keymaps/flyvideo.toml       |   30 +
 utils/keytable/rc_keymaps/fusionhdtv_mce      |   46 -
 utils/keytable/rc_keymaps/fusionhdtv_mce.toml |   48 +
 utils/keytable/rc_keymaps/gadmei_rm008z       |   32 -
 utils/keytable/rc_keymaps/gadmei_rm008z.toml  |   34 +
 utils/keytable/rc_keymaps/geekbox             |   13 -
 utils/keytable/rc_keymaps/geekbox.toml        |   17 +
 utils/keytable/rc_keymaps/genius_tvgo_a11mce  |   33 -
 .../rc_keymaps/genius_tvgo_a11mce.toml        |   35 +
 utils/keytable/rc_keymaps/gotview7135         |   35 -
 utils/keytable/rc_keymaps/gotview7135.toml    |   37 +
 utils/keytable/rc_keymaps/haupp               |   46 -
 utils/keytable/rc_keymaps/haupp.toml          |   48 +
 utils/keytable/rc_keymaps/hauppauge           |  173 --
 utils/keytable/rc_keymaps/hauppauge.toml      |  177 ++
 utils/keytable/rc_keymaps/hisi_poplar         |   30 -
 utils/keytable/rc_keymaps/hisi_poplar.toml    |   34 +
 utils/keytable/rc_keymaps/hisi_tv_demo        |   42 -
 utils/keytable/rc_keymaps/hisi_tv_demo.toml   |   46 +
 utils/keytable/rc_keymaps/imon_mce            |   78 -
 utils/keytable/rc_keymaps/imon_mce.toml       |   82 +
 utils/keytable/rc_keymaps/imon_pad            |   91 -
 utils/keytable/rc_keymaps/imon_pad.toml       |   93 +
 utils/keytable/rc_keymaps/imon_rsc            |   44 -
 utils/keytable/rc_keymaps/imon_rsc.toml       |   48 +
 utils/keytable/rc_keymaps/iodata_bctv7e       |   37 -
 utils/keytable/rc_keymaps/iodata_bctv7e.toml  |   39 +
 utils/keytable/rc_keymaps/it913x_v1           |   53 -
 utils/keytable/rc_keymaps/it913x_v1.toml      |   57 +
 utils/keytable/rc_keymaps/it913x_v2           |   48 -
 utils/keytable/rc_keymaps/it913x_v2.toml      |   52 +
 utils/keytable/rc_keymaps/kaiomy              |   33 -
 utils/keytable/rc_keymaps/kaiomy.toml         |   35 +
 utils/keytable/rc_keymaps/kworld_315u         |   33 -
 utils/keytable/rc_keymaps/kworld_315u.toml    |   37 +
 utils/keytable/rc_keymaps/kworld_pc150u       |   45 -
 utils/keytable/rc_keymaps/kworld_pc150u.toml  |   47 +
 .../keytable/rc_keymaps/kworld_plus_tv_analog |   32 -
 .../rc_keymaps/kworld_plus_tv_analog.toml     |   34 +
 utils/keytable/rc_keymaps/leadtek_y04g0051    |   51 -
 .../keytable/rc_keymaps/leadtek_y04g0051.toml |   55 +
 utils/keytable/rc_keymaps/lme2510             |   67 -
 utils/keytable/rc_keymaps/lme2510.toml        |   71 +
 utils/keytable/rc_keymaps/manli               |   32 -
 utils/keytable/rc_keymaps/manli.toml          |   34 +
 utils/keytable/rc_keymaps/medion_x10          |   54 -
 utils/keytable/rc_keymaps/medion_x10.toml     |   56 +
 .../keytable/rc_keymaps/medion_x10_digitainer |   50 -
 .../rc_keymaps/medion_x10_digitainer.toml     |   52 +
 utils/keytable/rc_keymaps/medion_x10_or2x     |   46 -
 .../keytable/rc_keymaps/medion_x10_or2x.toml  |   48 +
 utils/keytable/rc_keymaps/megasky             |   17 -
 utils/keytable/rc_keymaps/megasky.toml        |   19 +
 utils/keytable/rc_keymaps/msi_digivox_ii      |   19 -
 utils/keytable/rc_keymaps/msi_digivox_ii.toml |   23 +
 utils/keytable/rc_keymaps/msi_digivox_iii     |   33 -
 .../keytable/rc_keymaps/msi_digivox_iii.toml  |   37 +
 utils/keytable/rc_keymaps/msi_tvanywhere      |   25 -
 utils/keytable/rc_keymaps/msi_tvanywhere.toml |   27 +
 utils/keytable/rc_keymaps/msi_tvanywhere_plus |   37 -
 .../rc_keymaps/msi_tvanywhere_plus.toml       |   39 +
 utils/keytable/rc_keymaps/nebula              |   56 -
 utils/keytable/rc_keymaps/nebula.toml         |   60 +
 .../rc_keymaps/nec_terratec_cinergy_xs        |   86 -
 .../rc_keymaps/nec_terratec_cinergy_xs.toml   |   90 +
 utils/keytable/rc_keymaps/norwood             |   36 -
 utils/keytable/rc_keymaps/norwood.toml        |   38 +
 utils/keytable/rc_keymaps/npgtech             |   36 -
 utils/keytable/rc_keymaps/npgtech.toml        |   38 +
 utils/keytable/rc_keymaps/opera1              |   27 -
 utils/keytable/rc_keymaps/opera1.toml         |   29 +
 utils/keytable/rc_keymaps/pctv_sedna          |   33 -
 utils/keytable/rc_keymaps/pctv_sedna.toml     |   35 +
 utils/keytable/rc_keymaps/pinnacle310e        |   54 -
 utils/keytable/rc_keymaps/pinnacle310e.toml   |   56 +
 utils/keytable/rc_keymaps/pinnacle_color      |   43 -
 utils/keytable/rc_keymaps/pinnacle_color.toml |   45 +
 utils/keytable/rc_keymaps/pinnacle_grey       |   42 -
 utils/keytable/rc_keymaps/pinnacle_grey.toml  |   44 +
 utils/keytable/rc_keymaps/pinnacle_pctv_hd    |   27 -
 .../keytable/rc_keymaps/pinnacle_pctv_hd.toml |   31 +
 utils/keytable/rc_keymaps/pixelview           |   33 -
 utils/keytable/rc_keymaps/pixelview.toml      |   35 +
 utils/keytable/rc_keymaps/pixelview_002t      |   27 -
 utils/keytable/rc_keymaps/pixelview_002t.toml |   31 +
 utils/keytable/rc_keymaps/pixelview_mk12      |   32 -
 utils/keytable/rc_keymaps/pixelview_mk12.toml |   36 +
 utils/keytable/rc_keymaps/pixelview_new       |   32 -
 utils/keytable/rc_keymaps/pixelview_new.toml  |   34 +
 .../keytable/rc_keymaps/powercolor_real_angel |   36 -
 .../rc_keymaps/powercolor_real_angel.toml     |   38 +
 utils/keytable/rc_keymaps/proteus_2309        |   25 -
 utils/keytable/rc_keymaps/proteus_2309.toml   |   27 +
 utils/keytable/rc_keymaps/purpletv            |   36 -
 utils/keytable/rc_keymaps/purpletv.toml       |   38 +
 utils/keytable/rc_keymaps/pv951               |   32 -
 utils/keytable/rc_keymaps/pv951.toml          |   34 +
 utils/keytable/rc_keymaps/rc6_mce             |   65 -
 utils/keytable/rc_keymaps/rc6_mce.toml        |   69 +
 .../rc_keymaps/real_audio_220_32_keys         |   29 -
 .../rc_keymaps/real_audio_220_32_keys.toml    |   31 +
 utils/keytable/rc_keymaps/reddo               |   24 -
 utils/keytable/rc_keymaps/reddo.toml          |   28 +
 utils/keytable/rc_keymaps/snapstream_firefly  |   49 -
 .../rc_keymaps/snapstream_firefly.toml        |   51 +
 utils/keytable/rc_keymaps/streamzap           |   36 -
 utils/keytable/rc_keymaps/streamzap.toml      |   38 +
 utils/keytable/rc_keymaps/su3000              |   36 -
 utils/keytable/rc_keymaps/su3000.toml         |   40 +
 utils/keytable/rc_keymaps/tango               |   51 -
 utils/keytable/rc_keymaps/tango.toml          |   55 +
 utils/keytable/rc_keymaps/tbs_nec             |   35 -
 utils/keytable/rc_keymaps/tbs_nec.toml        |   37 +
 utils/keytable/rc_keymaps/technisat_ts35      |   34 -
 utils/keytable/rc_keymaps/technisat_ts35.toml |   36 +
 utils/keytable/rc_keymaps/technisat_usb2      |   34 -
 utils/keytable/rc_keymaps/technisat_usb2.toml |   38 +
 .../rc_keymaps/terratec_cinergy_c_pci         |   49 -
 .../rc_keymaps/terratec_cinergy_c_pci.toml    |   51 +
 .../rc_keymaps/terratec_cinergy_s2_hd         |   49 -
 .../rc_keymaps/terratec_cinergy_s2_hd.toml    |   51 +
 utils/keytable/rc_keymaps/terratec_cinergy_xs |   48 -
 .../rc_keymaps/terratec_cinergy_xs.toml       |   50 +
 utils/keytable/rc_keymaps/terratec_slim       |   29 -
 utils/keytable/rc_keymaps/terratec_slim.toml  |   33 +
 utils/keytable/rc_keymaps/terratec_slim_2     |   19 -
 .../keytable/rc_keymaps/terratec_slim_2.toml  |   23 +
 utils/keytable/rc_keymaps/tevii_nec           |   48 -
 utils/keytable/rc_keymaps/tevii_nec.toml      |   50 +
 utils/keytable/rc_keymaps/tivo                |   46 -
 utils/keytable/rc_keymaps/tivo.toml           |   48 +
 utils/keytable/rc_keymaps/total_media_in_hand |   36 -
 .../rc_keymaps/total_media_in_hand.toml       |   40 +
 .../rc_keymaps/total_media_in_hand_02         |   36 -
 .../rc_keymaps/total_media_in_hand_02.toml    |   40 +
 utils/keytable/rc_keymaps/trekstor            |   29 -
 utils/keytable/rc_keymaps/trekstor.toml       |   33 +
 utils/keytable/rc_keymaps/tt_1500             |   40 -
 utils/keytable/rc_keymaps/tt_1500.toml        |   44 +
 utils/keytable/rc_keymaps/tvwalkertwin        |   18 -
 utils/keytable/rc_keymaps/tvwalkertwin.toml   |   20 +
 utils/keytable/rc_keymaps/twinhan_dtv_cab_ci  |   54 -
 .../rc_keymaps/twinhan_dtv_cab_ci.toml        |   56 +
 utils/keytable/rc_keymaps/twinhan_vp1027_dvbs |   54 -
 .../rc_keymaps/twinhan_vp1027_dvbs.toml       |   58 +
 utils/keytable/rc_keymaps/videomate_k100      |   52 -
 utils/keytable/rc_keymaps/videomate_k100.toml |   54 +
 utils/keytable/rc_keymaps/videomate_s350      |   45 -
 utils/keytable/rc_keymaps/videomate_s350.toml |   47 +
 utils/keytable/rc_keymaps/videomate_tv_pvr    |   38 -
 .../keytable/rc_keymaps/videomate_tv_pvr.toml |   40 +
 utils/keytable/rc_keymaps/vp702x              |    3 -
 utils/keytable/rc_keymaps/vp702x.toml         |    5 +
 utils/keytable/rc_keymaps/winfast             |   57 -
 utils/keytable/rc_keymaps/winfast.toml        |   59 +
 .../keytable/rc_keymaps/winfast_usbii_deluxe  |   29 -
 .../rc_keymaps/winfast_usbii_deluxe.toml      |   31 +
 utils/keytable/rc_keymaps/wobo_i5             |    9 -
 utils/keytable/rc_keymaps/zx_irdec            |   41 -
 utils/keytable/rc_keymaps/zx_irdec.toml       |   45 +
 utils/keytable/rc_keymaps_bpf/RP75_LCD.toml   |   45 +
 .../allwinner_ba10_tv_box                     |   15 -
 .../allwinner_ba10_tv_box.toml                |   17 +
 .../allwinner_i12_a20_tv_box                  |   28 -
 .../allwinner_i12_a20_tv_box.toml             |   30 +
 utils/keytable/rc_keymaps_userspace/wobo_i5   |    9 -
 .../rc_keymaps_userspace/wobo_i5.toml         |   11 +
 utils/keytable/rc_maps.cfg                    |  268 +-
 utils/keytable/toml.c                         | 1903 ++++++++++++
 utils/keytable/toml.h                         |  110 +
 v4l-utils.spec.in                             |    2 +-
 286 files changed, 12689 insertions(+), 5725 deletions(-)
 create mode 100644 include/linux/bpf.h
 create mode 100644 utils/keytable/bpf.c
 create mode 100644 utils/keytable/bpf.h
 create mode 100644 utils/keytable/bpf_load.c
 create mode 100644 utils/keytable/bpf_load.h
 create mode 100644 utils/keytable/bpf_protocols/Makefile.am
 create mode 100644 utils/keytable/bpf_protocols/bpf_helpers.h
 create mode 100644 utils/keytable/bpf_protocols/grundig.c
 delete mode 100644 utils/keytable/rc_keymaps/adstech_dvb_t_pci
 create mode 100644 utils/keytable/rc_keymaps/adstech_dvb_t_pci.toml
 delete mode 100644 utils/keytable/rc_keymaps/af9005
 create mode 100644 utils/keytable/rc_keymaps/af9005.toml
 delete mode 100644 utils/keytable/rc_keymaps/alink_dtu_m
 create mode 100644 utils/keytable/rc_keymaps/alink_dtu_m.toml
 delete mode 100644 utils/keytable/rc_keymaps/allwinner_ba10_tv_box
 delete mode 100644 utils/keytable/rc_keymaps/allwinner_i12_a20_tv_box
 delete mode 100644 utils/keytable/rc_keymaps/anysee
 create mode 100644 utils/keytable/rc_keymaps/anysee.toml
 delete mode 100644 utils/keytable/rc_keymaps/apac_viewcomp
 create mode 100644 utils/keytable/rc_keymaps/apac_viewcomp.toml
 delete mode 100644 utils/keytable/rc_keymaps/astrometa_t2hybrid
 create mode 100644 utils/keytable/rc_keymaps/astrometa_t2hybrid.toml
 delete mode 100644 utils/keytable/rc_keymaps/asus_pc39
 create mode 100644 utils/keytable/rc_keymaps/asus_pc39.toml
 delete mode 100644 utils/keytable/rc_keymaps/asus_ps3_100
 create mode 100644 utils/keytable/rc_keymaps/asus_ps3_100.toml
 delete mode 100644 utils/keytable/rc_keymaps/ati_tv_wonder_hd_600
 create mode 100644 utils/keytable/rc_keymaps/ati_tv_wonder_hd_600.toml
 delete mode 100644 utils/keytable/rc_keymaps/ati_x10
 create mode 100644 utils/keytable/rc_keymaps/ati_x10.toml
 delete mode 100644 utils/keytable/rc_keymaps/avermedia
 create mode 100644 utils/keytable/rc_keymaps/avermedia.toml
 delete mode 100644 utils/keytable/rc_keymaps/avermedia_a16d
 create mode 100644 utils/keytable/rc_keymaps/avermedia_a16d.toml
 delete mode 100644 utils/keytable/rc_keymaps/avermedia_cardbus
 create mode 100644 utils/keytable/rc_keymaps/avermedia_cardbus.toml
 delete mode 100644 utils/keytable/rc_keymaps/avermedia_dvbt
 create mode 100644 utils/keytable/rc_keymaps/avermedia_dvbt.toml
 delete mode 100644 utils/keytable/rc_keymaps/avermedia_m135a
 create mode 100644 utils/keytable/rc_keymaps/avermedia_m135a.toml
 delete mode 100644 utils/keytable/rc_keymaps/avermedia_m733a_rm_k6
 create mode 100644 utils/keytable/rc_keymaps/avermedia_m733a_rm_k6.toml
 delete mode 100644 utils/keytable/rc_keymaps/avermedia_rm_ks
 create mode 100644 utils/keytable/rc_keymaps/avermedia_rm_ks.toml
 delete mode 100644 utils/keytable/rc_keymaps/avertv_303
 create mode 100644 utils/keytable/rc_keymaps/avertv_303.toml
 delete mode 100644 utils/keytable/rc_keymaps/az6027
 create mode 100644 utils/keytable/rc_keymaps/az6027.toml
 delete mode 100644 utils/keytable/rc_keymaps/azurewave_ad_tu700
 create mode 100644 utils/keytable/rc_keymaps/azurewave_ad_tu700.toml
 delete mode 100644 utils/keytable/rc_keymaps/behold
 create mode 100644 utils/keytable/rc_keymaps/behold.toml
 delete mode 100644 utils/keytable/rc_keymaps/behold_columbus
 create mode 100644 utils/keytable/rc_keymaps/behold_columbus.toml
 delete mode 100644 utils/keytable/rc_keymaps/budget_ci_old
 create mode 100644 utils/keytable/rc_keymaps/budget_ci_old.toml
 delete mode 100644 utils/keytable/rc_keymaps/cec
 create mode 100644 utils/keytable/rc_keymaps/cec.toml
 delete mode 100644 utils/keytable/rc_keymaps/cinergy
 create mode 100644 utils/keytable/rc_keymaps/cinergy.toml
 delete mode 100644 utils/keytable/rc_keymaps/cinergy_1400
 create mode 100644 utils/keytable/rc_keymaps/cinergy_1400.toml
 delete mode 100644 utils/keytable/rc_keymaps/cinergyt2
 create mode 100644 utils/keytable/rc_keymaps/cinergyt2.toml
 delete mode 100644 utils/keytable/rc_keymaps/d680_dmb
 create mode 100644 utils/keytable/rc_keymaps/d680_dmb.toml
 delete mode 100644 utils/keytable/rc_keymaps/delock_61959
 create mode 100644 utils/keytable/rc_keymaps/delock_61959.toml
 delete mode 100644 utils/keytable/rc_keymaps/dib0700_nec
 create mode 100644 utils/keytable/rc_keymaps/dib0700_nec.toml
 delete mode 100644 utils/keytable/rc_keymaps/dib0700_rc5
 create mode 100644 utils/keytable/rc_keymaps/dib0700_rc5.toml
 delete mode 100644 utils/keytable/rc_keymaps/dibusb
 create mode 100644 utils/keytable/rc_keymaps/dibusb.toml
 delete mode 100644 utils/keytable/rc_keymaps/digitalnow_tinytwin
 create mode 100644 utils/keytable/rc_keymaps/digitalnow_tinytwin.toml
 delete mode 100644 utils/keytable/rc_keymaps/digittrade
 create mode 100644 utils/keytable/rc_keymaps/digittrade.toml
 delete mode 100644 utils/keytable/rc_keymaps/digitv
 create mode 100644 utils/keytable/rc_keymaps/digitv.toml
 delete mode 100644 utils/keytable/rc_keymaps/dm1105_nec
 create mode 100644 utils/keytable/rc_keymaps/dm1105_nec.toml
 delete mode 100644 utils/keytable/rc_keymaps/dntv_live_dvb_t
 create mode 100644 utils/keytable/rc_keymaps/dntv_live_dvb_t.toml
 delete mode 100644 utils/keytable/rc_keymaps/dntv_live_dvbt_pro
 create mode 100644 utils/keytable/rc_keymaps/dntv_live_dvbt_pro.toml
 delete mode 100644 utils/keytable/rc_keymaps/dtt200u
 create mode 100644 utils/keytable/rc_keymaps/dtt200u.toml
 delete mode 100644 utils/keytable/rc_keymaps/dvbsky
 create mode 100644 utils/keytable/rc_keymaps/dvbsky.toml
 delete mode 100644 utils/keytable/rc_keymaps/dvico_mce
 create mode 100644 utils/keytable/rc_keymaps/dvico_mce.toml
 delete mode 100644 utils/keytable/rc_keymaps/dvico_portable
 create mode 100644 utils/keytable/rc_keymaps/dvico_portable.toml
 delete mode 100644 utils/keytable/rc_keymaps/em_terratec
 create mode 100644 utils/keytable/rc_keymaps/em_terratec.toml
 delete mode 100644 utils/keytable/rc_keymaps/encore_enltv
 create mode 100644 utils/keytable/rc_keymaps/encore_enltv.toml
 delete mode 100644 utils/keytable/rc_keymaps/encore_enltv2
 create mode 100644 utils/keytable/rc_keymaps/encore_enltv2.toml
 delete mode 100644 utils/keytable/rc_keymaps/encore_enltv_fm53
 create mode 100644 utils/keytable/rc_keymaps/encore_enltv_fm53.toml
 delete mode 100644 utils/keytable/rc_keymaps/evga_indtube
 create mode 100644 utils/keytable/rc_keymaps/evga_indtube.toml
 delete mode 100644 utils/keytable/rc_keymaps/eztv
 create mode 100644 utils/keytable/rc_keymaps/eztv.toml
 delete mode 100644 utils/keytable/rc_keymaps/flydvb
 create mode 100644 utils/keytable/rc_keymaps/flydvb.toml
 delete mode 100644 utils/keytable/rc_keymaps/flyvideo
 create mode 100644 utils/keytable/rc_keymaps/flyvideo.toml
 delete mode 100644 utils/keytable/rc_keymaps/fusionhdtv_mce
 create mode 100644 utils/keytable/rc_keymaps/fusionhdtv_mce.toml
 delete mode 100644 utils/keytable/rc_keymaps/gadmei_rm008z
 create mode 100644 utils/keytable/rc_keymaps/gadmei_rm008z.toml
 delete mode 100644 utils/keytable/rc_keymaps/geekbox
 create mode 100644 utils/keytable/rc_keymaps/geekbox.toml
 delete mode 100644 utils/keytable/rc_keymaps/genius_tvgo_a11mce
 create mode 100644 utils/keytable/rc_keymaps/genius_tvgo_a11mce.toml
 delete mode 100644 utils/keytable/rc_keymaps/gotview7135
 create mode 100644 utils/keytable/rc_keymaps/gotview7135.toml
 delete mode 100644 utils/keytable/rc_keymaps/haupp
 create mode 100644 utils/keytable/rc_keymaps/haupp.toml
 delete mode 100644 utils/keytable/rc_keymaps/hauppauge
 create mode 100644 utils/keytable/rc_keymaps/hauppauge.toml
 delete mode 100644 utils/keytable/rc_keymaps/hisi_poplar
 create mode 100644 utils/keytable/rc_keymaps/hisi_poplar.toml
 delete mode 100644 utils/keytable/rc_keymaps/hisi_tv_demo
 create mode 100644 utils/keytable/rc_keymaps/hisi_tv_demo.toml
 delete mode 100644 utils/keytable/rc_keymaps/imon_mce
 create mode 100644 utils/keytable/rc_keymaps/imon_mce.toml
 delete mode 100644 utils/keytable/rc_keymaps/imon_pad
 create mode 100644 utils/keytable/rc_keymaps/imon_pad.toml
 delete mode 100644 utils/keytable/rc_keymaps/imon_rsc
 create mode 100644 utils/keytable/rc_keymaps/imon_rsc.toml
 delete mode 100644 utils/keytable/rc_keymaps/iodata_bctv7e
 create mode 100644 utils/keytable/rc_keymaps/iodata_bctv7e.toml
 delete mode 100644 utils/keytable/rc_keymaps/it913x_v1
 create mode 100644 utils/keytable/rc_keymaps/it913x_v1.toml
 delete mode 100644 utils/keytable/rc_keymaps/it913x_v2
 create mode 100644 utils/keytable/rc_keymaps/it913x_v2.toml
 delete mode 100644 utils/keytable/rc_keymaps/kaiomy
 create mode 100644 utils/keytable/rc_keymaps/kaiomy.toml
 delete mode 100644 utils/keytable/rc_keymaps/kworld_315u
 create mode 100644 utils/keytable/rc_keymaps/kworld_315u.toml
 delete mode 100644 utils/keytable/rc_keymaps/kworld_pc150u
 create mode 100644 utils/keytable/rc_keymaps/kworld_pc150u.toml
 delete mode 100644 utils/keytable/rc_keymaps/kworld_plus_tv_analog
 create mode 100644 utils/keytable/rc_keymaps/kworld_plus_tv_analog.toml
 delete mode 100644 utils/keytable/rc_keymaps/leadtek_y04g0051
 create mode 100644 utils/keytable/rc_keymaps/leadtek_y04g0051.toml
 delete mode 100644 utils/keytable/rc_keymaps/lme2510
 create mode 100644 utils/keytable/rc_keymaps/lme2510.toml
 delete mode 100644 utils/keytable/rc_keymaps/manli
 create mode 100644 utils/keytable/rc_keymaps/manli.toml
 delete mode 100644 utils/keytable/rc_keymaps/medion_x10
 create mode 100644 utils/keytable/rc_keymaps/medion_x10.toml
 delete mode 100644 utils/keytable/rc_keymaps/medion_x10_digitainer
 create mode 100644 utils/keytable/rc_keymaps/medion_x10_digitainer.toml
 delete mode 100644 utils/keytable/rc_keymaps/medion_x10_or2x
 create mode 100644 utils/keytable/rc_keymaps/medion_x10_or2x.toml
 delete mode 100644 utils/keytable/rc_keymaps/megasky
 create mode 100644 utils/keytable/rc_keymaps/megasky.toml
 delete mode 100644 utils/keytable/rc_keymaps/msi_digivox_ii
 create mode 100644 utils/keytable/rc_keymaps/msi_digivox_ii.toml
 delete mode 100644 utils/keytable/rc_keymaps/msi_digivox_iii
 create mode 100644 utils/keytable/rc_keymaps/msi_digivox_iii.toml
 delete mode 100644 utils/keytable/rc_keymaps/msi_tvanywhere
 create mode 100644 utils/keytable/rc_keymaps/msi_tvanywhere.toml
 delete mode 100644 utils/keytable/rc_keymaps/msi_tvanywhere_plus
 create mode 100644 utils/keytable/rc_keymaps/msi_tvanywhere_plus.toml
 delete mode 100644 utils/keytable/rc_keymaps/nebula
 create mode 100644 utils/keytable/rc_keymaps/nebula.toml
 delete mode 100644 utils/keytable/rc_keymaps/nec_terratec_cinergy_xs
 create mode 100644 utils/keytable/rc_keymaps/nec_terratec_cinergy_xs.toml
 delete mode 100644 utils/keytable/rc_keymaps/norwood
 create mode 100644 utils/keytable/rc_keymaps/norwood.toml
 delete mode 100644 utils/keytable/rc_keymaps/npgtech
 create mode 100644 utils/keytable/rc_keymaps/npgtech.toml
 delete mode 100644 utils/keytable/rc_keymaps/opera1
 create mode 100644 utils/keytable/rc_keymaps/opera1.toml
 delete mode 100644 utils/keytable/rc_keymaps/pctv_sedna
 create mode 100644 utils/keytable/rc_keymaps/pctv_sedna.toml
 delete mode 100644 utils/keytable/rc_keymaps/pinnacle310e
 create mode 100644 utils/keytable/rc_keymaps/pinnacle310e.toml
 delete mode 100644 utils/keytable/rc_keymaps/pinnacle_color
 create mode 100644 utils/keytable/rc_keymaps/pinnacle_color.toml
 delete mode 100644 utils/keytable/rc_keymaps/pinnacle_grey
 create mode 100644 utils/keytable/rc_keymaps/pinnacle_grey.toml
 delete mode 100644 utils/keytable/rc_keymaps/pinnacle_pctv_hd
 create mode 100644 utils/keytable/rc_keymaps/pinnacle_pctv_hd.toml
 delete mode 100644 utils/keytable/rc_keymaps/pixelview
 create mode 100644 utils/keytable/rc_keymaps/pixelview.toml
 delete mode 100644 utils/keytable/rc_keymaps/pixelview_002t
 create mode 100644 utils/keytable/rc_keymaps/pixelview_002t.toml
 delete mode 100644 utils/keytable/rc_keymaps/pixelview_mk12
 create mode 100644 utils/keytable/rc_keymaps/pixelview_mk12.toml
 delete mode 100644 utils/keytable/rc_keymaps/pixelview_new
 create mode 100644 utils/keytable/rc_keymaps/pixelview_new.toml
 delete mode 100644 utils/keytable/rc_keymaps/powercolor_real_angel
 create mode 100644 utils/keytable/rc_keymaps/powercolor_real_angel.toml
 delete mode 100644 utils/keytable/rc_keymaps/proteus_2309
 create mode 100644 utils/keytable/rc_keymaps/proteus_2309.toml
 delete mode 100644 utils/keytable/rc_keymaps/purpletv
 create mode 100644 utils/keytable/rc_keymaps/purpletv.toml
 delete mode 100644 utils/keytable/rc_keymaps/pv951
 create mode 100644 utils/keytable/rc_keymaps/pv951.toml
 delete mode 100644 utils/keytable/rc_keymaps/rc6_mce
 create mode 100644 utils/keytable/rc_keymaps/rc6_mce.toml
 delete mode 100644 utils/keytable/rc_keymaps/real_audio_220_32_keys
 create mode 100644 utils/keytable/rc_keymaps/real_audio_220_32_keys.toml
 delete mode 100644 utils/keytable/rc_keymaps/reddo
 create mode 100644 utils/keytable/rc_keymaps/reddo.toml
 delete mode 100644 utils/keytable/rc_keymaps/snapstream_firefly
 create mode 100644 utils/keytable/rc_keymaps/snapstream_firefly.toml
 delete mode 100644 utils/keytable/rc_keymaps/streamzap
 create mode 100644 utils/keytable/rc_keymaps/streamzap.toml
 delete mode 100644 utils/keytable/rc_keymaps/su3000
 create mode 100644 utils/keytable/rc_keymaps/su3000.toml
 delete mode 100644 utils/keytable/rc_keymaps/tango
 create mode 100644 utils/keytable/rc_keymaps/tango.toml
 delete mode 100644 utils/keytable/rc_keymaps/tbs_nec
 create mode 100644 utils/keytable/rc_keymaps/tbs_nec.toml
 delete mode 100644 utils/keytable/rc_keymaps/technisat_ts35
 create mode 100644 utils/keytable/rc_keymaps/technisat_ts35.toml
 delete mode 100644 utils/keytable/rc_keymaps/technisat_usb2
 create mode 100644 utils/keytable/rc_keymaps/technisat_usb2.toml
 delete mode 100644 utils/keytable/rc_keymaps/terratec_cinergy_c_pci
 create mode 100644 utils/keytable/rc_keymaps/terratec_cinergy_c_pci.toml
 delete mode 100644 utils/keytable/rc_keymaps/terratec_cinergy_s2_hd
 create mode 100644 utils/keytable/rc_keymaps/terratec_cinergy_s2_hd.toml
 delete mode 100644 utils/keytable/rc_keymaps/terratec_cinergy_xs
 create mode 100644 utils/keytable/rc_keymaps/terratec_cinergy_xs.toml
 delete mode 100644 utils/keytable/rc_keymaps/terratec_slim
 create mode 100644 utils/keytable/rc_keymaps/terratec_slim.toml
 delete mode 100644 utils/keytable/rc_keymaps/terratec_slim_2
 create mode 100644 utils/keytable/rc_keymaps/terratec_slim_2.toml
 delete mode 100644 utils/keytable/rc_keymaps/tevii_nec
 create mode 100644 utils/keytable/rc_keymaps/tevii_nec.toml
 delete mode 100644 utils/keytable/rc_keymaps/tivo
 create mode 100644 utils/keytable/rc_keymaps/tivo.toml
 delete mode 100644 utils/keytable/rc_keymaps/total_media_in_hand
 create mode 100644 utils/keytable/rc_keymaps/total_media_in_hand.toml
 delete mode 100644 utils/keytable/rc_keymaps/total_media_in_hand_02
 create mode 100644 utils/keytable/rc_keymaps/total_media_in_hand_02.toml
 delete mode 100644 utils/keytable/rc_keymaps/trekstor
 create mode 100644 utils/keytable/rc_keymaps/trekstor.toml
 delete mode 100644 utils/keytable/rc_keymaps/tt_1500
 create mode 100644 utils/keytable/rc_keymaps/tt_1500.toml
 delete mode 100644 utils/keytable/rc_keymaps/tvwalkertwin
 create mode 100644 utils/keytable/rc_keymaps/tvwalkertwin.toml
 delete mode 100644 utils/keytable/rc_keymaps/twinhan_dtv_cab_ci
 create mode 100644 utils/keytable/rc_keymaps/twinhan_dtv_cab_ci.toml
 delete mode 100644 utils/keytable/rc_keymaps/twinhan_vp1027_dvbs
 create mode 100644 utils/keytable/rc_keymaps/twinhan_vp1027_dvbs.toml
 delete mode 100644 utils/keytable/rc_keymaps/videomate_k100
 create mode 100644 utils/keytable/rc_keymaps/videomate_k100.toml
 delete mode 100644 utils/keytable/rc_keymaps/videomate_s350
 create mode 100644 utils/keytable/rc_keymaps/videomate_s350.toml
 delete mode 100644 utils/keytable/rc_keymaps/videomate_tv_pvr
 create mode 100644 utils/keytable/rc_keymaps/videomate_tv_pvr.toml
 delete mode 100644 utils/keytable/rc_keymaps/vp702x
 create mode 100644 utils/keytable/rc_keymaps/vp702x.toml
 delete mode 100644 utils/keytable/rc_keymaps/winfast
 create mode 100644 utils/keytable/rc_keymaps/winfast.toml
 delete mode 100644 utils/keytable/rc_keymaps/winfast_usbii_deluxe
 create mode 100644 utils/keytable/rc_keymaps/winfast_usbii_deluxe.toml
 delete mode 100644 utils/keytable/rc_keymaps/wobo_i5
 delete mode 100644 utils/keytable/rc_keymaps/zx_irdec
 create mode 100644 utils/keytable/rc_keymaps/zx_irdec.toml
 create mode 100644 utils/keytable/rc_keymaps_bpf/RP75_LCD.toml
 delete mode 100644 utils/keytable/rc_keymaps_userspace/allwinner_ba10_tv_box
 create mode 100644 utils/keytable/rc_keymaps_userspace/allwinner_ba10_tv_box.toml
 delete mode 100644 utils/keytable/rc_keymaps_userspace/allwinner_i12_a20_tv_box
 create mode 100644 utils/keytable/rc_keymaps_userspace/allwinner_i12_a20_tv_box.toml
 delete mode 100644 utils/keytable/rc_keymaps_userspace/wobo_i5
 create mode 100644 utils/keytable/rc_keymaps_userspace/wobo_i5.toml
 create mode 100644 utils/keytable/toml.c
 create mode 100644 utils/keytable/toml.h
Signature · 1 line
2.17.0
author
#1 lore raw

RFC PATCH 1/4 keytable: add toml keymap reader

We would like to add BPF based IR decoding in a later commit. BPF based IR decoding will have per-protocol parameters, so we need a more flexible format.

At some point in the future it would nice to change rc-core keycode mapping to protocol + 64 bit scancode -> keycode, rather the existing 32 bit scancode -> keycode. In order to make this possible, we want the scancodes to be specified for their protocol, in case multiple protocols are selected.

---
 utils/keytable/Makefile.am |    2 +-
 utils/keytable/keytable.c  |  174 +++-
 utils/keytable/toml.c      | 1903 ++++++++++++++++++++++++++++++++++++
 utils/keytable/toml.h      |  110 +++
 4 files changed, 2185 insertions(+), 4 deletions(-)
 create mode 100644 utils/keytable/toml.c
 create mode 100644 utils/keytable/toml.h
utils/keytable/Makefile.am +1 -1
index 904aa96b..0bd7045f 100644
@@ -4,7 +4,7 @@ sysconf_DATA = rc_maps.cfg
 keytablesystem_DATA = $(srcdir)/rc_keymaps/*
 udevrules_DATA = 70-infrared.rules
 
-ir_keytable_SOURCES = keytable.c parse.h ir-encode.c ir-encode.h
+ir_keytable_SOURCES = keytable.c parse.h ir-encode.c ir-encode.h toml.c toml.h
 ir_keytable_LDADD = @LIBINTL@
 ir_keytable_LDFLAGS = $(ARGP_LIBS)
 
utils/keytable/keytable.c +171 -3

205 lines not on this page · raw message

utils/keytable/toml.c new file +1903 -0

1,903 lines not on this page · raw message

utils/keytable/toml.h new file +110 -0

110 lines not on this page · raw message

Signature · 1 line
2.17.0
author
#2 lore raw

RFC PATCH 3/4 keytable: add support for BPF based decoders

In reply to Sean Young

We use a modified version of samples/bpf/bpf_load.c from linux kernel tree to load elf based BPF decoders, clear them on '-c' and show the program ids when no commands are given.

Any global int variables can be overrided from toml. They are patched to be immediate loads.

---
 Makefile.am                |    4 +-
 configure.ac               |   11 +
 include/linux/bpf.h        | 2644 ++++++++++++++++++++++++++++++++++++
 utils/keytable/Makefile.am |    7 +-
 utils/keytable/bpf.c       |  515 +++++++
 utils/keytable/bpf.h       |  110 ++
 utils/keytable/bpf_load.c  |  457 +++++++
 utils/keytable/bpf_load.h  |   41 +
 utils/keytable/keytable.c  |  208 ++-
 v4l-utils.spec.in          |    2 +-
 10 files changed, 3989 insertions(+), 10 deletions(-)
 create mode 100644 include/linux/bpf.h
 create mode 100644 utils/keytable/bpf.c
 create mode 100644 utils/keytable/bpf.h
 create mode 100644 utils/keytable/bpf_load.c
 create mode 100644 utils/keytable/bpf_load.h
Makefile.am +3 -1
index fc8f2f34..38e17bab 100644
@@ -25,7 +25,8 @@ sync-with-kernel:
 	      ! -f $(KERNEL_DIR)/usr/include/linux/ivtv.h -o \
 	      ! -f $(KERNEL_DIR)/usr/include/linux/dvb/frontend.h -o \
 	      ! -f $(KERNEL_DIR)/usr/include/linux/dvb/dmx.h -o \
-	      ! -f $(KERNEL_DIR)/usr/include/linux/lirc.h ]; then \
+	      ! -f $(KERNEL_DIR)/usr/include/linux/lirc.h -o \
+	      ! -f $(KERNEL_DIR)/usr/include/linux/bpf.h ]; then \
 	  echo "Error you must set KERNEL_DIR to point to an extracted kernel source dir"; \
 	  echo "and run 'make headers_install' in \$$KERNEL_DIR."; \
 	  exit 1; \
@@ -43,6 +44,7 @@ sync-with-kernel:
 	cp $(top_srcdir)/include/linux/dvb/frontend.h $(top_srcdir)/lib/include/libdvbv5/dvb-frontend.h
 	cp -a $(KERNEL_DIR)/usr/include/linux/dvb/dmx.h $(top_srcdir)/include/linux/dvb
 	cp -a $(KERNEL_DIR)/usr/include/linux/lirc.h $(top_srcdir)/include/linux
+	cp -a $(KERNEL_DIR)/usr/include/linux/bpf.h $(top_srcdir)/include/linux
 	cp -a $(KERNEL_DIR)/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c $(top_srcdir)/utils/common
 	cp -a $(KERNEL_DIR)/drivers/media/common/v4l2-tpg/v4l2-tpg-colors.c $(top_srcdir)/utils/common
 	cp -a $(KERNEL_DIR)/include/media/tpg/v4l2-tpg* $(top_srcdir)/utils/common
configure.ac +11 -0
index dc1e9cbf..1f48913c 100644
@@ -167,6 +167,16 @@ AC_SUBST([X11_CFLAGS])
 AC_SUBST([X11_LIBS])
 AM_CONDITIONAL([HAVE_X11], [test x$x11_pkgconfig = xyes])
 
+PKG_CHECK_MODULES([LIBELF], [libelf], [libelf_pkgconfig=yes], [libelf_pkgconfig=no])
+AC_SUBST([LIBELF_CFLAGS])
+AC_SUBST([LIBELF_LIBS])
+AM_CONDITIONAL([HAVE_LIBELF], [test x$libelf_pkgconfig = xyes])
+if test "x$libelf_pkgconfig" = "xyes"; then
+   AC_DEFINE([HAVE_LIBELF], [1], [libelf library is present])
+else
+   AC_MSG_WARN(libelf library not available)
+fi
+
 AS_IF([test "x$x11_pkgconfig" = xyes],
       [PKG_CHECK_MODULES(GL, [gl], [gl_pkgconfig=yes], [gl_pkgconfig=no])], [gl_pkgconfig=no])
 AC_SUBST([GL_CFLAGS])
@@ -497,6 +507,7 @@ compile time options summary
     X11                        : $x11_pkgconfig
     GL                         : $gl_pkgconfig
     glu                        : $glu_pkgconfig
+    libelf		       : $libelf_pkgconfig
     libjpeg                    : $have_jpeg
     libudev                    : $have_libudev
     pthread                    : $have_pthread
include/linux/bpf.h new file +2644 -0

2,644 lines not on this page · raw message

utils/keytable/Makefile.am +6 -1
index 0bd7045f..df2b2231 100644
@@ -5,8 +5,13 @@ keytablesystem_DATA = $(srcdir)/rc_keymaps/*
 udevrules_DATA = 70-infrared.rules
 
 ir_keytable_SOURCES = keytable.c parse.h ir-encode.c ir-encode.h toml.c toml.h
+
+if HAVE_LIBELF
+ir_keytable_SOURCES += bpf.c bpf_load.c bpf.h bpf_load.h
+endif
+
 ir_keytable_LDADD = @LIBINTL@
-ir_keytable_LDFLAGS = $(ARGP_LIBS)
+ir_keytable_LDFLAGS = $(ARGP_LIBS) $(LIBELF_LIBS)
 
 EXTRA_DIST = 70-infrared.rules rc_keymaps rc_keymaps_userspace gen_keytables.pl ir-keytable.1 rc_maps.cfg
 
utils/keytable/bpf.c new file +515 -0

303 lines not on this page · raw message

utils/keytable/bpf.h new file +110 -0

110 lines not on this page · raw message

utils/keytable/bpf_load.c new file +457 -0

457 lines not on this page · raw message

utils/keytable/bpf_load.h new file +41 -0

41 lines not on this page · raw message

utils/keytable/keytable.c +201 -7

208 lines not on this page · raw message

v4l-utils.spec.in +1 -1
index bdbb27ba..f7be08b3 100644

Lines of this file are not shown. View the raw message.

The rest of this diff is not shown. View the raw message.

Signature · 1 line
2.17.0

Part of the diff is not shown here. View the raw message.

author
#3 lore raw

RFC PATCH 4/4 keytable: add bpf protocols

In reply to Sean Young

Add grundig decoder and infrastructure for build bpf protocols.

---
 configure.ac                                |   5 +
 utils/keytable/Makefile.am                  |   4 +
 utils/keytable/bpf_protocols/Makefile.am    |  14 +
 utils/keytable/bpf_protocols/bpf_helpers.h  | 302 ++++++++++++++++++++
 utils/keytable/bpf_protocols/grundig.c      | 113 ++++++++
 utils/keytable/rc_keymaps_bpf/RP75_LCD.toml |  45 +++
 v4l-utils.spec.in                           |   2 +-
 7 files changed, 484 insertions(+), 1 deletion(-)
 create mode 100644 utils/keytable/bpf_protocols/Makefile.am
 create mode 100644 utils/keytable/bpf_protocols/bpf_helpers.h
 create mode 100644 utils/keytable/bpf_protocols/grundig.c
 create mode 100644 utils/keytable/rc_keymaps_bpf/RP75_LCD.toml
configure.ac +5 -0
index 1f48913c..8872a483 100644
@@ -23,6 +23,7 @@ AC_CONFIG_FILES([Makefile
 	utils/libmedia_dev/Makefile
 	utils/dvb/Makefile
 	utils/keytable/Makefile
+	utils/keytable/bpf_protocols/Makefile
 	utils/ir-ctl/Makefile
 	utils/cx18-ctl/Makefile
 	utils/ivtv-ctl/Makefile
@@ -172,11 +173,15 @@ AC_SUBST([LIBELF_CFLAGS])
 AC_SUBST([LIBELF_LIBS])
 AM_CONDITIONAL([HAVE_LIBELF], [test x$libelf_pkgconfig = xyes])
 if test "x$libelf_pkgconfig" = "xyes"; then
+   AC_CHECK_PROG([CLANG], clang, clang)
+   AC_CHECK_PROG([LLC], llc, llc)
    AC_DEFINE([HAVE_LIBELF], [1], [libelf library is present])
 else
    AC_MSG_WARN(libelf library not available)
 fi
 
+AM_CONDITIONAL([BPF_PROTOCOLS], [test x$CLANG = xclang -a x$LLC = xllc])
+
 AS_IF([test "x$x11_pkgconfig" = xyes],
       [PKG_CHECK_MODULES(GL, [gl], [gl_pkgconfig=yes], [gl_pkgconfig=no])], [gl_pkgconfig=no])
 AC_SUBST([GL_CFLAGS])
utils/keytable/Makefile.am +4 -0
index df2b2231..90e4c8c8 100644
@@ -13,6 +13,10 @@ endif
 ir_keytable_LDADD = @LIBINTL@
 ir_keytable_LDFLAGS = $(ARGP_LIBS) $(LIBELF_LIBS)
 
+if BPF_PROTOCOLS
+SUBDIRS = bpf_protocols
+endif
+
 EXTRA_DIST = 70-infrared.rules rc_keymaps rc_keymaps_userspace gen_keytables.pl ir-keytable.1 rc_maps.cfg
 
 # custom target
utils/keytable/bpf_protocols/Makefile.am new file +14 -0
new file mode 100644
index 00000000..aa748900
@@ -0,0 +1,14 @@
+
+NOSTDINC=-nostdinc -isystem $(shell $(CLANG) -print-file-name=include)
+
+%.o: %.c
+	$(CLANG) -I../../../include $(NOSTDINC) -I/usr/include -target bpf -O2 -emit-llvm -c $< -o - | $(LLC) -march=bpf -filetype=obj -o $@
+
+PROTOCOLS = grundig.o
+
+all: $(PROTOCOLS)
+
+# custom target
+install-data-local:
+	$(install_sh) -d "$(DESTDIR)$(keytableuserdir)/protocols"
+	$(install_sh) $(PROTOCOLS) "$(DESTDIR)$(keytableuserdir)/protocols"
utils/keytable/bpf_protocols/bpf_helpers.h new file +302 -0

302 lines not on this page · raw message

utils/keytable/bpf_protocols/grundig.c new file +113 -0

113 lines not on this page · raw message

utils/keytable/rc_keymaps_bpf/RP75_LCD.toml new file +45 -0

45 lines not on this page · raw message

v4l-utils.spec.in +1 -1
index f7be08b3..bae31bad 100644
@@ -10,7 +10,7 @@ Source0:        http://linuxtv.org/downloads/v4l-utils/v4l-utils-%{version}.tar.
 Source1:        qv4l2.desktop
 Source2:        qv4l2.svg
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-BuildRequires:  qt4-devel libsysfs-devel kernel-headers desktop-file-utils elfutils-libelf-devel
+BuildRequires:  qt4-devel libsysfs-devel kernel-headers desktop-file-utils elfutils-libelf-devel clang llvm
 # For /etc/udev/rules.d ownership
 Requires:       udev
 Requires:       libv4l = %{version}-%{release}
Signature · 1 line
2.17.0
author
#4 lore raw
In reply to Sean Young
Quoted 34 lines · Sean Young

This is not ready for merging yet, however while I finish this work I would like some feedback and ideas.

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 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

Steps to complete this work:
- Write more IR decoders
- More rc_keymaps
- More testing
- lircd.conf to toml converter script (python/perl?)

Quoted 3 lines

Sean Young (4):
keytable: add toml keymap reader
keytable: convert keymaps to new toml format

This commit has not made it to the list yet, I guess because it is so large.

Here it is:

https://git.linuxtv.org/syoung/v4l-utils.git/commit/?id=8e0522c73d832f086958e6cd7774a3e37bbab6bf

Quoted 571 lines

keytable: add support for BPF based decoders
keytable: add bpf protocols

 Makefile.am                                   |    4 +-
 configure.ac                                  |   16 +
 include/linux/bpf.h                           | 2644 +++++++++++++++++
 utils/keytable/Makefile.am                    |   13 +-
 utils/keytable/bpf.c                          |  515 ++++
 utils/keytable/bpf.h                          |  110 +
 utils/keytable/bpf_load.c                     |  457 +++
 utils/keytable/bpf_load.h                     |   41 +
 utils/keytable/bpf_protocols/Makefile.am      |   14 +
 utils/keytable/bpf_protocols/bpf_helpers.h    |  302 ++
 utils/keytable/bpf_protocols/grundig.c        |  113 +
 utils/keytable/gen_keytables.pl               |   33 +-
 utils/keytable/ir-keytable.1.in               |    4 +-
 utils/keytable/keytable.c                     |  370 ++-
 utils/keytable/rc_keymaps/adstech_dvb_t_pci   |   45 -
 .../rc_keymaps/adstech_dvb_t_pci.toml         |   47 +
 utils/keytable/rc_keymaps/af9005              |   37 -
 utils/keytable/rc_keymaps/af9005.toml         |   39 +
 utils/keytable/rc_keymaps/alink_dtu_m         |   19 -
 utils/keytable/rc_keymaps/alink_dtu_m.toml    |   23 +
 .../keytable/rc_keymaps/allwinner_ba10_tv_box |   15 -
 .../rc_keymaps/allwinner_i12_a20_tv_box       |   28 -
 utils/keytable/rc_keymaps/anysee              |   45 -
 utils/keytable/rc_keymaps/anysee.toml         |   49 +
 utils/keytable/rc_keymaps/apac_viewcomp       |   32 -
 utils/keytable/rc_keymaps/apac_viewcomp.toml  |   34 +
 utils/keytable/rc_keymaps/astrometa_t2hybrid  |   22 -
 .../rc_keymaps/astrometa_t2hybrid.toml        |   26 +
 utils/keytable/rc_keymaps/asus_pc39           |   40 -
 utils/keytable/rc_keymaps/asus_pc39.toml      |   44 +
 utils/keytable/rc_keymaps/asus_ps3_100        |   42 -
 utils/keytable/rc_keymaps/asus_ps3_100.toml   |   46 +
 .../keytable/rc_keymaps/ati_tv_wonder_hd_600  |   25 -
 .../rc_keymaps/ati_tv_wonder_hd_600.toml      |   27 +
 utils/keytable/rc_keymaps/ati_x10             |   49 -
 utils/keytable/rc_keymaps/ati_x10.toml        |   51 +
 utils/keytable/rc_keymaps/avermedia           |   37 -
 utils/keytable/rc_keymaps/avermedia.toml      |   39 +
 utils/keytable/rc_keymaps/avermedia_a16d      |   35 -
 utils/keytable/rc_keymaps/avermedia_a16d.toml |   37 +
 utils/keytable/rc_keymaps/avermedia_cardbus   |   55 -
 .../rc_keymaps/avermedia_cardbus.toml         |   57 +
 utils/keytable/rc_keymaps/avermedia_dvbt      |   35 -
 utils/keytable/rc_keymaps/avermedia_dvbt.toml |   37 +
 utils/keytable/rc_keymaps/avermedia_m135a     |   81 -
 .../keytable/rc_keymaps/avermedia_m135a.toml  |   85 +
 .../keytable/rc_keymaps/avermedia_m733a_rm_k6 |   45 -
 .../rc_keymaps/avermedia_m733a_rm_k6.toml     |   49 +
 utils/keytable/rc_keymaps/avermedia_rm_ks     |   28 -
 .../keytable/rc_keymaps/avermedia_rm_ks.toml  |   32 +
 utils/keytable/rc_keymaps/avertv_303          |   37 -
 utils/keytable/rc_keymaps/avertv_303.toml     |   39 +
 utils/keytable/rc_keymaps/az6027              |    3 -
 utils/keytable/rc_keymaps/az6027.toml         |    5 +
 utils/keytable/rc_keymaps/azurewave_ad_tu700  |   54 -
 .../rc_keymaps/azurewave_ad_tu700.toml        |   58 +
 utils/keytable/rc_keymaps/behold              |   35 -
 utils/keytable/rc_keymaps/behold.toml         |   39 +
 utils/keytable/rc_keymaps/behold_columbus     |   29 -
 .../keytable/rc_keymaps/behold_columbus.toml  |   31 +
 utils/keytable/rc_keymaps/budget_ci_old       |   46 -
 utils/keytable/rc_keymaps/budget_ci_old.toml  |   48 +
 utils/keytable/rc_keymaps/cec                 |   98 -
 utils/keytable/rc_keymaps/cec.toml            |  100 +
 utils/keytable/rc_keymaps/cinergy             |   37 -
 utils/keytable/rc_keymaps/cinergy.toml        |   39 +
 utils/keytable/rc_keymaps/cinergy_1400        |   38 -
 utils/keytable/rc_keymaps/cinergy_1400.toml   |   40 +
 utils/keytable/rc_keymaps/cinergyt2           |   38 -
 utils/keytable/rc_keymaps/cinergyt2.toml      |   40 +
 utils/keytable/rc_keymaps/d680_dmb            |   36 -
 utils/keytable/rc_keymaps/d680_dmb.toml       |   38 +
 utils/keytable/rc_keymaps/delock_61959        |   33 -
 utils/keytable/rc_keymaps/delock_61959.toml   |   37 +
 utils/keytable/rc_keymaps/dib0700_nec         |   71 -
 utils/keytable/rc_keymaps/dib0700_nec.toml    |   75 +
 utils/keytable/rc_keymaps/dib0700_rc5         |  181 --
 utils/keytable/rc_keymaps/dib0700_rc5.toml    |  185 ++
 utils/keytable/rc_keymaps/dibusb              |  112 -
 utils/keytable/rc_keymaps/dibusb.toml         |  114 +
 utils/keytable/rc_keymaps/digitalnow_tinytwin |   50 -
 .../rc_keymaps/digitalnow_tinytwin.toml       |   54 +
 utils/keytable/rc_keymaps/digittrade          |   29 -
 utils/keytable/rc_keymaps/digittrade.toml     |   33 +
 utils/keytable/rc_keymaps/digitv              |   56 -
 utils/keytable/rc_keymaps/digitv.toml         |   58 +
 utils/keytable/rc_keymaps/dm1105_nec          |   32 -
 utils/keytable/rc_keymaps/dm1105_nec.toml     |   34 +
 utils/keytable/rc_keymaps/dntv_live_dvb_t     |   33 -
 .../keytable/rc_keymaps/dntv_live_dvb_t.toml  |   35 +
 utils/keytable/rc_keymaps/dntv_live_dvbt_pro  |   54 -
 .../rc_keymaps/dntv_live_dvbt_pro.toml        |   56 +
 utils/keytable/rc_keymaps/dtt200u             |   19 -
 utils/keytable/rc_keymaps/dtt200u.toml        |   23 +
 utils/keytable/rc_keymaps/dvbsky              |   33 -
 utils/keytable/rc_keymaps/dvbsky.toml         |   37 +
 utils/keytable/rc_keymaps/dvico_mce           |   46 -
 utils/keytable/rc_keymaps/dvico_mce.toml      |   50 +
 utils/keytable/rc_keymaps/dvico_portable      |   37 -
 utils/keytable/rc_keymaps/dvico_portable.toml |   41 +
 utils/keytable/rc_keymaps/em_terratec         |   29 -
 utils/keytable/rc_keymaps/em_terratec.toml    |   31 +
 utils/keytable/rc_keymaps/encore_enltv        |   53 -
 utils/keytable/rc_keymaps/encore_enltv.toml   |   55 +
 utils/keytable/rc_keymaps/encore_enltv2       |   40 -
 utils/keytable/rc_keymaps/encore_enltv2.toml  |   42 +
 utils/keytable/rc_keymaps/encore_enltv_fm53   |   30 -
 .../rc_keymaps/encore_enltv_fm53.toml         |   32 +
 utils/keytable/rc_keymaps/evga_indtube        |   17 -
 utils/keytable/rc_keymaps/evga_indtube.toml   |   19 +
 utils/keytable/rc_keymaps/eztv                |   45 -
 utils/keytable/rc_keymaps/eztv.toml           |   47 +
 utils/keytable/rc_keymaps/flydvb              |   33 -
 utils/keytable/rc_keymaps/flydvb.toml         |   35 +
 utils/keytable/rc_keymaps/flyvideo            |   28 -
 utils/keytable/rc_keymaps/flyvideo.toml       |   30 +
 utils/keytable/rc_keymaps/fusionhdtv_mce      |   46 -
 utils/keytable/rc_keymaps/fusionhdtv_mce.toml |   48 +
 utils/keytable/rc_keymaps/gadmei_rm008z       |   32 -
 utils/keytable/rc_keymaps/gadmei_rm008z.toml  |   34 +
 utils/keytable/rc_keymaps/geekbox             |   13 -
 utils/keytable/rc_keymaps/geekbox.toml        |   17 +
 utils/keytable/rc_keymaps/genius_tvgo_a11mce  |   33 -
 .../rc_keymaps/genius_tvgo_a11mce.toml        |   35 +
 utils/keytable/rc_keymaps/gotview7135         |   35 -
 utils/keytable/rc_keymaps/gotview7135.toml    |   37 +
 utils/keytable/rc_keymaps/haupp               |   46 -
 utils/keytable/rc_keymaps/haupp.toml          |   48 +
 utils/keytable/rc_keymaps/hauppauge           |  173 --
 utils/keytable/rc_keymaps/hauppauge.toml      |  177 ++
 utils/keytable/rc_keymaps/hisi_poplar         |   30 -
 utils/keytable/rc_keymaps/hisi_poplar.toml    |   34 +
 utils/keytable/rc_keymaps/hisi_tv_demo        |   42 -
 utils/keytable/rc_keymaps/hisi_tv_demo.toml   |   46 +
 utils/keytable/rc_keymaps/imon_mce            |   78 -
 utils/keytable/rc_keymaps/imon_mce.toml       |   82 +
 utils/keytable/rc_keymaps/imon_pad            |   91 -
 utils/keytable/rc_keymaps/imon_pad.toml       |   93 +
 utils/keytable/rc_keymaps/imon_rsc            |   44 -
 utils/keytable/rc_keymaps/imon_rsc.toml       |   48 +
 utils/keytable/rc_keymaps/iodata_bctv7e       |   37 -
 utils/keytable/rc_keymaps/iodata_bctv7e.toml  |   39 +
 utils/keytable/rc_keymaps/it913x_v1           |   53 -
 utils/keytable/rc_keymaps/it913x_v1.toml      |   57 +
 utils/keytable/rc_keymaps/it913x_v2           |   48 -
 utils/keytable/rc_keymaps/it913x_v2.toml      |   52 +
 utils/keytable/rc_keymaps/kaiomy              |   33 -
 utils/keytable/rc_keymaps/kaiomy.toml         |   35 +
 utils/keytable/rc_keymaps/kworld_315u         |   33 -
 utils/keytable/rc_keymaps/kworld_315u.toml    |   37 +
 utils/keytable/rc_keymaps/kworld_pc150u       |   45 -
 utils/keytable/rc_keymaps/kworld_pc150u.toml  |   47 +
 .../keytable/rc_keymaps/kworld_plus_tv_analog |   32 -
 .../rc_keymaps/kworld_plus_tv_analog.toml     |   34 +
 utils/keytable/rc_keymaps/leadtek_y04g0051    |   51 -
 .../keytable/rc_keymaps/leadtek_y04g0051.toml |   55 +
 utils/keytable/rc_keymaps/lme2510             |   67 -
 utils/keytable/rc_keymaps/lme2510.toml        |   71 +
 utils/keytable/rc_keymaps/manli               |   32 -
 utils/keytable/rc_keymaps/manli.toml          |   34 +
 utils/keytable/rc_keymaps/medion_x10          |   54 -
 utils/keytable/rc_keymaps/medion_x10.toml     |   56 +
 .../keytable/rc_keymaps/medion_x10_digitainer |   50 -
 .../rc_keymaps/medion_x10_digitainer.toml     |   52 +
 utils/keytable/rc_keymaps/medion_x10_or2x     |   46 -
 .../keytable/rc_keymaps/medion_x10_or2x.toml  |   48 +
 utils/keytable/rc_keymaps/megasky             |   17 -
 utils/keytable/rc_keymaps/megasky.toml        |   19 +
 utils/keytable/rc_keymaps/msi_digivox_ii      |   19 -
 utils/keytable/rc_keymaps/msi_digivox_ii.toml |   23 +
 utils/keytable/rc_keymaps/msi_digivox_iii     |   33 -
 .../keytable/rc_keymaps/msi_digivox_iii.toml  |   37 +
 utils/keytable/rc_keymaps/msi_tvanywhere      |   25 -
 utils/keytable/rc_keymaps/msi_tvanywhere.toml |   27 +
 utils/keytable/rc_keymaps/msi_tvanywhere_plus |   37 -
 .../rc_keymaps/msi_tvanywhere_plus.toml       |   39 +
 utils/keytable/rc_keymaps/nebula              |   56 -
 utils/keytable/rc_keymaps/nebula.toml         |   60 +
 .../rc_keymaps/nec_terratec_cinergy_xs        |   86 -
 .../rc_keymaps/nec_terratec_cinergy_xs.toml   |   90 +
 utils/keytable/rc_keymaps/norwood             |   36 -
 utils/keytable/rc_keymaps/norwood.toml        |   38 +
 utils/keytable/rc_keymaps/npgtech             |   36 -
 utils/keytable/rc_keymaps/npgtech.toml        |   38 +
 utils/keytable/rc_keymaps/opera1              |   27 -
 utils/keytable/rc_keymaps/opera1.toml         |   29 +
 utils/keytable/rc_keymaps/pctv_sedna          |   33 -
 utils/keytable/rc_keymaps/pctv_sedna.toml     |   35 +
 utils/keytable/rc_keymaps/pinnacle310e        |   54 -
 utils/keytable/rc_keymaps/pinnacle310e.toml   |   56 +
 utils/keytable/rc_keymaps/pinnacle_color      |   43 -
 utils/keytable/rc_keymaps/pinnacle_color.toml |   45 +
 utils/keytable/rc_keymaps/pinnacle_grey       |   42 -
 utils/keytable/rc_keymaps/pinnacle_grey.toml  |   44 +
 utils/keytable/rc_keymaps/pinnacle_pctv_hd    |   27 -
 .../keytable/rc_keymaps/pinnacle_pctv_hd.toml |   31 +
 utils/keytable/rc_keymaps/pixelview           |   33 -
 utils/keytable/rc_keymaps/pixelview.toml      |   35 +
 utils/keytable/rc_keymaps/pixelview_002t      |   27 -
 utils/keytable/rc_keymaps/pixelview_002t.toml |   31 +
 utils/keytable/rc_keymaps/pixelview_mk12      |   32 -
 utils/keytable/rc_keymaps/pixelview_mk12.toml |   36 +
 utils/keytable/rc_keymaps/pixelview_new       |   32 -
 utils/keytable/rc_keymaps/pixelview_new.toml  |   34 +
 .../keytable/rc_keymaps/powercolor_real_angel |   36 -
 .../rc_keymaps/powercolor_real_angel.toml     |   38 +
 utils/keytable/rc_keymaps/proteus_2309        |   25 -
 utils/keytable/rc_keymaps/proteus_2309.toml   |   27 +
 utils/keytable/rc_keymaps/purpletv            |   36 -
 utils/keytable/rc_keymaps/purpletv.toml       |   38 +
 utils/keytable/rc_keymaps/pv951               |   32 -
 utils/keytable/rc_keymaps/pv951.toml          |   34 +
 utils/keytable/rc_keymaps/rc6_mce             |   65 -
 utils/keytable/rc_keymaps/rc6_mce.toml        |   69 +
 .../rc_keymaps/real_audio_220_32_keys         |   29 -
 .../rc_keymaps/real_audio_220_32_keys.toml    |   31 +
 utils/keytable/rc_keymaps/reddo               |   24 -
 utils/keytable/rc_keymaps/reddo.toml          |   28 +
 utils/keytable/rc_keymaps/snapstream_firefly  |   49 -
 .../rc_keymaps/snapstream_firefly.toml        |   51 +
 utils/keytable/rc_keymaps/streamzap           |   36 -
 utils/keytable/rc_keymaps/streamzap.toml      |   38 +
 utils/keytable/rc_keymaps/su3000              |   36 -
 utils/keytable/rc_keymaps/su3000.toml         |   40 +
 utils/keytable/rc_keymaps/tango               |   51 -
 utils/keytable/rc_keymaps/tango.toml          |   55 +
 utils/keytable/rc_keymaps/tbs_nec             |   35 -
 utils/keytable/rc_keymaps/tbs_nec.toml        |   37 +
 utils/keytable/rc_keymaps/technisat_ts35      |   34 -
 utils/keytable/rc_keymaps/technisat_ts35.toml |   36 +
 utils/keytable/rc_keymaps/technisat_usb2      |   34 -
 utils/keytable/rc_keymaps/technisat_usb2.toml |   38 +
 .../rc_keymaps/terratec_cinergy_c_pci         |   49 -
 .../rc_keymaps/terratec_cinergy_c_pci.toml    |   51 +
 .../rc_keymaps/terratec_cinergy_s2_hd         |   49 -
 .../rc_keymaps/terratec_cinergy_s2_hd.toml    |   51 +
 utils/keytable/rc_keymaps/terratec_cinergy_xs |   48 -
 .../rc_keymaps/terratec_cinergy_xs.toml       |   50 +
 utils/keytable/rc_keymaps/terratec_slim       |   29 -
 utils/keytable/rc_keymaps/terratec_slim.toml  |   33 +
 utils/keytable/rc_keymaps/terratec_slim_2     |   19 -
 .../keytable/rc_keymaps/terratec_slim_2.toml  |   23 +
 utils/keytable/rc_keymaps/tevii_nec           |   48 -
 utils/keytable/rc_keymaps/tevii_nec.toml      |   50 +
 utils/keytable/rc_keymaps/tivo                |   46 -
 utils/keytable/rc_keymaps/tivo.toml           |   48 +
 utils/keytable/rc_keymaps/total_media_in_hand |   36 -
 .../rc_keymaps/total_media_in_hand.toml       |   40 +
 .../rc_keymaps/total_media_in_hand_02         |   36 -
 .../rc_keymaps/total_media_in_hand_02.toml    |   40 +
 utils/keytable/rc_keymaps/trekstor            |   29 -
 utils/keytable/rc_keymaps/trekstor.toml       |   33 +
 utils/keytable/rc_keymaps/tt_1500             |   40 -
 utils/keytable/rc_keymaps/tt_1500.toml        |   44 +
 utils/keytable/rc_keymaps/tvwalkertwin        |   18 -
 utils/keytable/rc_keymaps/tvwalkertwin.toml   |   20 +
 utils/keytable/rc_keymaps/twinhan_dtv_cab_ci  |   54 -
 .../rc_keymaps/twinhan_dtv_cab_ci.toml        |   56 +
 utils/keytable/rc_keymaps/twinhan_vp1027_dvbs |   54 -
 .../rc_keymaps/twinhan_vp1027_dvbs.toml       |   58 +
 utils/keytable/rc_keymaps/videomate_k100      |   52 -
 utils/keytable/rc_keymaps/videomate_k100.toml |   54 +
 utils/keytable/rc_keymaps/videomate_s350      |   45 -
 utils/keytable/rc_keymaps/videomate_s350.toml |   47 +
 utils/keytable/rc_keymaps/videomate_tv_pvr    |   38 -
 .../keytable/rc_keymaps/videomate_tv_pvr.toml |   40 +
 utils/keytable/rc_keymaps/vp702x              |    3 -
 utils/keytable/rc_keymaps/vp702x.toml         |    5 +
 utils/keytable/rc_keymaps/winfast             |   57 -
 utils/keytable/rc_keymaps/winfast.toml        |   59 +
 .../keytable/rc_keymaps/winfast_usbii_deluxe  |   29 -
 .../rc_keymaps/winfast_usbii_deluxe.toml      |   31 +
 utils/keytable/rc_keymaps/wobo_i5             |    9 -
 utils/keytable/rc_keymaps/zx_irdec            |   41 -
 utils/keytable/rc_keymaps/zx_irdec.toml       |   45 +
 utils/keytable/rc_keymaps_bpf/RP75_LCD.toml   |   45 +
 .../allwinner_ba10_tv_box                     |   15 -
 .../allwinner_ba10_tv_box.toml                |   17 +
 .../allwinner_i12_a20_tv_box                  |   28 -
 .../allwinner_i12_a20_tv_box.toml             |   30 +
 utils/keytable/rc_keymaps_userspace/wobo_i5   |    9 -
 .../rc_keymaps_userspace/wobo_i5.toml         |   11 +
 utils/keytable/rc_maps.cfg                    |  268 +-
 utils/keytable/toml.c                         | 1903 ++++++++++++
 utils/keytable/toml.h                         |  110 +
 v4l-utils.spec.in                             |    2 +-
 286 files changed, 12689 insertions(+), 5725 deletions(-)
 create mode 100644 include/linux/bpf.h
 create mode 100644 utils/keytable/bpf.c
 create mode 100644 utils/keytable/bpf.h
 create mode 100644 utils/keytable/bpf_load.c
 create mode 100644 utils/keytable/bpf_load.h
 create mode 100644 utils/keytable/bpf_protocols/Makefile.am
 create mode 100644 utils/keytable/bpf_protocols/bpf_helpers.h
 create mode 100644 utils/keytable/bpf_protocols/grundig.c
 delete mode 100644 utils/keytable/rc_keymaps/adstech_dvb_t_pci
 create mode 100644 utils/keytable/rc_keymaps/adstech_dvb_t_pci.toml
 delete mode 100644 utils/keytable/rc_keymaps/af9005
 create mode 100644 utils/keytable/rc_keymaps/af9005.toml
 delete mode 100644 utils/keytable/rc_keymaps/alink_dtu_m
 create mode 100644 utils/keytable/rc_keymaps/alink_dtu_m.toml
 delete mode 100644 utils/keytable/rc_keymaps/allwinner_ba10_tv_box
 delete mode 100644 utils/keytable/rc_keymaps/allwinner_i12_a20_tv_box
 delete mode 100644 utils/keytable/rc_keymaps/anysee
 create mode 100644 utils/keytable/rc_keymaps/anysee.toml
 delete mode 100644 utils/keytable/rc_keymaps/apac_viewcomp
 create mode 100644 utils/keytable/rc_keymaps/apac_viewcomp.toml
 delete mode 100644 utils/keytable/rc_keymaps/astrometa_t2hybrid
 create mode 100644 utils/keytable/rc_keymaps/astrometa_t2hybrid.toml
 delete mode 100644 utils/keytable/rc_keymaps/asus_pc39
 create mode 100644 utils/keytable/rc_keymaps/asus_pc39.toml
 delete mode 100644 utils/keytable/rc_keymaps/asus_ps3_100
 create mode 100644 utils/keytable/rc_keymaps/asus_ps3_100.toml
 delete mode 100644 utils/keytable/rc_keymaps/ati_tv_wonder_hd_600
 create mode 100644 utils/keytable/rc_keymaps/ati_tv_wonder_hd_600.toml
 delete mode 100644 utils/keytable/rc_keymaps/ati_x10
 create mode 100644 utils/keytable/rc_keymaps/ati_x10.toml
 delete mode 100644 utils/keytable/rc_keymaps/avermedia
 create mode 100644 utils/keytable/rc_keymaps/avermedia.toml
 delete mode 100644 utils/keytable/rc_keymaps/avermedia_a16d
 create mode 100644 utils/keytable/rc_keymaps/avermedia_a16d.toml
 delete mode 100644 utils/keytable/rc_keymaps/avermedia_cardbus
 create mode 100644 utils/keytable/rc_keymaps/avermedia_cardbus.toml
 delete mode 100644 utils/keytable/rc_keymaps/avermedia_dvbt
 create mode 100644 utils/keytable/rc_keymaps/avermedia_dvbt.toml
 delete mode 100644 utils/keytable/rc_keymaps/avermedia_m135a
 create mode 100644 utils/keytable/rc_keymaps/avermedia_m135a.toml
 delete mode 100644 utils/keytable/rc_keymaps/avermedia_m733a_rm_k6
 create mode 100644 utils/keytable/rc_keymaps/avermedia_m733a_rm_k6.toml
 delete mode 100644 utils/keytable/rc_keymaps/avermedia_rm_ks
 create mode 100644 utils/keytable/rc_keymaps/avermedia_rm_ks.toml
 delete mode 100644 utils/keytable/rc_keymaps/avertv_303
 create mode 100644 utils/keytable/rc_keymaps/avertv_303.toml
 delete mode 100644 utils/keytable/rc_keymaps/az6027
 create mode 100644 utils/keytable/rc_keymaps/az6027.toml
 delete mode 100644 utils/keytable/rc_keymaps/azurewave_ad_tu700
 create mode 100644 utils/keytable/rc_keymaps/azurewave_ad_tu700.toml
 delete mode 100644 utils/keytable/rc_keymaps/behold
 create mode 100644 utils/keytable/rc_keymaps/behold.toml
 delete mode 100644 utils/keytable/rc_keymaps/behold_columbus
 create mode 100644 utils/keytable/rc_keymaps/behold_columbus.toml
 delete mode 100644 utils/keytable/rc_keymaps/budget_ci_old
 create mode 100644 utils/keytable/rc_keymaps/budget_ci_old.toml
 delete mode 100644 utils/keytable/rc_keymaps/cec
 create mode 100644 utils/keytable/rc_keymaps/cec.toml
 delete mode 100644 utils/keytable/rc_keymaps/cinergy
 create mode 100644 utils/keytable/rc_keymaps/cinergy.toml
 delete mode 100644 utils/keytable/rc_keymaps/cinergy_1400
 create mode 100644 utils/keytable/rc_keymaps/cinergy_1400.toml
 delete mode 100644 utils/keytable/rc_keymaps/cinergyt2
 create mode 100644 utils/keytable/rc_keymaps/cinergyt2.toml
 delete mode 100644 utils/keytable/rc_keymaps/d680_dmb
 create mode 100644 utils/keytable/rc_keymaps/d680_dmb.toml
 delete mode 100644 utils/keytable/rc_keymaps/delock_61959
 create mode 100644 utils/keytable/rc_keymaps/delock_61959.toml
 delete mode 100644 utils/keytable/rc_keymaps/dib0700_nec
 create mode 100644 utils/keytable/rc_keymaps/dib0700_nec.toml
 delete mode 100644 utils/keytable/rc_keymaps/dib0700_rc5
 create mode 100644 utils/keytable/rc_keymaps/dib0700_rc5.toml
 delete mode 100644 utils/keytable/rc_keymaps/dibusb
 create mode 100644 utils/keytable/rc_keymaps/dibusb.toml
 delete mode 100644 utils/keytable/rc_keymaps/digitalnow_tinytwin
 create mode 100644 utils/keytable/rc_keymaps/digitalnow_tinytwin.toml
 delete mode 100644 utils/keytable/rc_keymaps/digittrade
 create mode 100644 utils/keytable/rc_keymaps/digittrade.toml
 delete mode 100644 utils/keytable/rc_keymaps/digitv
 create mode 100644 utils/keytable/rc_keymaps/digitv.toml
 delete mode 100644 utils/keytable/rc_keymaps/dm1105_nec
 create mode 100644 utils/keytable/rc_keymaps/dm1105_nec.toml
 delete mode 100644 utils/keytable/rc_keymaps/dntv_live_dvb_t
 create mode 100644 utils/keytable/rc_keymaps/dntv_live_dvb_t.toml
 delete mode 100644 utils/keytable/rc_keymaps/dntv_live_dvbt_pro
 create mode 100644 utils/keytable/rc_keymaps/dntv_live_dvbt_pro.toml
 delete mode 100644 utils/keytable/rc_keymaps/dtt200u
 create mode 100644 utils/keytable/rc_keymaps/dtt200u.toml
 delete mode 100644 utils/keytable/rc_keymaps/dvbsky
 create mode 100644 utils/keytable/rc_keymaps/dvbsky.toml
 delete mode 100644 utils/keytable/rc_keymaps/dvico_mce
 create mode 100644 utils/keytable/rc_keymaps/dvico_mce.toml
 delete mode 100644 utils/keytable/rc_keymaps/dvico_portable
 create mode 100644 utils/keytable/rc_keymaps/dvico_portable.toml
 delete mode 100644 utils/keytable/rc_keymaps/em_terratec
 create mode 100644 utils/keytable/rc_keymaps/em_terratec.toml
 delete mode 100644 utils/keytable/rc_keymaps/encore_enltv
 create mode 100644 utils/keytable/rc_keymaps/encore_enltv.toml
 delete mode 100644 utils/keytable/rc_keymaps/encore_enltv2
 create mode 100644 utils/keytable/rc_keymaps/encore_enltv2.toml
 delete mode 100644 utils/keytable/rc_keymaps/encore_enltv_fm53
 create mode 100644 utils/keytable/rc_keymaps/encore_enltv_fm53.toml
 delete mode 100644 utils/keytable/rc_keymaps/evga_indtube
 create mode 100644 utils/keytable/rc_keymaps/evga_indtube.toml
 delete mode 100644 utils/keytable/rc_keymaps/eztv
 create mode 100644 utils/keytable/rc_keymaps/eztv.toml
 delete mode 100644 utils/keytable/rc_keymaps/flydvb
 create mode 100644 utils/keytable/rc_keymaps/flydvb.toml
 delete mode 100644 utils/keytable/rc_keymaps/flyvideo
 create mode 100644 utils/keytable/rc_keymaps/flyvideo.toml
 delete mode 100644 utils/keytable/rc_keymaps/fusionhdtv_mce
 create mode 100644 utils/keytable/rc_keymaps/fusionhdtv_mce.toml
 delete mode 100644 utils/keytable/rc_keymaps/gadmei_rm008z
 create mode 100644 utils/keytable/rc_keymaps/gadmei_rm008z.toml
 delete mode 100644 utils/keytable/rc_keymaps/geekbox
 create mode 100644 utils/keytable/rc_keymaps/geekbox.toml
 delete mode 100644 utils/keytable/rc_keymaps/genius_tvgo_a11mce
 create mode 100644 utils/keytable/rc_keymaps/genius_tvgo_a11mce.toml
 delete mode 100644 utils/keytable/rc_keymaps/gotview7135
 create mode 100644 utils/keytable/rc_keymaps/gotview7135.toml
 delete mode 100644 utils/keytable/rc_keymaps/haupp
 create mode 100644 utils/keytable/rc_keymaps/haupp.toml
 delete mode 100644 utils/keytable/rc_keymaps/hauppauge
 create mode 100644 utils/keytable/rc_keymaps/hauppauge.toml
 delete mode 100644 utils/keytable/rc_keymaps/hisi_poplar
 create mode 100644 utils/keytable/rc_keymaps/hisi_poplar.toml
 delete mode 100644 utils/keytable/rc_keymaps/hisi_tv_demo
 create mode 100644 utils/keytable/rc_keymaps/hisi_tv_demo.toml
 delete mode 100644 utils/keytable/rc_keymaps/imon_mce
 create mode 100644 utils/keytable/rc_keymaps/imon_mce.toml
 delete mode 100644 utils/keytable/rc_keymaps/imon_pad
 create mode 100644 utils/keytable/rc_keymaps/imon_pad.toml
 delete mode 100644 utils/keytable/rc_keymaps/imon_rsc
 create mode 100644 utils/keytable/rc_keymaps/imon_rsc.toml
 delete mode 100644 utils/keytable/rc_keymaps/iodata_bctv7e
 create mode 100644 utils/keytable/rc_keymaps/iodata_bctv7e.toml
 delete mode 100644 utils/keytable/rc_keymaps/it913x_v1
 create mode 100644 utils/keytable/rc_keymaps/it913x_v1.toml
 delete mode 100644 utils/keytable/rc_keymaps/it913x_v2
 create mode 100644 utils/keytable/rc_keymaps/it913x_v2.toml
 delete mode 100644 utils/keytable/rc_keymaps/kaiomy
 create mode 100644 utils/keytable/rc_keymaps/kaiomy.toml
 delete mode 100644 utils/keytable/rc_keymaps/kworld_315u
 create mode 100644 utils/keytable/rc_keymaps/kworld_315u.toml
 delete mode 100644 utils/keytable/rc_keymaps/kworld_pc150u
 create mode 100644 utils/keytable/rc_keymaps/kworld_pc150u.toml
 delete mode 100644 utils/keytable/rc_keymaps/kworld_plus_tv_analog
 create mode 100644 utils/keytable/rc_keymaps/kworld_plus_tv_analog.toml
 delete mode 100644 utils/keytable/rc_keymaps/leadtek_y04g0051
 create mode 100644 utils/keytable/rc_keymaps/leadtek_y04g0051.toml
 delete mode 100644 utils/keytable/rc_keymaps/lme2510
 create mode 100644 utils/keytable/rc_keymaps/lme2510.toml
 delete mode 100644 utils/keytable/rc_keymaps/manli
 create mode 100644 utils/keytable/rc_keymaps/manli.toml
 delete mode 100644 utils/keytable/rc_keymaps/medion_x10
 create mode 100644 utils/keytable/rc_keymaps/medion_x10.toml
 delete mode 100644 utils/keytable/rc_keymaps/medion_x10_digitainer
 create mode 100644 utils/keytable/rc_keymaps/medion_x10_digitainer.toml
 delete mode 100644 utils/keytable/rc_keymaps/medion_x10_or2x
 create mode 100644 utils/keytable/rc_keymaps/medion_x10_or2x.toml
 delete mode 100644 utils/keytable/rc_keymaps/megasky
 create mode 100644 utils/keytable/rc_keymaps/megasky.toml
 delete mode 100644 utils/keytable/rc_keymaps/msi_digivox_ii
 create mode 100644 utils/keytable/rc_keymaps/msi_digivox_ii.toml
 delete mode 100644 utils/keytable/rc_keymaps/msi_digivox_iii
 create mode 100644 utils/keytable/rc_keymaps/msi_digivox_iii.toml
 delete mode 100644 utils/keytable/rc_keymaps/msi_tvanywhere
 create mode 100644 utils/keytable/rc_keymaps/msi_tvanywhere.toml
 delete mode 100644 utils/keytable/rc_keymaps/msi_tvanywhere_plus
 create mode 100644 utils/keytable/rc_keymaps/msi_tvanywhere_plus.toml
 delete mode 100644 utils/keytable/rc_keymaps/nebula
 create mode 100644 utils/keytable/rc_keymaps/nebula.toml
 delete mode 100644 utils/keytable/rc_keymaps/nec_terratec_cinergy_xs
 create mode 100644 utils/keytable/rc_keymaps/nec_terratec_cinergy_xs.toml
 delete mode 100644 utils/keytable/rc_keymaps/norwood
 create mode 100644 utils/keytable/rc_keymaps/norwood.toml
 delete mode 100644 utils/keytable/rc_keymaps/npgtech
 create mode 100644 utils/keytable/rc_keymaps/npgtech.toml
 delete mode 100644 utils/keytable/rc_keymaps/opera1
 create mode 100644 utils/keytable/rc_keymaps/opera1.toml
 delete mode 100644 utils/keytable/rc_keymaps/pctv_sedna
 create mode 100644 utils/keytable/rc_keymaps/pctv_sedna.toml
 delete mode 100644 utils/keytable/rc_keymaps/pinnacle310e
 create mode 100644 utils/keytable/rc_keymaps/pinnacle310e.toml
 delete mode 100644 utils/keytable/rc_keymaps/pinnacle_color
 create mode 100644 utils/keytable/rc_keymaps/pinnacle_color.toml
 delete mode 100644 utils/keytable/rc_keymaps/pinnacle_grey
 create mode 100644 utils/keytable/rc_keymaps/pinnacle_grey.toml
 delete mode 100644 utils/keytable/rc_keymaps/pinnacle_pctv_hd
 create mode 100644 utils/keytable/rc_keymaps/pinnacle_pctv_hd.toml
 delete mode 100644 utils/keytable/rc_keymaps/pixelview
 create mode 100644 utils/keytable/rc_keymaps/pixelview.toml
 delete mode 100644 utils/keytable/rc_keymaps/pixelview_002t
 create mode 100644 utils/keytable/rc_keymaps/pixelview_002t.toml
 delete mode 100644 utils/keytable/rc_keymaps/pixelview_mk12
 create mode 100644 utils/keytable/rc_keymaps/pixelview_mk12.toml
 delete mode 100644 utils/keytable/rc_keymaps/pixelview_new
 create mode 100644 utils/keytable/rc_keymaps/pixelview_new.toml
 delete mode 100644 utils/keytable/rc_keymaps/powercolor_real_angel
 create mode 100644 utils/keytable/rc_keymaps/powercolor_real_angel.toml
 delete mode 100644 utils/keytable/rc_keymaps/proteus_2309
 create mode 100644 utils/keytable/rc_keymaps/proteus_2309.toml
 delete mode 100644 utils/keytable/rc_keymaps/purpletv
 create mode 100644 utils/keytable/rc_keymaps/purpletv.toml
 delete mode 100644 utils/keytable/rc_keymaps/pv951
 create mode 100644 utils/keytable/rc_keymaps/pv951.toml
 delete mode 100644 utils/keytable/rc_keymaps/rc6_mce
 create mode 100644 utils/keytable/rc_keymaps/rc6_mce.toml
 delete mode 100644 utils/keytable/rc_keymaps/real_audio_220_32_keys
 create mode 100644 utils/keytable/rc_keymaps/real_audio_220_32_keys.toml
 delete mode 100644 utils/keytable/rc_keymaps/reddo
 create mode 100644 utils/keytable/rc_keymaps/reddo.toml
 delete mode 100644 utils/keytable/rc_keymaps/snapstream_firefly
 create mode 100644 utils/keytable/rc_keymaps/snapstream_firefly.toml
 delete mode 100644 utils/keytable/rc_keymaps/streamzap
 create mode 100644 utils/keytable/rc_keymaps/streamzap.toml
 delete mode 100644 utils/keytable/rc_keymaps/su3000
 create mode 100644 utils/keytable/rc_keymaps/su3000.toml
 delete mode 100644 utils/keytable/rc_keymaps/tango
 create mode 100644 utils/keytable/rc_keymaps/tango.toml
 delete mode 100644 utils/keytable/rc_keymaps/tbs_nec
 create mode 100644 utils/keytable/rc_keymaps/tbs_nec.toml
 delete mode 100644 utils/keytable/rc_keymaps/technisat_ts35
 create mode 100644 utils/keytable/rc_keymaps/technisat_ts35.toml
 delete mode 100644 utils/keytable/rc_keymaps/technisat_usb2
 create mode 100644 utils/keytable/rc_keymaps/technisat_usb2.toml
 delete mode 100644 utils/keytable/rc_keymaps/terratec_cinergy_c_pci
 create mode 100644 utils/keytable/rc_keymaps/terratec_cinergy_c_pci.toml
 delete mode 100644 utils/keytable/rc_keymaps/terratec_cinergy_s2_hd
 create mode 100644 utils/keytable/rc_keymaps/terratec_cinergy_s2_hd.toml
 delete mode 100644 utils/keytable/rc_keymaps/terratec_cinergy_xs
 create mode 100644 utils/keytable/rc_keymaps/terratec_cinergy_xs.toml
 delete mode 100644 utils/keytable/rc_keymaps/terratec_slim
 create mode 100644 utils/keytable/rc_keymaps/terratec_slim.toml
 delete mode 100644 utils/keytable/rc_keymaps/terratec_slim_2
 create mode 100644 utils/keytable/rc_keymaps/terratec_slim_2.toml
 delete mode 100644 utils/keytable/rc_keymaps/tevii_nec
 create mode 100644 utils/keytable/rc_keymaps/tevii_nec.toml
 delete mode 100644 utils/keytable/rc_keymaps/tivo
 create mode 100644 utils/keytable/rc_keymaps/tivo.toml
 delete mode 100644 utils/keytable/rc_keymaps/total_media_in_hand
 create mode 100644 utils/keytable/rc_keymaps/total_media_in_hand.toml
 delete mode 100644 utils/keytable/rc_keymaps/total_media_in_hand_02
 create mode 100644 utils/keytable/rc_keymaps/total_media_in_hand_02.toml
 delete mode 100644 utils/keytable/rc_keymaps/trekstor
 create mode 100644 utils/keytable/rc_keymaps/trekstor.toml
 delete mode 100644 utils/keytable/rc_keymaps/tt_1500
 create mode 100644 utils/keytable/rc_keymaps/tt_1500.toml
 delete mode 100644 utils/keytable/rc_keymaps/tvwalkertwin
 create mode 100644 utils/keytable/rc_keymaps/tvwalkertwin.toml
 delete mode 100644 utils/keytable/rc_keymaps/twinhan_dtv_cab_ci
 create mode 100644 utils/keytable/rc_keymaps/twinhan_dtv_cab_ci.toml
 delete mode 100644 utils/keytable/rc_keymaps/twinhan_vp1027_dvbs
 create mode 100644 utils/keytable/rc_keymaps/twinhan_vp1027_dvbs.toml
 delete mode 100644 utils/keytable/rc_keymaps/videomate_k100
 create mode 100644 utils/keytable/rc_keymaps/videomate_k100.toml
 delete mode 100644 utils/keytable/rc_keymaps/videomate_s350
 create mode 100644 utils/keytable/rc_keymaps/videomate_s350.toml
 delete mode 100644 utils/keytable/rc_keymaps/videomate_tv_pvr
 create mode 100644 utils/keytable/rc_keymaps/videomate_tv_pvr.toml
 delete mode 100644 utils/keytable/rc_keymaps/vp702x
 create mode 100644 utils/keytable/rc_keymaps/vp702x.toml
 delete mode 100644 utils/keytable/rc_keymaps/winfast
 create mode 100644 utils/keytable/rc_keymaps/winfast.toml
 delete mode 100644 utils/keytable/rc_keymaps/winfast_usbii_deluxe
 create mode 100644 utils/keytable/rc_keymaps/winfast_usbii_deluxe.toml
 delete mode 100644 utils/keytable/rc_keymaps/wobo_i5
 delete mode 100644 utils/keytable/rc_keymaps/zx_irdec
 create mode 100644 utils/keytable/rc_keymaps/zx_irdec.toml
 create mode 100644 utils/keytable/rc_keymaps_bpf/RP75_LCD.toml
 delete mode 100644 utils/keytable/rc_keymaps_userspace/allwinner_ba10_tv_box
 create mode 100644 utils/keytable/rc_keymaps_userspace/allwinner_ba10_tv_box.toml
 delete mode 100644 utils/keytable/rc_keymaps_userspace/allwinner_i12_a20_tv_box
 create mode 100644 utils/keytable/rc_keymaps_userspace/allwinner_i12_a20_tv_box.toml
 delete mode 100644 utils/keytable/rc_keymaps_userspace/wobo_i5
 create mode 100644 utils/keytable/rc_keymaps_userspace/wobo_i5.toml
 create mode 100644 utils/keytable/toml.c
 create mode 100644 utils/keytable/toml.h
Signature · 1 line
2.17.0
#5 lore raw
In reply to Sean Young

Hi Sean,

Quoted 17 lines · Sean Young

This is not ready for merging yet, however while I finish this work I would like some feedback and ideas.

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:

Quoted 9 lines

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 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

I did a few tests with this patch and noticed some issues:

clang didn't find asm/types.h, I'm running Debian Stretch here and asm isn't in /usr/include but in /usr/include/HOST-TRIPLET which gcc uses by default, but clang doesn't seem to know about.

With a quick workaround (adding /usr/include/x86_64-linux-gnu/ on x86_64 and /usr/include/aarch64-linux-gnu/) the grundig decoder built fine both on x86_64 and aarch64 and grundig.o files were identical. I noticed some pointer arithmetic warnings though:

hias@lepotato:~/install/v4l-utils/git/utils/keytable$ make
Making all in bpf_protocols
make[1]: Entering directory '/home/hias/install/v4l-utils/git/utils/keytable/bpf_protocols'
clang -I../../../include -nostdinc -isystem /usr/lib/llvm-3.8/bin/../lib/clang/3.8.1/include -I/usr/include -I/usr/include/aarch64-linux-gnu -target bpf -O2 -emit-llvm -c grundig.c -o - | llc -march=bpf -filetype=obj -o grundig.o
make[1]: Leaving directory '/home/hias/install/v4l-utils/git/utils/keytable/bpf_protocols'
make[1]: Entering directory '/home/hias/install/v4l-utils/git/utils/keytable'
  CC       keytable.o
  CC       ir-encode.o
  CC       toml.o
  CC       bpf.o
  CC       bpf_load.o
bpf_load.c: In function ‘parse_relo_and_apply’:
bpf_load.c:192:41: warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith]
     int32_t *p = (bpf_file->data->d_buf + sym.st_value);
                                         ^
bpf_load.c: In function ‘load_elf_maps_section’:
bpf_load.c:308:54: warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith]
   def = (struct bpf_load_map_def *)(data_maps->d_buf + offset);
                                                      ^
  CCLD     ir-keytable
make[1]: Leaving directory '/home/hias/install/v4l-utils/git/utils/keytable'

When trying to load the grundig decoder (tested on aarch64 with a kernel compiled from yesterday's head of bpf-next, commit bd3a08aaa9a3) I get an "invalid mem access 'map_value_or_null'" error:

hias@lepotato:~/install/v4l-utils/git/utils/keytable$ sudo ./ir-keytable -c -w rc_keymaps_bpf/RP75_LCD.toml
bpf protocols removed
Old keytable cleared
Wrote 40 keycode(s) to driver
header_space (null)
header_pulse 1244
leader_pulse (null)
bpf_load_program() err=13
0: (bf) r6 = r1
1: (b7) r8 = 0
2: (63) *(u32 *)(r10 -4) = r8
3: (bf) r2 = r10
4: (07) r2 += -4
5: (18) r1 = 0xffff80006960fa00
7: (85) call bpf_map_lookup_elem#1
8: (bf) r7 = r10
9: (07) r7 += -24
10: (1d) if r0 == r8 goto pc+1
 R0=map_value_or_null(id=1,off=0,ks=4,vs=16,imm=0) R6=ctx(id=0,off=0,imm=0) R7=fp-24,call_-1 R8=inv0 R10=fp0,call_-1
11: (bf) r7 = r0
12: (7b) *(u64 *)(r10 -16) = r8
13: (7b) *(u64 *)(r10 -24) = r8
14: (61) r1 = *(u32 *)(r6 +0)
15: (18) r3 = 0xff000000
17: (bf) r2 = r1
18: (5f) r2 &= r3
19: (15) if r2 == 0x2000000 goto pc+131
 R0=map_value_or_null(id=1,off=0,ks=4,vs=16,imm=0) R1=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R2=inv(id=0,umax_value=4278190080,var_off=(0x0; 0xff000000)) R3=inv4278190080 R6=ctx(id=0,off=0,imm=0) R7=map_value_or_null(id=1,off=0,ks=4,vs=16,imm=0) R8=inv0 R10=fp0,call_-1 fp-16=0 fp-24=0
20: (57) r1 &= 16777215
21: (61) r3 = *(u32 *)(r7 +4)
R7 invalid mem access 'map_value_or_null'

Not quite sure who's to blame here, clang/llvm, the grundig code or the loader. Do you have any ideas or hints?

so long,

Hias