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 解析器实现
300KB
7.5K SLoC
cir - Linux 红外工具的新实现
对于 Linux,有工具可以与任何红外硬件交互:ir-ctl
和 ir-keytable
。这些工具可以加载简单的红外键映射并加载解码器,以及发送简单的红外信号。红外解码器是硬编码的,内核中包含了一个小的硬编码集。还有一个 lirc 守护进程及其工具,支持更多的红外协议,但当然不是全部。
这个工具替代了所有这些工具,但具有一些主要的新特性
- Pronto 十六进制代码
- IRP 支持
- lircd.conf 远程定义支持
- 无守护进程(使用 BPF)
Pronto 十六进制代码是编码原始红外、NEC、RC-5 等的一种相当直接的方式。
IRP 是一种 DSL 语言,可以表达 任何红外协议。目标是解析 IRP 并编译解码器到 BPF。因此,可以直接支持任何协议。
列出红外设备(cir 配置)
这是 cir 的等价物,即不带参数的 ir-keytable
和 ir-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