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 add 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