Android添加外部按键:响应外部按钮输入 TQ210

Linux源码:

Platform

http://www.linuxidc.com/Linux/2012-12/76196.htm

/opt/EmbedSky/TQ210/Kernel_3.0.8_TQ210_for_Android_v1.0/drivers/input/keyboard/s3c-gpio-keys.c

修改驱动:struct s3c_gpio_key s3c_gpio_keys[]=里面添加:

{

.pin = S5PV210_GPH2(3), // 选择GPIO口的GPH2_3

.eintcfg = 0X0f<<12, // 配置GPH2_3口为 1111 = EXT_INT[3]

.inputcfg = 0<<12, // 配置GPH2_3脚为输入

.eint = IRQ_EINT16_31, // 配置中断

},

{

.pin = S5PV210_GPH2(4), // 选择GPIO口的GPH2_4

.eintcfg = 0X0f<<16, // 配置GPH2_4口为 1111 = EXT_INT[4]

.inputcfg = 0<<16, // 配置GPH2_4脚为输入

.eint = IRQ_EINT16_31, //配置中断

}

android内核源码下,寻找:/kernel/arch/arm/mach-s5p210/mach-tq210.c

1.利用platfrom_device 定义设备:

static struct platform_device s3c_device_gpio_button = {

.name = "gpio-keys",

.id = -1,

.num_resources = 0,

.dev = {

.platform_data= &gpio_button_data,

}

};

其中gpio_button_data

2.加入内核,建立了一个platform_device数组,然后把KEYplatform_device添加到这个数组中.

static struct platform_device *tq210_devices[] __initdata = {

……………

#ifdef CONFIG_KEYBOARD_S3C_GPIO

&s3c_device_gpio_button,

#endif

…………

};

3.platform_device数组注册到内核

static void __init tq210_machine_init(void)

{

………………………..

platform_add_devices(tq210_devices, ARRAY_SIZE(tq210_devices));//注册到内核

……………………………

}

到此为止,我们已经看到了如果添加platform_device,以及这个platform_device又是如何被注册到内核的全过程。

4. /opt/EmbedSky/TQ210/Kernel_3.0.8_TQ210_for_Android_v1.0/include/linux/input.h中查看已有的按键定义,这里选择:

#define BTN_A 0x130

#define BTN_B 0x131

那么在安卓系统中找到:

/TQ210_Android_4.0.4_V1.0/frameworks/base/include/ui/keycodeslabels.h 差看相应的按键的名称:

{ "BUTTON_A", 96 },

{ "BUTTON_B", 97 },

所以,就在/kernel/arch/arm/mach-s5p210/mach-tq210.c文件中添加按键的注册信息:

static struct gpio_keys_button gpio_buttons[]中添加如下内容:

{

.gpio = S5PV210_GPH2(3),

.code = 304,

.desc = " BUTTON_A ",

.active_low = 1,

.wakeup = 0,

},

{

.gpio = S5PV210_GPH2(4),

.code = 305,

.desc = " BUTTON_B ",

.active_low = 1,

.wakeup = 0,

.debounce_interval = 100, //消抖

},

qwer.kl/TQ210_Android_4.0.4_V1.0/frameworks/base/data/keyboards)中添加映射关系:

key 304 BUTTON_A

key 305 BUTTON_B

然后进行编译内核zImage.bin!编译安卓系统rootfs_dir.bin

注释说明:

input.h(/Kernel_3.0.8_TQ210_for_Android_v1.0/include/linux 扫描值,是驱动里的)定义了底层已有的键值;input.h的数值和qwer.kl中的key的数值是相同的;input.h中的字串提供给linux使用。

qwer.kl/TQ210_Android_4.0.4_V1.0/frameworks/base/data/keyboards,键盘布局文件)qwer.kl就是将input.h中的数值(即.code,扫描值,是驱动里的)和keycodeLabels.h中的字串(即.desc)进行映射。即映射扫描码与keycode的转换关系。

KeycodeLabels.h(/TQ210_Android_4.0.4_V1.0/frameworks/base/include/ui/) 将字串转成value的整形值,即转换到keycode值(在keycode.h中),keycode值提供给android调用。

Keycode.h/TQ210_Android_4.0.4_V1.0/frameworks/base/native/android/)中的数值和KeycodeLabels.h中的数值是相同;是将KeycodeLabels.h中的数值赋值给字符,这个字符是提供给????

KeyEvent.java/TQ210_Android_4.0.4_V1.0/frameworks/base/core/java/android/view/)中的数值和Keycode.hKeycodeLabels.h中的数值相同;KeyEvent.java的字符值提供给java应用层来使用,即在eclipse中写的应用程序和这个字符值相对应。

更多相关文章

  1. android 不自动弹出虚拟键盘
  2. Android笔记:Android后台接口教程一(从零开始学习Android后台接口)A
  3. (三)Android(安卓)Context说明
  4. Android中textView自动识别电话号码,电子邮件,网址(自动加连接)
  5. Android(安卓)KitKat 4.4 Wifi移植之AP模式与网络共享功能调试记
  6. Android下添加新的自定义键值和按键处理流程
  7. 当expandlistview的getGroupView或者getChildView中包含checkbox
  8. Android(安卓)数据存储与读取:SQLite
  9. android添加广告之--有米

随机推荐

  1. Android中目的地Intent的使用
  2. android基础入门布局讲解(2)
  3. android tab选项卡效果
  4. android 中文api (63) —— SimpleAdapter.
  5. Android中Drawable Bitmap Canvas Paint
  6. Android Studio 中 FAILURE: Build faile
  7. Android中的SystemClock类
  8. ADT Plugin for Eclipse(Android开发工具
  9. Android 5.0 Material 自定义Dialog 背景
  10. eclipse 导入报错 Invalid project descr