`

android添加外部按键

 
阅读更多

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中写的应用程序和这个字符值相对应。

分享到:
评论

相关推荐

    Android启动对话框的Activity

    找到对应的Activity标签,添加`android:theme`属性并引用我们刚刚创建的主题: ```xml android:name=".YourDialogActivity" android:theme="@style/DialogTheme"&gt; ``` 现在,当我们启动`YourDialogActivity`时...

    Android 音声录制和播放

    例如,你可以选择将录音保存到外部存储器。 2. 设置音频源,`setAudioSource()`方法通常选择`MediaRecorder.AudioSource.MIC`,即使用设备的麦克风作为音频输入源。 3. 设置音频编码格式,`setOutputFormat()`,常见...

    基于Android的各种基础操作

    6. **Acceleration(重力)检测**:Android提供了SensorManager和Sensor类来获取设备的加速度传感器数据,从而实现重力检测。开发者需要理解SensorEventListener接口,如何注册监听器,以及如何解析SensorEvent中的...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    android 学习心得

    - **按键事件**:如物理按键的按下、抬起等。 - **事件分发机制**:主要包括事件捕获、事件目标、事件响应三个阶段。 - **事件监听器**:通过为View设置监听器(如 `OnClickListener`)来处理用户的交互。 ### 八、...

    android控制leds

    3. **权限管理**:在AndroidManifest.xml中,我们需要添加必要的权限,如`android.permission.WRITE_EXTERNAL_STORAGE`,因为LED的控制文件通常位于外部存储目录。 4. **触发器和效果**:除了直接设置亮度,我们还...

    Android 3D游戏开发技术详解与典型案例_源码

    本章将介绍如何从外部文件(如.fbx或.obj)加载3D模型,以及如何组织和管理游戏场景,包括对象的添加、删除和动画控制。 4. **第11章:纹理与贴图** 纹理赋予3D模型颜色和细节,使得游戏世界更加生动。本章会讲解...

    Android API 17

    Android API 17引入了对多点触控键盘的支持,这意味着用户可以通过多个按键同时按下来输入文本,这在游戏或特定应用中特别有用。此外,还增强了对物理键盘的支持,提供了更灵活的键盘事件处理。 ### 2. 媒体播放与...

    Android 自定义输入支付密码的软键盘实例代码

    这可以通过在`PasswordKeyboardView`中定义这个接口并进行处理,或者将其作为参数传递给`PasswordKeyboardView`,以便外部类可以监听这些事件。 实现效果如下: 1. 用户只能输入数字,因为键盘布局仅包含0-9的数字...

    H3 Android定制化文档

    - **添加定制的方案板Android配置**: - **修改方案资源**:包括修改系统UI、应用程序等。 - **方案目录内文件说明**:对各个目录下的文件进行解释,帮助理解其作用。 - **如何添加新的product**: - **创建此...

    android串口键盘

    串口键盘功能在这些设备上能够提供用户友好的交互体验,使得用户可以通过遥控器或其他支持UART通信的外部设备来输入命令。 串口键盘的工作原理基于UART(通用异步收发传输器)协议,这是一种简单的串行通信协议,...

    Android动画、界面切换、特效、功能模块设计及代码

    需要注意的是,这里提到的“菜单”并非指硬件按键触发的菜单,而是基于Android SDK提供的菜单组件。 为了实现菜单动画,开发者可以利用`Animator`或`Animation`类来创建自定义动画,并将其应用于菜单项。例如,可以...

    Android开发权威指南

    根据提供的标题“Android开发权威指南”以及描述“Android开发权威指南 PDF版本”,我们可以推断这份文档是一本关于Android开发的专业指南。尽管提供的具体内容部分只包含了重复的下载链接,并没有给出具体的章节或...

    android bsp faq

    2. **添加依赖库**:运行`sudo apt-get install build-essential bison flex texinfo libncurses5-dev gawk`来安装编译GCC所需的依赖库。 3. **配置编译参数**:创建编译配置文件,例如`./configure --prefix=/usr/...

    android 仿ios数字密码.7z

    - 可能使用了一个数组或`StringBuilder`对象来存储输入的数字,每次点击按钮时,添加数字,并检查输入长度,达到设定的位数后禁止继续输入。 5. **动画效果**: - iOS风格的密码输入通常有过渡动画,比如数字出现...

    Android项目-shiyan4.zip

    7. **Fragment**: Fragment是Android中的可重用组件,可以在Activity中动态添加、移除或替换。它们常用于实现多屏适配或在平板设备上创建更复杂的布局。 8. **事件处理**: 通过监听器(Listener)或回调函数,可以...

    S905X3安卓9.0 安卓11 手柄驱动 调试命令 ampere:/ $ getevent -ltr add device 1

    手柄驱动是Android系统与游戏手柄等外部输入设备交互的关键,它允许系统识别和处理手柄的输入信号,如按钮按下和摇杆移动。 在描述中提到的"dumpsys input"和"cat /sys/kernel/debug/usb/devices"是两种用于诊断和...

    Android-一个定制的视图拥有键盘和字符显示可用于身份验证

    7. **动画效果**:为了提升用户体验,可以添加输入时的动画效果,比如按键按下后的轻微下陷、字符出现的淡入效果等。 8. **事件回调**:提供一个接口或者使用观察者模式,让外部类能够监听到输入完成或者验证成功/...

Global site tag (gtag.js) - Google Analytics