Skip to contentSkip to conversation

Add BPF decoders to ir-keytable

PATCH New Sean Young 1 participant 6 messages Aug 7, 2018

Subsystems (4)
lore
Share & tools
lore

Sean Young

author
#0 lore raw

v4 cover Add BPF decoders to ir-keytable

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.

Changes since v4:
- Various improvments to ir-keytable man page
- Fixed bug in manchester BPF decoder
- Fixed bug in lircd2toml wrt toggle_bit

Sean Young (6):
keytable: add support for BPF based protocols
keytable: add bpf protocols
keytable: add toml keymap reader
keytable: convert keymaps to new toml format
ir-keytable: add tool to aid migration from lircd
keytable: improve man page wording

 Makefile.am                                        |    4 +-
 configure.ac                                       |   15 +
 contrib/Makefile.am                                |    3 +-
 contrib/lircd2toml.py                              |  527 ++++
 include/linux/bpf.h                                | 2669 ++++++++++++++++++++
 utils/keytable/Makefile.am                         |   13 +-
 utils/keytable/bpf.c                               |  515 ++++
 utils/keytable/bpf.h                               |  110 +
 utils/keytable/bpf_load.c                          |  472 ++++
 utils/keytable/bpf_load.h                          |   43 +
 utils/keytable/bpf_protocols/Makefile.am           |   21 +
 utils/keytable/bpf_protocols/bpf_helpers.h         |  315 +++
 utils/keytable/bpf_protocols/grundig.c             |  126 +
 utils/keytable/bpf_protocols/manchester.c          |  171 ++
 utils/keytable/bpf_protocols/pulse_distance.c      |  156 ++
 utils/keytable/bpf_protocols/pulse_length.c        |  152 ++
 utils/keytable/bpf_protocols/rc_mm.c               |  139 +
 utils/keytable/gen_keytables.pl                    |   33 +-
 utils/keytable/ir-keytable.1.in                    |   98 +-
 utils/keytable/keytable.c                          |  532 +++-
 utils/keytable/rc_keymaps/adstech_dvb_t_pci        |   45 -
 utils/keytable/rc_keymaps/adstech_dvb_t_pci.toml   |   48 +
 utils/keytable/rc_keymaps/af9005                   |   37 -
 utils/keytable/rc_keymaps/af9005.toml              |   40 +
 utils/keytable/rc_keymaps/alink_dtu_m              |   19 -
 utils/keytable/rc_keymaps/alink_dtu_m.toml         |   23 +
 utils/keytable/rc_keymaps/allwinner_ba10_tv_box    |   15 -
 utils/keytable/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       |   35 +
 utils/keytable/rc_keymaps/astrometa_t2hybrid       |   22 -
 utils/keytable/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 +
 utils/keytable/rc_keymaps/ati_tv_wonder_hd_600     |   25 -
 .../keytable/rc_keymaps/ati_tv_wonder_hd_600.toml  |   28 +
 utils/keytable/rc_keymaps/ati_x10                  |   49 -
 utils/keytable/rc_keymaps/ati_x10.toml             |   52 +
 utils/keytable/rc_keymaps/avermedia                |   37 -
 utils/keytable/rc_keymaps/avermedia.toml           |   40 +
 utils/keytable/rc_keymaps/avermedia_a16d           |   35 -
 utils/keytable/rc_keymaps/avermedia_a16d.toml      |   38 +
 utils/keytable/rc_keymaps/avermedia_cardbus        |   55 -
 utils/keytable/rc_keymaps/avermedia_cardbus.toml   |   58 +
 utils/keytable/rc_keymaps/avermedia_dvbt           |   35 -
 utils/keytable/rc_keymaps/avermedia_dvbt.toml      |   38 +
 utils/keytable/rc_keymaps/avermedia_m135a          |   81 -
 utils/keytable/rc_keymaps/avermedia_m135a.toml     |   85 +
 utils/keytable/rc_keymaps/avermedia_m733a_rm_k6    |   45 -
 .../keytable/rc_keymaps/avermedia_m733a_rm_k6.toml |   49 +
 utils/keytable/rc_keymaps/avermedia_rm_ks          |   28 -
 utils/keytable/rc_keymaps/avermedia_rm_ks.toml     |   32 +
 utils/keytable/rc_keymaps/avertv_303               |   37 -
 utils/keytable/rc_keymaps/avertv_303.toml          |   40 +
 utils/keytable/rc_keymaps/az6027                   |    3 -
 utils/keytable/rc_keymaps/az6027.toml              |    6 +
 utils/keytable/rc_keymaps/azurewave_ad_tu700       |   54 -
 utils/keytable/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 -
 utils/keytable/rc_keymaps/behold_columbus.toml     |   32 +
 utils/keytable/rc_keymaps/budget_ci_old            |   46 -
 utils/keytable/rc_keymaps/budget_ci_old.toml       |   49 +
 utils/keytable/rc_keymaps/cec                      |   98 -
 utils/keytable/rc_keymaps/cec.toml                 |  101 +
 utils/keytable/rc_keymaps/cinergy                  |   37 -
 utils/keytable/rc_keymaps/cinergy.toml             |   40 +
 utils/keytable/rc_keymaps/cinergy_1400             |   38 -
 utils/keytable/rc_keymaps/cinergy_1400.toml        |   41 +
 utils/keytable/rc_keymaps/cinergyt2                |   38 -
 utils/keytable/rc_keymaps/cinergyt2.toml           |   41 +
 utils/keytable/rc_keymaps/d680_dmb                 |   36 -
 utils/keytable/rc_keymaps/d680_dmb.toml            |   39 +
 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              |  115 +
 utils/keytable/rc_keymaps/digitalnow_tinytwin      |   50 -
 utils/keytable/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              |   59 +
 utils/keytable/rc_keymaps/dm1105_nec               |   32 -
 utils/keytable/rc_keymaps/dm1105_nec.toml          |   35 +
 utils/keytable/rc_keymaps/dntv_live_dvb_t          |   33 -
 utils/keytable/rc_keymaps/dntv_live_dvb_t.toml     |   36 +
 utils/keytable/rc_keymaps/dntv_live_dvbt_pro       |   54 -
 utils/keytable/rc_keymaps/dntv_live_dvbt_pro.toml  |   57 +
 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         |   32 +
 utils/keytable/rc_keymaps/encore_enltv             |   53 -
 utils/keytable/rc_keymaps/encore_enltv.toml        |   56 +
 utils/keytable/rc_keymaps/encore_enltv2            |   40 -
 utils/keytable/rc_keymaps/encore_enltv2.toml       |   43 +
 utils/keytable/rc_keymaps/encore_enltv_fm53        |   30 -
 utils/keytable/rc_keymaps/encore_enltv_fm53.toml   |   33 +
 utils/keytable/rc_keymaps/evga_indtube             |   17 -
 utils/keytable/rc_keymaps/evga_indtube.toml        |   20 +
 utils/keytable/rc_keymaps/eztv                     |   45 -
 utils/keytable/rc_keymaps/eztv.toml                |   48 +
 utils/keytable/rc_keymaps/flydvb                   |   33 -
 utils/keytable/rc_keymaps/flydvb.toml              |   36 +
 utils/keytable/rc_keymaps/flyvideo                 |   28 -
 utils/keytable/rc_keymaps/flyvideo.toml            |   31 +
 utils/keytable/rc_keymaps/fusionhdtv_mce           |   46 -
 utils/keytable/rc_keymaps/fusionhdtv_mce.toml      |   49 +
 utils/keytable/rc_keymaps/gadmei_rm008z            |   32 -
 utils/keytable/rc_keymaps/gadmei_rm008z.toml       |   35 +
 utils/keytable/rc_keymaps/geekbox                  |   13 -
 utils/keytable/rc_keymaps/geekbox.toml             |   17 +
 utils/keytable/rc_keymaps/genius_tvgo_a11mce       |   33 -
 utils/keytable/rc_keymaps/genius_tvgo_a11mce.toml  |   36 +
 utils/keytable/rc_keymaps/gotview7135              |   35 -
 utils/keytable/rc_keymaps/gotview7135.toml         |   38 +
 utils/keytable/rc_keymaps/haupp                    |   46 -
 utils/keytable/rc_keymaps/haupp.toml               |   49 +
 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            |   94 +
 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       |   40 +
 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              |   36 +
 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       |   48 +
 utils/keytable/rc_keymaps/kworld_plus_tv_analog    |   32 -
 .../keytable/rc_keymaps/kworld_plus_tv_analog.toml |   35 +
 utils/keytable/rc_keymaps/leadtek_y04g0051         |   51 -
 utils/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               |   35 +
 utils/keytable/rc_keymaps/medion_x10               |   54 -
 utils/keytable/rc_keymaps/medion_x10.toml          |   57 +
 utils/keytable/rc_keymaps/medion_x10_digitainer    |   50 -
 .../keytable/rc_keymaps/medion_x10_digitainer.toml |   53 +
 utils/keytable/rc_keymaps/medion_x10_or2x          |   46 -
 utils/keytable/rc_keymaps/medion_x10_or2x.toml     |   49 +
 utils/keytable/rc_keymaps/megasky                  |   17 -
 utils/keytable/rc_keymaps/megasky.toml             |   20 +
 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 -
 utils/keytable/rc_keymaps/msi_digivox_iii.toml     |   37 +
 utils/keytable/rc_keymaps/msi_tvanywhere           |   25 -
 utils/keytable/rc_keymaps/msi_tvanywhere.toml      |   28 +
 utils/keytable/rc_keymaps/msi_tvanywhere_plus      |   37 -
 utils/keytable/rc_keymaps/msi_tvanywhere_plus.toml |   40 +
 utils/keytable/rc_keymaps/nebula                   |   56 -
 utils/keytable/rc_keymaps/nebula.toml              |   60 +
 utils/keytable/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             |   39 +
 utils/keytable/rc_keymaps/npgtech                  |   36 -
 utils/keytable/rc_keymaps/npgtech.toml             |   39 +
 utils/keytable/rc_keymaps/opera1                   |   27 -
 utils/keytable/rc_keymaps/opera1.toml              |   30 +
 utils/keytable/rc_keymaps/pctv_sedna               |   33 -
 utils/keytable/rc_keymaps/pctv_sedna.toml          |   36 +
 utils/keytable/rc_keymaps/pinnacle310e             |   54 -
 utils/keytable/rc_keymaps/pinnacle310e.toml        |   57 +
 utils/keytable/rc_keymaps/pinnacle_color           |   43 -
 utils/keytable/rc_keymaps/pinnacle_color.toml      |   46 +
 utils/keytable/rc_keymaps/pinnacle_grey            |   42 -
 utils/keytable/rc_keymaps/pinnacle_grey.toml       |   45 +
 utils/keytable/rc_keymaps/pinnacle_pctv_hd         |   27 -
 utils/keytable/rc_keymaps/pinnacle_pctv_hd.toml    |   31 +
 utils/keytable/rc_keymaps/pixelview                |   33 -
 utils/keytable/rc_keymaps/pixelview.toml           |   36 +
 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       |   35 +
 utils/keytable/rc_keymaps/powercolor_real_angel    |   36 -
 .../keytable/rc_keymaps/powercolor_real_angel.toml |   39 +
 utils/keytable/rc_keymaps/proteus_2309             |   25 -
 utils/keytable/rc_keymaps/proteus_2309.toml        |   28 +
 utils/keytable/rc_keymaps/purpletv                 |   36 -
 utils/keytable/rc_keymaps/purpletv.toml            |   39 +
 utils/keytable/rc_keymaps/pv951                    |   32 -
 utils/keytable/rc_keymaps/pv951.toml               |   35 +
 utils/keytable/rc_keymaps/rc6_mce                  |   65 -
 utils/keytable/rc_keymaps/rc6_mce.toml             |   69 +
 utils/keytable/rc_keymaps/real_audio_220_32_keys   |   29 -
 .../rc_keymaps/real_audio_220_32_keys.toml         |   32 +
 utils/keytable/rc_keymaps/reddo                    |   24 -
 utils/keytable/rc_keymaps/reddo.toml               |   28 +
 utils/keytable/rc_keymaps/snapstream_firefly       |   49 -
 utils/keytable/rc_keymaps/snapstream_firefly.toml  |   52 +
 utils/keytable/rc_keymaps/streamzap                |   36 -
 utils/keytable/rc_keymaps/streamzap.toml           |   39 +
 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             |   38 +
 utils/keytable/rc_keymaps/technisat_ts35           |   34 -
 utils/keytable/rc_keymaps/technisat_ts35.toml      |   37 +
 utils/keytable/rc_keymaps/technisat_usb2           |   34 -
 utils/keytable/rc_keymaps/technisat_usb2.toml      |   38 +
 utils/keytable/rc_keymaps/terratec_cinergy_c_pci   |   49 -
 .../rc_keymaps/terratec_cinergy_c_pci.toml         |   52 +
 utils/keytable/rc_keymaps/terratec_cinergy_s2_hd   |   49 -
 .../rc_keymaps/terratec_cinergy_s2_hd.toml         |   52 +
 utils/keytable/rc_keymaps/terratec_cinergy_xs      |   48 -
 utils/keytable/rc_keymaps/terratec_cinergy_xs.toml |   51 +
 utils/keytable/rc_keymaps/terratec_slim            |   29 -
 utils/keytable/rc_keymaps/terratec_slim.toml       |   33 +
 utils/keytable/rc_keymaps/terratec_slim_2          |   19 -
 utils/keytable/rc_keymaps/terratec_slim_2.toml     |   23 +
 utils/keytable/rc_keymaps/tevii_nec                |   48 -
 utils/keytable/rc_keymaps/tevii_nec.toml           |   51 +
 utils/keytable/rc_keymaps/tivo                     |   46 -
 utils/keytable/rc_keymaps/tivo.toml                |   50 +
 utils/keytable/rc_keymaps/total_media_in_hand      |   36 -
 utils/keytable/rc_keymaps/total_media_in_hand.toml |   40 +
 utils/keytable/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        |   21 +
 utils/keytable/rc_keymaps/twinhan_dtv_cab_ci       |   54 -
 utils/keytable/rc_keymaps/twinhan_dtv_cab_ci.toml  |   57 +
 utils/keytable/rc_keymaps/twinhan_vp1027_dvbs      |   54 -
 utils/keytable/rc_keymaps/twinhan_vp1027_dvbs.toml |   58 +
 utils/keytable/rc_keymaps/videomate_k100           |   52 -
 utils/keytable/rc_keymaps/videomate_k100.toml      |   55 +
 utils/keytable/rc_keymaps/videomate_s350           |   45 -
 utils/keytable/rc_keymaps/videomate_s350.toml      |   48 +
 utils/keytable/rc_keymaps/videomate_tv_pvr         |   38 -
 utils/keytable/rc_keymaps/videomate_tv_pvr.toml    |   41 +
 utils/keytable/rc_keymaps/vp702x                   |    3 -
 utils/keytable/rc_keymaps/vp702x.toml              |    6 +
 utils/keytable/rc_keymaps/winfast                  |   57 -
 utils/keytable/rc_keymaps/winfast.toml             |   60 +
 utils/keytable/rc_keymaps/winfast_usbii_deluxe     |   29 -
 .../keytable/rc_keymaps/winfast_usbii_deluxe.toml  |   32 +
 utils/keytable/rc_keymaps/wobo_i5                  |    9 -
 utils/keytable/rc_keymaps/zx_irdec                 |   41 -
 utils/keytable/rc_keymaps/zx_irdec.toml            |   45 +
 .../rc_keymaps_userspace/allwinner_ba10_tv_box     |   15 -
 .../allwinner_ba10_tv_box.toml                     |   18 +
 .../rc_keymaps_userspace/allwinner_i12_a20_tv_box  |   28 -
 .../allwinner_i12_a20_tv_box.toml                  |   31 +
 utils/keytable/rc_keymaps_userspace/wobo_i5        |    9 -
 utils/keytable/rc_keymaps_userspace/wobo_i5.toml   |   12 +
 utils/keytable/rc_maps.cfg                         |  268 +-
 utils/keytable/toml.c                              | 1903 ++++++++++++++
 utils/keytable/toml.h                              |  110 +
 v4l-utils.spec.in                                  |    2 +-
 291 files changed, 14142 insertions(+), 5788 deletions(-)
 create mode 100755 contrib/lircd2toml.py
 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
 create mode 100644 utils/keytable/bpf_protocols/manchester.c
 create mode 100644 utils/keytable/bpf_protocols/pulse_distance.c
 create mode 100644 utils/keytable/bpf_protocols/pulse_length.c
 create mode 100644 utils/keytable/bpf_protocols/rc_mm.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
 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.11.0
