第一步:修改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
2,编译驱动 并烧写到微雪A20板上面(这步微雪官方文档上有,略过)
我的遥控器下图 ,我的微雪A20如下图
3,在板上焊接红外接受头,并用红外遥控器对准红外接受头按几次
在shell 中进入 android ,输入adb shell
在shell中输入dmesg -n -8|grep IR_CODE
可以打印出来的信息有0xffffffff,0xec13bf00,0xee11bf00,0x0 ,其中0xffffffff应是 干扰信号,系统会自动过滤,只剩两个 0xee11bf00,0xec13bf00 (我按了两个键,分别按两次),看到重复的部分了没有,bf00 ,那么0xbf00 就应该是遥控器的用户码了。前面几位是按键的地址码。
4,接下来更改三个地方:
(1)、直接屏蔽lihee/linux-3.4/drivers/input/keyboard/ir-keymap.h中的
#define IR_CHECK_ADDR_CODE
(2)、但为了防止其它遥控器干扰,还是需要修改该文件中的
(下面括号中的数值)
#define IR_ADDR_CODE (0xbf00)
(3)修改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 = 0xbf00;
5,记录你要用到按键值由于我只用到了上下左右,确定,音量+,音量-,返回键,
所需 要分别记录它们的键值,我分别记录了下来,就是按照第三步的方法按一下
, 查看一下,记录下来以后用。
电源:0xff00bf00
静音:0x fe01bf00
上0x ec13bf00
下0x eb14bf00
右0x ed12bf00
左0x ee11bf00
确定:0x ef10bf00
退出0x ea15bf00
菜单0x e916bf00
音量+0x b748bf00
音量-0x b649bf00
红0x b34cbf00
绿0x b24dbf00
1:0x fd02bf00
2:0x fc03bf00
3:0x fb04bf00
4:0x fa05bf00
5:0x f906bf00
6:0x f807bf00
7:0x f708bf00
8:0x f609bf00
9:0x f50abf00
举个例子:
例如:某键发送码:ed 12 (注意 ,是我的上下左右中 右键)
1. Driver 中的处理:
在中端处理程序中,Driver得到码值: ir_code. 并利用ir_keycodes列表中
的对应 项作为发给Input子系统的KeyCode。
input_report_key(ir_dev,ir_keycodes[(ir_code>>16)&0xff],0);
input_sync(ir_dev);
所以:按键 ed 12. 则发送: ir_keycodes[0x12] . 这个值为18.
也就是说:它向Input子系统中发送的KeyCode= 18。
6,改写 键值表 sun7i-ir.kl 。位于源码目录包
android/device/softwinner/sugar-cubieboard2/sun7i-ir.kl
我改写的
其他的没用就注释掉了,保存,编译。
7,生成andrioid 固件,并烧写进开发板中。这是你的遥控器就能使用啦!
参考博客:
1,http://www.cubie.cc/forum.php?mod=viewthread&tid=3162&highlight=%E7%BA%A2%E5%A4%96
2,http://blog.sina.com.cn/s/blog_602f87700101he9v.html
正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!下边有“点赞”二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我!