RK3568 android11 适配红外遥控器
生活中充满了各种波长的电磁波,所谓的可见(色)光就是人眼可见的电磁波谱,其波长为 380~770nm,为了避免遥控器发射的光造成人眼不适及减少一般人造光源干扰,故选用人眼不可见的红外线(Infrared)波长,目前业界遥控器发射头几乎都选用 940nm 波长。
红外线遥控器的应用也是一种无线讯号传输,跟大部分的无线传输技术一样,为了避免环境中同波长电磁波的干扰,故会在其传输讯号上加上如下图所示的载波(carrier frequency),在遥控应用的载波范围为 30~60kHz,而 38kHz 为最常见的载波频率。
目前红外遥控协议有RC5、 SIRCS、 Sy、 RECS80、Denon、NEC、Motorola、Japanese、SAMSWNG 和 Daewoo 等。Rockchip平台只支持 NEC 编码,国内电器大多使用该编码协议。
RK平台PWM 有三种工作模式, reference mode, one-shot mode 和 continuousmode. 红外遥控器就采用 reference mode,这种模式下 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平台可直接查看红外接收,打开键值命令如下:
echo 1 > /sys/module/rockchip_pwm_remotectl/parameters/code_print
内核日志太多,可使用adb 命令(或者串口打印)过滤直接得到键值,USERCODE
添加遥控dts 对应的 rockchip,usercode,RMC_GETDATA
对应键值可通过rockchip,key_table 转换为rk-input键值。
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 \
调试过程中power按键没有作用问题:
理论上添加完 usercode以及keycode 后,系统需要重新启动一次后power键才会起作用。(此时reboot后看串口打印keycode值,跟一下u-boot阶段代码直接替换之前的powerkey_keycode值),可实现第一次烧录开机power键可用的效果。
注:
a) “确定”键,是 KEY_REPLY。
b) /vendor/usr/keylayout 与/system/usr/keylayout 作用相同。
c) 红外注册失败,可查看PWM GPIO复用(iomux)。
- 分享
- 举报
-
浏览量:1213次2024-01-10 10:01:45
-
浏览量:4978次2022-07-13 15:47:15
-
浏览量:8624次2022-06-11 10:47:27
-
浏览量:1329次2021-02-22 18:20:08
-
浏览量:1242次2024-01-10 10:27:15
-
浏览量:2072次2020-03-11 09:22:16
-
浏览量:96次2024-09-11 16:57:00
-
浏览量:6617次2021-04-20 17:50:47
-
浏览量:5533次2021-05-11 17:35:27
-
浏览量:2524次2022-09-30 16:48:25
-
浏览量:5677次2021-12-10 15:40:21
-
浏览量:4837次2022-09-30 16:40:59
-
浏览量:3874次2021-12-10 19:58:10
-
浏览量:2915次2021-06-15 09:44:15
-
浏览量:1165次2023-11-20 11:14:23
-
浏览量:4954次2022-09-26 11:51:17
-
浏览量:32438次2022-06-11 11:06:24
-
浏览量:1788次2022-02-02 09:00:36
-
浏览量:3495次2022-03-11 14:12:46
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
一休摸鱼
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明