天下第七 发表于 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

aaron 发表于 2014-9-13 09:56:47

MARK

daolang800 发表于 2015-5-5 08:18:59

万能驱动
页: [1]
查看完整版本: 红外遥控用户码获取方法