Rockie's Android Porting Guide(3)——Add correct keymap to your system Rockie Cheng We already have a keyboard dirver in Linux kernel. Next, let us notice Android that we have a keyboard. /* gpio buttons from linux*/ static struct gpio_keys_button gpio_buttons[] = { { .gpio = S3C64XX_GPN(0), .code = 116, .desc = "ENDCALL", .active_low = 1, .wakeup = 0, }, { .gpio = S3C64XX_GPN(1), .code = 139, .desc = "MENU", .active_low = 1, .wakeup = 0, }, { .gpio = S3C64XX_GPN(2), .code = 99, .desc = "ROTATE", .active_low = 1, .wakeup = 0, }, { .gpio = S3C64XX_GPN(3), .code = 102, .desc = "HOME", .active_low = 1, .wakeup = 0, }, { .gpio = S3C64XX_GPN(4), .code = 42, .desc = "BACK", .active_low = 1, .wakeup = 0, }, { .gpio = S3C64XX_GPN(5), .code = 158, .desc = "BACK", .active_low = 1, .wakeup = 0, } }; (1)Let me see logcat information. I/EventHub( 58): New device: path=/dev/input/event1 name=S3C TouchScreen id=0x10000 (of 0x1) index=1 fd=45 classes=0x4 E/EventHub( 58): could not get driver version for /dev/input/mice, Not a typewriter I/EventHub( 58): New keyboard: publicID=65537 device->id=0x10001 devname='gpio-keys' propName='hw.keyboards.65537.devname' keylayout='/system/usr/keylayout/qwerty.kl' <<<<<<<<Obviously this is not wht we want I/EventHub( 58): New device: path=/dev/input/event0 name=gpio-keys id=0x10001 (of 0x2) index=2 fd=47 classes=0x1 E/EventHub( 58): could not get driver version for /dev/input/mouse0, Not a typewriter I/KeyInputQueue( 58): Device added: id=0x0, name=gpio-keys, classes=1 I/KeyInputQueue( 58): Device added: id=0x10000, name=S3C TouchScreen, classes=4 I/KeyInputQueue( 58): X: min=0 max=480 flat=0 fuzz=0 I/KeyInputQueue( 58): Y: min=0 max=272 flat=0 fuzz=0 I/KeyInputQueue( 58): Pressure: min=0 max=1 flat=0 fuzz=0 I/KeyInputQueue( 58): Size: unknown values I/KeyInputQueue( 58): No virtual keys found (2)make a file build/target/board/idea6410/gpio-keys.kl key 158 BACK WAKE_DROPPED key 139 MENU WAKE_DROPPED key 102 HOME WAKE key 116 ENDCALL WAKE_DROPPED key 99 ROTATOR key 42 POWER WAKE (3)make another file build/target/board/idea6410/gpio-keys.kcm First,I just copy it from tutule2.kcm,but it does not work. So I find this form net,just a little change. It seems like 9 number keyboard more than qwerty. [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 '+' '+' '+' '+' '+' '+'
(4)add these to AndroidBoard.mk file := $(TARGET_OUT_KEYLAYOUT)/gpio-keys.kl ALL_PREBUILT += $(file) $(file) : $(LOCAL_PATH)/gpio-keys.kl | $(ACP) $(transform-prebuilt-to-target) include $(CLEAR_VARS) LOCAL_SRC_FILES := gpio-keys.kcm include $(BUILD_KEY_CHAR_MAP) (5)add these to system.prop android.keylayout.gpio-keys = /system/usr/keylayout/gpio-keys.kl android.keychar.gpio-keys = /system/usr/keychars/gpio-keys.kcm (6)build your system again Now we can see the different: I/EventHub( 63): New device: path=/dev/input/event1 name=S3C TouchScreen id=0x10000 (of 0x1) index=1 fd=50 classes=0x4 E/EventHub( 63): could not get driver version for /dev/input/mice, Not a typewriter E/KeyLayoutMap( 63): /system/usr/keylayout/gpio-keys.kl:10: expected keycode, got 'ROTATOR' I/EventHub( 63): New keyboard: publicID=0 device->id=0x10001 devname='gpio-keys' propName='hw.keyboards.0.devname' keylayout='/system/usr/keylayout/gpio-keys.kl'<<<<<<<<OK correct! I/EventHub( 63): New device: path=/dev/input/event0 name=gpio-keys id=0x10001 (of 0x2) index=2 fd=52 classes=0x1 E/EventHub( 63): could not get driver version for /dev/input/mouse0, Not a typewriter I/KeyInputQueue( 63): Device added: id=0x0, name=gpio-keys, classes=1 I/KeyInputQueue( 63): Device added: id=0x10000, name=S3C TouchScreen, classes=4 I/KeyInputQueue( 63): X: min=0 max=480 flat=0 fuzz=0 I/KeyInputQueue( 63): Y: min=0 max=272 flat=0 fuzz=0 I/KeyInputQueue( 63): Pressure: min=0 max=1 flat=0 fuzz=0 I/KeyInputQueue( 63): Size: unknown values I/KeyInputQueue( 63): No virtual keys found System do not know the word "ROTATOR" presently. You can add a USB-KEYBOARD too. Rockie Cheng 阿虚 Reference: http://www.kandroid.org/android_pdk/keymaps_keyboard_input.html |