【RK3288】【android11】赤外線リモコンに対応

生活の中にはさまざまな波長の電磁波が溢れていますが、いわゆる可視(カラー)光とは、人間の目に見える電磁スペクトルのことで、その波長は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) を確認できます。

おすすめ

転載: blog.csdn.net/weixin_45639314/article/details/131127607