Cubietruck---21.任意红外遥控器的使用方法
来源:互联网 发布:淘宝企业店铺开通费用 编辑:程序博客网 时间:2024/06/10 07:23
一. 让CT可以接收任意遥控器的键值
1. CubieTruck带了一个红外接收器,但是随便拿一个遥控器来用完全没有反应的.
这是因为在驱动中有对地址码的检查:
在lichee/linux-3.3/drivers/input/keyboard/sun7i-ir.c中(红外接收器的驱动)
这个地址码是: #define IR_ADDR_CODE (0x9f00)
所以只要不是0x9f00的地址码都直接返回了,也就不再上报了.
2. 去掉检查
为了让所有的遥控器都能使用,需要将这个IR_CHECK_ADDR_CODE宏注掉即可
在./lichee/linux-3.3/drivers/input/keyboard/ir-keymap.h中
3. 重新烧写boot.img就可以在getevent中接收到键值了.
二. 让遥控器好用
2.1 power关机
修改 /system/usr/keylayout/sun7i-ir.kl
注: 这儿的255是从getevent中读取出来的,我的遥控器power键会发送键值255
改完就实现了关机.
2.2 power开机
a. power键只关机而不能开机,(其实:当按下power实际上是进入了休眠状态而不是关机状态)
不能开机的真正原因是:
内核中的sun7i-ir.c中对休眠进行了处理,把红外的时钟关闭了.
即在休眠状态下,红外不接收任何信号,所以也就不能唤醒了.
b. 解决方法:
把sun-7i-ir.c修改成如下形式: 即将suspend的处理的两个函数,改为空.
这样就实现在power键开机(唤醒).
3.继续修改/system/usr/keylayout/sun7i-ir.kl就可以实现更多的功能了.
1. CubieTruck带了一个红外接收器,但是随便拿一个遥控器来用完全没有反应的.
这是因为在驱动中有对地址码的检查:
在lichee/linux-3.3/drivers/input/keyboard/sun7i-ir.c中(红外接收器的驱动)
- static int ir_code_valid(unsigned long code)
- {
- unsigned long tmp1, tmp2;
- #ifdef IR_CHECK_ADDR_CODE
- /* Check Address Value */
- if ((code&0xffff) != (IR_ADDR_CODE&0xffff))
- return 0; /* Address Error */
- tmp1 = code & 0x00ff0000;
- tmp2 = (code & 0xff000000)>>8;
- return ((tmp1^tmp2)==0x00ff0000); /* Check User Code */
- #else
- /* Do Not Check Address Value */
- tmp1 = code & 0x00ff00ff;
- tmp2 = (code & 0xff00ff00)>>8;
- //return ((tmp1^tmp2)==0x00ff00ff);
- return (((tmp1^tmp2) & 0x00ff0000)==0x00ff0000 );
- #endif /* #ifdef IR_CHECK_ADDR_CODE */
- }
所以只要不是0x9f00的地址码都直接返回了,也就不再上报了.
2. 去掉检查
为了让所有的遥控器都能使用,需要将这个IR_CHECK_ADDR_CODE宏注掉即可
在./lichee/linux-3.3/drivers/input/keyboard/ir-keymap.h中
- //#define IR_CHECK_ADDR_CODE
二. 让遥控器好用
2.1 power关机
修改 /system/usr/keylayout/sun7i-ir.kl
- key 255 POWER WAKE
改完就实现了关机.
2.2 power开机
a. power键只关机而不能开机,(其实:当按下power实际上是进入了休眠状态而不是关机状态)
不能开机的真正原因是:
内核中的sun7i-ir.c中对休眠进行了处理,把红外的时钟关闭了.
即在休眠状态下,红外不接收任何信号,所以也就不能唤醒了.
b. 解决方法:
把sun-7i-ir.c修改成如下形式: 即将suspend的处理的两个函数,改为空.
- #if 0 //add by cong start
- #ifdef CONFIG_HAS_EARLYSUSPEND
- static void sun7i_ir_suspend(struct early_suspend *h)
- {
- /* unsigned long tmp = 0;
- int ret;
- struct sun7i_ir_data *ts = container_of(h, struct sun7i_ir_data, early_suspend);
- tmp = readl(IR_BASE+IR_CTRL_REG);
- tmp &= 0xfffffffc;
- writel(tmp, IR_BASE+IR_CTRL_REG);
- */
- dbmsg("EARLYSUSPEND:enter earlysuspend: sun7i_ir_suspend. \n");
- if(NULL == ir_clk || IS_ERR(ir_clk)) {
- printk("ir_clk handle is invalid, just return!\n");
- return;
- } else {
- clk_disable(ir_clk);
- }
- if(NULL == apb_ir_clk || IS_ERR(ir_clk)) {
- printk("ir_clk handle is invalid, just return!\n");
- return;
- } else {
- clk_disable(apb_ir_clk);
- }
- }
- static void sun7i_ir_resume(struct early_suspend *h)
- {
- dbmsg("EARLYSUSPEND:enter laterresume: sun7i_ir_resume. \n");
- ir_code = 0;
- timer_used = 0;
- ir_reset_rawbuffer();
- ir_clk_cfg();
- ir_reg_cfg();
- }
- #endif
- #endif //add by cong end
- static void sun7i_ir_suspend(struct early_suspend *h)
- {
- }
- static void sun7i_ir_resume(struct early_suspend *h)
- {
- }
3.继续修改/system/usr/keylayout/sun7i-ir.kl就可以实现更多的功能了.
0 0
- Cubietruck---21.任意红外遥控器的使用方法
- 红外遥控器
- 基于stm32C8T6的红外遥控器制作 stm做遥控器
- 红外遥控器信号的接收和转发
- 遥控器红外解码的原理及应用
- 电脑红外遥控器
- 单片机红外遥控器设计
- 红外遥控器解码
- NEC协议红外遥控器
- 红外遥控器工作原理
- 红外遥控器解码原理
- Android 红外遥控器实现
- 红外遥控器学习
- android 手机红外遥控器
- NEC协议红外遥控器
- Android红外遥控器编码
- 基于PWM调制的红外遥控器的设计
- A20红外遥控器与Android功能的适配
- OpenGL深入探索——《OpenGL编程指南(原书第8版)》——计算着色器
- 排序算法-基数排序
- H5学习笔记之表格元素、文档元素
- Java中的super关键字
- LeetCode - 54. Spiral Matrix
- Cubietruck---21.任意红外遥控器的使用方法
- git的使用
- 人生如逆旅,静读思己心
- 关于标准c中的strtok和linux库里面的strsep
- Cubietruck---22.vold深入理解android第九章笔记
- 关于NSMutableAttributedString属性字符串的用法
- Android 修改关机充电动画
- 在Linux集群上安装和配置Spark
- android adb wifi调试方法,usb用于otg调试。