3. 远程控制器协议和扫描码

红外信号通过协议编码为一系列脉冲和间隔。这些协议可以编码例如地址(哪个设备应该响应)和命令:它应该做什么。对于给定的协议,这些值在不同设备之间并不总是一致的。

因此,红外解码器的输出是一个扫描码;一个单一的 u32 值。使用键映射表,这可以映射到 Linux 键码。

其他内容也可以被编码。一些红外协议编码一个切换位;这是为了区分同一按钮是被按住,还是已经被释放并再次按下。如果已经被释放并再次按下,切换位将从一个红外消息反转到下一个。

一些遥控器有可用于控制鼠标的指针类型设备;一些空调系统可以通过红外设置其目标温度。

以下是内核所了解的协议,并列出了每个协议的扫描码编码方式。

3.1. rc-5 (RC_PROTO_RC5)

此红外协议使用曼彻斯特编码来编码 14 位。此处有详细说明:https://www.sbprojects.net/knowledge/ir/rc5.php

扫描码编码与 lirc 守护程序 (lircd) rc5 协议或曼彻斯特 BPF 解码器**不**一致。

rc5 位扫描码映射

rc-5 位

扫描码位

描述

1

起始位,始终置位

1

6 (反转)

rc5 中的第二个起始位,作为第 6 个命令位重用

1

切换位

5

8 到 13

地址

6

0 到 5

命令

rc5 有一个变体,称为 rc5x 或扩展 rc5,其中第二个停止位是第 6 个命令位,但反转。这样做是为了使扫描码和编码与现有方案兼容。此位以反转形式存储在扫描码的第 6 位中。这样做是为了使其与有两个起始位的普通 rc-5 兼容。

3.2. rc-5-sz (RC_PROTO_RC5_SZ)

这与 rc-5 非常相似,但长了一位。扫描码的编码方式不同。

rc-5-sz 位扫描码映射

rc-5-sz 位

扫描码位

描述

1

起始位,始终置位

1

13

地址位

1

切换位

6

6 到 11

地址

6

0 到 5

命令

3.3. rc-5x-20 (RC_PROTO_RC5X_20)

此 rc-5 扩展到编码 20 位。在第 8 位之后有 3555 微秒的间隔。

rc-5x-20 位扫描码映射

rc-5-sz 位

扫描码位

描述

1

起始位,始终置位

1

14

地址位

1

切换位

5

16 到 20

地址

6

8 到 13

地址

6

0 到 5

命令

3.4. jvc (RC_PROTO_JVC)

JVC 协议与 NEC 协议非常相似,只是没有反转值。此处有说明:https://www.sbprojects.net/knowledge/ir/jvc.php

扫描码是一个 16 位值,其中地址是低 8 位,命令是高 8 位;这与红外顺序相反。

3.5. sony-12 (RC_PROTO_SONY12)

索尼协议是一种脉宽编码。有三种变体,仅在位数和扫描码编码上有所不同。

sony-12 位扫描码映射

sony-12 位

扫描码位

描述

5

16 到 20

设备

7

0 到 6

功能

3.6. sony-15 (RC_PROTO_SONY15)

索尼协议是一种脉宽编码。有三种变体,仅在位数和扫描码编码上有所不同。

sony-12 位扫描码映射

sony-12 位

扫描码位

描述

8

16 到 23

设备

7

0 到 6

功能

3.7. sony-20 (RC_PROTO_SONY20)

索尼协议是一种脉宽编码。有三种变体,仅在位数和扫描码编码上有所不同。

sony-20 位扫描码映射

sony-20 位

扫描码位

描述

5

16 到 20

设备

7

0 到 7

设备

8

8 到 15

扩展位

3.8. nec (RC_PROTO_NEC)

NEC 协议编码一个 8 位地址和一个 8 位命令。此处有说明:https://www.sbprojects.net/knowledge/ir/nec.php。请注意,协议首先发送最低有效位。

作为检查,NEC 协议发送地址和命令两次;第二次是反转的。这样做是为了验证。

一个普通的 NEC 红外消息有 16 位;高 8 位是地址,低 8 位是命令。

3.9. nec-x (RC_PROTO_NECX)

扩展 NEC 有一个 16 位地址和一个 8 位命令。这编码为一个 24 位值,正如您所期望的,低 8 位是命令,高 16 位是地址。

3.10. nec-32 (RC_PROTO_NEC32)

NEC-32 不发送反转地址或反转命令;整个消息,所有 32 位,都被使用。

为了正确解码,第二个 8 位不能是第一个 8 位的反转值,并且最后一个 8 位也不能是第三个 8 位值的反转值。

