Add a new custom key value and key processing flow under Android

Add a new custom key value and key processing process under
Android . I'm not afraid of everyone's jokes. The reason why I wrote this blog is that I went to a small company to interview Android system engineers a few days ago, and then the technical director of the other party asked during the interview. I have a question, please describe in detail how to add custom key values ​​under Android and describe in detail the key processing process of Android. Looking back now, the answer at that time was really not very good. I will take advantage of the free time now to analyze the above two questions.
First, analyze how to add a new custom key value under Android. In Android's native system, the key values ​​are 92 by default, ranging from 0-91; under normal circumstances, these key values ​​are sufficient, but if you want to expand, you still need to add new key values, then how to A new key value is mapped from the driver settings to the upper layer, so that the application can handle our custom key value accordingly?
Before introducing how to add new key values ​​in Android, let's introduce the flow of the INPUT subsystem FLOW under Android. The following is a simplified flowchart diagram:

1.添加按键及其映射
1)如果系统有新的按键需要添加,玛门是怎么添加并上报到系统上层去的呢(这里的上层主要指的是Android应用层),首先要确定的是我们的遥控设备是通过/dev/input目录下那个event调用那个kl文件,这里可以通过如下命令超看cat /proc/bus/input/devices,下面是在终端下的打印信息

[cpp] view plain copy

<span style="font-family:FangSong_GB2312;font-size:18px;">shell@orange:/ # cat /proc/bus/input/devices   
I: Bus=0018 Vendor=3697 Product=0001 Version=0001  
N: Name="MStar Smart TV IR Receiver"  
P: Phys=/dev/ir  
S: Sysfs=/devices/virtual/rc/rc0/input0  
U: Uniq=  
H: Handlers=kbd event0   
B: PROP=0  
B: EV=13  
B: KEY=fc0000 0 fc900 142851 0 0 0 0 108000 1a8 c0000c01 9e37c0 48007 f8000000 10000ffc  
B: MSC=10  

I: Bus=0000 Vendor=0000 Product=0000 Version=0000  
N: Name="MCE IR Keyboard/Mouse (ir)"  
P: Phys=/input0  
S: Sysfs=/devices/virtual/input/input1  
U: Uniq=  
H: Handlers=kbd mouse0 event1   
B: PROP=0  
B: EV=100017  
B: KEY=30000 0 7 ff87207a c14057ff febeffdf ffefffff ffffffff fffffffe  
B: REL=3  
B: MSC=10  

shell@orange:/ #   
shell@orange:/ # </span>  

By printing the information, we can know that our terminal device uses the Vendor_3697_Product_0001.kl file. I only analyze the IT remote control device here. Then what is in our Vendor_3697_Product_0001.kl? We can view it through the cat command. The specific information is as follows :
[cpp] view plain copy

<span style="font-family:FangSong_GB2312;font-size:18px;"># Copyright (C) 2010 The Android Open Source Project  
#  
# Licensed under the Apache License, Version 2.0 (the "License");  
# you may not use this file except in compliance with the License.  
# You may obtain a copy of the License at  
#  
#      http://www.apache.org/licenses/LICENSE-2.0  
#  
# Unless required by applicable law or agreed to in writing, software  
# distributed under the License is distributed on an "AS IS" BASIS,  
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
# See the License for the specific language governing permissions and  
# limitations under the License.  

#  
# MStar Smart TV IR Receiver.  
#  

key 116     POWER                   WAKE  
key 11      0  
key 2       1  
key 3       2  
key 4       3  
key 5       4  
key 6       5  
key 7       6  
key 8       7  
key 9       8  
key 10      9  
key 398     PROG_RED  
key 399     PROG_GREEN  
key 400     PROG_YELLOW  
key 401     PROG_BLUE  
key 103     DPAD_UP  
key 108     DPAD_DOWN  
key 105     DPAD_LEFT  
key 106     DPAD_RIGHT  
key 28      ENTER  
key 402     CHANNEL_UP              WAKE_DROPPED  
key 403     CHANNEL_DOWN            WAKE_DROPPED  
key 115     VOLUME_UP               WAKE_DROPPED  
key 114     VOLUME_DOWN             WAKE_DROPPED  
key 104     PAGE_UP  
key 109     PAGE_DOWN  
key 102     HOME                    WAKE_DROPPED  
key 139     MENU                    WAKE_DROPPED  
key 158     BACK  
key 113     VOLUME_MUTE  
key 167     DVR  
key 138     GUIDE  
key 358     INFO  
#key 82      WINDOW  
#key 79      TV_INPUT  
key 168     MEDIA_REWIND  
key 159     MEDIA_FAST_FORWARD  
key 165     MEDIA_PREVIOUS  
key 163     MEDIA_NEXT  
key 207     MEDIA_PLAY  
key 119     MEDIA_PAUSE  
key 128     MEDIA_STOP  

# Common extended  
key 392     SOUND_MODE  
key 212     PICTURE_MODE  
key 372     ASPECT_RATIO  
key 363     CHANNEL_RETURN  
key 142     SLEEP  
key 365     EPG  
key 395     LIST  
#key 370     SUBTITLE  
key 466     MTS  
key 467     FREEZE  
key 468     TTX  
key 469     CC  
key 470     TV_SETTING  
key 471     SCREENSHOT  
key 356     TV_POWER  

# Mstar extended  
key 59      MSTAR_BALANCE  
key 60      MSTAR_INDEX  
key 61      MSTAR_HOLD  
key 62      MSTAR_UPDATE  
key 63      MSTAR_REVEAL  
key 64      MSTAR_SUBCODE  
key 65      MSTAR_SIZE  
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

<span style="font-family:FangSong_GB2312;font-size:18px;">/* 
 * Copyright (C) 2008 The Android Open Source Project 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License. 
 */  


#ifndef _LIBINPUT_KEYCODE_LABELS_H  
#define _LIBINPUT_KEYCODE_LABELS_H  


#include <android/keycodes.h>  


struct KeycodeLabel {  
    const char *literal;  
    int value;  
};  


