红外遥控用户码获取方法
本帖最后由 天下第七 于 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
第二步:当然是编译啦
单独编译该红外模块就行了,也就是sun7i-ir.c
编写Makefile
然后用交叉编译
编译成功后生成sun7i-ir.ko
第三步:替换原机红外驱动模块
adb push sun7i-ir.ko /mnt/sdcard/
adb rmmod sun7i_ir
adb insmod /mnt/sdcard/sun7i-ir.ko
如果提示没有错误,表明内核版本一致,驱动成功加载
第四布:验证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 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: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
MARK
万能驱动
页:
[1]