3. 遠端控制器協議和掃描碼¶
紅外訊號透過協議編碼為一系列脈衝和間隔。這些協議可以編碼例如地址(哪個裝置應該響應)和命令:它應該做什麼。對於給定的協議,這些值在不同裝置之間並不總是一致的。
因此,紅外解碼器的輸出是一個掃描碼;一個單一的 u32 值。使用鍵對映表,這可以對映到 Linux 鍵碼。
其他內容也可以被編碼。一些紅外協議編碼一個切換位;這是為了區分同一按鈕是被按住,還是已經被釋放並再次按下。如果已經被釋放並再次按下,切換位將從一個紅外訊息反轉到下一個。
一些遙控器有可用於控制滑鼠的指標型別裝置;一些空調系統可以透過紅外設定其目標溫度。
以下是核心所瞭解的協議,並列出了每個協議的掃描碼編碼方式。
3.1. rc-5 (RC_PROTO_RC5)¶
此紅外協議使用曼徹斯特編碼來編碼 14 位。此處有詳細說明:https://www.sbprojects.net/knowledge/ir/rc5.php。
掃描碼編碼與 lirc 守護程式 (lircd) rc5 協議或曼徹斯特 BPF 解碼器**不**一致。
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 位 |
掃描碼位 |
描述 |
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-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 位 |
掃描碼位 |
描述 |
5 |
16 到 20 |
裝置 |
7 |
0 到 6 |
功能 |
3.6. sony-15 (RC_PROTO_SONY15)¶
索尼協議是一種脈寬編碼。有三種變體,僅在位數和掃描碼編碼上有所不同。
sony-12 位 |
掃描碼位 |
描述 |
8 |
16 到 23 |
裝置 |
7 |
0 到 6 |
功能 |
3.7. sony-20 (RC_PROTO_SONY20)¶
索尼協議是一種脈寬編碼。有三種變體,僅在位數和掃描碼編碼上有所不同。
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 位 |
掃描碼位 |
前 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.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 解碼器可用。