Mstar 光机遥控器适配

以XXXX光机上,以上下左右4个键为例:
这里写图片描述

1.创建头文件

在kernel/mstart/mstar/ir/目录下面新建一个IR_LEADER.h,直接复制IR_MSTAR_DTV.h里面的内容
a. 修改头码

其中头码是指的客户码807F

b.修改key code

IRKEY_UP                = 0x52
IRKEY_DOWN              = 0x13
IRKEY_LEFT              = 0x06
IRKEY_RIGHT             = 0x1A
//将源文件里面的几个码值修改为客户提供的
IRKEY_UP                = 0x05
IRKEY_DOWN              = 0x1B
IRKEY_LEFT              = 0x07
IRKEY_RIGHT             = 0x09

修改的时候,可能会遇到0x05这个键值被其它键给占用了,有2种解决方法:
i)将占用0x05的键给屏蔽
ii)将占用0x05的键和IRKEY_UP对换

IRKEY_PAGE_DOWN         = 0x05
IRKEY_UP                = 0x52
//对换2个键的key code
IRKEY_PAGE_DOWN         = 0x52
IRKEY_UP                = 0x05

方法ii比较麻烦,但是比较稳妥,保证了定义的所有键都在,虽然很多键都没有用上

2.修改key映射

在kernel/3.1.10/drivers/media/rc/keymaps/目录下面新建一个rc-leader-tv.c,直接复制rc-mstar-tv.c里面的内容。然后修改文件

{ 0x0013, KEY_DOWN },
{ 0x0006, KEY_LEFT },
{ 0x001A, KEY_RIGHT },
{ 0x000F, KEY_ENTER },

修改为

{ 0x0005, KEY_UP },
{ 0x001B, KEY_DOWN },
{ 0x0007, KEY_LEFT },
{ 0x0009, KEY_RIGHT },

这一步和修改IR_LEADER.h一样,会遇到键值被其它按键占用的情况,对换键值修改

注意:
rc-mstar-tv.c和IR_MSTAR_DTV.h里面的keycode是一样对应的,里面可能有些键的名称不一样,修改的时候可能会遇到这种问题,记住相同的keycode就是同一个键。

//在rc-mstar-tv.c文件里面
{ 0x0004, KEY_KP1 },        // TV_INPUT
//在IR_MSTAR.h文件里面
IRKEY_INPUT_SOURCE      = 0x04

这2个按键keycode是一样的,即这2个名称不一样的键是同一个按键

3.添加新加的遥控器定义

i)在kernel/mstar/arm-boards/madison/board/Board.h文件里面添加定义

# define IR_TYPE_LEADER      29

说明:
在这个文件前面可以看到

#define IR_TYPE_TOSHIBA             25
#define IR_TYPE_CHANGHONG           26

类似的定义,直接在后面添加类似的定义即可

ii)在kernel/mstar/arm-boards/madison/board/BD_GENERIC.h修改

#define IR_TYPE_SEL IR_TYPE_LEADER

IR_TYPE_SEL这个值的定义涉及到编译的时候会引用哪些头文件

4.将定义的文件添加到编译中去

i)在kernel/3.1.10/drivers/media/rc/keymaps/Makefile里面添加编译生成的文件

obj-$(CONFIG_RC_MAP) += rc-mstar-tv.o \
            rc-changhong-tv.o \
            rc-haier-tv.o \
            rc-hisense-tv.o \
            rc-konka-tv.o \
            rc-skyworth-tv.o \
            rc-tcl-tv.o \
            rc-leader-tv.o

注意:rc-leader-tv.o文件名与之前定义rc-leader-tv.c是一致的


ii)在kernel/mstar/mstar/ir/mdrv_ir.c文件修改
可以看到类似的定义

#elif (IR_TYPE_SEL == IR_TYPE_KONKA)
#include "IR_KONKA.h"
#elif (defined(IR_TYPE_SKYWORTH) && IR_TYPE_SEL == IR_TYPE_SKYWORTH)
#include "IR_SKYWORTH.h"

将下面这一段代码放在后面就可以了

#elif (defined(IR_TYPE_LEADER) && IR_TYPE_SEL == IR_TYPE_LEADER)
#include "IR_LEADER.h"

//添加如下代码,因为在BD_GENERIC.h里面定义了IR_TYPE_SEL,所以在编译的时候会把IR_LEADER.h给编译进去

在这个文件里面,还有6处需要修改,类似
IR_TYPE_SEL == IR_TYPE_HISENSE || IR_TYPE_SEL == IR_TYPE_MSTAR_DTV || IR_TYPE_SEL == IR_TYPE_CHANGHONG
都在最后加上|| IR_TYPE_SEL == IR_TYPE_LEADER

5)编译kernel,替换ko
a.编译生成需要用到的ko文件是mdrv-ir.ko和rc-leader-tv.ko,将rc-leader-tv.ko修改为rc-keymap-tv.ko
b.替换system/lib/modules/里面对应文件

在串口下面执行

su
getevent

看到输出的值和给出的定义是否是一样,如果是一样的,则kernel里面配置的按键是正确的。如果Android层响应有问题,则是Vendor_3697_Product_001.kl里面配置有问题,没有把Android和Kernel对应上

4.kernel里面定义按键与KeyEvent里面定义的keycode对应关系

相关文件有:

kernel/3.1.10/drivers/media/rc/keymaps/rc-mstar-tv.c
kernel/3.1.10/include/linux/input.h
kitkat/frameworks/native/include/input/KeycodeLabels.h
kitkat/device/mstar/mango/preinstall/keylayout/Vendor_3697_Product_001.kl

对应文件关系
这里写图片描述

其中,
1)input.h里面定义的key和rc-mstart-tv.c是相对应的,如KEY_UP对KEY_UP
2)KeycodeLabels.h 里面定义的keycode和KeyEvent.java里面定义的是一致的
3)Vendor_3697_Product_0001.kl将kernel里面定义的按键和Android层定义相关联起来

以KEY_UP为例说明,可能有偏差,大概就这个意思,按上键
rc-mstart-tv.c —> input.h —>Vendor_3697_Product_0001.kl—>KeycodeLabels.h —>KeyEvent.java

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值