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数组,然后把KEY的platform_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_A0x130
#define BTN_B0x131
那么在安卓系统中找到:
/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 304BUTTON_A
key 305BUTTON_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.h、KeycodeLabels.h中的数值相同;KeyEvent.java的字符值提供给java应用层来使用,即在eclipse中写的应用程序和这个字符值相对应。
相关推荐
android按钮添加按键音操作,比如做计算器按钮点击是有指定按键音。还有做拨打电话拨号版是也可以给按钮添加按键音。
android 后台监听按键事件方法及demoandroid 后台监听按键事件方法及demo
Android添加物理按键
Android 模拟按键,实现按键发送消息
Android代码模拟按键事件,demo中以按数字键1为例子,响应power按键事件,系统进待机。按数字键1可以替换成接收消息,广播,接口回调,等等
android应用,将外部的sqlite数据库导入到应用的私有空间中,源db文件置于assets目录下,如果源文件大小超过1M,使用Filesplit分割为不超过1M的小文件,那么就将所有分小文件置于assets目录下,本工程里已带...
KeyBlocker 按键屏蔽 本应用可以在安卓系统的手机上屏蔽大部分默认存在的物理按键的使用 源码分享 仅供参考 开源协议 GNU3.0
隐藏虚拟按键: 添加一个小按钮控制虚拟按键的隐藏和显示,在虚拟按键添加音量控制也是如此!
android应用上报按键源码,用于apk应用上报按键消息给系统!!!
Android修改按键驱动
android 外部类作为事件监听器类 ,外部类形式的事件监听器不能自由访问创建GUI界面
博文源码《Android基于Socket无线遥控(2)--无线控制篇》 http://blog.csdn.net/zzp16/article/details/7939852 为Android系统添加模拟按键对外接口
android按键驱动研究 android按键驱动研究
此patch为实现有按键键盘的移动设备添加全按键背光的功能。主要是在PhoneWindowManager监听按键事件后设置setButtonLightEnabled
linux2.6.35.7内核按键输入驱动代码,测试通过,可以在android系统写运行。
Android应用源码之按键的处理
从底层到应用层详细讲解了android中如何实现全局快捷键的
详细的描述了 linux的按键响应机制 以及在framework层的处理机制。
9.0 10.0 在framework层添加KeyEvent按键事件的流程