1.     产品按键布局和定义


图1

图1括号里面的是android系统采用的键值,注意了,这可不是linux系统里用到的scan code。

 

2.     按键硬件设计

MTK6577的Keypad分为两部分:

(1)  Keypad接口,包括8*8按键和一个专用的power按键。

(2)  Key检测块(key detection block),提供按键按下、按键释放和抖动(de-bounce)机制。

 

按键和对应的行与列关系如下:

 

KCOL0(GPIO103/EINT30)

KCOL1(GPIO108/EINT31)

KCOL2

KROW0(GPIO98/EINT6)

F6(136,右边侧按键)

 

 

KROW1(GPIO97/EINT7)

F7(137,左边侧按键)

 

 

KROW2(GPIO95/EINT8)

 

F10(140,右边按键)

 

KROW3(GPIO99/EINT9)

 

F9(139,中间按键)

 

KROW7(GPIO107/EINT13)

 

F8(138,左边按键)

 

 

这是我们实际产品的按键定义,在这里,我重新定义,如下所示:

 

HW keycode

Linux keycode

Android code

右边侧按键

9

115---KEY_VOLUMEUP

24

左边侧按键

0

114---KEY_VOLUMEDOWN

25

左边按键

64

105--- KEY_LEFT

21

中间按键

28

28--- KEY_ENTER

66

右边按键

19

106--- KEY_RIGHT

22

 

3.     按键传递键值的流程

 

图2

 

4.     修改及编译

 

MTK6577提供\mediatek\source\dct\DrvGen.exe来配置GPIO设置、中断设置、ADC设置、KEYPAD设置和PMIC设置,打开的文件对应\mediatek\custom\hsimobile77_ics2\kernel\dct\dct\ codegen.dws:

 

 

4.1  DrvGen.exe的使用


图3

图3是在ubuntu系统安装了Wine之后,用Wine打开的。

 

(1)  打开DrvGen.exe

(2)  选择Open打开codegen.dws

(3)  如果要修改就选择Edit,修改完成之后可选择Gen Code来产生代码,更新的代码位于\mediatek\custom\hsimobile77_ics2\kernel\dct\dct目录下。也可以采用./mk drvgen命令来生成新的对应的代码。

 

(4)  然后选择Save,再Exit。

 

4.2  GPIO设置

根据上面表格,需要设置按键对应GPIO引脚的模式,如下图:


图4

红色矩形框是我新修改的,之前是NC状态,要配置为对应的模式,GPIO修改后对应的头文件是\mediatek\custom\hsimobile77_ics2\kernel\dct\dct\ cust_gpio_boot.h和cust_gpio_usage.h。

 

4.3  KEYPAD设置

结合上面的表格,知道哪个功能按键对应在哪一行和哪一列,配置如下:


图5

对应的头文件为\mediatek\custom\hsimobile77_ics2\kernel\dct\dct\ cust_kpd.h。

 

4.4  设置后生成新的代码

(1)  ./mkdrvgren或是点击图3的Gen code

(2)  ./mk rk

(3)  ./mkbootimage

更新新的boot.img

 

 

参考:

MTK Android 之MT6577驱动笔记

http://blog.csdn.net/cbk861110/article/details/9385439

 

MTK Android Driver:adda new key

http://blog.csdn.net/cbk861110/article/details/19043607

 

android系统移植之按键驱动篇

http://blog.csdn.net/armeasy/article/details/6713642

 

android定制化软件修改或添加按键驱动的核心操作步骤讲解  

http://linsheng1990526.blog.163.com/blog/static/2038241502012320111925656/

Logo

更多推荐