PX30 Android8.1 红外遥控实现

RK 平台上红外实现原理简介:
PWM 有三种工作模式, reference mode,one-shot modecontinuousmode. 红外遥控器就采用 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>;
		};
};

虽然添加了遥控功能,但是没有实现打印按键值信息的:

(会更新处理!!..)

**202017日更新**

打印红外按键值有以下两种方式,内核打印可以用串口,也可以在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

注:该遥控器的 usercode0x7f80,键值是RMC_GETDATA= xxxx(如:RMC_GETDATA=fe,fe是遥控器的按键值)

猜你喜欢

转载自blog.csdn.net/qq_38312843/article/details/103814579