扫描码的编码有些不寻常。

nec-32 位扫描码映射

nec-32 位

扫描码位

前 8 位

16 到 23

后 8 位

24 到 31

第三个 8 位

0 到 7

第四个 8 位

8 到 15

3.11. sanyo (RC_PROTO_SANYO)

Sanyo 协议类似于 NEC 协议,但地址为 13 位而不是 8 位。地址和命令都跟着它们的反转版本,但这些不出现在扫描码中。

扫描码的 8 到 20 位是 13 位地址,低 8 位是命令。

3.12. mcir2-kbd (RC_PROTO_MCIR2_KBD)

此协议由 Microsoft MCE 键盘生成,用于键盘事件。请参阅 ir-mce_kbd-decoder.c 以了解其编码方式。

3.13. mcir2-mse (RC_PROTO_MCIR2_MSE)

此协议由 Microsoft MCE 键盘生成,用于指针事件。请参阅 ir-mce_kbd-decoder.c 以了解其编码方式。

3.14. rc-6-0 (RC_PROTO_RC6_0)

这是模式 0 中的 rc-6。rc-6 的描述在这里 https://www.sbprojects.net/knowledge/ir/rc6.php。扫描码与协议中的 16 位完全一致。还有一个切换位。

3.15. rc-6-6a-20 (RC_PROTO_RC6_6A_20)

这是模式 6a 中的 rc-6,20 位。rc-6 的描述在这里 https://www.sbprojects.net/knowledge/ir/rc6.php。扫描码与协议中的 20 位完全一致。还有一个切换位。

3.16. rc-6-6a-24 (RC_PROTO_RC6_6A_24)

这是模式 6a 中的 rc-6,24 位。rc-6 的描述在这里 https://www.sbprojects.net/knowledge/ir/rc6.php。扫描码与协议中的 24 位完全一致。还有一个切换位。

3.17. rc-6-6a-32 (RC_PROTO_RC6_6A_32)

这是模式 6a 中的 rc-6,32 位。rc-6 的描述在这里 https://www.sbprojects.net/knowledge/ir/rc6.php。高 16 位是供应商,低 16 位是供应商特定位。此协议适用于非 Microsoft MCE 变体 (vendor != 0x800f)。

3.18. rc-6-mce (RC_PROTO_RC6_MCE)

这是模式 6a 中的 rc-6,32 位。高 16 位是供应商,低 16 位是供应商特定位。此协议适用于 Microsoft MCE 变体 (vendor = 0x800f)。协议本身的切换位被忽略,第 16 位应作为切换位。

3.19. sharp (RC_PROTO_SHARP)

这是夏普录像机使用的协议,此处有说明:https://www.sbprojects.net/knowledge/ir/sharp.php。正常值和反转值之间有很长的(40ms)间隔,一些红外接收器无法解码。

有一个 5 位地址和一个 8 位命令。在扫描码中,地址在第 8 到 12 位,命令在第 0 到 7 位。

3.20. xmp (RC_PROTO_XMP)

此协议有多个版本,目前仅支持版本 1。请参阅解码器 (ir-xmp-decoder.c) 以了解其编码方式。

3.21. cec (RC_PROTO_CEC)

这不是一个红外协议,而是一个通过 CEC 的协议。CEC 基础设施使用 rc-core 处理 CEC 命令,以便它们可以轻松地重新映射。

3.22. imon (RC_PROTO_IMON)

此协议由 Antec Veris/SoundGraph iMON 遥控器使用。

该协议描述了按钮按下和指针移动。协议编码 31 位,扫描码就是这 31 位,最高位始终为 0。

3.23. rc-mm-12 (RC_PROTO_RCMM12)

rc-mm 协议此处有描述 https://www.sbprojects.net/knowledge/ir/rcmm.php。扫描码就是 12 位。

3.24. rc-mm-24 (RC_PROTO_RCMM24)

rc-mm 协议此处有描述 https://www.sbprojects.net/knowledge/ir/rcmm.php。扫描码就是 24 位。

3.25. rc-mm-32 (RC_PROTO_RCMM32)

rc-mm 协议此处有描述 https://www.sbprojects.net/knowledge/ir/rcmm.php。扫描码就是 32 位。

3.26. xbox-dvd (RC_PROTO_XBOX_DVD)

此协议由为初代 XBox 制作的 XBox DVD 遥控器使用。内核中没有此协议的解码器或编码器。USB 设备解码此协议。v4l-utils 中有一个 BPF 解码器可用。