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

Reply via email to