您的位置:首页 > 其它

在MTK6572当中如何增加一个新按键,而且此按键值在虚拟按键当中可以使用

2014-01-14 17:47 309 查看

在物理按键当中如果你要增加一个新按键:

[Description]

How to add a new key on android ICS/ICS2

 

[Solution]

1.在DCT tool keypad list 文件增加新按键的选项

alps\mediatek\source\dct\Keypad_YuSu.cmp中添加新键,如SMS快捷键

KEY_SYM

KEY_SMS

KEY_0

 

2.打开DCT tool 在keypad矩阵中在相应定义的按键位中添加新按键,如SMS,然后Save

 

3.修改linux 键盘码文件input.h

由于preloader\uboot\kernel\factory 等情况分开使用,相应的文件路径下的input.h都应该修改为新按键增加键码值

  

kernel\include\linux\input.h

bionic\libc\kernel\common\linux\input.h

external\kernel-headers\original\linux\input.h

external\qemu\linux_keycodes.h

mediatek\plaform\mt6575\preloader\src\drivers\inc\linux\input.h

Mediatek\plaform\mt6575\uboot\inc\linux\input.h

 

如KEY_SMS

#define KEY_SMS 252

 

4.增加keypad layout文件键盘映射,linux和android key映射

mediatek\config\<project name>\mtk-tpd.kl

如:

key   252   SMS        

 

其中252 是linux键码,SMS是android识别key值 如果是需要唤醒系统,还需要增加WAKE

如果新按键是全键盘的一些生僻字符,修改: mediatek\config\<project name>\mt6575-kpd.kcm

 

5.修改Java识别keycode
mt6515

framework/base/include/ui/KeyCodelabels.h
mt6572平台如下路径

framework/base/include/androidfw/KeyCodelabels.h

KEYCODES数据结构后面增加

{"SMS",220}

 mt6515

 framework/base/native/include/android/KeyCodes.h
  mt6572

 framework/native/include/android/KeyCodes.h

在按键定义项增加AKEYCODE_SMS  = 220;

 

6.修改Java 键盘事件

framework/base/core/java/android/view/keyevent.java

 

/**

*@hide

*/

public static final int KEYCODE_SMS  =220;

 

最后的按键为新增的

private static final int LAST_KEYCODE ==KEYCODE_SMS;

 

以上/**/注释的code是android 非开放API或变量定义的时候,需要添加Java Doc的识别,否则要运行make update-api才能build通过

 

如果是系统按键,修改
mt6515
framework/base/libs/ui/input.cpp
mt6572

framework/base/libs/androidfw/input.cpp

isSystemKey()增加case AKEYCODE_SMS:

7.修改XML文件描述符framework/base/core/res/res/values/attr.xml

<enum name="KEYCODE_SMS" value="220" />

 

8.增加测试验证log在android

framework\base\policy\src\com\android\internal\polidy\impl\phoneWindowManager.java

在interceptKeyBeforeDispatching()增加

if(keycode== KeyEvent.KEYCODE_SMS){

        log.d(TAG, "interceptKeyTi KEYCODE_SMS keyCode="+ keyCode + " down=" + down + " repeatCount=" + repeatCount + “ keyguardOn=” + keyguardOn + “ mHomePressed=” + mHomePressed + “ cancled=” + canceled)

 

9.可以抓log确认,或者增加测试APK检测

 

Kernal log:

<4>[253.828234]kpd: register = fffe ffff ffff ffff ff

<4>[253.828825]kpd: (pressed) HW keycode = 0

<4>[253.829348]kpd: report Linux keycode = 252

<4>[253.829857]kpd: save new keymap state

<4>[254.030814]kpd: register = ffff ffff ffff ffff ff

<4>[254.031405]kpd: (released) HW keycode = 0

<4>[254.031936]kpd: report Linux keycode = 252

<4>[254.032445]kpd: save new keymap state

Android log:

WindowManager: interceptKeyTq keycode=220 screenIsOn=true keyguardActive=false policyFlags = #2000000 down =false canceled = false

D WindowManager: interceptKeyTi keyCode=220 down=false repeatCount=0 keyguardOn=false mHomePressed=false canceled=false

D WindowManager: interceptKeyTi KEYCODE_SMS keyCode=220 down=false repeatCount=0 keyguardOn=false mHomePressed=false canceled=false

如果要在TOUCHPANEL的虚拟按键当中也要使用到上述按键还要在
/out/target/product/sanstar72_wet_jb3/system/usr/keylayout/Generic.kl 中加入key   252   SMS 

alps/frameworks/base/data/keyboards/Generic.kl 中加入key   252   SMS 

在改完上述所有文件的时候,记住请使用 update-api 命令确认 update-api命令完成后然后编绎整个工程,否则会出现所有虚拟按键都无法使用的情况.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mtk frameworks
相关文章推荐