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

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

[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\\mtk-tpd.kl
如:
key   252   SMS        
 
其中252 是linux键码,SMS是android识别key值 如果是需要唤醒系统,还需要增加WAKE
如果新按键是全键盘的一些生僻字符,修改: mediatek\config\\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

 
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按键处理)