1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "remoting/client/jni/android_keymap.h" 6 7 #include "base/logging.h" 8 9 namespace { 10 11 // These must be defined in the same order as the Android keycodes in 12 // <android/keycodes.h> and 13 // "ui/events/keycodes/keyboard_code_conversion_android.cc" . Some of these 14 // mappings assume a US keyboard layout for now. 15 const uint32 usb_keycodes[] = { 16 0, // UNKNOWN 17 0, // SOFT_LEFT 18 0, // SOFT_RIGHT 19 0, // HOME 20 0, // BACK 21 0, // CALL 22 0, // ENDCALL 23 24 0x070027, // 0 25 0x07001e, // 1 26 0x07001f, // 2 27 0x070020, // 3 28 0x070021, // 4 29 0x070022, // 5 30 0x070023, // 6 31 0x070024, // 7 32 0x070025, // 8 33 0x070026, // 9 34 35 0, // STAR 36 0, // POUND 37 0x070052, // DPAD_UP 38 0x070051, // DPAD_DOWN 39 0x070050, // DPAD_LEFT 40 0x07004f, // DPAD_RIGHT 41 0, // DPAD_CENTER 42 0, // VOLUME_UP 43 0, // VOLUME_DOWN 44 0, // POWER 45 0, // CAMERA 46 0, // CLEAR 47 48 0x070004, // A 49 0x070005, // B 50 0x070006, // C 51 0x070007, // D 52 0x070008, // E 53 0x070009, // F 54 0x07000a, // G 55 0x07000b, // H 56 0x07000c, // I 57 0x07000d, // J 58 0x07000e, // K 59 0x07000f, // L 60 0x070010, // M 61 0x070011, // N 62 0x070012, // O 63 0x070013, // P 64 0x070014, // Q 65 0x070015, // R 66 0x070016, // S 67 0x070017, // T 68 0x070018, // U 69 0x070019, // V 70 0x07001a, // W 71 0x07001b, // X 72 0x07001c, // Y 73 0x07001d, // Z 74 75 0x070036, // COMMA 76 0x070037, // PERIOD 77 78 0x0700e2, // ALT_LEFT 79 0x0700e6, // ALT_RIGHT 80 0x0700e1, // SHIFT_LEFT 81 0x0700e5, // SHIFT_RIGHT 82 83 0x07002b, // TAB 84 0x07002c, // SPACE 85 86 0, // SYM 87 0, // EXPLORER 88 0, // ENVELOPE 89 90 0x070028, // ENTER 91 0x07002a, // DEL (backspace) 92 93 0x070035, // GRAVE (backtick) 94 0x07002d, // MINUS 95 0x07002e, // EQUALS 96 0x07002f, // LEFT_BRACKET 97 0x070030, // RIGHT_BRACKET 98 0x070031, // BACKSLASH 99 0x070033, // SEMICOLON 100 0x070034, // APOSTROPHE 101 0x070038, // SLASH 102 103 0, // AT 104 0, // NUM 105 0, // HEADSETHOOK 106 0, // FOCUS 107 0, // PLUS 108 0, // MENU 109 0, // NOTIFICATION 110 0, // SEARCH 111 0, // MEDIA_PLAY_PAUSE 112 0, // MEDIA_STOP 113 0, // MEDIA_NEXT 114 0, // MEDIA_PREVIOUS 115 0, // MEDIA_REWIND 116 0, // MEDIA_FAST_FORWARD 117 0, // MUTE 118 119 0x07004b, // PAGE_UP 120 0x07004e, // PAGE_DOWN 121 122 0, // PICTSYMBOLS 123 0, // SWITCH_CHARSET 124 0, // BUTTON_A 125 0, // BUTTON_B 126 0, // BUTTON_C 127 0, // BUTTON_X 128 0, // BUTTON_Y 129 0, // BUTTON_Z 130 0, // BUTTON_L1 131 0, // BUTTON_R1 132 0, // BUTTON_L2 133 0, // BUTTON_R2 134 0, // BUTTON_THUMBL 135 0, // BUTTON_THUMBR 136 0, // BUTTON_START 137 0, // BUTTON_SELECT 138 0, // BUTTON_MODE 139 140 0x070029, // ESCAPE 141 0x07004c, // FORWARD_DEL 142 143 0x0700e0, // CTRL_LEFT 144 0x0700e4, // CTRL_RIGHT 145 0, // CAPS_LOCK 146 0, // SCROLL_LOCK 147 0x0700e3, // META_LEFT 148 0x0700e7, // META_RIGHT 149 0, // FUNCTION 150 151 0x070046, // SYSRQ (printscreen) 152 0x070048, // BREAK (pause) 153 0x07004a, // MOVE_HOME (home) 154 0x07004d, // MOVE_END (end) 155 0x070049, // INSERT 156 157 0, // FORWARD 158 0, // MEDIA_PLAY 159 0, // MEDIA_PAUSE 160 0, // MEDIA_CLOSE 161 0, // MEDIA_EJECT 162 0, // MEDIA_RECORD 163 164 0x07003a, // F1 165 0x07003b, // F2 166 0x07003c, // F3 167 0x07003d, // F4 168 0x07003e, // F5 169 0x07003f, // F6 170 0x070040, // F7 171 0x070041, // F8 172 0x070042, // F9 173 0x070043, // F10 174 0x070044, // F11 175 0x070045, // F12 176 177 0, // NUM_LOCK 178 179 0x070062, // NUMPAD_0 180 0x070059, // NUMPAD_1 181 0x07005a, // NUMPAD_2 182 0x07005b, // NUMPAD_3 183 0x07005c, // NUMPAD_4 184 0x07005d, // NUMPAD_5 185 0x07005e, // NUMPAD_6 186 0x07005f, // NUMPAD_7 187 0x070060, // NUMPAD_8 188 0x070061, // NUMPAD_9 189 190 0x070054, // NUMPAD_DIVIDE 191 0x070055, // NUMPAD_MULTIPLY 192 0x070056, // NUMPAD_SUBTRACT 193 0x070057, // NUMPAD_ADD 194 0x070063, // NUMPAD_DOT 195 0x070085, // NUMPAD_COMMA 196 0x070058, // NUMPAD_ENTER 197 0x070067, // NUMPAD_EQUALS 198 0x0700b6, // NUMPAD_LEFT_PAREN 199 0x0700b7, // NUMPAD_RIGHT_PAREN 200 }; 201 202 } // namespace 203 204 namespace remoting { 205 206 uint32 AndroidKeycodeToUsbKeycode(size_t android) { 207 if (android >= sizeof (usb_keycodes) / sizeof (uint32)) { 208 LOG(WARNING) << "Attempted to decode out-of-range Android keycode"; 209 return 0; 210 } 211 212 return usb_keycodes[android]; 213 } 214 215 } // namespace remoting 216