author
#1 lore raw

PATCH v4 1/6 keytable: add support for BPF based protocols

We use a modified version of samples/bpf/bpf_load.c from the linux kernel tree to load elf based BPF protocols and display the BPF program names.

Any global int variables can be overrided from the command line. The immediate values are patched in the BPF LD instructions.

Write a BPF protocol decoder in C, and compile with:

	clang -O2 -c --target=bpf foo.c

Now you can load the object file like so:

ir-keytable -p foo.o -v

Any parameters can be specified using -e name=value.

---
 Makefile.am                     |    4 +-
 configure.ac                    |   11 +
 include/linux/bpf.h             | 2669 +++++++++++++++++++++++++++++++++++++++
 utils/keytable/Makefile.am      |    7 +-
 utils/keytable/bpf.c            |  515 ++++++++
 utils/keytable/bpf.h            |  110 ++
 utils/keytable/bpf_load.c       |  455 +++++++
 utils/keytable/bpf_load.h       |   43 +
 utils/keytable/ir-keytable.1.in |   14 +-
 utils/keytable/keytable.c       |  318 ++++-
 v4l-utils.spec.in               |    2 +-
 11 files changed, 4117 insertions(+), 31 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..08f5a4c5 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 +2669 -0

2,669 lines not on this page · raw message

