Add BPF decoders to ir-keytable
Subsystems (4)
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
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
@@ -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
@@ -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
@@ -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/keytable.c +293 -25
318 lines not on this page · 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.
PATCH v4 2/6 keytable: add bpf protocols
In reply to Sean YoungAdd 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
@@ -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
@@ -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
@@ -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
@@ -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
PATCH v4 3/6 keytable: add toml keymap reader
In reply to Sean YoungWe 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
@@ -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
@@ -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
@@ -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
PATCH v4 5/6 ir-keytable: add tool to aid migration from lircd
In reply to Sean YoungThis 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
@@ -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
PATCH v4 6/6 keytable: improve man page wording
In reply to Sean Youngir 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
@@ -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