Android 按键映射分析

android 能够将不同的低层 scancode 转化成上层使用的统一的 keycode (以下分析为 android 2.2 froyo 的)。下面说的几个相关的源代码文件都在 framework/base/libs/ui 下。

EventHub? .cpp

先看看下面这段代码:
// 在 open_device 函数里
if ((device->classes&CLASS_KEYBOARD) != 0) { 
        char devname[PROPERTY_VALUE_MAX];
        char keylayoutFilename[300];
        
        const char* root = getenv("ANDROID_ROOT");
        property_get("persist.sys.keylayout", devname, "qwerty");
        snprintf(keylayoutFilename, sizeof(keylayoutFilename),
        "%s/usr/keylayout/%s.kl", root, devname);
        bool defaultKeymap = access(keylayoutFilename, R_OK);
        if (defaultKeymap) {
                strcpy(devname, "qwerty");
                snprintf(keylayoutFilename, sizeof(keylayoutFilename),
                "%s/usr/keylayout/%s.kl", root, devname);
        }    
        LOGI("keylayout = %s, Filename = %s", devname, keylayoutFilename);
        device->layoutMap->load(keylayoutFilename);
这段代码是打开键盘设备,并读取按键映射表的。从代码里可以看得到映射文件是从 root/usr/keylayout/qwerty.kl (root 一般是 system)下读取的(这个 qwerty.kl 各个设备厂商应该可以自己改,我看的 x86 的默认使用的是这个)。

kl 文件

这个文件就是 android 的按键映射文件,结构如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android系统的ADC按键驱动主要涉及到驱动层和应用层两个方面。 驱动层: Android系统的ADC按键驱动主要是由Linux内核的Input子系统来实现的。Input子系统是Linux内核中一个用于处理输入设备的子系统,主要功能是接收来自输入设备的数据,并将其传递到应用程序。 在Android系统中,Input子系统主要负责处理键盘、鼠标、触摸屏等输入设备的数据。对于ADC按键,一般都是通过GPIO口连接到处理器上,因此需要通过驱动程序来读取GPIO口的状态,以检测按键的按下和松开。 在Linux内核中,GPIO的读取是通过sysfs文件系统实现的。因此,驱动程序需要将GPIO口的状态映射到sysfs文件系统中的一个文件,以便应用程序能够读取GPIO口的状态。 应用层: 在Android系统中,应用程序一般使用Java语言编写。对于ADC按键,应用程序可以通过Android提供的KeyEvent类来处理按键事件。 当用户按下或松开ADC按键时,Linux内核会将这个事件传递给Android系统的Input子系统。Input子系统会将这个事件转换成一个KeyEvent对象,并将其发送给应用程序。 应用程序可以通过监听KeyEvent对象来处理按键事件。当用户按下或松开ADC按键时,应用程序可以根据不同的按键事件来执行不同的操作,例如打开应用程序、切换菜单、调节音量等。 综上所述,Android系统的ADC按键驱动主要是由Linux内核的Input子系统和应用层来实现的。在驱动层,需要通过驱动程序来读取GPIO口的状态,以检测按键的按下和松开;在应用层,需要通过监听KeyEvent对象来处理按键事件,以执行不同的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值