utils/keytable/Makefile.am +6 -1
index 904aa96b..ad251915 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
+
+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

278 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 +455 -0

455 lines not on this page · raw message

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

43 lines not on this page · raw message

utils/keytable/ir-keytable.1.in +11 -3
index db1843b3..0be8a5a7 100644

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

utils/keytable/keytable.c +293 -25

318 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.11.0

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

author
#2 lore raw

PATCH v4 2/6 keytable: add bpf protocols

In reply to Sean Young

Add a few BPF protocols and infrastructure for building them.

---
 configure.ac                                  |   4 +
 utils/keytable/Makefile.am                    |   4 +
 utils/keytable/bpf_protocols/Makefile.am      |  21 ++
 utils/keytable/bpf_protocols/bpf_helpers.h    | 315 ++++++++++++++++++++++++++
 utils/keytable/bpf_protocols/grundig.c        | 126 +++++++++++
 utils/keytable/bpf_protocols/manchester.c     | 171 ++++++++++++++
 utils/keytable/bpf_protocols/pulse_distance.c | 156 +++++++++++++
 utils/keytable/bpf_protocols/pulse_length.c   | 152 +++++++++++++
 utils/keytable/bpf_protocols/rc_mm.c          | 139 ++++++++++++
 v4l-utils.spec.in                             |   2 +-
 10 files changed, 1089 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/bpf_protocols/manchester.c
 create mode 100644 utils/keytable/bpf_protocols/pulse_distance.c
 create mode 100644 utils/keytable/bpf_protocols/pulse_length.c
 create mode 100644 utils/keytable/bpf_protocols/rc_mm.c
