CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 18636|回复: 8

红外遥控用户码获取方法

[复制链接]
发表于 2014-9-12 21:37:46 | 显示全部楼层 |阅读模式
本帖最后由 天下第七 于 2014-9-12 22:05 编辑

    用CB做机顶盒的朋友往往是用一些旧的电视遥控器,但CB的rom默认用户码是ox9f00。
常规做法:
1、直接屏蔽lihee/linux-3.4/drivers/input/keyboard/ir-keymap.h中的
#define IR_CHECK_ADDR_CODE   
然后编译
2、但为了防止其它遥控器干扰,还是需要修改该文件中的 (下面括号中的数值)
#define IR_ADDR_CODE  (0x9f00)
和 lihee/linux-3.4/drivers/input/keyboard/sun7i-ir.c 中static int ir_code_valid(unsigned long code) 函数的
if(SCIRPT_ITEM_VALUE_TYPE_INT != script_get_item("ir_para", "ir_addr_code", &ir_addr_code)){
                         pr_err("%s: ir_addr_code script_get_item error. \n",__func__ );
                        ir_addr_code = 0x9f00;

下面我们编辑源代码编译运行并获得遥控器用户码
源文件位置:lihee/linux-3.4/drivers/input/keyboard/sun7i-ir.c
第一步:修改c代码
static int ir_code_valid(unsigned long code)
{
        unsigned long tmp1, tmp2;
//添加代码
     printk(KERN_DEBUG "IR_CODE0x%x\n",code);
#ifdef IR_CHECK_ADDR_CODE










回复

使用道具 举报

 楼主| 发表于 2014-9-12 21:39:54 | 显示全部楼层
第二步:当然是编译啦
单独编译该红外模块就行了,也就是sun7i-ir.c
编写Makefile
然后用交叉编译
编译成功后生成sun7i-ir.ko
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-12 21:43:01 | 显示全部楼层
第三步:替换原机红外驱动模块
adb push sun7i-ir.ko /mnt/sdcard/
adb rmmod sun7i_ir
adb insmod /mnt/sdcard/sun7i-ir.ko
如果提示没有错误,表明内核版本一致,驱动成功加载
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-12 21:49:32 | 显示全部楼层
第四布:验证getevent能否收到信息
adb shell getevent /input/event/event3
此处event3为你cb对应打红外驱动设备事件,根据具体情况修改
然后按遥控器按钮,会有如下形式信息输出
/dev/input/event3: 0001 00af 00000001  
/dev/input/event3: 0000 0000 00000000
/dev/input/event3: 0001 00af 00000000  
/dev/input/event3: 0000 0000 00000000
表明机器能收到红外键盘按钮事件


回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-12 21:57:27 | 显示全部楼层
本帖最后由 天下第七 于 2014-9-12 22:04 编辑

第5步:找出红外客户码
我们在前面把红外客户码写到了 dmesg信息里面了
按动遥控器其中几个按钮,就用如下命令进行查看
adb shell dmesg -n 8 |grep IR_CODE
如果在windows下
adb shell "dmesg -n 8|busybox grep IR_CODE"
会出现如下信息
IR_CODE 0xef1000af
IR_CODE 0xef1000a5
IR_CODE 0xef10001d

看到重复部分没有? 0xef10 就是你遥控器的客户码了


回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-12 22:02:29 | 显示全部楼层
本帖最后由 天下第七 于 2014-9-12 22:25 编辑

最后:找到遥控码后就可以重新编译sun7i-ir.ko了
三个地方需要修改
1.ir-keymap.h
2. sun7i-ir.c  (两处) 上面已经提到过了
然后交叉编译
最后替换 板上的驱动  
adb push sun7i-ir.ko /system/vendor/modules/
当然不要忘记修改掉可写属性
adb shell chmod 644 /system/vendor/modules/sun7i-ir.ko


当然最后是修改键值
位置在  /system/usr/keylayout/sun7i-ir.kl
回复 支持 反对

使用道具 举报

发表于 2014-9-13 09:56:47 | 显示全部楼层
MARK
回复 支持 反对

使用道具 举报

发表于 2015-5-5 08:18:59 | 显示全部楼层
万能驱动
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-11-22 18:48 , Processed in 0.021944 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部