zoukankan      html  css  js  c++  java
  • Android下添加新的自定义键值和按键处理流程【转】

    本文转载自:http://blog.csdn.net/tkwxty/article/details/43338921

    Android下添加新的自定义键值和按键处理流程

        说出来不怕大家笑话,我写这篇博客的原因在于前几天去一个小公司面试Android系统工程师,然后在面试的时候对方的技术总监问了我一个问题,请你详细描述一下怎么在Android下添加自定义键值和详细描述下Android的按键处理流程。现在回想起来当时回答的确实不是很好,乘着现在比较空闲的时机就来分析下上述的两个问题。
        首先分析下Android下怎么添加新的自定义键值。在Android的原生系统中键值默认情况下是92个,从0-91;一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个新的键值从驱动的设置映射到上层,使应用可以对我们自定义的键值进行相应的处理呢?
        在介绍Android怎么添加新的键值以前先介绍下Android下INPUT子系统FLOW的流程,下面就是精简的流程图示意图:
        1.添加按键及其映射
        1)如果系统有新的按键需要添加,玛门是怎么添加并上报到系统上层去的呢(这里的上层主要指的是Android应用层),首先要确定的是我们的遥控设备是通过/dev/input目录下那个event调用那个kl文件,这里可以通过如下命令超看cat /proc/bus/input/devices,下面是在终端下的打印信息
    [cpp] view plain copy
     
    1. <span style="font-family:FangSong_GB2312;font-size:18px;">shell@orange:/ # cat /proc/bus/input/devices   
    2. I: Bus=0018 Vendor=3697 Product=0001 Version=0001  
    3. N: Name="MStar Smart TV IR Receiver"  
    4. P: Phys=/dev/ir  
    5. S: Sysfs=/devices/virtual/rc/rc0/input0  
    6. U: Uniq=  
    7. H: Handlers=kbd event0   
    8. B: PROP=0  
    9. B: EV=13  
    10. B: KEY=fc0000 0 fc900 142851 0 0 0 0 108000 1a8 c0000c01 9e37c0 48007 f8000000 10000ffc  
    11. B: MSC=10  
    12.   
    13. I: Bus=0000 Vendor=0000 Product=0000 Version=0000  
    14. N: Name="MCE IR Keyboard/Mouse (ir)"  
    15. P: Phys=/input0  
    16. S: Sysfs=/devices/virtual/input/input1  
    17. U: Uniq=  
    18. H: Handlers=kbd mouse0 event1   
    19. B: PROP=0  
    20. B: EV=100017  
    21. B: KEY=30000 0 7 ff87207a c14057ff febeffdf ffefffff ffffffff fffffffe  
    22. B: REL=3  
    23. B: MSC=10  
    24.   
    25. shell@orange:/ #   
    26. shell@orange:/ # </span>  
     
    通过打印信息我们可以知道,我们的终端设备使用的是Vendor_3697_Product_0001.kl文件,我这里只分析IT遥控设备,那我们的Vendor_3697_Product_0001.kl里面又是啥呢,我们可以通过cat命令查看,具体的信息如下:
    [cpp] view plain copy
     
    1. <span style="font-family:FangSong_GB2312;font-size:18px;"># Copyright (C) 2010 The Android Open Source Project  
    2. #  
    3. # Licensed under the Apache License, Version 2.0 (the "License");  
    4. # you may not use this file except in compliance with the License.  
    5. # You may obtain a copy of the License at  
    6. #  
    7. #      http://www.apache.org/licenses/LICENSE-2.0  
    8. #  
    9. # Unless required by applicable law or agreed to in writing, software  
    10. # distributed under the License is distributed on an "AS IS" BASIS,  
    11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
    12. # See the License for the specific language governing permissions and  
    13. # limitations under the License.  
    14.   
    15. #  
    16. # MStar Smart TV IR Receiver.  
    17. #  
    18.   
    19. key 116     POWER                   WAKE  
    20. key 11      0  
    21. key 2       1  
    22. key 3       2  
    23. key 4       3  
    24. key 5       4  
    25. key 6       5  
    26. key 7       6  
    27. key 8       7  
    28. key 9       8  
    29. key 10      9  
    30. key 398     PROG_RED  
    31. key 399     PROG_GREEN  
    32. key 400     PROG_YELLOW  
    33. key 401     PROG_BLUE  
    34. key 103     DPAD_UP  
    35. key 108     DPAD_DOWN  
    36. key 105     DPAD_LEFT  
    37. key 106     DPAD_RIGHT  
    38. key 28      ENTER  
    39. key 402     CHANNEL_UP              WAKE_DROPPED  
    40. key 403     CHANNEL_DOWN            WAKE_DROPPED  
    41. key 115     VOLUME_UP               WAKE_DROPPED  
    42. key 114     VOLUME_DOWN             WAKE_DROPPED  
    43. key 104     PAGE_UP  
    44. key 109     PAGE_DOWN  
    45. key 102     HOME                    WAKE_DROPPED  
    46. key 139     MENU                    WAKE_DROPPED  
    47. key 158     BACK  
    48. key 113     VOLUME_MUTE  
    49. key 167     DVR  
    50. key 138     GUIDE  
    51. key 358     INFO  
    52. #key 82      WINDOW  
    53. #key 79      TV_INPUT  
    54. key 168     MEDIA_REWIND  
    55. key 159     MEDIA_FAST_FORWARD  
    56. key 165     MEDIA_PREVIOUS  
    57. key 163     MEDIA_NEXT  
    58. key 207     MEDIA_PLAY  
    59. key 119     MEDIA_PAUSE  
    60. key 128     MEDIA_STOP  
    61.   
    62. # Common extended  
    63. key 392     SOUND_MODE  
    64. key 212     PICTURE_MODE  
    65. key 372     ASPECT_RATIO  
    66. key 363     CHANNEL_RETURN  
    67. key 142     SLEEP  
    68. key 365     EPG  
    69. key 395     LIST  
    70. #key 370     SUBTITLE  
    71. key 466     MTS  
    72. key 467     FREEZE  
    73. key 468     TTX  
    74. key 469     CC  
    75. key 470     TV_SETTING  
    76. key 471     SCREENSHOT  
    77. key 356     TV_POWER  
    78.   
    79. # Mstar extended  
    80. key 59      MSTAR_BALANCE  
    81. key 60      MSTAR_INDEX  
    82. key 61      MSTAR_HOLD  
    83. key 62      MSTAR_UPDATE  
    84. key 63      MSTAR_REVEAL  
    85. key 64      MSTAR_SUBCODE  
    86. key 65      MSTAR_SIZE  
    87. key 66      MSTAR_CLOCK</span>  

        2)在Vendor_3697_Product_0001.kl文件中添加映射
           key 123 WLS
           说明:
           key -- 是关键字。固定值,不需要改变。
         123 -- 该按键在linux驱动中对应的键值,我在这里只是假设的这个值,至于具体对应的是那个可以查看“include/linux/input.h”
         WLS -- 123按键映射到Android中的按键,它对应是“KeycodeLabels.h”文件中的KEYCODES表格元素的“literal”值。
            其中KeycodeLabels.h的定义如下,我们可以在"MSTAR_PVR_BROWSER", 319后面添加我们需要向Android上层抛的键值,我们这里定义为"WLS", 320,所以当Android上层监听到320的按键值是就是我们新添加的键值了。
    [cpp] view plain copy
     
    1. <span style="font-family:FangSong_GB2312;font-size:18px;">/* 
    2.  * Copyright (C) 2008 The Android Open Source Project 
    3.  * 
    4.  * Licensed under the Apache License, Version 2.0 (the "License"); 
    5.  * you may not use this file except in compliance with the License. 
    6.  * You may obtain a copy of the License at 
    7.  * 
    8.  *      http://www.apache.org/licenses/LICENSE-2.0 
    9.  * 
    10.  * Unless required by applicable law or agreed to in writing, software 
    11.  * distributed under the License is distributed on an "AS IS" BASIS, 
    12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    13.  * See the License for the specific language governing permissions and 
    14.  * limitations under the License. 
    15.  */  
    16.   
    17.   
    18. #ifndef _LIBINPUT_KEYCODE_LABELS_H  
    19. #define _LIBINPUT_KEYCODE_LABELS_H  
    20.   
    21.   
    22. #include <android/keycodes.h>  
    23.   
    24.   
    25. struct KeycodeLabel {  
    26.     const char *literal;  
    27.     int value;  
    28. };  
    29.   
    30.   
    31. static const KeycodeLabel KEYCODES[] = {  
    32.     { "SOFT_LEFT", 1 },  
    33.     { "SOFT_RIGHT", 2 },  
    34.     { "HOME", 3 },  
    35.     { "BACK", 4 },  
    36.     { "CALL", 5 },  
    37.     { "ENDCALL", 6 },  
    38.     { "0", 7 },  
    39.     { "1", 8 },  
    40.     { "2", 9 },  
    41.     { "3", 10 },  
    42.     { "4", 11 },  
    43.     { "5", 12 },  
    44.     { "6", 13 },  
    45.     { "7", 14 },  
    46.     { "8", 15 },  
    47.     { "9", 16 },  
    48.     { "STAR", 17 },  
    49.     { "POUND", 18 },  
    50.     { "DPAD_UP", 19 },  
    51.     { "DPAD_DOWN", 20 },  
    52.     { "DPAD_LEFT", 21 },  
    53.     { "DPAD_RIGHT", 22 },  
    54.     { "DPAD_CENTER", 23 },  
    55.     { "VOLUME_UP", 24 },  
    56.     { "VOLUME_DOWN", 25 },  
    57.     { "POWER", 26 },  
    58.     { "CAMERA", 27 },  
    59.     { "CLEAR", 28 },  
    60.     { "A", 29 },  
    61.     { "B", 30 },  
    62.     { "C", 31 },  
    63.     { "D", 32 },  
    64.     { "E", 33 },  
    65.     { "F", 34 },  
    66.     { "G", 35 },  
    67.     { "H", 36 },  
    68.     { "I", 37 },  
    69.     { "J", 38 },  
    70.     { "K", 39 },  
    71.     { "L", 40 },  
    72.     { "M", 41 },  
    73.     { "N", 42 },  
    74.     { "O", 43 },  
    75.     { "P", 44 },  
    76.     { "Q", 45 },  
    77.     { "R", 46 },  
    78.     { "S", 47 },  
    79.     { "T", 48 },  
    80.     { "U", 49 },  
    81.     { "V", 50 },  
    82.     { "W", 51 },  
    83.     { "X", 52 },  
    84.     { "Y", 53 },  
    85.     { "Z", 54 },  
    86.     { "COMMA", 55 },  
    87.     { "PERIOD", 56 },  
    88.     { "ALT_LEFT", 57 },  
    89.     { "ALT_RIGHT", 58 },  
    90.     { "SHIFT_LEFT", 59 },  
    91.     { "SHIFT_RIGHT", 60 },  
    92.     { "TAB", 61 },  
    93.     { "SPACE", 62 },  
    94.     { "SYM", 63 },  
    95.     { "EXPLORER", 64 },  
    96.     { "ENVELOPE", 65 },  
    97.     { "ENTER", 66 },  
    98.     { "DEL", 67 },  
    99.     { "GRAVE", 68 },  
    100.     { "MINUS", 69 },  
    101.     { "EQUALS", 70 },  
    102.     { "LEFT_BRACKET", 71 },  
    103.     { "RIGHT_BRACKET", 72 },  
    104.     { "BACKSLASH", 73 },  
    105.     { "SEMICOLON", 74 },  
    106.     { "APOSTROPHE", 75 },  
    107.     { "SLASH", 76 },  
    108.     { "AT", 77 },  
    109.     { "NUM", 78 },  
    110.     { "HEADSETHOOK", 79 },  
    111.     { "FOCUS", 80 },  
    112.     { "PLUS", 81 },  
    113.     { "MENU", 82 },  
    114.     { "NOTIFICATION", 83 },  
    115.     { "SEARCH", 84 },  
    116.     { "MEDIA_PLAY_PAUSE", 85 },  
    117.     { "MEDIA_STOP", 86 },  
    118.     { "MEDIA_NEXT", 87 },  
    119.     { "MEDIA_PREVIOUS", 88 },  
    120.     { "MEDIA_REWIND", 89 },  
    121.     { "MEDIA_FAST_FORWARD", 90 },  
    122.     { "MUTE", 91 },  
    123.     { "PAGE_UP", 92 },  
    124.     { "PAGE_DOWN", 93 },  
    125.     { "PICTSYMBOLS", 94 },  
    126.     { "SWITCH_CHARSET", 95 },  
    127.     { "BUTTON_A", 96 },  
    128.     { "BUTTON_B", 97 },  
    129.     { "BUTTON_C", 98 },  
    130.     { "BUTTON_X", 99 },  
    131.     { "BUTTON_Y", 100 },  
    132.     { "BUTTON_Z", 101 },  
    133.     { "BUTTON_L1", 102 },  
    134.     { "BUTTON_R1", 103 },  
    135.     { "BUTTON_L2", 104 },  
    136.     { "BUTTON_R2", 105 },  
    137.     { "BUTTON_THUMBL", 106 },  
    138.     { "BUTTON_THUMBR", 107 },  
    139.     { "BUTTON_START", 108 },  
    140.     { "BUTTON_SELECT", 109 },  
    141.     { "BUTTON_MODE", 110 },  
    142.     { "ESCAPE", 111 },  
    143.     { "FORWARD_DEL", 112 },  
    144.     { "CTRL_LEFT", 113 },  
    145.     { "CTRL_RIGHT", 114 },  
    146.     { "CAPS_LOCK", 115 },  
    147.     { "SCROLL_LOCK", 116 },  
    148.     { "META_LEFT", 117 },  
    149.     { "META_RIGHT", 118 },  
    150.     { "FUNCTION", 119 },  
    151.     { "SYSRQ", 120 },  
    152.     { "BREAK", 121 },  
    153.     { "MOVE_HOME", 122 },  
    154.     { "MOVE_END", 123 },  
    155.     { "INSERT", 124 },  
    156.     { "FORWARD", 125 },  
    157.     { "MEDIA_PLAY", 126 },  
    158.     { "MEDIA_PAUSE", 127 },  
    159.     { "MEDIA_CLOSE", 128 },  
    160.     { "MEDIA_EJECT", 129 },  
    161.     { "MEDIA_RECORD", 130 },  
    162.     { "F1", 131 },  
    163.     { "F2", 132 },  
    164.     { "F3", 133 },  
    165.     { "F4", 134 },  
    166.     { "F5", 135 },  
    167.     { "F6", 136 },  
    168.     { "F7", 137 },  
    169.     { "F8", 138 },  
    170.     { "F9", 139 },  
    171.     { "F10", 140 },  
    172.     { "F11", 141 },  
    173.     { "F12", 142 },  
    174.     { "NUM_LOCK", 143 },  
    175.     { "NUMPAD_0", 144 },  
    176.     { "NUMPAD_1", 145 },  
    177.     { "NUMPAD_2", 146 },  
    178.     { "NUMPAD_3", 147 },  
    179.     { "NUMPAD_4", 148 },  
    180.     { "NUMPAD_5", 149 },  
    181.     { "NUMPAD_6", 150 },  
    182.     { "NUMPAD_7", 151 },  
    183.     { "NUMPAD_8", 152 },  
    184.     { "NUMPAD_9", 153 },  
    185.     { "NUMPAD_DIVIDE", 154 },  
    186.     { "NUMPAD_MULTIPLY", 155 },  
    187.     { "NUMPAD_SUBTRACT", 156 },  
    188.     { "NUMPAD_ADD", 157 },  
    189.     { "NUMPAD_DOT", 158 },  
    190.     { "NUMPAD_COMMA", 159 },  
    191.     { "NUMPAD_ENTER", 160 },  
    192.     { "NUMPAD_EQUALS", 161 },  
    193.     { "NUMPAD_LEFT_PAREN", 162 },  
    194.     { "NUMPAD_RIGHT_PAREN", 163 },  
    195.     { "VOLUME_MUTE", 164 },  
    196.     { "INFO", 165 },  
    197.     { "CHANNEL_UP", 166 },  
    198.     { "CHANNEL_DOWN", 167 },  
    199.     { "ZOOM_IN", 168 },  
    200.     { "ZOOM_OUT", 169 },  
    201.     { "TV", 170 },  
    202.     { "WINDOW", 171 },  
    203.     { "GUIDE", 172 },  
    204.     { "DVR", 173 },  
    205.     { "BOOKMARK", 174 },  
    206.     { "CAPTIONS", 175 },  
    207.     { "SETTINGS", 176 },  
    208.     { "TV_POWER", 177 },  
    209.     { "TV_INPUT", 178 },  
    210.     { "STB_POWER", 179 },  
    211.     { "STB_INPUT", 180 },  
    212.     { "AVR_POWER", 181 },  
    213.     { "AVR_INPUT", 182 },  
    214.     { "PROG_RED", 183 },  
    215.     { "PROG_GREEN", 184 },  
    216.     { "PROG_YELLOW", 185 },  
    217.     { "PROG_BLUE", 186 },  
    218.     { "APP_SWITCH", 187 },  
    219.     { "BUTTON_1", 188 },  
    220.     { "BUTTON_2", 189 },  
    221.     { "BUTTON_3", 190 },  
    222.     { "BUTTON_4", 191 },  
    223.     { "BUTTON_5", 192 },  
    224.     { "BUTTON_6", 193 },  
    225.     { "BUTTON_7", 194 },  
    226.     { "BUTTON_8", 195 },  
    227.     { "BUTTON_9", 196 },  
    228.     { "BUTTON_10", 197 },  
    229.     { "BUTTON_11", 198 },  
    230.     { "BUTTON_12", 199 },  
    231.     { "BUTTON_13", 200 },  
    232.     { "BUTTON_14", 201 },  
    233.     { "BUTTON_15", 202 },  
    234.     { "BUTTON_16", 203 },  
    235.     { "LANGUAGE_SWITCH", 204 },  
    236.     { "MANNER_MODE", 205 },  
    237.     { "3D_MODE", 206 },  
    238.     { "CONTACTS", 207 },  
    239.     { "CALENDAR", 208 },  
    240.     { "MUSIC", 209 },  
    241.     { "CALCULATOR", 210 },  
    242.     { "ZENKAKU_HANKAKU", 211 },  
    243.     { "EISU", 212 },  
    244.     { "MUHENKAN", 213 },  
    245.     { "HENKAN", 214 },  
    246.     { "KATAKANA_HIRAGANA", 215 },  
    247.     { "YEN", 216 },  
    248.     { "RO", 217 },  
    249.     { "KANA", 218 },  
    250.     { "ASSIST", 219 },  
    251.     { "BRIGHTNESS_DOWN", 220 },  
    252.     { "BRIGHTNESS_UP", 221 },  
    253.     { "MEDIA_AUDIO_TRACK", 222 },  
    254.     // MStar Android Patch Begin  
    255.     // Common section, range 251-300  
    256.     { "SOUND_MODE", 251 },  
    257.     { "PICTURE_MODE", 252 },  
    258.     { "ASPECT_RATIO", 253 },  
    259.     { "CHANNEL_RETURN", 254 },  
    260.     { "SLEEP", 255 },  
    261.     { "EPG", 256 },  
    262.     { "LIST", 257 },  
    263.     { "SUBTITLE", 258 },  
    264.     { "FAVORITE", 259 },  
    265.     { "MTS", 260 },  
    266.     { "FREEZE", 261 },  
    267.     { "TTX", 262 },  
    268.     { "CC", 263 },  
    269.     { "TV_SETTING", 264 },  
    270.     { "SCREENSHOT", 265 },  
    271.     { "CLOUD", 266 },  
    272.     { "VOICE", 267 },  
    273.     { "USB", 268 },  
    274.     { "HDMI", 269 },  
    275.     { "DISPLAY_MODE", 270 },  
    276.     { "SONG_SYSTEM", 271 },  
    277.     { "GINGA_BACK", 272},  
    278.     { "NETFLIX", 273},  
    279.     { "AMAZONE", 274},  
    280.     // MStar section, range 301-400  
    281.     { "MSTAR_BALANCE", 301 },  
    282.     { "MSTAR_INDEX", 302 },  
    283.     { "MSTAR_HOLD", 303 },  
    284.     { "MSTAR_UPDATE", 304 },  
    285.     { "MSTAR_REVEAL", 305 },  
    286.     { "MSTAR_SUBCODE", 306 },  
    287.     { "MSTAR_SIZE", 307 },  
    288.     { "MSTAR_CLOCK", 308 },  
    289.     { "MSTAR_STORE_UP", 309 },  
    290.     { "MSTAR_TRIANGLE_UP", 310 },  
    291.     { "MSTAR_MOVIE", 311 },  
    292.     { "MSTAR_FILE", 312 },  
    293.     { "MSTAR_STAR_PLUS", 313 },  
    294.     { "MSTAR_AUDIO_TRACK", 314 },  
    295.     { "MSTAR_OPTIONAL_TIME", 315 },  
    296.     { "MSTAR_LOOP", 316 },  
    297.     { "MSTAR_INBOX", 317 },  
    298.     { "MSTAR_VVOIP", 318 },  
    299.     { "MSTAR_PVR_BROWSER", 319 },  
    300.     // Haier section, range 401-500  
    301.     { "HAIER_TASK", 401 },  
    302.     { "HAIER_USB", 402 },  
    303.     { "HAIER_TOOLS", 403 },  
    304.     { "HAIER_POWERSLEEP", 404 },  
    305.     { "HAIER_WAKEUP", 405 },  
    306.     { "HAIER_UNMUTE", 406 },  
    307.     { "HAIER_CLEANSEARCH", 407 },  
    308.     // Konka section, range 501-600  
    309.     { "KONKA_YPBPR", 501 },  
    310.     { "KONKA_THREEPOINT_LOONPRESS", 502 },  
    311.     { "KONKA_THREEPOINT_COLLECT", 503 },  
    312.     { "KONKA_THREEPOINT_DISPERSE", 504 },  
    313.     { "KONKA_VOICESWITCH", 505 },  
    314.     { "KONKA_FLYIMEFINGER_SELECT", 506 },  
    315.     { "KONKA_FLYIMEFINGER_CANCEL", 507 },  
    316.     { "KONKA_SOUNDOUTPUT_ENABLE", 508 },  
    317.     { "KONKA_SOUNDOUTPUT_DISABLE", 509 },  
    318.     { "KONKA_BESTV_EXIT", 510 },  
    319.     { "KONKA_BESTV_FORWARD", 511 },  
    320.     { "KONKA_BESTV_BACKWARD", 512 },  
    321.     { "KONKA_ENTER_FACTORY", 513 },  
    322.     { "KONKA_FACTORY_BAKE_TV", 514 },  
    323.     // Skyworth section, range 601-700  
    324.   
    325.   
    326.     // Tcl section, range 4001-4099  
    327.     { "TCL_MITV", 4001 },  
    328.     { "TCL_USB_MENU", 4002 },  
    329.     { "TCL_SWING_R1", 4003 },  
    330.     { "TCL_SWING_R2", 4004 },  
    331.     { "TCL_SWING_R3", 4005 },  
    332.     { "TCL_SWING_R4", 4006 },  
    333.     { "TCL_SWING_L1", 4007 },  
    334.     { "TCL_SWING_L2", 4008 },  
    335.     { "TCL_SWING_L3", 4009 },  
    336.     { "TCL_SWING_L4", 4010},  
    337.     { "TCL_WIDGET", 4011},  
    338.     { "TCL_VGR_LEFT", 4012},  
    339.     { "TCL_VGR_RIGHT", 4013 },  
    340.     { "TCL_VGR_TAP", 4014 },  
    341.     { "TCL_VGR_WAVE", 4015 },  
    342.     { "TCL_VGR_WAVE_LEFT", 4016 },  
    343.     { "TCL_VGR_WAVE_RIGHT", 4017 },  
    344.     { "TCL_VGR_ACTIVE", 4018 },  
    345.     { "TCL_VGR_DEACTIVE", 4019 },  
    346.     { "TCL_BODY_SENSOR", 4020 },  
    347.     { "TCL_CIRCLE_CLOCKWISE", 4021 },  
    348.     { "TCL_CIRCLE_CTR_CLOCKWISE", 4022 },  
    349.     { "TCL_GESTURE_X", 4023 },  
    350.     { "TCL_GESTURE_ALPHA", 4024 },  
    351.     { "TCL_GESTURE_MUTE", 4025 },  
    352.     { "TCL_UP", 4026 },  
    353.     { "TCL_DOWN", 4027 },  
    354.     { "TCL_LEFT", 4028 },  
    355.     { "TCL_RIGHT", 4029 },  
    356.     { "TCL_UP_LEFT", 4030 },  
    357.     { "TCL_UP_RIGHT", 4031 },  
    358.     { "TCL_DOWN_LEFT", 4032 },  
    359.     { "TCL_DOWN_RIGHT", 4033 },  
    360.     // Changhong section, range 4101-4199  
    361.     { "CHANGHONGIR_MUTE", 4101 },  
    362.     { "CHANGHONGIR_INPUT", 4102 },  
    363.     { "CHANGHONGIR_DEL", 4103 },  
    364.     { "CHANGHONGIR_MENU", 4104 },  
    365.     { "CHANGHONGIR_CORN", 4105 },  
    366.     { "CHANGHONGIR_OK", 4106 },  
    367.     { "CHANGHONGIR_FLCK_FU", 4107 },  
    368.     { "CHANGHONGIR_FLCK_FD", 4108 },  
    369.     { "CHANGHONGIR_FLCK_FL", 4109 },  
    370.     { "CHANGHONGIR_FLCK_FR", 4110 },  
    371.     { "CHANGHONGIR_FLCK_SU", 4111 },  
    372.     { "CHANGHONGIR_FLCK_SD", 4112 },  
    373.     { "CHANGHONGIR_FLCK_SL", 4113 },  
    374.     { "CHANGHONGIR_FLCK_SR", 4114 },  
    375.     { "CHANGHONGIR_PINCH", 4115 },  
    376.     { "CHANGHONGIR_SPREAD", 4116 },  
    377.     { "CHANGHONGIR_VOICE", 4117 },  
    378.     { "CHANGHONGIR_HAND", 4118 },  
    379.     { "CHANGHONGIR_3D", 4119 },  
    380.     { "CHANGHONGIR_HELP", 4120 },  
    381.     { "CHANGHONGIR_APP", 4121 },  
    382.     { "CHANGHONGIR_MOUSE", 4122 },  
    383.     { "CHANGHONGIR_EPG", 4123 },  
    384.     { "CHANGHONGIR_HOME", 4124 },  
    385.     { "CHANGHONGIR_SETTINGS", 4125 },  
    386.     // Hisense section, range 4201-4299  
    387.     { "HISENSE_G_SENSOR", 4201 },  
    388.     { "HISENSE_LOW_BATTERY", 4202 },  
    389.     { "HISENSE_SLIDEUP", 4203 },  
    390.     { "HISENSE_SLIDEDOWN", 4204 },  
    391.     { "HISENSE_SLIDELEFT", 4205 },  
    392.     { "HISENSE_SLIDERIGHT", 4206 },  
    393.     { "HISENSE_RAPID_SLIDEUP", 4207 },  
    394.     { "HISENSE_RAPID_SLIDEDOWN", 4208 },  
    395.     { "HISENSE_RAPID_SLIDELEFT", 4209 },  
    396.     { "HISENSE_RAPID_SLIDERIGHT", 4210 },  
    397.     { "HISENSE_FAC_NEC_M", 4211 },  
    398.     { "HISENSE_FAC_NEC_IP", 4212 },  
    399.     { "HISENSE_FAC_NEC_SAVE", 4213 },  
    400.     { "HISENSE_FAC_NEC_3D", 4214 },  
    401.     { "HISENSE_FAC_NEC_PC", 4215 },  
    402.     { "HISENSE_FAC_NEC_LOGO", 4216 },  
    403.     { "HISENSE_FAC_NEC_YPBPR", 4217 },  
    404.     { "HISENSE_FAC_NEC_HDMI", 4218 },  
    405.     { "HISENSE_FAC_NEC_F1", 4219 },  
    406.     { "HISENSE_FAC_NEC_F2", 4220 },  
    407.     { "HISENSE_FAC_NEC_F3", 4221 },  
    408.     { "HISENSE_FAC_NEC_F4", 4222 },  
    409.     { "HISENSE_FAC_NEC_F5", 4223 },  
    410.     { "HISENSE_FAC_NEC_F6", 4224 },  
    411.     { "HISENSE_FAC_NEC_F7", 4225 },  
    412.     { "HISENSE_FAC_NEC_OK", 4226 },  
    413.     { "HISENSE_FAC_NEC_MAC", 4227 },  
    414.     { "HISENSE_FAC_NEC_AV", 4228 },  
    415.     { "HISENSE_FAC_NEC_PATTERN", 4229 },  
    416.     { "HISENSE_FAC_NEC_AGING", 4230 },  
    417.     { "HISENSE_FAC_NEC_BALANCE", 4231 },  
    418.     { "HISENSE_FAC_NEC_ADC", 4232 },  
    419.     { "HISENSE_FAC_NEC_RDRV_INCREASE", 4233 },  
    420.     { "HISENSE_FAC_NEC_RDRV_DECREASE", 4234 },  
    421.     { "HISENSE_FAC_NEC_GDRV_INCREASE", 4235 },  
    422.     { "HISENSE_FAC_NEC_GDRV_DECREASE", 4236 },  
    423.     { "HISENSE_FAC_NEC_BDRV_INCREASE", 4237 },  
    424.     { "HISENSE_FAC_NEC_BDRV_DECREASE", 4238 },  
    425.     { "HISENSE_FAC_NEC_RCUT_INCREASE", 4239 },  
    426.     { "HISENSE_FAC_NEC_RCUT_DECREASE", 4240 },  
    427.     { "HISENSE_FAC_NEC_GCUT_INCREASE", 4241 },  
    428.     { "HISENSE_FAC_NEC_GCUT_DECREASE", 4242 },  
    429.     { "HISENSE_FAC_NEC_BCUT_INCREASE", 4243 },  
    430.     { "HISENSE_FAC_NEC_BCUT_DECREASE", 4244 },  
    431.     { "HISENSE_PRODUCT_SCAN_START", 4245 },  
    432.     { "HISENSE_PRODUCT_SCAN_OVER", 4246 },  
    433.     { "HISENSE_TEST_BROAD_TV", 4247 },  
    434.     { "HISENSE_TEST_BROAD_DTV", 4248 },  
    435.     { "HISENSE_TEST_BROAD_AV1", 4249 },  
    436.     { "HISENSE_TEST_BROAD_AV2", 4250 },  
    437.     { "HISENSE_TEST_BROAD_AV3", 4251 },  
    438.     { "HISENSE_TEST_BROAD_SVIDEO1", 4252 },  
    439.     { "HISENSE_TEST_BROAD_SVIDEO2", 4253 },  
    440.     { "HISENSE_TEST_BROAD_SVIDEO3", 4254 },  
    441.     { "HISENSE_TEST_BROAD_SCART1", 4255 },  
    442.     { "HISENSE_TEST_BROAD_SCART2", 4256 },  
    443.     { "HISENSE_TEST_BROAD_SCART3", 4257 },  
    444.     { "HISENSE_TEST_BOARD_YPBPR1", 4258 },  
    445.     { "HISENSE_TEST_BOARD_YPBPR2", 4259 },  
    446.     { "HISENSE_TEST_BOARD_YPBPR3", 4260 },  
    447.     { "HISENSE_TEST_BOARD_VGA", 4261 },  
    448.     { "HISENSE_TEST_BOARD_HDMI1", 4262 },  
    449.     { "HISENSE_TEST_BOARD_HDMI2", 4263 },  
    450.     { "HISENSE_TEST_BOARD_HDMI3", 4264 },  
    451.     { "HISENSE_TEST_BOARD_HDMI4", 4265 },  
    452.     { "HISENSE_TEST_BOARD_HDMI5", 4266 },  
    453.     { "HISENSE_TEST_BOARD_DMP", 4267 },  
    454.     { "HISENSE_TEST_BOARD_EMP", 4268 },  
    455.     { "HISENSE_TEST_BOARD_AUTOCOLOR", 4269 },  
    456.     { "HISENSE_TEST_BOARD_SAVE", 4270 },  
    457.     { "HISENSE_TEST_BOARD_TELITEXT", 4271 },  
    458.     { "HISENSE_TEST_BOARD_SAPL", 4272 },  
    459.     { "HISENSE_TEST_BOARD_VCHIP", 4273 },  
    460.     { "HISENSE_TEST_BOARD_CCD", 4274 },  
    461.     { "HISENSE_TEST_BOARD_BTSC", 4275 },  
    462.     { "HISENSE_TEST_BOARD_FAC_OK", 4276 },  
    463.     // MStar Android Patch End  
    464.   
    465.   
    466.     // NOTE: If you add a new keycode here you must also add it to several other files.  
    467.     //       Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.  
    468.   
    469.   
    470.     { NULL, 0 }  
    471. };  
    472.   
    473.   
    474. // NOTE: If you edit these flags, also edit policy flags in Input.h.  
    475. static const KeycodeLabel FLAGS[] = {  
    476.     { "WAKE", 0x00000001 },  
    477.     { "WAKE_DROPPED", 0x00000002 },  
    478.     { "SHIFT", 0x00000004 },  
    479.     { "CAPS_LOCK", 0x00000008 },  
    480.     { "ALT", 0x00000010 },  
    481.     { "ALT_GR", 0x00000020 },  
    482.     { "MENU", 0x00000040 },  
    483.     { "LAUNCHER", 0x00000080 },  
    484.     { "VIRTUAL", 0x00000100 },  
    485.     { "FUNCTION", 0x00000200 },  
    486.     { NULL, 0 }  
    487. };  
    488.   
    489.   
    490. static const KeycodeLabel AXES[] = {  
    491.     { "X", 0 },  
    492.     { "Y", 1 },  
    493.     { "PRESSURE", 2 },  
    494.     { "SIZE", 3 },  
    495.     { "TOUCH_MAJOR", 4 },  
    496.     { "TOUCH_MINOR", 5 },  
    497.     { "TOOL_MAJOR", 6 },  
    498.     { "TOOL_MINOR", 7 },  
    499.     { "ORIENTATION", 8 },  
    500.     { "VSCROLL", 9 },  
    501.     { "HSCROLL", 10 },  
    502.     { "Z", 11 },  
    503.     { "RX", 12 },  
    504.     { "RY", 13 },  
    505.     { "RZ", 14 },  
    506.     { "HAT_X", 15 },  
    507.     { "HAT_Y", 16 },  
    508.     { "LTRIGGER", 17 },  
    509.     { "RTRIGGER", 18 },  
    510.     { "THROTTLE", 19 },  
    511.     { "RUDDER", 20 },  
    512.     { "WHEEL", 21 },  
    513.     { "GAS", 22 },  
    514.     { "BRAKE", 23 },  
    515.     { "DISTANCE", 24 },  
    516.     { "TILT", 25 },  
    517.     { "GENERIC_1", 32 },  
    518.     { "GENERIC_2", 33 },  
    519.     { "GENERIC_3", 34 },  
    520.     { "GENERIC_4", 35 },  
    521.     { "GENERIC_5", 36 },  
    522.     { "GENERIC_6", 37 },  
    523.     { "GENERIC_7", 38 },  
    524.     { "GENERIC_8", 39 },  
    525.     { "GENERIC_9", 40 },  
    526.     { "GENERIC_10", 41 },  
    527.     { "GENERIC_11", 42 },  
    528.     { "GENERIC_12", 43 },  
    529.     { "GENERIC_13", 44 },  
    530.     { "GENERIC_14", 45 },  
    531.     { "GENERIC_15", 46 },  
    532.     { "GENERIC_16", 47 },  
    533.   
    534.   
    535.     // NOTE: If you add a new axis here you must also add it to several other files.  
    536.     //       Refer to frameworks/base/core/java/android/view/MotionEvent.java for the full list.  
    537.   
    538.   
    539.     { NULL, -1 }  
    540. };  
    541.   
    542.   
    543. #endif // _LIBINPUT_KEYCODE_LABELS_H</span>  
     
        3)在/frameworks/native/include/android/keycodes.h中添加如下的
        AKEYCODE_MSTAR_WLS          = 320,下面看下该文件的定义
    [cpp] view plain copy
     
    1. <span style="font-family:FangSong_GB2312;font-size:18px;">/* 
    2.  * Copyright (C) 2010 The Android Open Source Project 
    3.  * 
    4.  * Licensed under the Apache License, Version 2.0 (the "License"); 
    5.  * you may not use this file except in compliance with the License. 
    6.  * You may obtain a copy of the License at 
    7.  * 
    8.  *      http://www.apache.org/licenses/LICENSE-2.0 
    9.  * 
    10.  * Unless required by applicable law or agreed to in writing, software 
    11.  * distributed under the License is distributed on an "AS IS" BASIS, 
    12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    13.  * See the License for the specific language governing permissions and 
    14.  * limitations under the License. 
    15.  */  
    16.   
    17. #ifndef _ANDROID_KEYCODES_H  
    18. #define _ANDROID_KEYCODES_H  
    19.   
    20. /****************************************************************** 
    21.  * 
    22.  * IMPORTANT NOTICE: 
    23.  * 
    24.  *   This file is part of Android's set of stable system headers 
    25.  *   exposed by the Android NDK (Native Development Kit). 
    26.  * 
    27.  *   Third-party source AND binary code relies on the definitions 
    28.  *   here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES. 
    29.  * 
    30.  *   - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES) 
    31.  *   - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS 
    32.  *   - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY 
    33.  *   - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES 
    34.  */  
    35.   
    36. #include <sys/types.h>  
    37.   
    38. #ifdef __cplusplus  
    39. extern "C" {  
    40. #endif  
    41.   
    42. /* 
    43.  * Key codes. 
    44.  */  
    45. enum {  
    46.     AKEYCODE_UNKNOWN         = 0,  
    47.     AKEYCODE_SOFT_LEFT       = 1,  
    48.     AKEYCODE_SOFT_RIGHT      = 2,  
    49.     AKEYCODE_HOME            = 3,  
    50.     AKEYCODE_BACK            = 4,  
    51.     AKEYCODE_CALL            = 5,  
    52.     AKEYCODE_ENDCALL         = 6,  
    53.     AKEYCODE_0               = 7,  
    54.     AKEYCODE_1               = 8,  
    55.     AKEYCODE_2               = 9,  
    56.     AKEYCODE_3               = 10,  
    57.     AKEYCODE_4               = 11,  
    58.     AKEYCODE_5               = 12,  
    59.     AKEYCODE_6               = 13,  
    60.     AKEYCODE_7               = 14,  
    61.     AKEYCODE_8               = 15,  
    62.     AKEYCODE_9               = 16,  
    63.     AKEYCODE_STAR            = 17,  
    64.     AKEYCODE_POUND           = 18,  
    65.     AKEYCODE_DPAD_UP         = 19,  
    66.     AKEYCODE_DPAD_DOWN       = 20,  
    67.     AKEYCODE_DPAD_LEFT       = 21,  
    68.     AKEYCODE_DPAD_RIGHT      = 22,  
    69.     AKEYCODE_DPAD_CENTER     = 23,  
    70.     AKEYCODE_VOLUME_UP       = 24,  
    71.     AKEYCODE_VOLUME_DOWN     = 25,  
    72.     AKEYCODE_POWER           = 26,  
    73.     AKEYCODE_CAMERA          = 27,  
    74.     AKEYCODE_CLEAR           = 28,  
    75.     AKEYCODE_A               = 29,  
    76.     AKEYCODE_B               = 30,  
    77.     AKEYCODE_C               = 31,  
    78.     AKEYCODE_D               = 32,  
    79.     AKEYCODE_E               = 33,  
    80.     AKEYCODE_F               = 34,  
    81.     AKEYCODE_G               = 35,  
    82.     AKEYCODE_H               = 36,  
    83.     AKEYCODE_I               = 37,  
    84.     AKEYCODE_J               = 38,  
    85.     AKEYCODE_K               = 39,  
    86.     AKEYCODE_L               = 40,  
    87.     AKEYCODE_M               = 41,  
    88.     AKEYCODE_N               = 42,  
    89.     AKEYCODE_O               = 43,  
    90.     AKEYCODE_P               = 44,  
    91.     AKEYCODE_Q               = 45,  
    92.     AKEYCODE_R               = 46,  
    93.     AKEYCODE_S               = 47,  
    94.     AKEYCODE_T               = 48,  
    95.     AKEYCODE_U               = 49,  
    96.     AKEYCODE_V               = 50,  
    97.     AKEYCODE_W               = 51,  
    98.     AKEYCODE_X               = 52,  
    99.     AKEYCODE_Y               = 53,  
    100.     AKEYCODE_Z               = 54,  
    101.     AKEYCODE_COMMA           = 55,  
    102.     AKEYCODE_PERIOD          = 56,  
    103.     AKEYCODE_ALT_LEFT        = 57,  
    104.     AKEYCODE_ALT_RIGHT       = 58,  
    105.     AKEYCODE_SHIFT_LEFT      = 59,  
    106.     AKEYCODE_SHIFT_RIGHT     = 60,  
    107.     AKEYCODE_TAB             = 61,  
    108.     AKEYCODE_SPACE           = 62,  
    109.     AKEYCODE_SYM             = 63,  
    110.     AKEYCODE_EXPLORER        = 64,  
    111.     AKEYCODE_ENVELOPE        = 65,  
    112.     AKEYCODE_ENTER           = 66,  
    113.     AKEYCODE_DEL             = 67,  
    114.     AKEYCODE_GRAVE           = 68,  
    115.     AKEYCODE_MINUS           = 69,  
    116.     AKEYCODE_EQUALS          = 70,  
    117.     AKEYCODE_LEFT_BRACKET    = 71,  
    118.     AKEYCODE_RIGHT_BRACKET   = 72,  
    119.     AKEYCODE_BACKSLASH       = 73,  
    120.     AKEYCODE_SEMICOLON       = 74,  
    121.     AKEYCODE_APOSTROPHE      = 75,  
    122.     AKEYCODE_SLASH           = 76,  
    123.     AKEYCODE_AT              = 77,  
    124.     AKEYCODE_NUM             = 78,  
    125.     AKEYCODE_HEADSETHOOK     = 79,  
    126.     AKEYCODE_FOCUS           = 80,   // *Camera* focus  
    127.     AKEYCODE_PLUS            = 81,  
    128.     AKEYCODE_MENU            = 82,  
    129.     AKEYCODE_NOTIFICATION    = 83,  
    130.     AKEYCODE_SEARCH          = 84,  
    131.     AKEYCODE_MEDIA_PLAY_PAUSE= 85,  
    132.     AKEYCODE_MEDIA_STOP      = 86,  
    133.     AKEYCODE_MEDIA_NEXT      = 87,  
    134.     AKEYCODE_MEDIA_PREVIOUS  = 88,  
    135.     AKEYCODE_MEDIA_REWIND    = 89,  
    136.     AKEYCODE_MEDIA_FAST_FORWARD = 90,  
    137.     AKEYCODE_MUTE            = 91,  
    138.     AKEYCODE_PAGE_UP         = 92,  
    139.     AKEYCODE_PAGE_DOWN       = 93,  
    140.     AKEYCODE_PICTSYMBOLS     = 94,  
    141.     AKEYCODE_SWITCH_CHARSET  = 95,  
    142.     AKEYCODE_BUTTON_A        = 96,  
    143.     AKEYCODE_BUTTON_B        = 97,  
    144.     AKEYCODE_BUTTON_C        = 98,  
    145.     AKEYCODE_BUTTON_X        = 99,  
    146.     AKEYCODE_BUTTON_Y        = 100,  
    147.     AKEYCODE_BUTTON_Z        = 101,  
    148.     AKEYCODE_BUTTON_L1       = 102,  
    149.     AKEYCODE_BUTTON_R1       = 103,  
    150.     AKEYCODE_BUTTON_L2       = 104,  
    151.     AKEYCODE_BUTTON_R2       = 105,  
    152.     AKEYCODE_BUTTON_THUMBL   = 106,  
    153.     AKEYCODE_BUTTON_THUMBR   = 107,  
    154.     AKEYCODE_BUTTON_START    = 108,  
    155.     AKEYCODE_BUTTON_SELECT   = 109,  
    156.     AKEYCODE_BUTTON_MODE     = 110,  
    157.     AKEYCODE_ESCAPE          = 111,  
    158.     AKEYCODE_FORWARD_DEL     = 112,  
    159.     AKEYCODE_CTRL_LEFT       = 113,  
    160.     AKEYCODE_CTRL_RIGHT      = 114,  
    161.     AKEYCODE_CAPS_LOCK       = 115,  
    162.     AKEYCODE_SCROLL_LOCK     = 116,  
    163.     AKEYCODE_META_LEFT       = 117,  
    164.     AKEYCODE_META_RIGHT      = 118,  
    165.     AKEYCODE_FUNCTION        = 119,  
    166.     AKEYCODE_SYSRQ           = 120,  
    167.     AKEYCODE_BREAK           = 121,  
    168.     AKEYCODE_MOVE_HOME       = 122,  
    169.     AKEYCODE_MOVE_END        = 123,  
    170.     AKEYCODE_INSERT          = 124,  
    171.     AKEYCODE_FORWARD         = 125,  
    172.     AKEYCODE_MEDIA_PLAY      = 126,  
    173.     AKEYCODE_MEDIA_PAUSE     = 127,  
    174.     AKEYCODE_MEDIA_CLOSE     = 128,  
    175.     AKEYCODE_MEDIA_EJECT     = 129,  
    176.     AKEYCODE_MEDIA_RECORD    = 130,  
    177.     AKEYCODE_F1              = 131,  
    178.     AKEYCODE_F2              = 132,  
    179.     AKEYCODE_F3              = 133,  
    180.     AKEYCODE_F4              = 134,  
    181.     AKEYCODE_F5              = 135,  
    182.     AKEYCODE_F6              = 136,  
    183.     AKEYCODE_F7              = 137,  
    184.     AKEYCODE_F8              = 138,  
    185.     AKEYCODE_F9              = 139,  
    186.     AKEYCODE_F10             = 140,  
    187.     AKEYCODE_F11             = 141,  
    188.     AKEYCODE_F12             = 142,  
    189.     AKEYCODE_NUM_LOCK        = 143,  
    190.     AKEYCODE_NUMPAD_0        = 144,  
    191.     AKEYCODE_NUMPAD_1        = 145,  
    192.     AKEYCODE_NUMPAD_2        = 146,  
    193.     AKEYCODE_NUMPAD_3        = 147,  
    194.     AKEYCODE_NUMPAD_4        = 148,  
    195.     AKEYCODE_NUMPAD_5        = 149,  
    196.     AKEYCODE_NUMPAD_6        = 150,  
    197.     AKEYCODE_NUMPAD_7        = 151,  
    198.     AKEYCODE_NUMPAD_8        = 152,  
    199.     AKEYCODE_NUMPAD_9        = 153,  
    200.     AKEYCODE_NUMPAD_DIVIDE   = 154,  
    201.     AKEYCODE_NUMPAD_MULTIPLY = 155,  
    202.     AKEYCODE_NUMPAD_SUBTRACT = 156,  
    203.     AKEYCODE_NUMPAD_ADD      = 157,  
    204.     AKEYCODE_NUMPAD_DOT      = 158,  
    205.     AKEYCODE_NUMPAD_COMMA    = 159,  
    206.     AKEYCODE_NUMPAD_ENTER    = 160,  
    207.     AKEYCODE_NUMPAD_EQUALS   = 161,  
    208.     AKEYCODE_NUMPAD_LEFT_PAREN = 162,  
    209.     AKEYCODE_NUMPAD_RIGHT_PAREN = 163,  
    210.     AKEYCODE_VOLUME_MUTE     = 164,  
    211.     AKEYCODE_INFO            = 165,  
    212.     AKEYCODE_CHANNEL_UP      = 166,  
    213.     AKEYCODE_CHANNEL_DOWN    = 167,  
    214.     AKEYCODE_ZOOM_IN         = 168,  
    215.     AKEYCODE_ZOOM_OUT        = 169,  
    216.     AKEYCODE_TV              = 170,  
    217.     AKEYCODE_WINDOW          = 171,  
    218.     AKEYCODE_GUIDE           = 172,  
    219.     AKEYCODE_DVR             = 173,  
    220.     AKEYCODE_BOOKMARK        = 174,  
    221.     AKEYCODE_CAPTIONS        = 175,  
    222.     AKEYCODE_SETTINGS        = 176,  
    223.     AKEYCODE_TV_POWER        = 177,  
    224.     AKEYCODE_TV_INPUT        = 178,  
    225.     AKEYCODE_STB_POWER       = 179,  
    226.     AKEYCODE_STB_INPUT       = 180,  
    227.     AKEYCODE_AVR_POWER       = 181,  
    228.     AKEYCODE_AVR_INPUT       = 182,  
    229.     AKEYCODE_PROG_RED        = 183,  
    230.     AKEYCODE_PROG_GREEN      = 184,  
    231.     AKEYCODE_PROG_YELLOW     = 185,  
    232.     AKEYCODE_PROG_BLUE       = 186,  
    233.     AKEYCODE_APP_SWITCH      = 187,  
    234.     AKEYCODE_BUTTON_1        = 188,  
    235.     AKEYCODE_BUTTON_2        = 189,  
    236.     AKEYCODE_BUTTON_3        = 190,  
    237.     AKEYCODE_BUTTON_4        = 191,  
    238.     AKEYCODE_BUTTON_5        = 192,  
    239.     AKEYCODE_BUTTON_6        = 193,  
    240.     AKEYCODE_BUTTON_7        = 194,  
    241.     AKEYCODE_BUTTON_8        = 195,  
    242.     AKEYCODE_BUTTON_9        = 196,  
    243.     AKEYCODE_BUTTON_10       = 197,  
    244.     AKEYCODE_BUTTON_11       = 198,  
    245.     AKEYCODE_BUTTON_12       = 199,  
    246.     AKEYCODE_BUTTON_13       = 200,  
    247.     AKEYCODE_BUTTON_14       = 201,  
    248.     AKEYCODE_BUTTON_15       = 202,  
    249.     AKEYCODE_BUTTON_16       = 203,  
    250.     AKEYCODE_LANGUAGE_SWITCH = 204,  
    251.     AKEYCODE_MANNER_MODE     = 205,  
    252.     AKEYCODE_3D_MODE         = 206,  
    253.     AKEYCODE_CONTACTS        = 207,  
    254.     AKEYCODE_CALENDAR        = 208,  
    255.     AKEYCODE_MUSIC           = 209,  
    256.     AKEYCODE_CALCULATOR      = 210,  
    257.     AKEYCODE_ZENKAKU_HANKAKU = 211,  
    258.     AKEYCODE_EISU            = 212,  
    259.     AKEYCODE_MUHENKAN        = 213,  
    260.     AKEYCODE_HENKAN          = 214,  
    261.     AKEYCODE_KATAKANA_HIRAGANA = 215,  
    262.     AKEYCODE_YEN             = 216,  
    263.     AKEYCODE_RO              = 217,  
    264.     AKEYCODE_KANA            = 218,  
    265.     AKEYCODE_ASSIST          = 219,  
    266.     AKEYCODE_BRIGHTNESS_DOWN = 220,  
    267.     AKEYCODE_BRIGHTNESS_UP   = 221,  
    268.     AKEYCODE_MEDIA_AUDIO_TRACK = 222,  
    269.     // MStar Android Patch Begin  
    270.     // Common section, range 251-300  
    271.     AKEYCODE_SOUND_MODE                 = 251,  
    272.     AKEYCODE_PICTURE_MODE               = 252,  
    273.     AKEYCODE_ASPECT_RATIO               = 253,  
    274.     AKEYCODE_CHANNEL_RETURN             = 254,  
    275.     AKEYCODE_SLEEP                      = 255,  
    276.     AKEYCODE_EPG                        = 256,  
    277.     AKEYCODE_LIST                       = 257,  
    278.     AKEYCODE_SUBTITLE                   = 258,  
    279.     AKEYCODE_FAVORITE                   = 259,  
    280.     AKEYCODE_MTS                        = 260,  
    281.     AKEYCODE_FREEZE                     = 261,  
    282.     AKEYCODE_TTX                        = 262,  
    283.     AKEYCODE_CC                         = 263,  
    284.     AKEYCODE_TV_SETTING                 = 264,  
    285.     AKEYCODE_SCREENSHOT                 = 265,  
    286.     AKEYCODE_CLOUD                      = 266,  
    287.     AKEYCODE_VOICE                      = 267,  
    288.     AKEYCODE_USB                        = 268,  
    289.     AKEYCODE_HDMI                       = 269,  
    290.     AKEYCODE_DISPLAY_MODE               = 270,  
    291.     AKEYCODE_SONG_SYSTEM                = 271,  
    292.     AKEYCODE_GINGA_BACK                 = 272,  
    293.     AKEYCODE_NETFLIX                    = 273,  
    294.     AKEYCODE_AMAZONE                    = 274,  
    295.     // Mstar section, range 301-400  
    296.     AKEYCODE_MSTAR_BALANCE              = 301,  
    297.     AKEYCODE_MSTAR_INDEX                = 302,  
    298.     AKEYCODE_MSTAR_HOLD                 = 303,  
    299.     AKEYCODE_MSTAR_UPDATE               = 304,  
    300.     AKEYCODE_MSTAR_REVEAL               = 305,  
    301.     AKEYCODE_MSTAR_SUBCODE              = 306,  
    302.     AKEYCODE_MSTAR_SIZE                 = 307,  
    303.     AKEYCODE_MSTAR_CLOCK                = 308,  
    304.     AKEYCODE_MSTAR_STORE_UP             = 309,  
    305.     AKEYCODE_MSTAR_TRIANGLE_UP          = 310,  
    306.     AKEYCODE_MSTAR_MOVIE                = 311,  
    307.     AKEYCODE_MSTAR_FILE                 = 312,  
    308.     AKEYCODE_MSTAR_STAR_PLUS            = 313,  
    309.     AKEYCODE_MSTAR_AUDIO_TRACK          = 314,  
    310.     AKEYCODE_MSTAR_OPTIONAL_TIME        = 315,  
    311.     AKEYCODE_MSTAR_LOOP                 = 316,  
    312.     AKEYCODE_MSTAR_INBOX                = 317,  
    313.     AKEYCODE_MSTAR_VVOIP                = 318,  
    314.     AKEYCODE_MSTAR_PVR_BROWSER          = 319,  
    315.     // Konka section, range 501-600  
    316.     AKEYCODE_KONKA_YPBPR                = 501,  
    317.     AKEYCODE_KONKA_THREEPOINT_LOONPRESS = 502,  
    318.     AKEYCODE_KONKA_THREEPOINT_COLLECT   = 503,  
    319.     AKEYCODE_KONKA_THREEPOINT_DISPERSE  = 504,  
    320.     AKEYCODE_KONKA_VOICESWITCH          = 505,  
    321.     AKEYCODE_KONKA_FLYIMEFINGER_SELECT  = 506,  
    322.     AKEYCODE_KONKA_FLYIMEFINGER_CANCEL  = 507,  
    323.     AKEYCODE_KONKA_SOUNDOUTPUT_ENABLE   = 508,  
    324.     AKEYCODE_KONKA_SOUNDOUTPUT_DISABLE  = 509,  
    325.     AKEYCODE_KONKA_BESTV_EXIT           = 510,  
    326.     AKEYCODE_KONKA_BESTV_FORWARD        = 511,  
    327.     AKEYCODE_KONKA_BESTV_BACKWARD       = 512,  
    328.     AKEYCODE_KONKA_ENTER_FACTORY        = 513,  
    329.     AKEYCODE_KONKA_FACTORY_BAKE_TV      = 514,  
    330.     // Haier section, range  401-500  
    331.     AKEYCODE_HAIER_TASK                 = 401,  
    332.     AKEYCODE_HAIER_TOOLS                = 402,  
    333.     AKEYCODE_HAIER_POWERSLEEP           = 403,  
    334.     AKEYCODE_HAIER_WAKEUP               = 404,  
    335.     AKEYCODE_HAIER_UNMUTE               = 405,  
    336.     AKEYCODE_HAIER_CLEANSEARCH          = 406,  
    337.     // Skyworth section, range 601-700  
    338.   
    339.     // Tcl section, range 4001-4100  
    340.     AKEYCODE_TCL_MITV                   = 4001,  
    341.     AKEYCODE_TCL_USB_MENU               = 4002,  
    342.     AKEYCODE_TCL_SWING_R1               = 4003,  
    343.     AKEYCODE_TCL_SWING_R2               = 4004,  
    344.     AKEYCODE_TCL_SWING_R3               = 4005,  
    345.     AKEYCODE_TCL_SWING_R4               = 4006,  
    346.     AKEYCODE_TCL_SWING_L1               = 4007,  
    347.     AKEYCODE_TCL_SWING_L2               = 4008,  
    348.     AKEYCODE_TCL_SWING_L3               = 4009,  
    349.     AKEYCODE_TCL_SWING_L4               = 4010,  
    350.     AKEYCODE_TCL_WIDGET                 = 4011,  
    351.     AKEYCODE_TCL_VGR_LEFT               = 4012,  
    352.     AKEYCODE_TCL_VGR_RIGHT              = 4013,  
    353.     AKEYCODE_TCL_VGR_TAP                = 4014,  
    354.     AKEYCODE_TCL_VGR_WAVE               = 4015,  
    355.     AKEYCODE_TCL_VGR_WAVE_LEFT          = 4016,  
    356.     AKEYCODE_TCL_VGR_WAVE_RIGHT         = 4017,  
    357.     AKEYCODE_TCL_VGR_ACTIVE             = 4018,  
    358.     AKEYCODE_TCL_VGR_DEACTIVE           = 4019,  
    359.     AKEYCODE_TCL_BODY_SENSOR            = 4020,  
    360.     AKEYCODE_TCL_CIRCLE_CLOCKWISE       = 4021,  
    361.     AKEYCODE_TCL_CIRCLE_CTR_CLOCKWISE   = 4022,  
    362.     AKEYCODE_TCL_GESTURE_X              = 4023,  
    363.     AKEYCODE_TCL_GESTURE_ALPHA          = 4024,  
    364.     AKEYCODE_TCL_GESTURE_MUTE           = 4025,  
    365.     AKEYCODE_TCL_UP                     = 4026,  
    366.     AKEYCODE_TCL_DOWN                   = 4027,  
    367.     AKEYCODE_TCL_LEFT                   = 4028,  
    368.     AKEYCODE_TCL_RIGHT                  = 4029,  
    369.     AKEYCODE_TCL_UP_LEFT                = 4030,  
    370.     AKEYCODE_TCL_UP_RIGHT               = 4031,  
    371.     AKEYCODE_TCL_DOWN_LEFT              = 4032,  
    372.     AKEYCODE_TCL_DOWN_RIGHT             = 4033,  
    373.     // Changhong section, range 4101-4200  
    374.     AKEYCODE_CHANGHONGIR_MUTE           = 4101,  
    375.     AKEYCODE_CHANGHONGIR_INPUT          = 4102,  
    376.     AKEYCODE_CHANGHONGIR_DEL            = 4103,  
    377.     AKEYCODE_CHANGHONGIR_MENU           = 4104,  
    378.     AKEYCODE_CHANGHONGIR_CORN           = 4105,  
    379.     AKEYCODE_CHANGHONGIR_OK             = 4106,  
    380.     AKEYCODE_CHANGHONGIR_FLCK_FU        = 4107,  
    381.     AKEYCODE_CHANGHONGIR_FLCK_FD        = 4108,  
    382.     AKEYCODE_CHANGHONGIR_FLCK_FL        = 4109,  
    383.     AKEYCODE_CHANGHONGIR_FLCK_FR        = 4110,  
    384.     AKEYCODE_CHANGHONGIR_FLCK_SU        = 4111,  
    385.     AKEYCODE_CHANGHONGIR_FLCK_SD        = 4112,  
    386.     AKEYCODE_CHANGHONGIR_FLCK_SL        = 4113,  
    387.     AKEYCODE_CHANGHONGIR_FLCK_SR        = 4114,  
    388.     AKEYCODE_CHANGHONGIR_PINCH          = 4115,  
    389.     AKEYCODE_CHANGHONGIR_SPREAD         = 4116,  
    390.     AKEYCODE_CHANGHONGIR_VOICE          = 4117,  
    391.     AKEYCODE_CHANGHONGIR_HAND           = 4118,  
    392.     AKEYCODE_CHANGHONGIR_3D             = 4119,  
    393.     AKEYCODE_CHANGHONGIR_HELP           = 4120,  
    394.     AKEYCODE_CHANGHONGIR_APP            = 4121,  
    395.     AKEYCODE_CHANGHONGIR_MOUSE          = 4122,  
    396.     AKEYCODE_CHANGHONGIR_EPG            = 4123,  
    397.     AKEYCODE_CHANGHONGIR_HOME           = 4124,  
    398.     AKEYCODE_CHANGHONGIR_SETTINGS       = 4125,  
    399.     // Hisense section, range 4201-4300  
    400.     AKEYCODE_HISENSE_G_SENSOR           = 4201,  
    401.     AKEYCODE_HISENSE_LOW_BATTERY        = 4202,  
    402.     AKEYCODE_HISENSE_SLIDEUP            = 4203,  
    403.     AKEYCODE_HISENSE_SLIDEDOWN          = 4204,  
    404.     AKEYCODE_HISENSE_SLIDELEFT          = 4205,  
    405.     AKEYCODE_HISENSE_SLIDERIGHT         = 4206,  
    406.     AKEYCODE_HISENSE_RAPID_SLIDEUP      = 4207,  
    407.     AKEYCODE_HISENSE_RAPID_SLIDEDOWN    = 4208,  
    408.     AKEYCODE_HISENSE_RAPID_SLIDELEFT    = 4209,  
    409.     AKEYCODE_HISENSE_RAPID_SLIDERIGHT   = 4210,  
    410.     AKEYCODE_HISENSE_FAC_NEC_M          = 4211,  
    411.     AKEYCODE_HISENSE_FAC_NEC_IP         = 4212,  
    412.     AKEYCODE_HISENSE_FAC_NEC_SAVE       = 4213,  
    413.     AKEYCODE_HISENSE_FAC_NEC_3D         = 4214,  
    414.     AKEYCODE_HISENSE_FAC_NEC_PC         = 4215,  
    415.     AKEYCODE_HISENSE_FAC_NEC_LOGO       = 4216,  
    416.     AKEYCODE_HISENSE_FAC_NEC_YPBPR      = 4217,  
    417.     AKEYCODE_HISENSE_FAC_NEC_HDMI       = 4218,  
    418.     AKEYCODE_HISENSE_FAC_NEC_F1         = 4219,  
    419.     AKEYCODE_HISENSE_FAC_NEC_F2         = 4220,  
    420.     AKEYCODE_HISENSE_FAC_NEC_F3         = 4221,  
    421.     AKEYCODE_HISENSE_FAC_NEC_F4         = 4222,  
    422.     AKEYCODE_HISENSE_FAC_NEC_F5         = 4223,  
    423.     AKEYCODE_HISENSE_FAC_NEC_F6         = 4224,  
    424.     AKEYCODE_HISENSE_FAC_NEC_F7         = 4225,  
    425.     AKEYCODE_HISENSE_FAC_NEC_OK         = 4226,  
    426.     AKEYCODE_HISENSE_FAC_NEC_MAC        = 4227,  
    427.     AKEYCODE_HISENSE_FAC_NEC_AV         = 4228,  
    428.     AKEYCODE_HISENSE_FAC_NEC_PATTERN    = 4229,  
    429.     AKEYCODE_HISENSE_FAC_NEC_AGING      = 4230,  
    430.     AKEYCODE_HISENSE_FAC_NEC_BALANCE    = 4231,  
    431.     AKEYCODE_HISENSE_FAC_NEC_ADC        = 4232,  
    432.     AKEYCODE_HISENSE_FAC_NEC_RDRV_INCREASE = 4233,  
    433.     AKEYCODE_HISENSE_FAC_NEC_RDRV_DECREASE = 4234,  
    434.     AKEYCODE_HISENSE_FAC_NEC_GDRV_INCREASE = 4235,  
    435.     AKEYCODE_HISENSE_FAC_NEC_GDRV_DECREASE = 4236,  
    436.     AKEYCODE_HISENSE_FAC_NEC_BDRV_INCREASE = 4237,  
    437.     AKEYCODE_HISENSE_FAC_NEC_BDRV_DECREASE = 4238,  
    438.     AKEYCODE_HISENSE_FAC_NEC_RCUT_INCREASE = 4239,  
    439.     AKEYCODE_HISENSE_FAC_NEC_RCUT_DECREASE = 4240,  
    440.     AKEYCODE_HISENSE_FAC_NEC_GCUT_INCREASE = 4241,  
    441.     AKEYCODE_HISENSE_FAC_NEC_GCUT_DECREASE = 4242,  
    442.     AKEYCODE_HISENSE_FAC_NEC_BCUT_INCREASE = 4243,  
    443.     AKEYCODE_HISENSE_FAC_NEC_BCUT_DECREASE = 4244,  
    444.     AKEYCODE_HISENSE_PRODUCT_SCAN_START = 4245,  
    445.     AKEYCODE_HISENSE_PRODUCT_SCAN_OVER  = 4246,  
    446.     AKEYCODE_HISENSE_TEST_BROAD_TV      = 4247,  
    447.     AKEYCODE_HISENSE_TEST_BROAD_DTV     = 4248,  
    448.     AKEYCODE_HISENSE_TEST_BROAD_AV1     = 4249,  
    449.     AKEYCODE_HISENSE_TEST_BROAD_AV2     = 4250,  
    450.     AKEYCODE_HISENSE_TEST_BROAD_AV3     = 4251,  
    451.     AKEYCODE_HISENSE_TEST_BROAD_SVIDEO1 = 4252,  
    452.     AKEYCODE_HISENSE_TEST_BROAD_SVIDEO2 = 4253,  
    453.     AKEYCODE_HISENSE_TEST_BROAD_SVIDEO3 = 4254,  
    454.     AKEYCODE_HISENSE_TEST_BROAD_SCART1  = 4255,  
    455.     AKEYCODE_HISENSE_TEST_BROAD_SCART2  = 4256,  
    456.     AKEYCODE_HISENSE_TEST_BROAD_SCART3  = 4257,  
    457.     AKEYCODE_HISENSE_TEST_BOARD_YPBPR1  = 4258,  
    458.     AKEYCODE_HISENSE_TEST_BOARD_YPBPR2  = 4259,  
    459.     AKEYCODE_HISENSE_TEST_BOARD_YPBPR3  = 4260,  
    460.     AKEYCODE_HISENSE_TEST_BOARD_VGA     = 4261,  
    461.     AKEYCODE_HISENSE_TEST_BOARD_HDMI1   = 4262,  
    462.     AKEYCODE_HISENSE_TEST_BOARD_HDMI2   = 4263,  
    463.     AKEYCODE_HISENSE_TEST_BOARD_HDMI3   = 4264,  
    464.     AKEYCODE_HISENSE_TEST_BOARD_HDMI4   = 4265,  
    465.     AKEYCODE_HISENSE_TEST_BOARD_HDMI5   = 4266,  
    466.     AKEYCODE_HISENSE_TEST_BOARD_DMP     = 4267,  
    467.     AKEYCODE_HISENSE_TEST_BOARD_EMP     = 4268,  
    468.     AKEYCODE_HISENSE_TEST_BOARD_AUTOCOLOR = 4269,  
    469.     AKEYCODE_HISENSE_TEST_BOARD_SAVE    = 4270,  
    470.     AKEYCODE_HISENSE_TEST_BOARD_TELITEXT = 4271,  
    471.     AKEYCODE_HISENSE_TEST_BOARD_SAPL    = 4272,  
    472.     AKEYCODE_HISENSE_TEST_BOARD_VCHIP   = 4273,  
    473.     AKEYCODE_HISENSE_TEST_BOARD_CCD     = 4274,  
    474.     AKEYCODE_HISENSE_TEST_BOARD_BTSC    = 4275,  
    475.     AKEYCODE_HISENSE_TEST_BOARD_FAC_OK  = 4276,  
    476.     // MStar Android Patch End  
    477.   
    478.     // NOTE: If you add a new keycode here you must also add it to several other files.  
    479.     //       Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.  
    480. };  
    481.   
    482. #ifdef __cplusplus  
    483. }  
    484. #endif  
    485.   
    486. #endif // _ANDROID_KEYCODES_H  
    487. </span>  

         4)在frameworks/base/core/res/res/values/attrs.xml添加如下
             <enum name="KEYCODE_WLS" value="320" />
     
         5)在 frameworks/base/core/java/android/view/KeyEvent.java添加对应的
            public static final int KEYCODE_WLS = 320;
         经过如上的步骤就将"123"按键和Android系统中的KEYCODE_WLS就对应起来了,注意这里的"123“键值并不是真正意义上的123键值,他只是linux驱动向上层抛出的键值。
     
     
         6)在Android的framework层的键值处理函数中,捕获按键,并进行相应处理。
    在framework层的input系统中,加入对wifi按键的捕获。
    添加的文件是:frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
    添加的具体方法:在PhoneWindowManager.java的interceptKeyBeforeQueueing()函数中,不惑该键值,至于怎么处理处决您的业务处理了。
     
     
           在这里再总结下我对Android键值处理的理解,我的理解:看了一下key character map的处理,是通过读取kl文件然后使用驱动程序提供的ioctl函数去修改来自输入设备的扫描码和系统预定义的keycode的映射关系。 这样的话,对于硬件扫描码,只需要修改这个kl文件。上层得到的都是系统预定义的keycode。
    重要补充:
      映射关系:
        ir硬件扫描码在驱动里面被 映射为 kernel/include/linux/input.h里面定义的某个键值。但是这个键值只在linux系统中使用。
      Android通过源码目录下的device/xxx/xxx.kl( keylayout )文件完成linux键值到Android系统要使用的键值的映射
  • 相关阅读:
    poj4474 Scout YYF I(概率dp+矩阵快速幂)
    网络编程之TCP异步群聊:服务器端代码
    平衡树(AVL)详解
    网络编程之TCP异步群聊:客户端代码
    [置顶] android 图片库的封装
    oracle的nvl函数的使用解析
    七天美音英标学习总结
    软考(7)——看图心想 标准化和知识产权
    Node.js学习(7)----包
    Ubuntu bitnami gitlab 安装
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/7421986.html
Copyright © 2011-2022 走看看