configure.ac +4 -0
index 08f5a4c5..10f8628b 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,14 @@ 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_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])
+
 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 ad251915..b500e2f2 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 +21 -0
new file mode 100644
index 00000000..5e4b3d67
@@ -0,0 +1,21 @@
+# Get Clang's default includes on this system, as opposed to those seen by
+# '-target bpf'. This fixes "missing" files on some architectures/distros,
+# such as asm/byteorder.h, asm/socket.h, asm/sockios.h, sys/cdefs.h etc.
+#
+# Use '-idirafter': Don't interfere with include mechanics except where the
+# build would have failed anyways.
+CLANG_SYS_INCLUDES := $(shell $(CLANG) -v -E - </dev/null 2>&1 \
+        | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }')
+
+%.o: %.c
+	$(CLANG) $(CLANG_SYS_INCLUDES) -I$(top_srcdir)/include -target bpf -O2 -c $<
+
+PROTOCOLS = grundig.o pulse_distance.o pulse_length.o rc_mm.o manchester.o
+
+all: $(PROTOCOLS)
+
+# custom target
+install-data-local:
+	$(install_sh) -d "$(DESTDIR)$(keytableuserdir)/protocols"
+	$(install_sh) -d "$(DESTDIR)$(keytablesystemdir)/protocols"
+	$(install_sh) $(PROTOCOLS) "$(DESTDIR)$(keytablesystemdir)/protocols"
utils/keytable/bpf_protocols/bpf_helpers.h new file +315 -0

