RK
平台上红外实现原理简介:
PWM
有三种工作模式, reference mode
,one-shot mode
和 continuousmode
. 红外遥控器就采用 reference mode
,这种模式下 PWM
可以捕获输入高低电平的宽度,并产生中断,CPU
接收到中断后去相应的寄存器读取。按下遥控的时候,红外接收头会产生一系列的高低电平,PWM
就会产生相应的中断,CPU
读取相应的寄存器就知道这些高低电平的时间,根据协议就可以解码出红外的用户码和键值码出来。
在PX30的DTS文件上添加:
&pwm3 {
status = "okay";
compatible = "rockchip,remotectl-pwm";
pinctrl-names = "default";
pinctrl-0 = <&pwm3_pin>;
remote_pwm_id = <3>;
handle_cpu_id = <1>;
remote_support_psci = <1>;
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
ir_key1{
rockchip,usercode = <0x7f80>;
rockchip,key_table =
<0xed KEY_POWER>,//KEY_BRIGHTNESSUP
<0xe1 KEY_MUTE>,
<0xf3 KEY_VOLUMEDOWN>,
<0xf1 KEY_VOLUMEUP>,
<0xfd KEY_HOME>,
<0xfe KEY_BACK>,
<0xe0 KEY_UP>,
<0xf5 KEY_DOWN>,
<0xf8 KEY_LEFT>,
<0xf6 KEY_RIGHT>,
<0xf7 KEY_ENTER>,
<0xf5 KEY_ENTER>;
};
ir_key2{
rockchip,usercode = <0xfe01>;
rockchip,key_table =
<0xbd KEY_POWER>,//KEY_BRIGHTNESSUP
<0xbf KEY_MUTE>,
<0xa5 KEY_VOLUMEDOWN>,
<0xa7 KEY_VOLUMEUP>;
};
};
虽然添加了遥控功能,但是没有实现打印按键值信息的:
(会更新处理!!..)
**2020年1月7日更新**
打印红外按键值有以下两种方式,内核打印可以用串口,也可以在adb中使用指令
第一种方法:
在下面的路径下打开rockchip_pwm_remotectl.c
,
px30_android8.1\kernel\drivers\input\remotectl
在红外接收的源码(rockchip_pwm_remotectl.c
)中,给下面变量赋值,编译下载,就可以查看打印用户码和键值
/*sys/module/rk_pwm_remotectl/parameters,
modify code_print to change the value*/
static int rk_remote_print_code=1;
第二种方法:
通过指令打开红外接收的打印功能,然后按遥控器按键,就可以在内核打印中看到用户码和键值
rk3326_m2g:/ # echo 1 > /sys/module/rockchip_pwm_remotectl/parameters/code_print
以下是红外遥控器的按键值:
[ 330.647056] USERCODE=0x7f80
[ 330.674546] RMC_GETDATA=e1
[ 331.524589] USERCODE=0x7f80
[ 331.551813] RMC_GETDATA=fb
[ 332.180352] USERCODE=0x7f80
[ 332.207677] RMC_GETDATA=fa
[ 332.913232] USERCODE=0x7f80
[ 332.940686] RMC_GETDATA=f9
[ 333.825542] USERCODE=0x7f80
[ 333.852894] RMC_GETDATA=f8
[ 334.372618] USERCODE=0x7f80
[ 334.399968] RMC_GETDATA=e0
[ 335.033591] USERCODE=0x7f80
[ 335.060920] RMC_GETDATA=f6
[ 335.547097] USERCODE=0x7f80
[ 335.574352] RMC_GETDATA=f7
[ 336.186789] USERCODE=0x7f80
[ 336.214219] RMC_GETDATA=f5
[ 336.858661] USERCODE=0x7f80
[ 336.886013] RMC_GETDATA=fd
[ 337.430376] USERCODE=0x7f80
[ 337.457540] RMC_GETDATA=fc
[ 338.020364] USERCODE=0x7f80
[ 338.047850] RMC_GETDATA=f1
[ 338.622925] USERCODE=0x7f80
[ 338.650135] RMC_GETDATA=f3
[ 340.846403] USERCODE=0x7f80
[ 340.873878] RMC_GETDATA=fe
注:该遥控器的 usercode
是 0x7f80
,键值是RMC_GETDATA
= xxxx
(如:RMC_GETDATA
=fe
,fe是遥控器的按键值)