2013-07-25 android添加外部按键

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在 mediasoup-demo-android-master 中添加 flexfec 代码,您可以按照以下步骤进行: 1. 在 mediasoup-client-android 库中添加 flexfec 相关的代码。具体来说,需要修改 mediasoup-client-android 库中的 webrtc 相关代码,以支持 flexfec。这个过程比较复杂,需要有一定的开发经验和技能。 2. 将修改后的 mediasoup-client-android 库作为依赖项引入 mediasoup-demo-android-master 应用中。在 mediasoup-demo-android-master 的 build.gradle 文件中添加以下代码: ``` dependencies { implementation project(':mediasoup-client-android') } ``` 3. 在代码中使用新的 mediasoup-client-android 库中的 flexfec 相关的 API。具体来说,您需要在 mediasoup-demo-android-master 应用中的 PeerConnectionManager 类中添加以下代码: ``` private void enableFlexfec() { PeerConnectionFactory.Options options = new PeerConnectionFactory.Options(); options.disableEncryption = true; options.disableNetworkMonitor = true; options.enableDtlsSrtp = true; options.useMediaTransport = true; options.enableRtpDataChannel = true; options.flexfecEnabled = true; // enable flexfec factory = PeerConnectionFactory.builder() .setOptions(options) .createPeerConnectionFactory(); } ``` 这个方法将启用 flexfec,您可以将其调用添加到合适的位置。 4. 在 mediasoup-demo-android-master 应用中添加 flexfec 相关的 UI。这个过程包括添加一个开关按钮,以启用或禁用 flexfec,以及在界面上显示 flexfec 相关的统计信息。具体来说,您需要在 mediasoup-demo-android-master 应用中的 CallActivity 类中添加以下代码: ``` private void updateFlexfecEnabled(boolean enabled) { peerConnectionManager.setFlexfecEnabled(enabled); } private void showFlexfecStats() { // show flexfec stats } ``` 这些方法将分别处理开关按钮和统计信息的显示。 需要注意的是,上述步骤需要一定的开发经验和技能。如果您不熟悉 Android 开发和 WebRTC 技术,建议先学习相关知识再进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爆板流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值