315 lines not on this page · raw message

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

126 lines not on this page · raw message

utils/keytable/bpf_protocols/manchester.c new file +171 -0

171 lines not on this page · raw message

utils/keytable/bpf_protocols/pulse_distance.c new file +156 -0

156 lines not on this page · raw message

utils/keytable/bpf_protocols/pulse_length.c new file +152 -0

152 lines not on this page · raw message

utils/keytable/bpf_protocols/rc_mm.c new file +139 -0

139 lines not on this page · raw message

v4l-utils.spec.in +1 -1
index f7be08b3..e8203124 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
 # For /etc/udev/rules.d ownership
 Requires:       udev
 Requires:       libv4l = %{version}-%{release}
Signature · 1 line
2.11.0
author
#3 lore raw

PATCH v4 3/6 keytable: add toml keymap reader

In reply to Sean Young

We would like to define BPF based IR protocols from rc_keymaps. We will need per-protocol parameters, so we need a more flexible format than the existing plain-text 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/bpf_load.c  |   21 +-
 utils/keytable/bpf_load.h  |    2 +-
 utils/keytable/keytable.c  |  222 +++++-
 utils/keytable/toml.c      | 1903 ++++++++++++++++++++++++++++++++++++++++++++
 utils/keytable/toml.h      |  110 +++
 6 files changed, 2250 insertions(+), 10 deletions(-)
 create mode 100644 utils/keytable/toml.c
 create mode 100644 utils/keytable/toml.h
