4 个版本

0.1.3 2024年4月28日
0.1.2 2023年2月7日
0.1.1 2022年12月10日
0.1.0 2022年5月21日

#744 in 解析器实现

MIT 许可证

300KB
7.5K SLoC

cir - Linux 红外工具的新实现

对于 Linux,有工具可以与任何红外硬件交互:ir-ctlir-keytable。这些工具可以加载简单的红外键映射并加载解码器,以及发送简单的红外信号。红外解码器是硬编码的,内核中包含了一个小的硬编码集。还有一个 lirc 守护进程及其工具,支持更多的红外协议,但当然不是全部。

这个工具替代了所有这些工具,但具有一些主要的新特性

  • Pronto 十六进制代码
  • IRP 支持
  • lircd.conf 远程定义支持
  • 无守护进程(使用 BPF)

Pronto 十六进制代码是编码原始红外、NEC、RC-5 等的一种相当直接的方式。

IRP 是一种 DSL 语言,可以表达 任何红外协议。目标是解析 IRP 并编译解码器到 BPF。因此,可以直接支持任何协议。

列出红外设备(cir 配置)

这是 cir 的等价物,即不带参数的 ir-keytableir-ctl -f

$ cir config
rc0:
        Device Name             : Media Center Ed. eHome Infrared Remote Transceiver (1784:0008)
        Driver                  : mceusb
        Default Keymap          : rc-rc6-mce
        Input Device            : /dev/input/event10
        Bus                     : USB
        Vendor/product          : 1784:0008 version 0x0101
        Repeat                  : delay 500 ms, period 125 ms
        LIRC Device             : /dev/lirc0
        LIRC Receiver           : raw receiver
        LIRC Resolution         : 50 microseconds
        LIRC Timeout            : 125000 microseconds
        LIRC Timeout Range      : 50 to 1250000 microseconds
        LIRC Wideband Receiver  : yes
        LIRC Measure Carrier    : yes
        LIRC Transmitter        : yes
        LIRC Set Tx Carrier     : yes
        LIRC Set Tx Duty Cycle  : no
        LIRC Transmitters       : 2
        BPF protocols           : 
        Supported Protocols     : rc-5 nec rc-6 jvc sony rc-5-sz sanyo sharp mce_kbd xmp imon rc-mm
        Enabled Protocols       : 

发送/传输(cir 传输)

如果您有一个 .lircd.conf 文件或 .toml 键映射,可以使用以下命令发送

cir transmit keymap foo.lircd.conf KEY_CHANNELUP

或者,您可以像这样直接发送原始红外

cir transmit rawir '+9000 -4500 +560'

您还可以发送文件或 Linux 内核扫描码,就像 ir-ctl 工具一样。这支持 mode2 文件或原始红外文件。

cir transmit rawir -s input-file -S nec:0xcafe

您还可以发送 pronto 代码

cir transmit pronto '5000 0073 0000 0001 0001 0001'

最后,您使用 IRP 表示法和设置参数。这对于实验 IRP 非常有用;使用 --dry-run-n)来避免发送。

cir transmit irp -n -fF=2 '{40k,600}<1,-1|2,-1>(4,-1,F:8,^45m)[F:0..255]'

解码(cir 解码)

如果您有一个 .lircd.conf 文件或 .toml 键映射,并想解码红外,而不更改任何配置。

cir decode keymap foo.lircd.conf

这将从第一个 lirc 设备接收红外。您也可以在命令行或文件中解码红外。

cir decode keymap foo.lircd.conf -r '+9000 -4500 +560'

cir decode keymap foo.lircd.conf -f input-file

如果您希望使用IRP表示法进行解码,这也是可能的。

cir decode irp '{40k,600}<1,-1|2,-1>(4,-1,F:8,^45m)[F:0..255]'

如同上面所述,输入可以来自lirc设备(可选指定设备,使用-d /dev/lirc1-s rc),命令行(-r '+100 -200 +100')或文件(-f filename)。

配置(cir config -w)

这是cir的irir-keytable -w的等价物。

cir config -s rc0 -w foo.lircd.conf

这将生成一个针对foo.lircd.conf的BPF解码器并加载它。

在启动时,ir-keytable -a -s rc0将从/etc/rc_maps.cfg读取正确的键盘映射。

cir auto -s rc0

测试配置(cir test)

这是cir的irir-keytable -t的等价物。

cir test

状态

所有加载键盘映射的功能都已就绪。需要更多的测试和润色。目标是到2024年底完成。

构建

在Linux上,cir依赖于llvm进行BPF代码生成。在Fedora上,您需要安装llvm-devel软件包和Ubuntu上的llvm-dev

cargo install --git https://github.com/seanyoung/cir cir

依赖关系

~7–20MB
~262K SLoC