Chinaunix首页 | 论坛 | 博客
  • 博客访问: 271595
  • 博文数量: 95
  • 博客积分: 2047
  • 博客等级: 大尉
  • 技术积分: 1022
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-14 16:18
文章分类

全部博文(95)

文章存档

2013年(1)

2011年(94)

我的朋友

分类: 嵌入式

2011-08-14 19:47:22

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这个文件,以及获取到键值后的处理,需要继续研究。

阅读(623) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~