Android按键事件——上层与驱动的映射
2013-03-18 13:14
417 查看
原创:M_r_D
转载请注明出处!
首先查看android对上层按键事件的定义,在头文件<KeycodeLabels.h>中:
按键的底层驱动事件是驱动开发人员自行定义的,这里我们只关心它上报的事件和对应的按键号。假如设备现在有6个按键,其对应的按键事件为:
按键 事件
key 1 0x01
key 2 0x02
key 3 0x03
key 4 0x04
key 5 0x05
key 6 0x06
目前的情况是,android上层已经有按键事件的定义了,底层驱动也有按键事件上报。但是缺少了中间的对接层,也就是说哪个按键对应哪种事件还不清楚。所以,需要为它们加入一个布局文件。按键的布局文件存放在frameworks/base/data/keyboards目录下,以.kl为后缀的文件都是键盘的布局文件,ls一下:
具体读取哪个布局文件是根据驱动的名字来确定的,如果找不到与驱动名字相同的文件,就会读取默认文件Generic.kl。现在我们假设键盘在驱动层的名字为“my_keypad”,所以需要创建一个名为“my_keypad,kl”的布局文件。文件的内容是什么呢,不急。目前还有一点不明确,上面提到的6个按键的作用我们还没有定义。假设定义如下:
按键 作用
key 1 确定
key 2 返回
key 3 菜单
key 4 主解面
key 5 左移
key 6 右移
对应的布局文件“my_keypad,kl”的内容就应该为:
把布局文件编译进系统,在当前目录的common.mk中,在keylayouts变量的末尾加入: my_keypad.kl\
到这里,android键盘的底层驱动事件跟上层定义的按键事件就对应起来了。
转载请注明出处!
首先查看android对上层按键事件的定义,在头文件<KeycodeLabels.h>中:
static const KeycodeLabel KEYCODES[] = { { "SOFT_LEFT", 1 }, { "SOFT_RIGHT", 2 }, { "HOME", 3 }, { "BACK", 4 }, { "CALL", 5 }, { "ENDCALL", 6 }, { "0", 7 }, { "1", 8 }, { "2", 9 }, { "3", 10 }, { "4", 11 }, { "5", 12 }, { "6", 13 }, { "7", 14 }, { "8", 15 }, { "9", 16 }, { "STAR", 17 }, { "POUND", 18 }, { "DPAD_UP", 19 }, { "DPAD_DOWN", 20 }, { "DPAD_LEFT", 21 }, { "DPAD_RIGHT", 22 }, { "DPAD_CENTER", 23 }, { "VOLUME_UP", 24 }, { "VOLUME_DOWN", 25 }, { "POWER", 26 }, { "CAMERA", 27 }, { "CLEAR", 28 }, { "A", 29 }, { "B", 30 }, { "C", 31 }, { "D", 32 }, { "E", 33 }, { "F", 34 }, { "G", 35 }, { "H", 36 }, { "I", 37 }, { "J", 38 }, { "K", 39 }, { "L", 40 }, { "M", 41 }, { "N", 42 }, { "O", 43 }, { "P", 44 }, { "Q", 45 }, { "R", 46 }, { "S", 47 }, { "T", 48 }, ... { "BUTTON_14", 201 }, { "BUTTON_15", 202 }, { "BUTTON_16", 203 }, { "LANGUAGE_SWITCH", 204 }, { "MANNER_MODE", 205 }, { "3D_MODE", 206 }, { "CONTACTS", 207 }, { "CALENDAR", 208 }, { "MUSIC", 209 }, { "CALCULATOR", 210 }, { "ZENKAKU_HANKAKU", 211 }, { "EISU", 212 }, { "MUHENKAN", 213 }, { "HENKAN", 214 }, { "KATAKANA_HIRAGANA", 215 }, { "YEN", 216 }, { "RO", 217 }, { "KANA", 218 }, { "ASSIST", 219 }, // NOTE: If you add a new keycode here you must also add it to several other files. // Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list. { NULL, 0 } };左边是事件的名称,根据字面意思非常容易了解其作用;右边是对应的事件号,比如我们在终端敲入"input keyevent 4"命令,就可以产生BACK的效果。上层按键事件的定义个人建议不要修改,如果增加了一个新的按键事件的定义,也要到KeyEvent.java里面作相应的修改。
按键的底层驱动事件是驱动开发人员自行定义的,这里我们只关心它上报的事件和对应的按键号。假如设备现在有6个按键,其对应的按键事件为:
按键 事件
key 1 0x01
key 2 0x02
key 3 0x03
key 4 0x04
key 5 0x05
key 6 0x06
目前的情况是,android上层已经有按键事件的定义了,底层驱动也有按键事件上报。但是缺少了中间的对接层,也就是说哪个按键对应哪种事件还不清楚。所以,需要为它们加入一个布局文件。按键的布局文件存放在frameworks/base/data/keyboards目录下,以.kl为后缀的文件都是键盘的布局文件,ls一下:
android-4.2_r1/frameworks/base/data/keyboards$ ls Android.mk Generic.kcm qwerty2.kcm qwerty.kl Vendor_046d_Product_c294.kl Vendor_054c_Product_0268.kl Virtual.kcm ***RCP.kl Generic.kl keyboards.mk qwerty.idc Vendor_045e_Product_028e.kl Vendor_046d_Product_c299.kl Vendor_05ac_Product_0239.kl common.mk qwerty2.idc qwerty.kcm Vendor_046d_Product_c216.kl Vendor_046d_Product_c532.kl Vendor_22b8_Product_093d.kl
具体读取哪个布局文件是根据驱动的名字来确定的,如果找不到与驱动名字相同的文件,就会读取默认文件Generic.kl。现在我们假设键盘在驱动层的名字为“my_keypad”,所以需要创建一个名为“my_keypad,kl”的布局文件。文件的内容是什么呢,不急。目前还有一点不明确,上面提到的6个按键的作用我们还没有定义。假设定义如下:
按键 作用
key 1 确定
key 2 返回
key 3 菜单
key 4 主解面
key 5 左移
key 6 右移
对应的布局文件“my_keypad,kl”的内容就应该为:
key 0x1 ENTER key 0x2 BACK key 0x3 MENU key 0x4 HOME key 0x5 DPAD_LEFT key 0x6 DPAD_RIGHT
把布局文件编译进系统,在当前目录的common.mk中,在keylayouts变量的末尾加入: my_keypad.kl\
到这里,android键盘的底层驱动事件跟上层定义的按键事件就对应起来了。
相关文章推荐
- Android按键事件——上层与驱动的映射
- Android 按键映射 驱动
- android中上层是如何接收按键事件的
- Android 按键处理(驱动层到上层)架构
- Android中对标准内核的按键映射以及按键驱动
- Android按键事件映射表和转义符对照
- android按键事件映射和转义符对照…
- Android中对标准内核的按键映射-Android按键驱动
- android中上层是如何接收按键事件的
- Android按键事件映射表和转义符对照
- android:添加usb键盘+按键布局和映射的修改
- 跟我学android之四 事件驱动模型
- Android锁屏状态获取音量按键事件
- Android按键驱动
- android系统定制化添加按键驱动步骤
- Android 仿钉钉组织架构功能,动态创建多个按钮,并给每个按键添加监听事件
- Android平台开发-Android keypad map-Android按键事件
- android gpio-keys 按键驱动分析(一) key layout文件
- Android监听耳机按键事件