3. video4linux 驱动中的红外遥控支持

作者:Gerd Hoffmann,Mauro Carvalho Chehab

3.1. 基础知识

大多数模拟和数字电视板都支持遥控器。其中一些具有微处理器,接收红外载波,转换为脉冲/间隔序列,然后转换为扫描码,并将这些码返回到用户空间(“扫描码模式”)。其他板仅返回脉冲/间隔序列(“原始模式”)。

扫描码模式下的遥控器支持由标准 Linux 输入层提供。原始模式下的支持通过 LIRC 提供。

为了检查支持并进行测试,建议下载 v4l-utils。它提供了两个工具来处理遥控器:

  • ir-keytable:提供查询遥控器、列出其支持的协议、启用内核内红外解码器支持或切换协议以及测试扫描码接收的方法;

  • ir-ctl:提供通过 LIRC 接口处理支持原始模式的遥控器的工具。

通常,当电视卡被检测到时,遥控器模块会自动加载。但是,对于少数设备,您需要手动加载 ir-kbd-i2c 模块。

3.2. 工作原理

这些模块将遥控器注册为 Linux 输入层内的键盘,即您会将遥控器的按键视为正常的按键(如果启用了 CONFIG_INPUT_KEYBOARD)。

使用事件设备 (CONFIG_INPUT_EVDEV),应用程序可以通过 /dev/input/event<n> 设备访问遥控器。udev/systemd 将自动创建设备。如果您安装了 v4l-utils,它也可能自动加载与默认不同的键表。有关详细信息,请参阅 v4l-utils ir-keytable.1 手册页。

ir-keytable 工具非常适合故障排除,例如检查输入设备是否确实存在、它是哪个设备、检查按下遥控器上的按键是否确实生成事件等等。您还可以使用任何其他更改键映射的输入工具,例如 input kbd 工具。

3.2.1. 与 lircd 一起使用

lircd 守护进程的最新版本支持从 Linux 输入层(通过事件设备)读取事件。它还支持以 lirc 模式接收红外码。

3.2.2. 不使用 lircd

Xorg 识别多个数值小于 247 的红外键码。随着 Wayland 的出现,输入驱动也得到了更新,现在应该接受所有键码。然而,您可能只想将键码重新分配为您喜欢的媒体应用程序所接受的键码。

这可以通过设置 v4l-utils 在运行时加载您自己的键表来完成。有关详细信息,请阅读 ir-keytable.1 手册页。