嵌入式学习小组
直播中

李海玮

7年用户 189经验值
私信 关注

RK3288红外遥控器增加系统中已有的键值

RK3288红外遥控器增加系统中已有的键值



回帖(3)

李笑才

2020-12-28 15:50:12
查看遥控器的用户码和键值,供应商给的可能是反码,也有可能不正确。
打开红外打印功能有以下两种方式,内核打印可以用串口,也可以在adb中使用指令 # cat proc/kmsg
(1)通过指令打开红外接收的打印功能,然后按遥控器按键,就可以在内核打印中看到用户码和键值。
$ adb shell
root@rk3288:/ # cdsys/module/rockchip_pwm_remotectl/parameters
cdsys/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 intrk_remote_print_code = 1;
举报

郭舒静

2020-12-28 15:50:25
在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 = ;
        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
举报

董达勇

2020-12-28 15:50:39
打开下面路径的文件,可以看到功能码和上层对应的关系, 如果新添加的按键值没有,也需要按照已有的格式手动添加。
没有的按键值,在按键时,上层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
举报

更多回帖

发帖
×
20
完善资料,
赚取积分