Android系统移植(三)-按键字符表

转载 2012年03月23日 16:41:25

上节讲android的Window Manager将内核按键码通过按键映射表转换成android按键码,
这节讲的是android按键码向android字符的转换,转换也是通过Window Manager来完成的
(1)原始按键字符表,我们知道一个按键是可以显示多个字符的,决定显示字符的是CAPS(大小写),FN,NUNMBER等按键
举例如下:
[type=QWERTY]                                          
                                                       
# keycode       display number  base    caps    fn      caps_fn
                                                       
A               'A'     '2'     'a'     'A'     '#'     0x00
B               'B'     '2'     'b'     'B'     '<'     0x00
C               'C'     '2'     'c'     'C'     '9'     0x00E7
D               'D'     '3'     'd'     'D'     '5'     0x00
E               'E'     '3'     'e'     'E'     '2'     0x0301
F               'F'     '3'     'f'     'F'     '6'     0x00A5
G               'G'     '4'     'g'     'G'     '-'     '_'
H               'H'     '4'     'h'     'H'     '['     '{'
I               'I'     '4'     'i'     'I'     '$'     0x0302
J               'J'     '5'     'j'     'J'     ']'     '}'
K               'K'     '5'     'k'     'K'     '"'     '~'
L               'L'     '5'     'l'     'L'     '''     '`'
M               'M'     '6'     'm'     'M'     '!'     0x00
N               'N'     '6'     'n'     'N'     '>'     0x0303
O               'O'     '6'     'o'     'O'     '('     0x00
P               'P'     '7'     'p'     'P'     ')'     0x00
Q               'Q'     '7'     'q'     'Q'     '*'     0x0300
R               'R'     '7'     'r'     'R'     '3'     0x20AC
S               'S'     '7'     's'     'S'     '4'     0x00DF
T               'T'     '8'     't'     'T'     '+'     0x00A3
U               'U'     '8'     'u'     'U'     '&'     0x0308
V               'V'     '8'     'v'     'V'     '='     '^'
W               'W'     '9'     'w'     'W'     '1'     0x00
X               'X'     '9'     'x'     'X'     '8'     0xEF00
Y               'Y'     '9'     'y'     'Y'     '%'     0x00A1
Z               'Z'     '9'     'z'     'Z'     '7'     0x00
                                                       
# on pc keyboards
COMMA           ','     ','     ','     ';'     ';'     '|'
PERIOD          '.'     '.'     '.'     ':'     ':'     0x2026
AT              '@'     '0'     '@'     '0'     '0'     0x2022
SLASH           '/'     '/'     '/'     '?'     '?'     '/'
                                                       
SPACE           0x20    0x20    0x20    0x20    0xEF01  0xEF01
ENTER         0xa     0xa     0xa     0xa     0xa     0xa
                                                       
TAB             0x9     0x9     0x9     0x9     0x9     0x9
0               '0'     '0'     '0'     ')'     ')'     ')'
1               '1'     '1'     '1'     '!'     '!'     '!'
2               '2'     '2'     '2'     '@'     '@'     '@'
3               '3'     '3'     '3'     '#'     '#'     '#'
4               '4'     '4'     '4'     '$'     '$'     '$'
5               '5'     '5'     '5'     '%'     '%'     '%'
6               '6'     '6'     '6'     '^'     '^'     '^'
7               '7'     '7'     '7'     '&'     '&'     '&'
8               '8'     '8'     '8'     '*'     '*'     '*'
9               '9'     '9'     '9'     '('     '('     '('
                                                       
GRAVE           '`'     '`'     '`'     '~'     '`'     '~'
MINUS           '-'     '-'     '-'     '_'     '-'     '_'
EQUALS          '='     '='     '='     '+'     '='     '+'
LEFT_BRACKET    '['     '['     '['     '{'     '['     '{'
RIGHT_BRACKET   ']'     ']'     ']'     '}'     ']'     '}'
BACKSLASH       '/'     '/'     '/'     '|'     '/'     '|'
SEMICOLON       ';'     ';'     ';'     ':'     ';'     ':'
APOSTROPHE      '''     '''     '''     '"'     '''     '"'
STAR            '*'     '*'     '*'     '*'     '*'     '*'
POUND           '#'     '#'     '#'     '#'     '#'     '#'
PLUS            '+'     '+'     '+'     '+'     '+'     '+'

(2)android为了减少载入时间,并没有使用原始按键表文件,而是将其转换成二进制文件
转换的工具源代码在android源代码build/tools/kcm目录下,android在编译过程中会
首先编译转换工具,然后利用转换工具将android源代码sdk/emulator/keymaps目录下
的qwerty.kcm和qwerty2.kcm文件分别转换成qwerty.kcm.bin和qwerty2.kcm.bin
转换后的二进制文件复制到out/target/product/<board_name>/system/usr/keychars
目录下,也就是目标平台的/system/usr/keychars目录中。

(3)Window Manager对按键的处理在android源代码frameworks/base/libs/ui/EventHub.cpp文件中
Window Manager从内核接收到一个按键输入事件后会首先调用按键映射表将内核按键码映射成android按键码(这部分上节已讲),然后会
将android按键码转换成字符,具体过程如下:
(a)设置系统系统属性hw.keyboards.设备号.devname的值为设备名
以上节的gpio-keys设备为例,会设置系统属性hw.keyboards.65539.devname的值为gpio-keys
(b)载入按键字符表,首先载入/system/usr/keychars目录下的设备名.kcm.bin文件(此例即gpio-keys.kcm.bin文件),如果载入失败
则载入该目录下的querty.kcm.bin.
(c)利用载入的按键字符表将android按键转换成按键字符发给上层应用程序。

(4)一般情况下一个控制按键是不需要作按键字符表的,系统会调用默认的去处理,但是如果要开发一个全功能键盘(包含了字母和数字),那可能就需要
自己作一个专用的按键字符表了。

转自:http://blog.csdn.net/jiajie961/article/details/6001973

Android系统移植(三)-按键字符表

上节讲android的Window Manager将内核按键码通过按键映射表转换成android按键码,这节讲的是android按键码向android字符的转换,转换也是通过Window Manage...
  • tomew
  • tomew
  • 2011年03月30日 22:04
  • 358

Android系统移植-按键移植

这一部分主要是移植android的键盘和按键 (1)Android使用标准的linux输入事件设备(/dev/input目录下)和驱动,按键定义在内核include/linux/input.h文件中...
  • dengchonglin
  • dengchonglin
  • 2011年09月15日 09:41
  • 476

Android系统移植必读教程。快速移植系统

找一个本机型的底包system,然后
  • u011283906
  • u011283906
  • 2014年10月10日 19:34
  • 1267

Android系统移植(一)

摘要:移植Android4.2.2到TINY4412上
  • u014770862
  • u014770862
  • 2016年01月27日 13:27
  • 1801

Android系统移植之按键移植

本帖最后由 haolele 于 2011-11-11 21:04 编辑  Android系统移植之按键移植这一部分主要是移植android的键盘和按键 (1)Android使用标准的linux...
  • permike
  • permike
  • 2014年12月12日 09:17
  • 326

Android系统移植(三)

上节当中只是简单的介绍了下系统镜像的制作过程,但是在这之前还需要更重要的两步:源码编译和内核编译。这两步的正确与否关乎Android能否正常运行。因此,下面来介绍源码编译和内核编译需要注意的问题. ...
  • u014770862
  • u014770862
  • 2016年02月17日 20:54
  • 1023

Android系统-按键字符表(*.kcm)

上节讲android的Window Manager将内核按键码通过按键映射表转换成android按键码, 这节讲的是android按键码向android字符的转换,转换也是通过Window Mana...
  • yuleslie
  • yuleslie
  • 2011年12月16日 12:36
  • 1460

【按键】[独立按键] - 1: 单击,双击,三击以及N击

下面这段是引言,和按键程序实质内容没有任何关系,可以当P话,可直接跳到分割线之后的正文部分。最近自己在琢磨按键程序,之前弄了,按键单击程序,程序可以实现读取按键的几个状态,然后根据需求使用。单击按键的...
  • z21109
  • z21109
  • 2016年03月23日 18:03
  • 3905

深入浅出 - Android系统移植与平台开发(四)- 搭建Linux编译环境

Android的源码开发可以在MacOS上或Ubuntu系统上,目前不支持在Windows下进行源码开发,在Ubuntu上建立开发环境的步骤如下: Ø 建立Linux编译环境 Ø 安装JDK Ø 安装...
  • mr_raptor
  • mr_raptor
  • 2014年03月10日 16:53
  • 14594

android6.0按键处理浅析

处理流程及示意图: 1,硬件配置: kernel-3.18\arch\arm\boot\dts\projectxxx.dts &keypad {      ...
  • liyanfei123456
  • liyanfei123456
  • 2016年11月17日 10:31
  • 848
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android系统移植(三)-按键字符表
举报原因:
原因补充:

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