static const KeycodeLabel KEYCODES[] = {  
    { "SOFT_LEFT", 1 },  
    { "SOFT_RIGHT", 2 },  
    { "HOME", 3 },  
    { "BACK", 4 },  
    { "CALL", 5 },  
    { "ENDCALL", 6 },  
    { "0", 7 },  
    { "1", 8 },  
    { "2", 9 },  
    { "3", 10 },  
    { "4", 11 },  
    { "5", 12 },  
    { "6", 13 },  
    { "7", 14 },  
    { "8", 15 },  
    { "9", 16 },  
    { "STAR", 17 },  
    { "POUND", 18 },  
    { "DPAD_UP", 19 },  
    { "DPAD_DOWN", 20 },  
    { "DPAD_LEFT", 21 },  
    { "DPAD_RIGHT", 22 },  
    { "DPAD_CENTER", 23 },  
    { "VOLUME_UP", 24 },  
    { "VOLUME_DOWN", 25 },  
    { "POWER", 26 },  
    { "CAMERA", 27 },  
    { "CLEAR", 28 },  
    { "A", 29 },  
    { "B", 30 },  
    { "C", 31 },  
    { "D", 32 },  
    { "E", 33 },  
    { "F", 34 },  
    { "G", 35 },  
    { "H", 36 },  
    { "I", 37 },  
    { "J", 38 },  
    { "K", 39 },  
    { "L", 40 },  
    { "M", 41 },  
    { "N", 42 },  
    { "O", 43 },  
    { "P", 44 },  
    { "Q", 45 },  
    { "R", 46 },  
    { "S", 47 },  
    { "T", 48 },  
    { "U", 49 },  
    { "V", 50 },  
    { "W", 51 },  
    { "X", 52 },  
    { "Y", 53 },  
    { "Z", 54 },  
    { "COMMA", 55 },  
    { "PERIOD", 56 },  
    { "ALT_LEFT", 57 },  
    { "ALT_RIGHT", 58 },  
    { "SHIFT_LEFT", 59 },  
    { "SHIFT_RIGHT", 60 },  
    { "TAB", 61 },  
    { "SPACE", 62 },  
    { "SYM", 63 },  
    { "EXPLORER", 64 },  
    { "ENVELOPE", 65 },  
    { "ENTER", 66 },  
    { "DEL", 67 },  
    { "GRAVE", 68 },  
    { "MINUS", 69 },  
    { "EQUALS", 70 },  
    { "LEFT_BRACKET", 71 },  
    { "RIGHT_BRACKET", 72 },  
    { "BACKSLASH", 73 },  
    { "SEMICOLON", 74 },  
    { "APOSTROPHE", 75 },  
    { "SLASH", 76 },  
    { "AT", 77 },  
    { "NUM", 78 },  
    { "HEADSETHOOK", 79 },  
    { "FOCUS", 80 },  
    { "PLUS", 81 },  
    { "MENU", 82 },  
    { "NOTIFICATION", 83 },  
    { "SEARCH", 84 },  
    { "MEDIA_PLAY_PAUSE", 85 },  
    { "MEDIA_STOP", 86 },  
    { "MEDIA_NEXT", 87 },  
    { "MEDIA_PREVIOUS", 88 },  
    { "MEDIA_REWIND", 89 },  
    { "MEDIA_FAST_FORWARD", 90 },  
    { "MUTE", 91 },  
    { "PAGE_UP", 92 },  
    { "PAGE_DOWN", 93 },  
    { "PICTSYMBOLS", 94 },  
    { "SWITCH_CHARSET", 95 },  
    { "BUTTON_A", 96 },  
    { "BUTTON_B", 97 },  
    { "BUTTON_C", 98 },  
    { "BUTTON_X", 99 },  
    { "BUTTON_Y", 100 },  
    { "BUTTON_Z", 101 },  
    { "BUTTON_L1", 102 },  
    { "BUTTON_R1", 103 },  
    { "BUTTON_L2", 104 },  
    { "BUTTON_R2", 105 },  
    { "BUTTON_THUMBL", 106 },  
    { "BUTTON_THUMBR", 107 },  
    { "BUTTON_START", 108 },  
    { "BUTTON_SELECT", 109 },  
    { "BUTTON_MODE", 110 },  
    { "ESCAPE", 111 },  
    { "FORWARD_DEL", 112 },  
    { "CTRL_LEFT", 113 },  
    { "CTRL_RIGHT", 114 },  
    { "CAPS_LOCK", 115 },  
    { "SCROLL_LOCK", 116 },  
    { "META_LEFT", 117 },  
    { "META_RIGHT", 118 },  
    { "FUNCTION", 119 },  
    { "SYSRQ", 120 },  
    { "BREAK", 121 },  
    { "MOVE_HOME", 122 },  
    { "MOVE_END", 123 },  
    { "INSERT", 124 },  
    { "FORWARD", 125 },  
    { "MEDIA_PLAY", 126 },  
    { "MEDIA_PAUSE", 127 },  
    { "MEDIA_CLOSE", 128 },  
    { "MEDIA_EJECT", 129 },  
    { "MEDIA_RECORD", 130 },  
    { "F1", 131 },  
    { "F2", 132 },  
    { "F3", 133 },  
    { "F4", 134 },  
    { "F5", 135 },  
    { "F6", 136 },  
    { "F7", 137 },  
    { "F8", 138 },  
    { "F9", 139 },  
    { "F10", 140 },  
    { "F11", 141 },  
    { "F12", 142 },  
    { "NUM_LOCK", 143 },  
    { "NUMPAD_0", 144 },  
    { "NUMPAD_1", 145 },  
    { "NUMPAD_2", 146 },  
    { "NUMPAD_3", 147 },  
    { "NUMPAD_4", 148 },  
    { "NUMPAD_5", 149 },  
    { "NUMPAD_6", 150 },  
    { "NUMPAD_7", 151 },  
    { "NUMPAD_8", 152 },  
    { "NUMPAD_9", 153 },  
    { "NUMPAD_DIVIDE", 154 },  
    { "NUMPAD_MULTIPLY", 155 },  
    { "NUMPAD_SUBTRACT", 156 },  
    { "NUMPAD_ADD", 157 },  
    { "NUMPAD_DOT", 158 },  
    { "NUMPAD_COMMA", 159 },  
    { "NUMPAD_ENTER", 160 },  
    { "NUMPAD_EQUALS", 161 },  
    { "NUMPAD_LEFT_PAREN", 162 },  
    { "NUMPAD_RIGHT_PAREN", 163 },  
    { "VOLUME_MUTE", 164 },  
    { "INFO", 165 },  
    { "CHANNEL_UP", 166 },  
    { "CHANNEL_DOWN", 167 },  
    { "ZOOM_IN", 168 },  
    { "ZOOM_OUT", 169 },  
    { "TV", 170 },  
    { "WINDOW", 171 },  
    { "GUIDE", 172 },  
    { "DVR", 173 },  
    { "BOOKMARK", 174 },  
    { "CAPTIONS", 175 },  
    { "SETTINGS", 176 },  
    { "TV_POWER", 177 },  
    { "TV_INPUT", 178 },  
    { "STB_POWER", 179 },  
    { "STB_INPUT", 180 },  
    { "AVR_POWER", 181 },  
    { "AVR_INPUT", 182 },  
    { "PROG_RED", 183 },  
    { "PROG_GREEN", 184 },  
    { "PROG_YELLOW", 185 },  
    { "PROG_BLUE", 186 },  
    { "APP_SWITCH", 187 },  
    { "BUTTON_1", 188 },  
    { "BUTTON_2", 189 },  
    { "BUTTON_3", 190 },  
    { "BUTTON_4", 191 },  
    { "BUTTON_5", 192 },  
    { "BUTTON_6", 193 },  
    { "BUTTON_7", 194 },  
    { "BUTTON_8", 195 },  
    { "BUTTON_9", 196 },  
    { "BUTTON_10", 197 },  
    { "BUTTON_11", 198 },  
    { "BUTTON_12", 199 },  
    { "BUTTON_13", 200 },  
    { "BUTTON_14", 201 },  
    { "BUTTON_15", 202 },  
    { "BUTTON_16", 203 },  
    { "LANGUAGE_SWITCH", 204 },  
    { "MANNER_MODE", 205 },  
    { "3D_MODE", 206 },  
    { "CONTACTS", 207 },  
    { "CALENDAR", 208 },  
    { "MUSIC", 209 },  
    { "CALCULATOR", 210 },  
    { "ZENKAKU_HANKAKU", 211 },  
    { "EISU", 212 },  
    { "MUHENKAN", 213 },  
    { "HENKAN", 214 },  
    { "KATAKANA_HIRAGANA", 215 },  
    { "YEN", 216 },  
    { "RO", 217 },  
    { "KANA", 218 },  
    { "ASSIST", 219 },  
    { "BRIGHTNESS_DOWN", 220 },  
    { "BRIGHTNESS_UP", 221 },  
    { "MEDIA_AUDIO_TRACK", 222 },  
    // MStar Android Patch Begin  
    // Common section, range 251-300  
    { "SOUND_MODE", 251 },  
    { "PICTURE_MODE", 252 },  
    { "ASPECT_RATIO", 253 },  
    { "CHANNEL_RETURN", 254 },  
    { "SLEEP", 255 },  
    { "EPG", 256 },  
    { "LIST", 257 },  
    { "SUBTITLE", 258 },  
    { "FAVORITE", 259 },  
    { "MTS", 260 },  
    { "FREEZE", 261 },  
    { "TTX", 262 },  
    { "CC", 263 },  
    { "TV_SETTING", 264 },  
    { "SCREENSHOT", 265 },  
    { "CLOUD", 266 },  
    { "VOICE", 267 },  
    { "USB", 268 },  
    { "HDMI", 269 },  
    { "DISPLAY_MODE", 270 },  
    { "SONG_SYSTEM", 271 },  
    { "GINGA_BACK", 272},  
    { "NETFLIX", 273},  
    { "AMAZONE", 274},  
    // MStar section, range 301-400  
    { "MSTAR_BALANCE", 301 },  
    { "MSTAR_INDEX", 302 },  
    { "MSTAR_HOLD", 303 },  
    { "MSTAR_UPDATE", 304 },  
    { "MSTAR_REVEAL", 305 },  
    { "MSTAR_SUBCODE", 306 },  
    { "MSTAR_SIZE", 307 },  
    { "MSTAR_CLOCK", 308 },  
    { "MSTAR_STORE_UP", 309 },  
    { "MSTAR_TRIANGLE_UP", 310 },  
    { "MSTAR_MOVIE", 311 },  
    { "MSTAR_FILE", 312 },  
    { "MSTAR_STAR_PLUS", 313 },  
    { "MSTAR_AUDIO_TRACK", 314 },  
    { "MSTAR_OPTIONAL_TIME", 315 },  
    { "MSTAR_LOOP", 316 },  
    { "MSTAR_INBOX", 317 },  
    { "MSTAR_VVOIP", 318 },  
    { "MSTAR_PVR_BROWSER", 319 },  
    // Haier section, range 401-500  
    { "HAIER_TASK", 401 },  
    { "HAIER_USB", 402 },  
    { "HAIER_TOOLS", 403 },  
    { "HAIER_POWERSLEEP", 404 },  
    { "HAIER_WAKEUP", 405 },  
    { "HAIER_UNMUTE", 406 },  
    { "HAIER_CLEANSEARCH", 407 },  
    // Konka section, range 501-600  
    { "KONKA_YPBPR", 501 },  
    { "KONKA_THREEPOINT_LOONPRESS", 502 },  
    { "KONKA_THREEPOINT_COLLECT", 503 },  
    { "KONKA_THREEPOINT_DISPERSE", 504 },  
    { "KONKA_VOICESWITCH", 505 },  
    { "KONKA_FLYIMEFINGER_SELECT", 506 },  
    { "KONKA_FLYIMEFINGER_CANCEL", 507 },  
    { "KONKA_SOUNDOUTPUT_ENABLE", 508 },  
    { "KONKA_SOUNDOUTPUT_DISABLE", 509 },  
    { "KONKA_BESTV_EXIT", 510 },  
    { "KONKA_BESTV_FORWARD", 511 },  
    { "KONKA_BESTV_BACKWARD", 512 },  
    { "KONKA_ENTER_FACTORY", 513 },  
    { "KONKA_FACTORY_BAKE_TV", 514 },  
    // Skyworth section, range 601-700  


    // Tcl section, range 4001-4099  
    { "TCL_MITV", 4001 },  
    { "TCL_USB_MENU", 4002 },  
    { "TCL_SWING_R1", 4003 },  
    { "TCL_SWING_R2", 4004 },  
    { "TCL_SWING_R3", 4005 },  
    { "TCL_SWING_R4", 4006 },  
    { "TCL_SWING_L1", 4007 },  
    { "TCL_SWING_L2", 4008 },  
    { "TCL_SWING_L3", 4009 },  
    { "TCL_SWING_L4", 4010},  
    { "TCL_WIDGET", 4011},  
    { "TCL_VGR_LEFT", 4012},  
    { "TCL_VGR_RIGHT", 4013 },  
    { "TCL_VGR_TAP", 4014 },  
    { "TCL_VGR_WAVE", 4015 },  
    { "TCL_VGR_WAVE_LEFT", 4016 },  
    { "TCL_VGR_WAVE_RIGHT", 4017 },  
    { "TCL_VGR_ACTIVE", 4018 },  
    { "TCL_VGR_DEACTIVE", 4019 },  
    { "TCL_BODY_SENSOR", 4020 },  
    { "TCL_CIRCLE_CLOCKWISE", 4021 },  
    { "TCL_CIRCLE_CTR_CLOCKWISE", 4022 },  
    { "TCL_GESTURE_X", 4023 },  
    { "TCL_GESTURE_ALPHA", 4024 },  
    { "TCL_GESTURE_MUTE", 4025 },  
    { "TCL_UP", 4026 },  
    { "TCL_DOWN", 4027 },  
    { "TCL_LEFT", 4028 },  
    { "TCL_RIGHT", 4029 },  
    { "TCL_UP_LEFT", 4030 },  
    { "TCL_UP_RIGHT", 4031 },  
    { "TCL_DOWN_LEFT", 4032 },  
    { "TCL_DOWN_RIGHT", 4033 },  
    // Changhong section, range 4101-4199  
    { "CHANGHONGIR_MUTE", 4101 },  
    { "CHANGHONGIR_INPUT", 4102 },  
    { "CHANGHONGIR_DEL", 4103 },  
    { "CHANGHONGIR_MENU", 4104 },  
    { "CHANGHONGIR_CORN", 4105 },  
    { "CHANGHONGIR_OK", 4106 },  
    { "CHANGHONGIR_FLCK_FU", 4107 },  
    { "CHANGHONGIR_FLCK_FD", 4108 },  
    { "CHANGHONGIR_FLCK_FL", 4109 },  
    { "CHANGHONGIR_FLCK_FR", 4110 },  
    { "CHANGHONGIR_FLCK_SU", 4111 },  
    { "CHANGHONGIR_FLCK_SD", 4112 },  
    { "CHANGHONGIR_FLCK_SL", 4113 },  
    { "CHANGHONGIR_FLCK_SR", 4114 },  
    { "CHANGHONGIR_PINCH", 4115 },  
    { "CHANGHONGIR_SPREAD", 4116 },  
    { "CHANGHONGIR_VOICE", 4117 },  
    { "CHANGHONGIR_HAND", 4118 },  
    { "CHANGHONGIR_3D", 4119 },  
    { "CHANGHONGIR_HELP", 4120 },  
    { "CHANGHONGIR_APP", 4121 },  
    { "CHANGHONGIR_MOUSE", 4122 },  
    { "CHANGHONGIR_EPG", 4123 },  
    { "CHANGHONGIR_HOME", 4124 },  
    { "CHANGHONGIR_SETTINGS", 4125 },  
    // Hisense section, range 4201-4299  
    { "HISENSE_G_SENSOR", 4201 },  
    { "HISENSE_LOW_BATTERY", 4202 },  
    { "HISENSE_SLIDEUP", 4203 },  
    { "HISENSE_SLIDEDOWN", 4204 },  
    { "HISENSE_SLIDELEFT", 4205 },  
    { "HISENSE_SLIDERIGHT", 4206 },  
    { "HISENSE_RAPID_SLIDEUP", 4207 },  
    { "HISENSE_RAPID_SLIDEDOWN", 4208 },  
    { "HISENSE_RAPID_SLIDELEFT", 4209 },  
    { "HISENSE_RAPID_SLIDERIGHT", 4210 },  
    { "HISENSE_FAC_NEC_M", 4211 },  
    { "HISENSE_FAC_NEC_IP", 4212 },  
    { "HISENSE_FAC_NEC_SAVE", 4213 },  
    { "HISENSE_FAC_NEC_3D", 4214 },  
    { "HISENSE_FAC_NEC_PC", 4215 },  
    { "HISENSE_FAC_NEC_LOGO", 4216 },  
    { "HISENSE_FAC_NEC_YPBPR", 4217 },  
    { "HISENSE_FAC_NEC_HDMI", 4218 },  
    { "HISENSE_FAC_NEC_F1", 4219 },  
    { "HISENSE_FAC_NEC_F2", 4220 },  
    { "HISENSE_FAC_NEC_F3", 4221 },  
    { "HISENSE_FAC_NEC_F4", 4222 },  
    { "HISENSE_FAC_NEC_F5", 4223 },  
    { "HISENSE_FAC_NEC_F6", 4224 },  
    { "HISENSE_FAC_NEC_F7", 4225 },  
    { "HISENSE_FAC_NEC_OK", 4226 },  
    { "HISENSE_FAC_NEC_MAC", 4227 },  
    { "HISENSE_FAC_NEC_AV", 4228 },  
    { "HISENSE_FAC_NEC_PATTERN", 4229 },  
    { "HISENSE_FAC_NEC_AGING", 4230 },  
    { "HISENSE_FAC_NEC_BALANCE", 4231 },  
    { "HISENSE_FAC_NEC_ADC", 4232 },  
    { "HISENSE_FAC_NEC_RDRV_INCREASE", 4233 },  
    { "HISENSE_FAC_NEC_RDRV_DECREASE", 4234 },  
    { "HISENSE_FAC_NEC_GDRV_INCREASE", 4235 },  
    { "HISENSE_FAC_NEC_GDRV_DECREASE", 4236 },  
    { "HISENSE_FAC_NEC_BDRV_INCREASE", 4237 },  
    { "HISENSE_FAC_NEC_BDRV_DECREASE", 4238 },  
    { "HISENSE_FAC_NEC_RCUT_INCREASE", 4239 },  
    { "HISENSE_FAC_NEC_RCUT_DECREASE", 4240 },  
    { "HISENSE_FAC_NEC_GCUT_INCREASE", 4241 },  
    { "HISENSE_FAC_NEC_GCUT_DECREASE", 4242 },  
    { "HISENSE_FAC_NEC_BCUT_INCREASE", 4243 },  
    { "HISENSE_FAC_NEC_BCUT_DECREASE", 4244 },  
    { "HISENSE_PRODUCT_SCAN_START", 4245 },  
    { "HISENSE_PRODUCT_SCAN_OVER", 4246 },  
    { "HISENSE_TEST_BROAD_TV", 4247 },  
    { "HISENSE_TEST_BROAD_DTV", 4248 },  
    { "HISENSE_TEST_BROAD_AV1", 4249 },  
    { "HISENSE_TEST_BROAD_AV2", 4250 },  
    { "HISENSE_TEST_BROAD_AV3", 4251 },  
    { "HISENSE_TEST_BROAD_SVIDEO1", 4252 },  
    { "HISENSE_TEST_BROAD_SVIDEO2", 4253 },  
    { "HISENSE_TEST_BROAD_SVIDEO3", 4254 },  
    { "HISENSE_TEST_BROAD_SCART1", 4255 },  
    { "HISENSE_TEST_BROAD_SCART2", 4256 },  
    { "HISENSE_TEST_BROAD_SCART3", 4257 },  
    { "HISENSE_TEST_BOARD_YPBPR1", 4258 },  
    { "HISENSE_TEST_BOARD_YPBPR2", 4259 },  
    { "HISENSE_TEST_BOARD_YPBPR3", 4260 },  
    { "HISENSE_TEST_BOARD_VGA", 4261 },  
    { "HISENSE_TEST_BOARD_HDMI1", 4262 },  
    { "HISENSE_TEST_BOARD_HDMI2", 4263 },  
    { "HISENSE_TEST_BOARD_HDMI3", 4264 },  
    { "HISENSE_TEST_BOARD_HDMI4", 4265 },  
    { "HISENSE_TEST_BOARD_HDMI5", 4266 },  
    { "HISENSE_TEST_BOARD_DMP", 4267 },  
    { "HISENSE_TEST_BOARD_EMP", 4268 },  
    { "HISENSE_TEST_BOARD_AUTOCOLOR", 4269 },  
    { "HISENSE_TEST_BOARD_SAVE", 4270 },  
    { "HISENSE_TEST_BOARD_TELITEXT", 4271 },  
    { "HISENSE_TEST_BOARD_SAPL", 4272 },  
    { "HISENSE_TEST_BOARD_VCHIP", 4273 },  
    { "HISENSE_TEST_BOARD_CCD", 4274 },  
    { "HISENSE_TEST_BOARD_BTSC", 4275 },  
    { "HISENSE_TEST_BOARD_FAC_OK", 4276 },  
    // MStar Android Patch End  


    // NOTE: If you add a new keycode here you must also add it to several other files.  
    //       Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.  


    { NULL, 0 }  
};  


