| |
cpu:RK3288
系统:Android 5.1
1、查看遥控器的用户码和键值,供应商给的可能是反码,也有可能不正确。
打开红外打印功能有以下两种方式,内核打印可以用串口,也可以在adb中使用指令 # cat proc/kmsg
(1)通过指令打开红外接收的打印功能,然后按遥控器按键,就可以在内核打印中看到用户码和键值。
$ adb shell
root@rk3288:/ # cd sys/module/rockchip_pwm_remotectl/parameters
cd sys/module/rockchip_pwm_remotectl/parameters
root@rk3288:/sys/module/rockchip_pwm_remotectl/parameters # ls
ls
code_print
dbg_level
root@rk3288:/sys/module/rockchip_pwm_remotectl/parameters # cat code_print
cat code_print
0
root@rk3288:/sys/module/rockchip_pwm_remotectl/parameters # echo 1 > code_print
echo 1 > code_print
(2)在红外接收的源码中,给下面变量赋值,也可以打印用户码和键值,但需要重新编译烧录内核
path:kernel/drivers/input/remotectl/rockchip_pwm_remotectl.c
static int rk_remote_print_code = 1;
2、在dts文件中增加键值,绝大部分键值系统中已经定义,如果没有的就需要自己添加。
path:kernel/arch/arm/boot/dts/rk3288.dtsi
remotectl: pwm@ff680000 {
compatible = "rockchip,remotectl-pwm";
reg = <0xff680000 0x10>;
#pwm-cells = <2>;
pinctrl-names = "default";
pinctrl-0 = <&pwm0_pin>;
clocks = <&clk_gates11 11>;
clock-names = "pclk_pwm";
remote_pwm_id = <0>;
interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
remote_pwm_id:使用pwm0
path:kernel/arch/arm/boot/dts/rk3288-tb_8846.dts
&remotectl {
status = "okay";
handle_cpu_id = <2>;
ir_key0{
rockchip,usercode = <0xff00>;
rockchip,key_table =
<0xf0 KEY_POWER>, // Power
<0xad KEY_HOME>, // Home
<0xef KEY_MENU>, // Menu
<0xa7 KEY_MUTE>, // mute
<0xa1 388>, // Mouse
<0xb2 KEY_UP>, // Up
<0xee KEY_PAGEUP>, // PageUp
<0xa3 KEY_VOLUMEUP>, // Vol+
<0xa8 KEY_LEFT>, // Left
<0xa4 KEY_ENTER>, // Ok/ENTER
<0xa0 KEY_RIGHT>, // Right
<0xab KEY_VOLUMEDOWN>, // Vol-
<0xa9 KEY_TAB>, // Tab
<0xa5 KEY_DOWN>, // Down
<0xed KEY_PAGEDOWN>, // PageDown
<0xac KEY_BACK>, // Back
<0xe8 KEY_1>, // 1
<0xe4 KEY_2>, // 2
<0xe0 KEY_3>, // 3
<0xe9 KEY_4>, // 4
<0xe5 KEY_5>, // 5
<0xe1 KEY_6>, // 6
<0xea KEY_7>, // 7
<0xe6 KEY_8>, // 8
<0xe2 KEY_9>, // 9
<0xe7 KEY_0>, // 0
<0xeb KEY_DOT>, // .
<0xe3 KEY_DELETE>, // Del
<0xa6 KEY_PAUSE>, // Pause
<0xaa KEY_PLAY>; // Play
};
};
usercode:用户码
key_table:左侧为遥控器键值,右侧为按键对应的功能码
绝大部分功能码可以在下面文件中查找到,写宏或者对应的数字都可以(例如mouse键),如果的确没有,可以用功能键代替或者手动添加。
path:kernel/include/dt-bindings/input/input.h
此时,编译烧录,按键值就可以通过 getevent 查看到,但app中收到的按键值可能与实际不对应或者未知按键。
getevent用法:https://www.cnblogs.com/lialong1st/p/9093851.html
3、打开下面路径的文件,可以看到功能码和上层对应的关系, 如果新添加的按键值没有,也需要按照已有的格式手动添加。
没有的按键值,在按键时,上层app收到的值是未知按键。
path:device/rockchip/common/ff680000_pwm.kl
key 28 ENTER
key 116 POWER
key 158 BACK
key 139 MENU
key 217 SEARCH
key 232 DPAD_CENTER
key 108 DPAD_DOWN
key 103 DPAD_UP
key 102 HOME
key 105 DPAD_LEFT
key 106 DPAD_RIGHT
key 115 VOLUME_UP
key 114 VOLUME_DOWN
key 143 NOTIFICATION
key 113 VOLUME_MUTE
key 388 TV_KEYMOUSE_MODE_SWITCH
key 104 PAGE_UP
key 109 PAGE_DOWN
key 15 TAB
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
中间的数字是功能码对应的数字,与第二步的查找方法一致。
右侧的是与上层对应的关系,在下面路径中任意一个都可以查找到,如有特殊功能键则需要添加。
path:frameworks/base/core/java/android/view/KeyEvent.java(例如:KEYCODE_DPAD_DOWN 只需要取后半部分就可以)
path:frameworks/native/include/input/InputEventLabels.h(例如:DPAD_DOWN 只需要取括号内部的就可以)
注意:数字键不要用小键盘(NUMPAD_0 等等),因为小键盘有多功能。
此时,就大功告成了。
下面为简单的遥控器测试app源码
MainActivity.java
View Code
activity_main.xml
View Code