返回列表 发帖

[其他资源] Android键盘研究初步

[其他资源] Android键盘研究初步

Android基本键盘驱动采用了Linux的input和event机制
对于Linux内核主要是这个驱动drivers/input/keyboard/gpio_keys.c
这有篇分析文章
http://www.cnitblog.com/luofuchong/archive/2007/11/12/36157.html
而内核中通过platform机制将按键信息注册进系统:
/* gpio buttons */
static struct gpio_keys_button gpio_buttons[] = {
{
   .gpio   = S3C64XX_GPN(0),
   .code   = 116,
   .desc   = "ENDCALL",
   .active_low = 1,
   .wakeup   = 0,
},
{
   .gpio   = S3C64XX_GPN(1),
   .code   = 139,
   .desc   = "MENU",
   .active_low = 1,
   .wakeup   = 0,
},
{
   .gpio   = S3C64XX_GPN(2),
   .code   = 99,
   .desc   = "ROTATE",
   .active_low = 1,
   .wakeup   = 0,
},
{
   .gpio   = S3C64XX_GPN(3),
   .code   = 102,
   .desc   = "HOME",
   .active_low = 1,
   .wakeup   = 0,
},
{
   .gpio   = S3C64XX_GPN(4),
   .code   = 0x2a,
   .desc   = "BACK",
   .active_low = 1,
   .wakeup   = 0,
},
{
   .gpio   = S3C64XX_GPN(5),
   .code   = 158,
   .desc   = "BACK",
   .active_low = 1,
   .wakeup   = 0,
}
};

static struct gpio_keys_platform_data gpio_button_data = {
.buttons = gpio_buttons,
.nbuttons = ARRAY_SIZE(gpio_buttons),
};

static struct platform_device gpio_button_device = {
.name   = "gpio-keys",
.id   = -1,
.num_resources = 0,
.dev   = {
   .platform_data = &gpio_button_data,
}
};

按键结构体中特别重要的是code变量中的数据,android通过event机制可以获取这个数据。
而在q5的android系统中,获取到键盘的键值后,会搜索/system/usr/keylayout/gpio-keys.kl这个文件
key 158   BACK              WAKE_DROPPED
key 139   MENU              WAKE_DROPPED
key 102   HOME              WAKE
key 116   ENDCALL           WAKE_DROPPED
key 99    ROTATOR

如果code与其中的键值相对应,android就会响应对应的按键信息。
至于android如何建立gpio-key.kl这个文件,以及获取到键值后的处理,需要继续研究。

http://hi.baidu.com/aokikyon/blog/item/df8b5822201123af4723e860.html
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

返回列表
网页右侧QQ悬浮滚动在线客服
网页右侧QQ悬浮滚动在线客服