How to add new Key to Android from Kernel to Android framework and Android application test
Kernel Layer: 1:We use Kernel matrix-keypad to register 3*3 key #ifdef CONFIG_KEYBOARD_MATRIX /*GPIO Matrix Keyboard*/ static const uint32_t s3c64xx_matrix_keys[] = { KEY(0, 0, KEY_P1), KEY(0, 1, KEY_LEFT), KEY(0, 2, KEY_UP), KEY(1, 0, KEY_P2), KEY(1, 1, KEY_ENTER), KEY(1, 2, KEY_RIGHT), KEY(2, 0, KEY_FRONTDOOR), KEY(2, 1, KEY_DOWN), KEY(2, 2, KEY_START), }; const struct matrix_keymap_data s3c64xx_keymap_data = { .keymap = s3c64xx_matrix_keys, .keymap_size = ARRAY_SIZE(s3c64xx_matrix_keys), }; /*ROW KEY GPN0,GPN1,GPN2 INPUT-->Extern Interrupt */ static const unsigned int s3c64xx_keypad_row_gpios[] = { 144,145,146 }; /*COL KEY:GPN3,GPN6,GPN7*/ static const unsigned int s3c64xx_keypad_col_gpios[] = { 147,150,151 }; static struct matrix_keypad_platform_data s3c64xx_keypad_platform_data = { .keymap_data = &s3c64xx_keymap_data, .row_gpios = s3c64xx_keypad_row_gpios, .num_row_gpios = ARRAY_SIZE(s3c64xx_keypad_row_gpios), .col_gpios = s3c64xx_keypad_col_gpios, .num_col_gpios = ARRAY_SIZE(s3c64xx_keypad_col_gpios), .active_low = 1, .debounce_ms = 20, .col_scan_delay_us = 5, }; static struct platform_device s3c64xx_matrix_keyboard = { .name = "matrix-keypad", .id = -1, .dev = { .platform_data = &s3c64xx_keypad_platform_data, }, }; static struct platform_device *smdk6410_devices[] __initdata = { #ifdef CONFIG_KEYBOARD_MATRIX &s3c64xx_matrix_keyboard, #endif }; 2:We add new defition of KEY_P1,KEY_P2,KEY_FRONTDOOR,KEY_START in linux/include/linux/input.h /*Jiujin.hong 2011/1011 #define KEY_P1 247 #define KEY_P2 248 #define KEY_FRONTDOOR 249 #define KEY_START 250 /*END*/ 3:We make menuconfig to support Matrix Keyboard arch to register into Kernel input subsystem Android Framework Layer: 1: +++ /project/sec_android/eclair/android2.1/smdk6410/android/frameworks/base/include/ui/KeycodeLabels.h 2011-07-04 11:23:23.326802179 +0800 @@ -114,12 +114,6 @@ { "MEDIA_REWIND", 89 }, { "MEDIA_FAST_FORWARD", 90 }, { "MUTE", 91 }, -//Jiujin.hong 2011/10/12,3*3 Key new Key - { "P1",92}, - { "P2",93}, - { "FRONTDOOR",94}, - { "START",95}, -// // NOTE: If you add a new keycode here you must also add it to: // (enum KeyCode, in this file) @@ -224,13 +218,7 @@ kKeyCodePreviousSong = 88, kKeyCodeRewind = 89, kKeyCodeForward = 90, - kKeyCodeMute = 91, -//Jiujin.hong 2011/1012,3*3 Key - kKeyCodeP1 =92, - kKeyCodeP2 =93, - kKeyCodeFRONTDOOR=94, - kKeyCodeSTART=95 -//End + kKeyCodeMute = 91 } KeyCode; 2: --- frameworks/base/core/java/android/view/KeyEvent.java 2011-10-14 16:29:55.480750044 +0800 +++ /project/sec_android/eclair/android2.1/smdk6410/android/frameworks/base/core/java/android/view/KeyEvent.java 2011-07-04 11:23:14.279382459 +0800 @@ -120,12 +120,6 @@ public static final int KEYCODE_MEDIA_REWIND = 89; public static final int KEYCODE_MEDIA_FAST_FORWARD = 90; public static final int KEYCODE_MUTE = 91; -//Jiujin.hong 2011/10/12 3*3 NEW KEY Exhibiton - public static final int KEYCODE_P1 = 92; - public static final int KEYCODE_P2 = 93; - public static final int KEYCODE_FRONTDOOR = 94; - public static final int KEYCODE_START = 95; -// // NOTE: If you add a new keycode here you must also add it to: // isSystem() @@ -141,9 +135,7 @@ // those new codes. This is intended to maintain a consistent // set of key code definitions across all Android devices. -// private static final int LAST_KEYCODE = KEYCODE_MUTE; -//Jiujin.hong 2011/10/12 3*3 KEY Exhibition - private static final int LAST_KEYCODE = KEYCODE_START; + private static final int LAST_KEYCODE = KEYCODE_MUTE; /** * @deprecated There are now more than MAX_KEYCODE keycodes. @@ -700,12 +692,6 @@ case KEYCODE_CAMERA: case KEYCODE_FOCUS: case KEYCODE_SEARCH: -//Jiujin.hong 2011/10/12 3*3 KEY new Key - case KEYCODE_P1: - case KEYCODE_P2: - case KEYCODE_FRONTDOOR: - case KEYCODE_START: -//END return true; default: return false; 3: --- frameworks/base/core/res/res/values/attrs.xml 2011-10-14 16:29:19.448748629 +0800 +++ /project/sec_android/eclair/android2.1_6410/smdk6410/android/frameworks/base/core/res/res/values/attrs.xml 2011-07-04 11:23:16.606738864 +0800 @@ -912,12 +912,6 @@ <enum name="KEYCODE_MEDIA_REWIND" value="89" /> <enum name="KEYCODE_MEDIA_FAST_FORWARD" value="90" /> <enum name="KEYCODE_MUTE" value="91" /> - <!-- Jiujin.hong 2011/1012 3*3 Key New Key --> - <enum name="KEYCODE_P1" value="92" /> - <enum name="KEYCODE_P2" value="93" /> - <enum name="KEYCODE_FRONTDOOR" value="94" /> - <enum name="KEYCODE_START" value="95" /> - <!-- End --> </attr> <!-- ***************************************************************** --> 4:qwerty.kl key 247 P1 key 248 P2 key 249 FRONTDOOR key 250 START Android Application test: 1:Android has setFocusable /request Focus for View if you use onKeyDown,so we need dispatch event //Since we register new keycode map in frameworks/base/core/res/res/values/attrs.xml //So we use it to judge //KEYCODE_P1 ---92 //KEYCODE_P2 ---93 //KEYCODE_FRONTDOOR ---94 //KEYCODE_START ---95 @Override public boolean dispatchKeyEvent(KeyEvent event) { int action = event.getAction(); int keyCode = event.getKeyCode(); System.out.println("Keycode--->"+keyCode); switch (keyCode) { case 92: if (action == KeyEvent.ACTION_DOWN) { //TODO System.out.println("P1 DOWN"); } if (action == KeyEvent.ACTION_UP) { //TODO System.out.println("P1 UP"); } return true; case 93: if (action == KeyEvent.ACTION_DOWN) { //TODO System.out.println("P2 DOWN"); } if (action == KeyEvent.ACTION_UP) { //TODO System.out.println("P2 UP"); } return true; case 94: if (action == KeyEvent.ACTION_DOWN) { //TODO System.out.println("FRONTDOOR DOWN"); } if (action == KeyEvent.ACTION_UP) { //TODO System.out.println("FRONTDOOR UP"); } return true; case 95: if (action == KeyEvent.ACTION_DOWN) { //TODO System.out.println("START DOWN"); } if (action == KeyEvent.ACTION_UP) { //TODO System.out.println("START UP"); } return true; default: return super.dispatchKeyEvent(event); } } // End adb logcat: I/System.out( 1687): Keycode--->92 I/System.out( 1687): P1 DOWN I/System.out( 1687): Keycode--->92 I/System.out( 1687): P1 UP I/System.out( 1687): Keycode--->92 I/System.out( 1687): P1 DOWN I/System.out( 1687): Keycode--->92 I/System.out( 1687): P1 UP I/System.out( 1687): Keycode--->92 I/System.out( 1687): P1 DOWN I/System.out( 1687): Keycode--->92 I/System.out( 1687): P1 UP I/System.out( 1687): Keycode--->92 I/System.out( 1687): P1 DOWN I/System.out( 1687): Keycode--->92 I/System.out( 1687): P1 UP I/System.out( 1687): Keycode--->93 I/System.out( 1687): P2 DOWN I/System.out( 1687): Keycode--->93 I/System.out( 1687): P2 UP I/System.out( 1687): Keycode--->93 I/System.out( 1687): P2 DOWN I/System.out( 1687): Keycode--->93 I/System.out( 1687): P2 UP I/System.out( 1687): Keycode--->93 I/System.out( 1687): P2 DOWN I/System.out( 1687): Keycode--->93 I/System.out( 1687): P2 UP I/System.out( 1687): Keycode--->93 I/System.out( 1687): P2 DOWN I/System.out( 1687): Keycode--->93 I/System.out( 1687): P2 UP I/System.out( 1687): Keycode--->93 I/System.out( 1687): P2 DOWN I/System.out( 1687): Keycode--->93 I/System.out( 1687): P2 UP I/System.out( 1687): Keycode--->93 I/System.out( 1687): P2 DOWN I/System.out( 1687): Keycode--->93 I/System.out( 1687): P2 UP I/System.out( 1687): Keycode--->93 I/System.out( 1687): P2 DOWN I/System.out( 1687): Keycode--->93 I/System.out( 1687): P2 UP I/System.out( 1687): Keycode--->94 I/System.out( 1687): FRONTDOOR DOWN I/System.out( 1687): Keycode--->94 I/System.out( 1687): FRONTDOOR UP I/System.out( 1687): Keycode--->94 I/System.out( 1687): FRONTDOOR DOWN I/System.out( 1687): Keycode--->94 I/System.out( 1687): FRONTDOOR UP I/System.out( 1687): Keycode--->94 I/System.out( 1687): FRONTDOOR DOWN I/System.out( 1687): Keycode--->94 I/System.out( 1687): FRONTDOOR UP I/System.out( 1687): Keycode--->94 I/System.out( 1687): FRONTDOOR DOWN I/System.out( 1687): Keycode--->94 I/System.out( 1687): FRONTDOOR UP I/System.out( 1687): Keycode--->94 I/System.out( 1687): FRONTDOOR DOWN I/System.out( 1687): Keycode--->94 I/System.out( 1687): FRONTDOOR UP I/System.out( 1687): Keycode--->95 I/System.out( 1687): START DOWN I/System.out( 1687): Keycode--->95 I/System.out( 1687): START UP I/System.out( 1687): Keycode--->95 I/System.out( 1687): START DOWN I/System.out( 1687): Keycode--->95 I/System.out( 1687): START UP I/System.out( 1687): Keycode--->95 I/System.out( 1687): START DOWN I/System.out( 1687): Keycode--->95 I/System.out( 1687): START UP I/System.out( 1687): Keycode--->95 I/System.out( 1687): START DOWN I/System.out( 1687): Keycode--->95 I/System.out( 1687): START UP D/dalvikvm( 1687): GC freed 9526 objects / 375728 bytes in 66ms I/System.out( 1687): Keycode--->95 I/System.out( 1687): START DOWN I/System.out( 1687): Keycode--->95 I/System.out( 1687): START UP I/System.out( 1687): Keycode--->95 I/System.out( 1687): START DOWN I/System.out( 1687): Keycode--->95 I/System.out( 1687): START UP I/System.out( 1687): Keycode--->95 I/System.out( 1687): START DOWN I/System.out( 1687): Keycode--->95 I/System.out( 1687): START UP I/System.out( 1687): Keycode--->95 I/System.out( 1687): START DOWN I/System.out( 1687): Keycode--->95 I/System.out( 1687): START UP -- Chinese Name:Hong jiu jin Android,Internet of Things,Embedded System Design and Develop English Name:Tommy Tel: +86 1367514 8249 Skype ID:hongjiujing Gtalk ID:: hongjiuj...@gmail.com <talk%3ahongjiuj...@gmail.com> Blog: http://internetofthings.blogbus.com/ Country:China There are three types of people in this world: those who make things happen, those who watch things happen and those who wonder what happened. -- unsubscribe: android-porting+unsubscr...@googlegroups.com website: http://groups.google.com/group/android-porting