生活の中にはさまざまな波長の電磁波が溢れていますが、いわゆる可視(カラー)光とは、人間の目に見える電磁スペクトルのことで、その波長は380~770nmです。人間の目には見えず、一般的な人工光源の干渉を減らすため、人間の目には見えない赤外線(赤外線)の波長が選択されており、現在、業界のほとんどすべてのリモコン発光器は940nmの波長を使用しています。
赤外線リモコンの応用も無線信号伝送の一種であり、ほとんどの無線伝送技術と同様に、環境中の同じ波長の電磁波の干渉を避けるために、図に示すような搬送波周波数(キャリア周波数)が必要となります。リモートコントロールアプリケーションのキャリア範囲は 30 ~ 60kHz で、38kHz が最も一般的なキャリア周波数です。
現在、赤外線リモコン プロトコルには、RC5、SIRCS、Sy、RECS80、Denon、NEC、Motorola、Japanese、SAMSWNG、Daewoo などが含まれます。Rockchip平台只支持 NEC 编码
, ほとんどの家庭用電化製品はこのエンコード プロトコルを使用しています。
RK プラットフォーム PWM には、リファレンス モード、ワンショット モード、連続モードの 3 つの動作モードがあります。赤外線リモコンはリファレンス モードを使用します。このモードでは、PWM は入力のハイ レベルとロー レベルの幅をキャプチャし、割り込みを生成できます。割り込みを受信すると、CPU は対応するレジスタを読み取ります。
1. 概略図を参照してカーネル IR の構成を追加します
1.1 使用中のデバイス ツリーに次の構成を追加します。
&pwm3 {
status = "okay";
compatible = "rockchip,remotectl-pwm";
remote_pwm_id = <3>;
handle_cpu_id = <1>;
remote_support_psci = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pwm3_pins>;
ir_key1 {
rockchip,usercode = <0x4040>;
rockchip,key_table =
<0xf2 KEY_REPLY>,
<0xba KEY_BACK>,
<0xf4 KEY_UP>,
<0xf1 KEY_DOWN>,
<0xef KEY_LEFT>,
<0xee KEY_RIGHT>,
<0xbd KEY_HOME>,
<0xea KEY_VOLUMEUP>,
<0xe3 KEY_VOLUMEDOWN>,
<0xe2 KEY_SEARCH>,
<0xb2 KEY_POWER>,
<0xbc KEY_MUTE>,
<0xec KEY_MENU>,
<0xbf 0x190>,
<0xe0 0x191>,
<0xe1 0x192>,
<0xe9 183>,
<0xe6 248>,
<0xe8 185>,
<0xe7 186>,
<0xf0 388>,
<0xbe 0x175>;
};
......
};
1.2 入力デバイスを確認し、追加したばかりの pwm 赤外線デバイスを見つけます。ドライバーは正常にロードされ、次のステップでは、キーの値に従ってリモコンを追加します。
\> adb shell
rk3568_r:/ # getevent
add device 1: /dev/input/event3
name: "Logitech USB Optical Mouse"
add device 2: /dev/input/event2
name: "WDR USB Camera: WDR USB Camera"
add device 3: /dev/input/event0
name: "fdd70030.pwm"
add device 4: /dev/input/event1
name: "rk805 pwrkey"
add device 5: /dev/input/event4
name: "adc-keys"
add device 6: /dev/input/event5
name: "rk-headset"
2. キー値を報告するための赤外線ボタンを追加します (rk プラットフォームによって別途定義されます)
rk プラットフォームは赤外線受信機を直接表示でき、キー値を開くコマンドは次のとおりです。
エコー 1 > /sys/module/rockchip_pwm_remotectl/parameters/code_print
カーネル ログが多すぎる場合は、adb コマンド (またはシリアル ポート出力) を使用してフィルタリングしてキー値を直接取得し、USERCODE
リモート コントロール dts に対応するロックチップとユーザーコードを追加すると、RMC_GETDATA
対応するキー値をrk-input キー値は、rockchip、key_table を介して入力されます。
adb root;adb shell
# cat /dev/kmsg | grep USERCODE -A 2
6,1136,469064745,-;USERCODE=0x4040
6,1137,469091760,-;RMC_GETDATA=b2
6,1138,482889791,-;USERCODE=0x4040
6,1139,482916765,-;RMC_GETDATA=b4
文字キーと記号キーは Linux の標準キー値であり、 kernel/include/dt-bindings/input/linux-event-codes.h
ファイル内で表示できます。
3. キーと値の変換を追加する
Linux の標準キー値は Android の標準キー値と同じではないため、対応関係に合わせてファイルを変換する必要があります。中間変換設定ファイルは、赤外線リモコンに応じて、PWM ラベルの名前に対応する設定ファイルと一致するように PWM を使用します。このデバッグでは、PWM3 に対応する番号 pwm3: pwm@fdd70030 {、キーと値の変換設定ファイルの名前fdd70030_pwm.kl
、およびデバイス記述ファイルは fdd70030_pwm.idc を使用します。
Android キーの値がわからない場合は、
frameworks/base/core/java/android/view/KeyEvent.java
ファイルを表示できます。
一時的なデバッグのために手動でコピーし/vendor/usr/keylayout
、再起動して有効にすることができます。
fdd70030_pwm.idc
device.internal = 1 #是否为内部设备
audio.mic = 0 #是否带mic
dd70030_pwm.kl
key 116 POWER
key 102 HOME
key 139 MENU
key 113 VOLUME_MUTE
key 115 VOLUME_UP
key 114 VOLUME_DOWN
key 158 BACK
key 232 DPAD_CENTER
key 103 DPAD_UP
key 108 DPAD_DOWN
key 105 DPAD_LEFT
key 106 DPAD_RIGHT
key 240 PROFILE_SWITCH
key 15 TAB
key 104 PAGE_UP
key 109 PAGE_DOWN
key 2 1
key 3 2
key 4 3
key 5 4
key 6 5
key 7 6
key 8 7
key 9 8
key 10 9
key 11 0
key 52 PERIOD
key 111 DEL
key 119 MEDIA_PAUSE
key 207 MEDIA_PLAY
key 418 F3
key 419 F4
4. 自動的にコンパイルとビルドを行う
fdd70030_pwm.kl と fdd70030_pwm.idc をdevice/rockchip/common
ディレクトリにコピーする必要があります。device.mk にコピー ルールを追加すると、コンパイル時に指定したディレクトリに自動的にコピーされます。
PRODUCT_COPY_FILES += \
device/rockchip/common/fdd70030_pwm.kl:system/usr/keylayout/fdd70030_pwm.kl \
デバッグ中は電源ボタンは効果がありません。
理論的には、ユーザーコードとキーコードを追加した後、システムは重新启动
電源ボタンを 1 回使用する必要があります。(このとき、再起動後、シリアル ポートによって出力されたキーコード値を確認し、以前の powerkey_keycode 値を U-Boot ステージ コードに直接置き換えます)。これにより、電源キーを最初に使用できるようになります。電源キーが焼き付けられる時間。
注:
a) 「OK」キーは KEY_REPLY です。
b) /vendor/usr/keylayout は /system/usr/keylayout と同じです。
c) 赤外線の登録に失敗しました。PWM GPIO 多重化 (iomux) を確認できます。