永久链接: http://liuzongming1988.iteye.com/blog/1913650
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_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.h、KeycodeLabels.h中的数值相同;KeyEvent.java的字符值提供给java应用层来使用,即在eclipse中写的应用程序和这个字符值相对应。
相关推荐
在Android系统中,添加外部按键的支持是一项常见的需求,特别是在开发硬件设备或特殊应用时。本文将详细介绍如何在Android应用程序中处理外部按键事件,并提供相关的源码解析和工具使用指南。 首先,了解Android...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
根据提供的标题“Android开发权威指南”以及描述“Android开发权威指南 PDF版本”,我们可以推断这份文档是一本关于Android开发的专业指南。尽管提供的具体内容部分只包含了重复的下载链接,并没有给出具体的章节或...
根据提供的文档内容,我们可以深入探讨Android开发中的多个关键知识点,这些知识点对于初学者以及有一定经验的开发者来说都非常重要。下面将逐一分析: ### 一、Android-Manifest.xml – activity详细说明 `...
ADK基于Open Accessory协议,使得Android设备能够识别并通信与之相连的外部硬件。 在Android Honeycomb版本中,系统引入了对大屏幕设备的支持,特别是平板电脑,这些设备通常没有物理按键,而是依赖于屏幕上的软...
- **添加定制的方案板Android配置**: - **修改方案资源**:包括修改系统UI、应用程序等。 - **方案目录内文件说明**:对各个目录下的文件进行解释,帮助理解其作用。 - **如何添加新的product**: - **创建此...
手柄驱动是Android系统与游戏手柄等外部输入设备交互的关键,它允许系统识别和处理手柄的输入信号,如按钮按下和摇杆移动。 在描述中提到的"dumpsys input"和"cat /sys/kernel/debug/usb/devices"是两种用于诊断和...
### 晶晨AML8726-M Android平板培训资料知识点概览 #### 一、Amlogic AML8726-M 简介 - **核心特性**:本章节主要介绍了Amlogic AML8726-M这款SoC(System on Chip)的主要特点及其在平板电脑/便携多媒体播放器...
7. **动画效果**:为了提升用户体验,可以添加输入时的动画效果,比如按键按下后的轻微下陷、字符出现的淡入效果等。 8. **事件回调**:提供一个接口或者使用观察者模式,让外部类能够监听到输入完成或者验证成功/...
在Android平台上,音声录制和播放是移动应用开发中常见的功能,尤其对于社交、教育以及娱乐类应用至关重要。本文将详细讲解如何实现Android中的音声录制与播放,并结合"MediaRecorderAndMediaPlayer"这个示例项目,...
找到对应的Activity标签,添加`android:theme`属性并引用我们刚刚创建的主题: ```xml android:name=".YourDialogActivity" android:theme="@style/DialogTheme"> ``` 现在,当我们启动`YourDialogActivity`时...
7. **Fragment**: Fragment是Android中的可重用组件,可以在Activity中动态添加、移除或替换。它们常用于实现多屏适配或在平板设备上创建更复杂的布局。 8. **事件处理**: 通过监听器(Listener)或回调函数,可以...
需要注意的是,这里提到的“菜单”并非指硬件按键触发的菜单,而是基于Android SDK提供的菜单组件。 为了实现菜单动画,开发者可以利用`Animator`或`Animation`类来创建自定义动画,并将其应用于菜单项。例如,可以...
根据提供的文档内容,本文将对Android BSP(Board Support Package)开发中的常见问题进行详细解析,以便更好地理解Android BSP开发过程中的关键知识点。 ### 一、环境配置 #### 1.1 如何在Linux环境下解压*.tgz...
- 可能使用了一个数组或`StringBuilder`对象来存储输入的数字,每次点击按钮时,添加数字,并检查输入长度,达到设定的位数后禁止继续输入。 5. **动画效果**: - iOS风格的密码输入通常有过渡动画,比如数字出现...
- 全新一代全触控Android系统网络键盘 - 10.2英寸电容触摸屏 - UI设计简洁友好 - 支持海康威视全系列前后端设备及视频综合平台等监控中心电视墙设备 - 开放编号设置,支持U盘一次性导入预先编辑好的编号 - ...
- 使用如adb等工具抓取Android log是调试Android应用程序的基础。 **2.4 如何抓取Modem arm log** - 抓取Modem arm log对于分析通信相关的问题至关重要。 **2.5 如何抓取Mocordsp log** - Mocordsp log包含了DSP...
本章将介绍如何从外部文件(如.fbx或.obj)加载3D模型,以及如何组织和管理游戏场景,包括对象的添加、删除和动画控制。 4. **第11章:纹理与贴图** 纹理赋予3D模型颜色和细节,使得游戏世界更加生动。本章会讲解...