瑞芯微Rockchip开发者社区
直播中

李勇俊

7年用户 1486经验值
私信 关注
[问答]

RK3399开发板如何增加红外遥控器支持?

RK3399开发板如何增加红外遥控器支持?

回帖(1)

章伟

2022-3-7 10:36:30
修改DTSI文件


$ vi kernel/arch/arm64/boot/dts/rockchip/rk3399pro-toybrick-prod.dtsi

// add by renton
&pwm3 {
    status = "okay";
    pinctrl-names = "default";
    interrupts = ;
    compatible = "rockchip,remotectl-pwm";
    remote_pwm_id = <3>;
    handle_cpu_id = <1>;
    ir_key1 {
       rockchip,usercode = <0x1980>;
       rockchip,key_table =
                <0xef   KEY_POWER>,
                <0xe2   0xe2>,
                <0xe0   KEY_MUTE>,
                <0xe8   KEY_UP>,
                <0xe9   KEY_DOWN>,
                <0xb0   KEY_LEFT>,
                <0xae   KEY_RIGHT>,
                <0xaf   KEY_ENTER>,
                <0xe6   KEY_HOME>,
                <0xe7   KEY_MENU>,
                <0xe5   KEY_BACK>,
                <0xe3   KEY_VOLUMEUP>,
                <0xb9   KEY_VOLUMEDOWN>,
                <0xb6   0xb6>,
                <0xa5   0xa5>;
    };
};

根据遥控器修改相应的key_table。
字母和符号键都是 linux 的标准键值,在可以在 include/dt-bindings/input/input.h 中查找。

驱动位置


kernel/drivers/input/remotectl/rockchip_pwm_remotectl.c

Debug


1、打开打印键值的调试开关

# echo 1 > sys/module/rockchip_pwm_remotectl/parameters/code_print

按遥控器的按键,记录下对应的键值
例如按向下键,有如下打印
[19634.735833] GET USERCODE=0x4040
[19634.762463] RMC_GETDATA=e9
则,该遥控器的 usercode 是 0x4040,向下键的键值就是 0xe9,如此反复,直到打印完遥控器上的所有键值。

2、有时候需要配合

# echo 1 > /sys/module/rockchip_pwm_remotectl/parameters/code_print

一起打印,然后看出错的时候,是哪一个或者几个 bit 引起的,有时候放宽一点判断的条件即可,一般是通过修改上下限来达到,具体可以参考代码里面 bit 值的判断地方。

3、getevent
有时候无法确定是内核按键判断出错,还是 android 层没有响应某个按键, 可以在串口下输入getevent 调试命令,该命令会打出驱动上报的所有 input 事件,如果按遥控器有打印,并且键值正确,那说明是 android 响应的问题。

# getevent
add device 1: /dev/input/event0
name: "ff680000.pwm"
/dev/input/event0: 0001 006c 00000001
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 006c 00000000
/dev/input/event0: 0000 0000 00000000

以上是在调试平台输入 getevent 的效果,最前面会列出所有的 input 设备,按的时候会上报事件,其中 0x6c 是上报的 linux 键值,后面的 1 代表按下,如果是 0 则代表弹起。
举报

更多回帖

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