android键盘映射之三

转载 2012年03月31日 09:58:49
在系统启动后,android 会通过

    static const char *device_path = "/dev/input";

    bool EventHub::penPlatformInput(void)

    res = scan_dir(device_path);

通过下面的函数打开设备。
int EventHub::pen_device(const char *deviceName)
{
     ...
     fd
= open(deviceName, O_RDWR);
     ...  
     mFDs[mFDCount].fd
= fd;
     mFDs[mFDCount].events
= POLLIN;
     ...
     ioctl(mFDs[mFDCount].fd, EVIOCGNAME(
sizeof(devname)-1), devname);
     ...
    
const char* root = getenv("ANDROID_ROOT");
     snprintf(keylayoutFilename,
sizeof(keylayoutFilename),
                 
"%s/usr/keylayout/%s.kl", root, tmpfn);
     ...
     device
->layoutMap->load(keylayoutFilename);
     ...
}

打开设备的时候,如果 device->classes&CLASS_KEYBOARD 不等于 0 表明是键盘。

常用输入设备的定义有:

enum {
         CLASS_KEYBOARD    = 0x00000001, //键盘

         CLASS_ALPHAKEY    = 0x00000002, //

         CLASS_TOUCHSCREEN = 0x00000004, //触摸屏

         CLASS_TRACKBALL     = 0x00000008 //轨迹球
};

打开键盘设备的时候通过上面的 ioctl 获得设备名称,命令字 EVIOCGNAME 的定义在文件:

kernel/include/linux/input.h 中。

#define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */

在内核键盘驱动文件 drivers/input/keyboard/pxa27x_keypad.c 中定义了设备名称:pxa27x-keypad

static struct platform_driver pxa27x_keypad_driver = {

.probe        = pxa27x_keypad_probe,

.remove        = __devexit_p(pxa27x_keypad_remove),

.suspend = pxa27x_keypad_suspend,

.resume        = pxa27x_keypad_resume,

.driver        = {

       .name = "pxa27x-keypad",

       .owner = THIS_MODULE,

},

};

ANDROID_ROOT 为环境变量,在android的命令模式下通过 printenv 可以知道它为: system

所以 keylayoutFilename 为:/system/usr/keylayout/pxa27x-keypad.kl

pxa27x-keypad.kl 定义了按键映射,具体内容如下:

# NUMERIC KEYS 3x4
key
2   1
key
3   2
key
4   3
key
5   4
key
6   5
key
7   6
key
8   7
key
9   8
key
10 9
key
11 0
key
83 POUND
key
55 STAR

# FUNCTIONAL KEYS
key
231 MENU         WAKE_DROPPED
key
192 BACK            WAKE_DROPPED
key
193 HOME        WAKE
key
107 DEL         WAKE
key
102 CALL         WAKE_DROPPED
key
158 ENDCALL      WAKE_DROPPED
key
28    DPAD_CENTER      WAKE
key
115 VOLUME_UP
key
114 VOLUME_DOWN

如果没有定义键盘映射文件,那么默认使用系统的 /system/usr/keylayout/qwerty.kl 可以修改 /system/usr/keylayout/qwerty.kl 文件改变Android公司的按键映射。

device->layoutMap->load(keylayoutFilename) 调用的是文件 KeyLayoutMap.cpp (frameworks\base\libs\ui)中的函数:

    status_t KeyLayoutMap::load(const char* filename)通过解析 pxa27x-keypad.kl
把按键的映射关系保存在 :KeyedVector<int32_t,Key> m_keys; 中。

当获得按键事件以后调用:
status_t KeyLayoutMap::map(int32_t scancode, int32_t *keycode, uint32_t *flags)

由映射关系 KeyedVector<int32_t,Key> m_keys 把扫描码转换成andorid上层可以识别的按键。


Android中对标准内核的按键映射以及按键驱动

[原]Android中对标准内核的按键映射-Android按键驱动 2013-4-1阅读574 评论0 Linux内核的平台代码的按键定义如下: /* GPIO_KEY for Tablet */...
  • xiaobaiing
  • xiaobaiing
  • 2015年05月07日 19:04
  • 1984

通过修改键盘映射替代损坏按键

[ZZ]通过修改键盘映射替代损坏按键我买的神舟笔记本电脑因为使用不当,致使Ctrl键与PageUp键损坏。而该电脑仅有键盘左下角一个Ctrl键,损坏之后给日常使用带来许多不便。由于 我装的是Windo...
  • kl28978113
  • kl28978113
  • 2015年08月24日 18:52
  • 4223

RemapKey等:小巧实用的键盘映射工具

分享几款易用而免费的键盘映射类工具软件:KeyTweak、remapkey、keybmap,以及通过注册表修改键盘映射的方法。所谓键盘映射(或称为键盘修改、keyboard remap、key rem...
  • Zhongxiucheng
  • Zhongxiucheng
  • 2013年03月18日 10:58
  • 4470

Android 模拟器和PC物理键盘映射

  • 2010年12月21日 20:00
  • 5KB
  • 下载

android:添加usb键盘+按键布局和映射的修改

android下的按键布局和映射这个笔记整理一下使用usb键盘遇到的问题,比如添加usb键盘的keylayout,添加按键,修改按键映射等。本文参考了:http://blog.csdn.net/kie...
  • doom66151
  • doom66151
  • 2011年06月29日 16:29
  • 18038

android:添加usb键盘+按键布局和映射的修改

android下的按键布局和映射 这个笔记整理一下使用usb键盘遇到的问题,比如添加usb键盘的keylayout,添加按键,修改按键映射等。 本文参考了: http://blog.cs...
  • pizi0475
  • pizi0475
  • 2014年06月18日 07:07
  • 2502

android 键盘映射、定义

键布局映射文件通常放在/system/usr/keylayout和/data/usr/keylayout
  • jimbo_lee
  • jimbo_lee
  • 2014年04月16日 11:10
  • 1034

android接触--多输入设备字符映射,9键数字键盘

在一个月前,改了一个遥控器的按键。 那时候还不知道那个遥控器有什么功能,只是找到键值转换表,更新一下就OK了。 本来乱七八糟的键盘控制就变得正常起来了,在android中,按键事件的处理流程在网上...
  • raining_heart
  • raining_heart
  • 2013年01月16日 21:48
  • 3475

Android Studio 模拟器对应键盘快捷键映射

Android Studio 模拟器对应键盘快捷键映射Android SDK2.0.1自带的虚拟机尺寸都比较小(不针对机型,只为了在PC上看的舒服一点,当然越大越好了,我最大设置成1050*450,但...
  • u014044521
  • u014044521
  • 2015年10月12日 09:17
  • 2005

android:添加usb键盘+按键布局和映射的修改

http://blog.csdn.net/doom66151/article/details/6575271 android下的按键布局和映射 这个笔记整理一下使用usb键盘遇到的问题,比如添...
  • heyustudent
  • heyustudent
  • 2012年04月26日 19:49
  • 542
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android键盘映射之三
举报原因:
原因补充:

(最多只允许输入30个字)