utils/keytable/Makefile.am +1 -1
index b500e2f2..90e4c8c8 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
 
 if HAVE_LIBELF
 ir_keytable_SOURCES += bpf.c bpf_load.c bpf.h bpf_load.h
utils/keytable/bpf_load.c +19 -2
index 5e9040a7..6f8a27b0 100644
@@ -13,6 +13,7 @@
 #include <stdlib.h>
 #include <linux/bpf.h>
 #include <assert.h>
+#include "toml.h"
 #include "bpf.h"
 #include "bpf_load.h"
 
@@ -43,6 +44,7 @@ struct bpf_file {
 	Elf_Data *data;
 	int strtabidx;
 	Elf_Data *symbols;
+	struct toml_table_t *toml;
 };
 
 static int load_and_attach(int lirc_fd, struct bpf_file *bpf_file, const char *name, struct bpf_insn *prog, int size)
@@ -184,6 +186,21 @@ static int parse_relo_and_apply(struct bpf_file *bpf_file, GElf_Shdr *shdr,
 
 			if (!bpf_param(sym_name, &value)) {
 				// done
+			} else if (bpf_file->toml &&
+				   (raw = toml_raw_in(bpf_file->toml, sym_name)) != NULL) {
+				int64_t val64;
+
+				if (toml_rtoi(raw, &val64)) {
+					printf(_("variable %s not a integer: %s\n"), sym_name, raw);
+					return 1;
+				}
+
+				if (value < INT_MIN && value > UINT_MAX) {
+					printf(_("variable %s out of range: %s\n"), sym_name, raw);
+					return 1;
+				}
+
+				value = val64;
 			} else if (sym.st_shndx == bpf_file->dataidx) {
 				int32_t *p = (bpf_file->data->d_buf + sym.st_value);
 				value = *p;
@@ -324,9 +341,9 @@ static int load_elf_maps_section(struct bpf_file *bpf_file)
 	return nr_maps;
 }
 
-int load_bpf_file(const char *path, int lirc_fd)
+int load_bpf_file(const char *path, int lirc_fd, struct toml_table_t *toml)
 {
-	struct bpf_file bpf_file = {};
+	struct bpf_file bpf_file = { .toml = toml };
 	int fd, i, ret;
 	Elf *elf;
 	GElf_Ehdr ehdr;
utils/keytable/bpf_load.h +1 -1
index ec9763e4..2775607f 100644
@@ -36,7 +36,7 @@ struct bpf_map_data {
  *
  * returns zero on success
  */
-int load_bpf_file(const char *path, int lirc_fd);
+int load_bpf_file(const char *path, int lirc_fd, struct toml_table_t *toml);
 
 int bpf_param(const char *name, int *val);
 
utils/keytable/keytable.c +216 -6

282 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.11.0
author
#4 lore raw

PATCH v4 5/6 ir-keytable: add tool to aid migration from lircd

In reply to Sean Young

This python script is written to help users translate their lircd.conf remote definition to ir-keytable toml format. The tool does not cover every possible lircd.conf, but the majority should work.

	./lircd2toml.py PD-202.lircd.conf -o PD-202.toml
---
 contrib/Makefile.am   |   3 +-
 contrib/lircd2toml.py | 527 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 529 insertions(+), 1 deletion(-)
 create mode 100755 contrib/lircd2toml.py
contrib/Makefile.am +2 -1
index d41dc539..db572c54 100644
@@ -25,4 +25,5 @@ EXTRA_DIST = \
 	cobalt-ctl \
 	parsers \
 	pci_traffic \
-	v4l_rec.pl
+	v4l_rec.pl \
+	lircd2toml.py
contrib/lircd2toml.py new file +527 -0

527 lines not on this page · raw message

Signature · 1 line
2.11.0
author
#5 lore raw

PATCH v4 6/6 keytable: improve man page wording

In reply to Sean Young

ir should be replaced with rc.

---
 utils/keytable/ir-keytable.1.in | 86 ++++++++++++++++++++++-------------------
 1 file changed, 47 insertions(+), 39 deletions(-)
utils/keytable/ir-keytable.1.in +47 -39
index 60f9dfe9..ffd2d705 100644
@@ -4,83 +4,91 @@ ir\-keytable \- a swiss\-knife tool to handle Remote Controllers.
 .SH SYNOPSIS
 .B ir\-keytable
 [\fIOPTION\fR]... \fI\-\-device\fR [\fI/dev/input/event* device\fR]
-.br 
+.br
 .B ir\-keytable
-[\fIOPTION\fR]... \fI\-\-sysdev\fR [\fIir class (f. ex. rc0)\fR]
-.br 
+[\fIOPTION\fR]... \fI\-\-sysdev\fR [\fIrc class (f. ex. rc0)\fR]
+.br
 .B ir\-keytable
 [\fIOPTION\fR]... [\fIfor using the rc0 sysdev\fR]
 .SH DESCRIPTION
 ir\-keytable is a tool that lists the Remote Controller devices, allows one to
-get/set IR keycode/scancode tables, test events generated by IR, and to
-adjust other Remote Controller options.
-.PP 
+get/set rc keycode/scancode tables, set protocol decoder, test events
+generated by a rc device, and to adjust other Remote Controller options.
+.PP
 Note: You need to have read permissions on /dev/input for most of the
 options to work.
 .SH OPTIONS
-.TP 
+.TP
 \fB\-a\fR, \fB\-\-auto\-load\fR=\fICFGFILE\fR
-Auto\-load a table, based on a configuration file. Only works with sysdev.
-.TP 
+Auto\-load a table, based on a configuration file. Only works with
+\fB\-\-sysdev\fR.
+.TP
 \fB\-c\fR, \fB\-\-clear\fR
-clears the old table
-.TP 
+Clears the scancode to keycode mappings.
+.TP
 \fB\-d\fR, \fB\-\-device\fR=\fIDEV\fR
-ir device to control
+Use specified input device.
 .TP
 \fB\-D\fR, \fB\-\-delay\fR=\fIDELAY\fR
-Sets the delay before repeating a keystroke
-.TP 
+Sets the delay before repeating a keystroke.
+.TP
 \fB\-k\fR, \fB\-\-set\-key\fR=\fISCANKEY\fR
-Change scan/key pairs
-.TP 
+Set scancode to keycode mapping.
+.TP
 \fB\-p\fR, \fB\-\-protocol\fR=\fIPROTOCOL\fR
-Comma seperated list of protocols to enabled (the other ones will be disabled). Alternatively, this is the path to a BPF protocol to be loaded.
+Comma seperated list of kernel protocols or BPF protocol to enable. All
+other protocols are disabled.
 .TP
 \fB\-e\fR, \fB\-\-parameter\fR=\fIPARAMETER\fR
-Commma seperated list of parameters for the BPF protocol
+Commma seperated list of parameters for the BPF protocol.
 .TP
 \fB\-P\fR, \fB\-\-period\fR\=\fiPERIOD\fR
-Sets the period to repeat a keystroke
-.TP 
+Sets the period to repeat a keystroke.
+.TP
 \fB\-r\fR, \fB\-\-read\fR
-reads the current scancode/keycode table
-.TP 
+Read and show the current scancode to keycode mapping.
+.TP
 \fB\-s\fR, \fB\-\-sysdev\fR=\fISYSDEV\fR
-ir class device to control
-.TP 
+rc device to control
+.TP
 \fB\-t\fR, \fB\-\-test\fR
-test if IR is generating events
-.TP 
+test if the rc device is generating events
+.TP
 \fB\-v\fR, \fB\-\-verbose\fR
-enables debug messages
-.TP 
+Enables debug messages.
+.TP
 \fB\-w\fR, \fB\-\-write\fR=\fITABLE\fR
-write (adds) the scancodes to the device scancode/keycode table from the
-specified \fITABLE\fR file
-.TP 
+Reads the protocols and scancode to keycode mapping from the \fITABLE\fR file,
+and enables those on the rc device.
+.TP
 \fB\-?\fR, \fB\-\-help\fR
 Prints the help message
-.TP 
+.TP
 \fB\-\-usage\fR
 Give a short usage message
-.TP 
+.TP
 \fB\-V\fR, \fB\-\-version\fR
 print the v4l2\-utils version
-.PP 
+.PP
 Mandatory or optional arguments to long options are also mandatory or optional
 for any corresponding short options. Options can be combined together.
 .SS The options arguments are:
 .IP \fIDEV\fR
 the /dev/input/event* device to control
 .IP \fISYSDEV\fR
-the ir class as found at /sys/class/rc
+the rc class as found at /sys/class/rc
 .IP \fITABLE\fR
-a file wit a set of scancode=keycode value pairs
+a toml file with a list of protocols and scancode to keycode mappings.
 .IP \fISCANKEY\fR
 a set of scancode1=keycode1,scancode2=keycode2.. value pairs
 .IP \fIPROTOCOL\fR
-Comma separated list of protocols to be enabled (case insensitive). Supported kernel protocols are: NEC, RC-5, RC-6, JVC, SONY, SANYO, LIRC, RC-5-SZ, SHARP, MCE-KBD, XMP, IMON, other, all. There are also BPF protocols: manchester, rc_mm, pulse_distance, grundig. Alternatively, this can be the path to a BPF protocol file to be loaded.
+Comma separated list of kernel protocols to be enabled (case insensitive).
+Supported kernel protocols are: \fBnec\fR, \fBrc\-5\fR, \fBrc\-6\fR, \fBjvc\fR,
+\fBsony\fR, \fBsanyo\fR, \fBrc\-5\-sz\fR, \fBsharp\fR, \fBmce\-kbd\fR,
+\fBxmp\fR, \fBimon\fR, \fBother\fR, \fBall\fR. It can also be a BPF protocol,
+e.g. \fBmanchester\fR, \fBrc_mm\fR, \fBpulse_distance\fR, \fBpulse_length\fR.
+If it does not match any of these, it is taken to be the path of BPF decoder
+to be loaded.
 .IP \fIPARAMETERS\fR
 Comma seperated list of parameters for the BPF protocol being loaded. They have the format of name=value, where value is an number.
 .IP \fIDELAY\fR
@@ -114,8 +122,8 @@ To enable NEC protocol and load a BPF protocol, with a parameter for the BPF pro
 Report bugs to \fBLinux Media Mailing List <[email protected]>\fR
 .SH COPYRIGHT
 Copyright (c) 2010\-2014 by Mauro Carvalho Chehab.
-.PP 
+.PP
 License GPLv2: GNU GPL version 2 <http://gnu.org/licenses/gpl.html>.
-.br 
+.br
 This is free software: you are free to change and redistribute it.
 There is NO WARRANTY, to the extent permitted by law.
Signature · 1 line
2.11.0