// NOTE: If you edit these flags, also edit policy flags in Input.h.  
static const KeycodeLabel FLAGS[] = {  
    { "WAKE", 0x00000001 },  
    { "WAKE_DROPPED", 0x00000002 },  
    { "SHIFT", 0x00000004 },  
    { "CAPS_LOCK", 0x00000008 },  
    { "ALT", 0x00000010 },  
    { "ALT_GR", 0x00000020 },  
    { "MENU", 0x00000040 },  
    { "LAUNCHER", 0x00000080 },  
    { "VIRTUAL", 0x00000100 },  
    { "FUNCTION", 0x00000200 },  
    { NULL, 0 }  
};  


static const KeycodeLabel AXES[] = {  
    { "X", 0 },  
    { "Y", 1 },  
    { "PRESSURE", 2 },  
    { "SIZE", 3 },  
    { "TOUCH_MAJOR", 4 },  
    { "TOUCH_MINOR", 5 },  
    { "TOOL_MAJOR", 6 },  
    { "TOOL_MINOR", 7 },  
    { "ORIENTATION", 8 },  
    { "VSCROLL", 9 },  
    { "HSCROLL", 10 },  
    { "Z", 11 },  
    { "RX", 12 },  
    { "RY", 13 },  
    { "RZ", 14 },  
    { "HAT_X", 15 },  
    { "HAT_Y", 16 },  
    { "LTRIGGER", 17 },  
    { "RTRIGGER", 18 },  
    { "THROTTLE", 19 },  
    { "RUDDER", 20 },  
    { "WHEEL", 21 },  
    { "GAS", 22 },  
    { "BRAKE", 23 },  
    { "DISTANCE", 24 },  
    { "TILT", 25 },  
    { "GENERIC_1", 32 },  
    { "GENERIC_2", 33 },  
    { "GENERIC_3", 34 },  
    { "GENERIC_4", 35 },  
    { "GENERIC_5", 36 },  
    { "GENERIC_6", 37 },  
    { "GENERIC_7", 38 },  
    { "GENERIC_8", 39 },  
    { "GENERIC_9", 40 },  
    { "GENERIC_10", 41 },  
    { "GENERIC_11", 42 },  
    { "GENERIC_12", 43 },  
    { "GENERIC_13", 44 },  
    { "GENERIC_14", 45 },  
    { "GENERIC_15", 46 },  
    { "GENERIC_16", 47 },  


    // NOTE: If you add a new axis here you must also add it to several other files.  
    //       Refer to frameworks/base/core/java/android/view/MotionEvent.java for the full list.  


    { NULL, -1 }  
};  


#endif // _LIBINPUT_KEYCODE_LABELS_H</span>  


3)在/frameworks/native/include/android/keycodes.h中添加如下的
AKEYCODE_MSTAR_WLS          = 320,下面看下该文件的定义

[cpp] view plain copy

<span style="font-family:FangSong_GB2312;font-size:18px;">/* 
 * Copyright (C) 2010 The Android Open Source Project 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License. 
 */  

#ifndef _ANDROID_KEYCODES_H  
#define _ANDROID_KEYCODES_H  

/****************************************************************** 
 * 
 * IMPORTANT NOTICE: 
 * 
 *   This file is part of Android's set of stable system headers 
 *   exposed by the Android NDK (Native Development Kit). 
 * 
 *   Third-party source AND binary code relies on the definitions 
 *   here to be FROZEN ON ALL UPCOMING PLATFORM RELEASES. 
 * 
 *   - DO NOT MODIFY ENUMS (EXCEPT IF YOU ADD NEW 32-BIT VALUES) 
 *   - DO NOT MODIFY CONSTANTS OR FUNCTIONAL MACROS 
 *   - DO NOT CHANGE THE SIGNATURE OF FUNCTIONS IN ANY WAY 
 *   - DO NOT CHANGE THE LAYOUT OR SIZE OF STRUCTURES 
 */  

#include <sys/types.h>  

#ifdef __cplusplus  
extern "C" {  
#endif  

/* 
 * Key codes. 
 */  
enum {  
    AKEYCODE_UNKNOWN         = 0,  
    AKEYCODE_SOFT_LEFT       = 1,  
    AKEYCODE_SOFT_RIGHT      = 2,  
    AKEYCODE_HOME            = 3,  
    AKEYCODE_BACK            = 4,  
    AKEYCODE_CALL            = 5,  
    AKEYCODE_ENDCALL         = 6,  
    AKEYCODE_0               = 7,  
    AKEYCODE_1               = 8,  
    AKEYCODE_2               = 9,  
    AKEYCODE_3               = 10,  
    AKEYCODE_4               = 11,  
    AKEYCODE_5               = 12,  
    AKEYCODE_6               = 13,  
    AKEYCODE_7               = 14,  
    AKEYCODE_8               = 15,  
    AKEYCODE_9               = 16,  
    AKEYCODE_STAR            = 17,  
    AKEYCODE_POUND           = 18,  
    AKEYCODE_DPAD_UP         = 19,  
    AKEYCODE_DPAD_DOWN       = 20,  
    AKEYCODE_DPAD_LEFT       = 21,  
    AKEYCODE_DPAD_RIGHT      = 22,  
    AKEYCODE_DPAD_CENTER     = 23,  
    AKEYCODE_VOLUME_UP       = 24,  
    AKEYCODE_VOLUME_DOWN     = 25,  
    AKEYCODE_POWER           = 26,  
    AKEYCODE_CAMERA          = 27,  
    AKEYCODE_CLEAR           = 28,  
    AKEYCODE_A               = 29,  
    AKEYCODE_B               = 30,  
    AKEYCODE_C               = 31,  
    AKEYCODE_D               = 32,  
    AKEYCODE_E               = 33,  
    AKEYCODE_F               = 34,  
    AKEYCODE_G               = 35,  
    AKEYCODE_H               = 36,  
    AKEYCODE_I               = 37,  
    AKEYCODE_J               = 38,  
    AKEYCODE_K               = 39,  
    AKEYCODE_L               = 40,  
    AKEYCODE_M               = 41,  
    AKEYCODE_N               = 42,  
    AKEYCODE_O               = 43,  
    AKEYCODE_P               = 44,  
    AKEYCODE_Q               = 45,  
    AKEYCODE_R               = 46,  
    AKEYCODE_S               = 47,  
    AKEYCODE_T               = 48,  
    AKEYCODE_U               = 49,  
    AKEYCODE_V               = 50,  
    AKEYCODE_W               = 51,  
    AKEYCODE_X               = 52,  
    AKEYCODE_Y               = 53,  
    AKEYCODE_Z               = 54,  
    AKEYCODE_COMMA           = 55,  
    AKEYCODE_PERIOD          = 56,  
    AKEYCODE_ALT_LEFT        = 57,  
    AKEYCODE_ALT_RIGHT       = 58,  
    AKEYCODE_SHIFT_LEFT      = 59,  
    AKEYCODE_SHIFT_RIGHT     = 60,  
    AKEYCODE_TAB             = 61,  
    AKEYCODE_SPACE           = 62,  
    AKEYCODE_SYM             = 63,  
    AKEYCODE_EXPLORER        = 64,  
    AKEYCODE_ENVELOPE        = 65,  
    AKEYCODE_ENTER           = 66,  
    AKEYCODE_DEL             = 67,  
    AKEYCODE_GRAVE           = 68,  
    AKEYCODE_MINUS           = 69,  
    AKEYCODE_EQUALS          = 70,  
    AKEYCODE_LEFT_BRACKET    = 71,  
    AKEYCODE_RIGHT_BRACKET   = 72,  
    AKEYCODE_BACKSLASH       = 73,  
    AKEYCODE_SEMICOLON       = 74,  
    AKEYCODE_APOSTROPHE      = 75,  
    AKEYCODE_SLASH           = 76,  
    AKEYCODE_AT              = 77,  
    AKEYCODE_NUM             = 78,  
    AKEYCODE_HEADSETHOOK     = 79,  
    AKEYCODE_FOCUS           = 80,   // *Camera* focus  
    AKEYCODE_PLUS            = 81,  
    AKEYCODE_MENU            = 82,  
    AKEYCODE_NOTIFICATION    = 83,  
    AKEYCODE_SEARCH          = 84,  
    AKEYCODE_MEDIA_PLAY_PAUSE= 85,  
    AKEYCODE_MEDIA_STOP      = 86,  
    AKEYCODE_MEDIA_NEXT      = 87,  
    AKEYCODE_MEDIA_PREVIOUS  = 88,  
    AKEYCODE_MEDIA_REWIND    = 89,  
    AKEYCODE_MEDIA_FAST_FORWARD = 90,  
    AKEYCODE_MUTE            = 91,  
    AKEYCODE_PAGE_UP         = 92,  
    AKEYCODE_PAGE_DOWN       = 93,  
    AKEYCODE_PICTSYMBOLS     = 94,  
    AKEYCODE_SWITCH_CHARSET  = 95,  
    AKEYCODE_BUTTON_A        = 96,  
    AKEYCODE_BUTTON_B        = 97,  
    AKEYCODE_BUTTON_C        = 98,  
    AKEYCODE_BUTTON_X        = 99,  
    AKEYCODE_BUTTON_Y        = 100,  
    AKEYCODE_BUTTON_Z        = 101,  
    AKEYCODE_BUTTON_L1       = 102,  
    AKEYCODE_BUTTON_R1       = 103,  
    AKEYCODE_BUTTON_L2       = 104,  
    AKEYCODE_BUTTON_R2       = 105,  
    AKEYCODE_BUTTON_THUMBL   = 106,  
    AKEYCODE_BUTTON_THUMBR   = 107,  
    AKEYCODE_BUTTON_START    = 108,  
    AKEYCODE_BUTTON_SELECT   = 109,  
    AKEYCODE_BUTTON_MODE     = 110,  
    AKEYCODE_ESCAPE          = 111,  
    AKEYCODE_FORWARD_DEL     = 112,  
    AKEYCODE_CTRL_LEFT       = 113,  
    AKEYCODE_CTRL_RIGHT      = 114,  
    AKEYCODE_CAPS_LOCK       = 115,  
    AKEYCODE_SCROLL_LOCK     = 116,  
    AKEYCODE_META_LEFT       = 117,  
    AKEYCODE_META_RIGHT      = 118,  
    AKEYCODE_FUNCTION        = 119,  
    AKEYCODE_SYSRQ           = 120,  
    AKEYCODE_BREAK           = 121,  
    AKEYCODE_MOVE_HOME       = 122,  
    AKEYCODE_MOVE_END        = 123,  
    AKEYCODE_INSERT          = 124,  
    AKEYCODE_FORWARD         = 125,  
    AKEYCODE_MEDIA_PLAY      = 126,  
    AKEYCODE_MEDIA_PAUSE     = 127,  
    AKEYCODE_MEDIA_CLOSE     = 128,  
    AKEYCODE_MEDIA_EJECT     = 129,  
    AKEYCODE_MEDIA_RECORD    = 130,  
    AKEYCODE_F1              = 131,  
    AKEYCODE_F2              = 132,  
    AKEYCODE_F3              = 133,  
    AKEYCODE_F4              = 134,  
    AKEYCODE_F5              = 135,  
    AKEYCODE_F6              = 136,  
    AKEYCODE_F7              = 137,  
    AKEYCODE_F8              = 138,  
    AKEYCODE_F9              = 139,  
    AKEYCODE_F10             = 140,  
    AKEYCODE_F11             = 141,  
    AKEYCODE_F12             = 142,  
    AKEYCODE_NUM_LOCK        = 143,  
    AKEYCODE_NUMPAD_0        = 144,  
    AKEYCODE_NUMPAD_1        = 145,  
    AKEYCODE_NUMPAD_2        = 146,  
    AKEYCODE_NUMPAD_3        = 147,  
    AKEYCODE_NUMPAD_4        = 148,  
    AKEYCODE_NUMPAD_5        = 149,  
    AKEYCODE_NUMPAD_6        = 150,  
    AKEYCODE_NUMPAD_7        = 151,  
    AKEYCODE_NUMPAD_8        = 152,  
    AKEYCODE_NUMPAD_9        = 153,  
    AKEYCODE_NUMPAD_DIVIDE   = 154,  
    AKEYCODE_NUMPAD_MULTIPLY = 155,  
    AKEYCODE_NUMPAD_SUBTRACT = 156,  
    AKEYCODE_NUMPAD_ADD      = 157,  
    AKEYCODE_NUMPAD_DOT      = 158,  
    AKEYCODE_NUMPAD_COMMA    = 159,  
    AKEYCODE_NUMPAD_ENTER    = 160,  
    AKEYCODE_NUMPAD_EQUALS   = 161,  
    AKEYCODE_NUMPAD_LEFT_PAREN = 162,  
    AKEYCODE_NUMPAD_RIGHT_PAREN = 163,  
    AKEYCODE_VOLUME_MUTE     = 164,  
    AKEYCODE_INFO            = 165,  
    AKEYCODE_CHANNEL_UP      = 166,  
    AKEYCODE_CHANNEL_DOWN    = 167,  
    AKEYCODE_ZOOM_IN         = 168,  
    AKEYCODE_ZOOM_OUT        = 169,  
    AKEYCODE_TV              = 170,  
    AKEYCODE_WINDOW          = 171,  
    AKEYCODE_GUIDE           = 172,  
    AKEYCODE_DVR             = 173,  
    AKEYCODE_BOOKMARK        = 174,  
    AKEYCODE_CAPTIONS        = 175,  
    AKEYCODE_SETTINGS        = 176,  
    AKEYCODE_TV_POWER        = 177,  
    AKEYCODE_TV_INPUT        = 178,  
    AKEYCODE_STB_POWER       = 179,  
    AKEYCODE_STB_INPUT       = 180,  
    AKEYCODE_AVR_POWER       = 181,  
    AKEYCODE_AVR_INPUT       = 182,  
    AKEYCODE_PROG_RED        = 183,  
    AKEYCODE_PROG_GREEN      = 184,  
    AKEYCODE_PROG_YELLOW     = 185,  
    AKEYCODE_PROG_BLUE       = 186,  
    AKEYCODE_APP_SWITCH      = 187,  
    AKEYCODE_BUTTON_1        = 188,  
    AKEYCODE_BUTTON_2        = 189,  
    AKEYCODE_BUTTON_3        = 190,  
    AKEYCODE_BUTTON_4        = 191,  
    AKEYCODE_BUTTON_5        = 192,  
    AKEYCODE_BUTTON_6        = 193,  
    AKEYCODE_BUTTON_7        = 194,  
    AKEYCODE_BUTTON_8        = 195,  
    AKEYCODE_BUTTON_9        = 196,  
    AKEYCODE_BUTTON_10       = 197,  
    AKEYCODE_BUTTON_11       = 198,  
    AKEYCODE_BUTTON_12       = 199,  
    AKEYCODE_BUTTON_13       = 200,  
    AKEYCODE_BUTTON_14       = 201,  
    AKEYCODE_BUTTON_15       = 202,  
    AKEYCODE_BUTTON_16       = 203,  
    AKEYCODE_LANGUAGE_SWITCH = 204,  
    AKEYCODE_MANNER_MODE     = 205,  
    AKEYCODE_3D_MODE         = 206,  
    AKEYCODE_CONTACTS        = 207,  
    AKEYCODE_CALENDAR        = 208,  
    AKEYCODE_MUSIC           = 209,  
    AKEYCODE_CALCULATOR      = 210,  
    AKEYCODE_ZENKAKU_HANKAKU = 211,  
    AKEYCODE_EISU            = 212,  
    AKEYCODE_MUHENKAN        = 213,  
    AKEYCODE_HENKAN          = 214,  
    AKEYCODE_KATAKANA_HIRAGANA = 215,  
    AKEYCODE_YEN             = 216,  
    AKEYCODE_RO              = 217,  
    AKEYCODE_KANA            = 218,  
    AKEYCODE_ASSIST          = 219,  
    AKEYCODE_BRIGHTNESS_DOWN = 220,  
    AKEYCODE_BRIGHTNESS_UP   = 221,  
    AKEYCODE_MEDIA_AUDIO_TRACK = 222,  
    // MStar Android Patch Begin  
    // Common section, range 251-300  
    AKEYCODE_SOUND_MODE                 = 251,  
    AKEYCODE_PICTURE_MODE               = 252,  
    AKEYCODE_ASPECT_RATIO               = 253,  
    AKEYCODE_CHANNEL_RETURN             = 254,  
    AKEYCODE_SLEEP                      = 255,  
    AKEYCODE_EPG                        = 256,  
    AKEYCODE_LIST                       = 257,  
    AKEYCODE_SUBTITLE                   = 258,  
    AKEYCODE_FAVORITE                   = 259,  
    AKEYCODE_MTS                        = 260,  
    AKEYCODE_FREEZE                     = 261,  
    AKEYCODE_TTX                        = 262,  
    AKEYCODE_CC                         = 263,  
    AKEYCODE_TV_SETTING                 = 264,  
    AKEYCODE_SCREENSHOT                 = 265,  
    AKEYCODE_CLOUD                      = 266,  
    AKEYCODE_VOICE                      = 267,  
    AKEYCODE_USB                        = 268,  
    AKEYCODE_HDMI                       = 269,  
    AKEYCODE_DISPLAY_MODE               = 270,  
    AKEYCODE_SONG_SYSTEM                = 271,  
    AKEYCODE_GINGA_BACK                 = 272,  
    AKEYCODE_NETFLIX                    = 273,  
    AKEYCODE_AMAZONE                    = 274,  
    // Mstar section, range 301-400  
    AKEYCODE_MSTAR_BALANCE              = 301,  
    AKEYCODE_MSTAR_INDEX                = 302,  
    AKEYCODE_MSTAR_HOLD                 = 303,  
    AKEYCODE_MSTAR_UPDATE               = 304,  
    AKEYCODE_MSTAR_REVEAL               = 305,  
    AKEYCODE_MSTAR_SUBCODE              = 306,  
    AKEYCODE_MSTAR_SIZE                 = 307,  
    AKEYCODE_MSTAR_CLOCK                = 308,  
    AKEYCODE_MSTAR_STORE_UP             = 309,  
    AKEYCODE_MSTAR_TRIANGLE_UP          = 310,  
    AKEYCODE_MSTAR_MOVIE                = 311,  
    AKEYCODE_MSTAR_FILE                 = 312,  
    AKEYCODE_MSTAR_STAR_PLUS            = 313,  
    AKEYCODE_MSTAR_AUDIO_TRACK          = 314,  
    AKEYCODE_MSTAR_OPTIONAL_TIME        = 315,  
    AKEYCODE_MSTAR_LOOP                 = 316,  
    AKEYCODE_MSTAR_INBOX                = 317,  
    AKEYCODE_MSTAR_VVOIP                = 318,  
    AKEYCODE_MSTAR_PVR_BROWSER          = 319,  
    // Konka section, range 501-600  
    AKEYCODE_KONKA_YPBPR                = 501,  
    AKEYCODE_KONKA_THREEPOINT_LOONPRESS = 502,  
    AKEYCODE_KONKA_THREEPOINT_COLLECT   = 503,  
    AKEYCODE_KONKA_THREEPOINT_DISPERSE  = 504,  
    AKEYCODE_KONKA_VOICESWITCH          = 505,  
    AKEYCODE_KONKA_FLYIMEFINGER_SELECT  = 506,  
    AKEYCODE_KONKA_FLYIMEFINGER_CANCEL  = 507,  
    AKEYCODE_KONKA_SOUNDOUTPUT_ENABLE   = 508,  
    AKEYCODE_KONKA_SOUNDOUTPUT_DISABLE  = 509,  
    AKEYCODE_KONKA_BESTV_EXIT           = 510,  
    AKEYCODE_KONKA_BESTV_FORWARD        = 511,  
    AKEYCODE_KONKA_BESTV_BACKWARD       = 512,  
    AKEYCODE_KONKA_ENTER_FACTORY        = 513,  
    AKEYCODE_KONKA_FACTORY_BAKE_TV      = 514,  
    // Haier section, range  401-500  
    AKEYCODE_HAIER_TASK                 = 401,  
    AKEYCODE_HAIER_TOOLS                = 402,  
    AKEYCODE_HAIER_POWERSLEEP           = 403,  
    AKEYCODE_HAIER_WAKEUP               = 404,  
    AKEYCODE_HAIER_UNMUTE               = 405,  
    AKEYCODE_HAIER_CLEANSEARCH          = 406,  
    // Skyworth section, range 601-700  

    // Tcl section, range 4001-4100  
    AKEYCODE_TCL_MITV                   = 4001,  
    AKEYCODE_TCL_USB_MENU               = 4002,  
    AKEYCODE_TCL_SWING_R1               = 4003,  
    AKEYCODE_TCL_SWING_R2               = 4004,  
    AKEYCODE_TCL_SWING_R3               = 4005,  
    AKEYCODE_TCL_SWING_R4               = 4006,  
    AKEYCODE_TCL_SWING_L1               = 4007,  
    AKEYCODE_TCL_SWING_L2               = 4008,  
    AKEYCODE_TCL_SWING_L3               = 4009,  
    AKEYCODE_TCL_SWING_L4               = 4010,  
    AKEYCODE_TCL_WIDGET                 = 4011,  
    AKEYCODE_TCL_VGR_LEFT               = 4012,  
    AKEYCODE_TCL_VGR_RIGHT              = 4013,  
    AKEYCODE_TCL_VGR_TAP                = 4014,  
    AKEYCODE_TCL_VGR_WAVE               = 4015,  
    AKEYCODE_TCL_VGR_WAVE_LEFT          = 4016,  
    AKEYCODE_TCL_VGR_WAVE_RIGHT         = 4017,  
    AKEYCODE_TCL_VGR_ACTIVE             = 4018,  
    AKEYCODE_TCL_VGR_DEACTIVE           = 4019,  
    AKEYCODE_TCL_BODY_SENSOR            = 4020,  
    AKEYCODE_TCL_CIRCLE_CLOCKWISE       = 4021,  
    AKEYCODE_TCL_CIRCLE_CTR_CLOCKWISE   = 4022,  
    AKEYCODE_TCL_GESTURE_X              = 4023,  
    AKEYCODE_TCL_GESTURE_ALPHA          = 4024,  
    AKEYCODE_TCL_GESTURE_MUTE           = 4025,  
    AKEYCODE_TCL_UP                     = 4026,  
    AKEYCODE_TCL_DOWN                   = 4027,  
    AKEYCODE_TCL_LEFT                   = 4028,  
    AKEYCODE_TCL_RIGHT                  = 4029,  
    AKEYCODE_TCL_UP_LEFT                = 4030,  
    AKEYCODE_TCL_UP_RIGHT               = 4031,  
    AKEYCODE_TCL_DOWN_LEFT              = 4032,  
    AKEYCODE_TCL_DOWN_RIGHT             = 4033,  
    // Changhong section, range 4101-4200  
    AKEYCODE_CHANGHONGIR_MUTE           = 4101,  
    AKEYCODE_CHANGHONGIR_INPUT          = 4102,  
    AKEYCODE_CHANGHONGIR_DEL            = 4103,  
    AKEYCODE_CHANGHONGIR_MENU           = 4104,  
    AKEYCODE_CHANGHONGIR_CORN           = 4105,  
    AKEYCODE_CHANGHONGIR_OK             = 4106,  
    AKEYCODE_CHANGHONGIR_FLCK_FU        = 4107,  
    AKEYCODE_CHANGHONGIR_FLCK_FD        = 4108,  
    AKEYCODE_CHANGHONGIR_FLCK_FL        = 4109,  
    AKEYCODE_CHANGHONGIR_FLCK_FR        = 4110,  
    AKEYCODE_CHANGHONGIR_FLCK_SU        = 4111,  
    AKEYCODE_CHANGHONGIR_FLCK_SD        = 4112,  
    AKEYCODE_CHANGHONGIR_FLCK_SL        = 4113,  
    AKEYCODE_CHANGHONGIR_FLCK_SR        = 4114,  
    AKEYCODE_CHANGHONGIR_PINCH          = 4115,  
    AKEYCODE_CHANGHONGIR_SPREAD         = 4116,  
    AKEYCODE_CHANGHONGIR_VOICE          = 4117,  
    AKEYCODE_CHANGHONGIR_HAND           = 4118,  
    AKEYCODE_CHANGHONGIR_3D             = 4119,  
    AKEYCODE_CHANGHONGIR_HELP           = 4120,  
    AKEYCODE_CHANGHONGIR_APP            = 4121,  
    AKEYCODE_CHANGHONGIR_MOUSE          = 4122,  
    AKEYCODE_CHANGHONGIR_EPG            = 4123,  
    AKEYCODE_CHANGHONGIR_HOME           = 4124,  
    AKEYCODE_CHANGHONGIR_SETTINGS       = 4125,  
    // Hisense section, range 4201-4300  
    AKEYCODE_HISENSE_G_SENSOR           = 4201,  
    AKEYCODE_HISENSE_LOW_BATTERY        = 4202,  
    AKEYCODE_HISENSE_SLIDEUP            = 4203,  
    AKEYCODE_HISENSE_SLIDEDOWN          = 4204,  
    AKEYCODE_HISENSE_SLIDELEFT          = 4205,  
    AKEYCODE_HISENSE_SLIDERIGHT         = 4206,  
    AKEYCODE_HISENSE_RAPID_SLIDEUP      = 4207,  
    AKEYCODE_HISENSE_RAPID_SLIDEDOWN    = 4208,  
    AKEYCODE_HISENSE_RAPID_SLIDELEFT    = 4209,  
    AKEYCODE_HISENSE_RAPID_SLIDERIGHT   = 4210,  
    AKEYCODE_HISENSE_FAC_NEC_M          = 4211,  
    AKEYCODE_HISENSE_FAC_NEC_IP         = 4212,  
    AKEYCODE_HISENSE_FAC_NEC_SAVE       = 4213,  
    AKEYCODE_HISENSE_FAC_NEC_3D         = 4214,  
    AKEYCODE_HISENSE_FAC_NEC_PC         = 4215,  
    AKEYCODE_HISENSE_FAC_NEC_LOGO       = 4216,  
    AKEYCODE_HISENSE_FAC_NEC_YPBPR      = 4217,  
    AKEYCODE_HISENSE_FAC_NEC_HDMI       = 4218,  
    AKEYCODE_HISENSE_FAC_NEC_F1         = 4219,  
    AKEYCODE_HISENSE_FAC_NEC_F2         = 4220,  
    AKEYCODE_HISENSE_FAC_NEC_F3         = 4221,  
    AKEYCODE_HISENSE_FAC_NEC_F4         = 4222,  
    AKEYCODE_HISENSE_FAC_NEC_F5         = 4223,  
    AKEYCODE_HISENSE_FAC_NEC_F6         = 4224,  
    AKEYCODE_HISENSE_FAC_NEC_F7         = 4225,  
    AKEYCODE_HISENSE_FAC_NEC_OK         = 4226,  
    AKEYCODE_HISENSE_FAC_NEC_MAC        = 4227,  
    AKEYCODE_HISENSE_FAC_NEC_AV         = 4228,  
    AKEYCODE_HISENSE_FAC_NEC_PATTERN    = 4229,  
    AKEYCODE_HISENSE_FAC_NEC_AGING      = 4230,  
    AKEYCODE_HISENSE_FAC_NEC_BALANCE    = 4231,  
    AKEYCODE_HISENSE_FAC_NEC_ADC        = 4232,  
    AKEYCODE_HISENSE_FAC_NEC_RDRV_INCREASE = 4233,  
    AKEYCODE_HISENSE_FAC_NEC_RDRV_DECREASE = 4234,  
    AKEYCODE_HISENSE_FAC_NEC_GDRV_INCREASE = 4235,  
    AKEYCODE_HISENSE_FAC_NEC_GDRV_DECREASE = 4236,  
    AKEYCODE_HISENSE_FAC_NEC_BDRV_INCREASE = 4237,  
    AKEYCODE_HISENSE_FAC_NEC_BDRV_DECREASE = 4238,  
    AKEYCODE_HISENSE_FAC_NEC_RCUT_INCREASE = 4239,  
    AKEYCODE_HISENSE_FAC_NEC_RCUT_DECREASE = 4240,  
    AKEYCODE_HISENSE_FAC_NEC_GCUT_INCREASE = 4241,  
    AKEYCODE_HISENSE_FAC_NEC_GCUT_DECREASE = 4242,  
    AKEYCODE_HISENSE_FAC_NEC_BCUT_INCREASE = 4243,  
    AKEYCODE_HISENSE_FAC_NEC_BCUT_DECREASE = 4244,  
    AKEYCODE_HISENSE_PRODUCT_SCAN_START = 4245,  
    AKEYCODE_HISENSE_PRODUCT_SCAN_OVER  = 4246,  
    AKEYCODE_HISENSE_TEST_BROAD_TV      = 4247,  
    AKEYCODE_HISENSE_TEST_BROAD_DTV     = 4248,  
    AKEYCODE_HISENSE_TEST_BROAD_AV1     = 4249,  
    AKEYCODE_HISENSE_TEST_BROAD_AV2     = 4250,  
    AKEYCODE_HISENSE_TEST_BROAD_AV3     = 4251,  
    AKEYCODE_HISENSE_TEST_BROAD_SVIDEO1 = 4252,  
    AKEYCODE_HISENSE_TEST_BROAD_SVIDEO2 = 4253,  
    AKEYCODE_HISENSE_TEST_BROAD_SVIDEO3 = 4254,  
    AKEYCODE_HISENSE_TEST_BROAD_SCART1  = 4255,  
    AKEYCODE_HISENSE_TEST_BROAD_SCART2  = 4256,  
    AKEYCODE_HISENSE_TEST_BROAD_SCART3  = 4257,  
    AKEYCODE_HISENSE_TEST_BOARD_YPBPR1  = 4258,  
    AKEYCODE_HISENSE_TEST_BOARD_YPBPR2  = 4259,  
    AKEYCODE_HISENSE_TEST_BOARD_YPBPR3  = 4260,  
    AKEYCODE_HISENSE_TEST_BOARD_VGA     = 4261,  
    AKEYCODE_HISENSE_TEST_BOARD_HDMI1   = 4262,  
    AKEYCODE_HISENSE_TEST_BOARD_HDMI2   = 4263,  
    AKEYCODE_HISENSE_TEST_BOARD_HDMI3   = 4264,  
    AKEYCODE_HISENSE_TEST_BOARD_HDMI4   = 4265,  
    AKEYCODE_HISENSE_TEST_BOARD_HDMI5   = 4266,  
    AKEYCODE_HISENSE_TEST_BOARD_DMP     = 4267,  
    AKEYCODE_HISENSE_TEST_BOARD_EMP     = 4268,  
    AKEYCODE_HISENSE_TEST_BOARD_AUTOCOLOR = 4269,  
    AKEYCODE_HISENSE_TEST_BOARD_SAVE    = 4270,  
    AKEYCODE_HISENSE_TEST_BOARD_TELITEXT = 4271,  
    AKEYCODE_HISENSE_TEST_BOARD_SAPL    = 4272,  
    AKEYCODE_HISENSE_TEST_BOARD_VCHIP   = 4273,  
    AKEYCODE_HISENSE_TEST_BOARD_CCD     = 4274,  
    AKEYCODE_HISENSE_TEST_BOARD_BTSC    = 4275,  
    AKEYCODE_HISENSE_TEST_BOARD_FAC_OK  = 4276,  
    // MStar Android Patch End  

    // NOTE: If you add a new keycode here you must also add it to several other files.  
    //       Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.  
};  

#ifdef __cplusplus  
}  
#endif  

#endif // _ANDROID_KEYCODES_H  
</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层的键值处理函数中,捕获按键,并进行相应处理。

In the input system of the framework layer, add the capture of wifi keys.
The added file is: frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
The specific method added: In the interceptKeyBeforeQueueing() function of PhoneWindowManager.java, do not confuse the key value, as for how to deal with it Execute your business deal too.

   在这里再总结下我对Android键值处理的理解,我的理解:看了一下key character map的处理,是通过读取kl文件然后使用驱动程序提供的ioctl函数去修改来自输入设备的扫描码和系统预定义的keycode的映射关系。 这样的话,对于硬件扫描码,只需要修改这个kl文件。上层得到的都是系统预定义的keycode。

Important addition:
  Mapping relationship:
The ir hardware scan code is mapped to a key value defined in kernel/include/linux/input.h in the driver. But this key value is only used in linux system.
  Android completes the mapping of the linux key value to the key value to be used by the Android system through the device/xxx/xxx.kl ( keylayout ) file in the source directory

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325898372&siteId=291194637