// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "remoting/client/jni/android_keymap.h" #include "base/logging.h" namespace { // These must be defined in the same order as the Android keycodes in // <android/keycodes.h> and // "ui/events/keycodes/keyboard_code_conversion_android.cc" . Some of these // mappings assume a US keyboard layout for now. const uint32 usb_keycodes[] = { 0, // UNKNOWN 0, // SOFT_LEFT 0, // SOFT_RIGHT 0, // HOME 0, // BACK 0, // CALL 0, // ENDCALL 0x070027, // 0 0x07001e, // 1 0x07001f, // 2 0x070020, // 3 0x070021, // 4 0x070022, // 5 0x070023, // 6 0x070024, // 7 0x070025, // 8 0x070026, // 9 0, // STAR 0, // POUND 0x070052, // DPAD_UP 0x070051, // DPAD_DOWN 0x070050, // DPAD_LEFT 0x07004f, // DPAD_RIGHT 0, // DPAD_CENTER 0, // VOLUME_UP 0, // VOLUME_DOWN 0, // POWER 0, // CAMERA 0, // CLEAR 0x070004, // A 0x070005, // B 0x070006, // C 0x070007, // D 0x070008, // E 0x070009, // F 0x07000a, // G 0x07000b, // H 0x07000c, // I 0x07000d, // J 0x07000e, // K 0x07000f, // L 0x070010, // M 0x070011, // N 0x070012, // O 0x070013, // P 0x070014, // Q 0x070015, // R 0x070016, // S 0x070017, // T 0x070018, // U 0x070019, // V 0x07001a, // W 0x07001b, // X 0x07001c, // Y 0x07001d, // Z 0x070036, // COMMA 0x070037, // PERIOD 0x0700e2, // ALT_LEFT 0x0700e6, // ALT_RIGHT 0x0700e1, // SHIFT_LEFT 0x0700e5, // SHIFT_RIGHT 0x07002b, // TAB 0x07002c, // SPACE 0, // SYM 0, // EXPLORER 0, // ENVELOPE 0x070028, // ENTER 0x07002a, // DEL (backspace) 0x070035, // GRAVE (backtick) 0x07002d, // MINUS 0x07002e, // EQUALS 0x07002f, // LEFT_BRACKET 0x070030, // RIGHT_BRACKET 0x070031, // BACKSLASH 0x070033, // SEMICOLON 0x070034, // APOSTROPHE 0x070038, // SLASH 0, // AT 0, // NUM 0, // HEADSETHOOK 0, // FOCUS 0, // PLUS 0, // MENU 0, // NOTIFICATION 0, // SEARCH 0, // MEDIA_PLAY_PAUSE 0, // MEDIA_STOP 0, // MEDIA_NEXT 0, // MEDIA_PREVIOUS 0, // MEDIA_REWIND 0, // MEDIA_FAST_FORWARD 0, // MUTE 0x07004b, // PAGE_UP 0x07004e, // PAGE_DOWN 0, // PICTSYMBOLS 0, // SWITCH_CHARSET 0, // BUTTON_A 0, // BUTTON_B 0, // BUTTON_C 0, // BUTTON_X 0, // BUTTON_Y 0, // BUTTON_Z 0, // BUTTON_L1 0, // BUTTON_R1 0, // BUTTON_L2 0, // BUTTON_R2 0, // BUTTON_THUMBL 0, // BUTTON_THUMBR 0, // BUTTON_START 0, // BUTTON_SELECT 0, // BUTTON_MODE 0x070029, // ESCAPE 0x07004c, // FORWARD_DEL 0x0700e0, // CTRL_LEFT 0x0700e4, // CTRL_RIGHT 0, // CAPS_LOCK 0, // SCROLL_LOCK 0x0700e3, // META_LEFT 0x0700e7, // META_RIGHT 0, // FUNCTION 0x070046, // SYSRQ (printscreen) 0x070048, // BREAK (pause) 0x07004a, // MOVE_HOME (home) 0x07004d, // MOVE_END (end) 0x070049, // INSERT 0, // FORWARD 0, // MEDIA_PLAY 0, // MEDIA_PAUSE 0, // MEDIA_CLOSE 0, // MEDIA_EJECT 0, // MEDIA_RECORD 0x07003a, // F1 0x07003b, // F2 0x07003c, // F3 0x07003d, // F4 0x07003e, // F5 0x07003f, // F6 0x070040, // F7 0x070041, // F8 0x070042, // F9 0x070043, // F10 0x070044, // F11 0x070045, // F12 0, // NUM_LOCK 0x070062, // NUMPAD_0 0x070059, // NUMPAD_1 0x07005a, // NUMPAD_2 0x07005b, // NUMPAD_3 0x07005c, // NUMPAD_4 0x07005d, // NUMPAD_5 0x07005e, // NUMPAD_6 0x07005f, // NUMPAD_7 0x070060, // NUMPAD_8 0x070061, // NUMPAD_9 0x070054, // NUMPAD_DIVIDE 0x070055, // NUMPAD_MULTIPLY 0x070056, // NUMPAD_SUBTRACT 0x070057, // NUMPAD_ADD 0x070063, // NUMPAD_DOT 0x070085, // NUMPAD_COMMA 0x070058, // NUMPAD_ENTER 0x070067, // NUMPAD_EQUALS 0x0700b6, // NUMPAD_LEFT_PAREN 0x0700b7, // NUMPAD_RIGHT_PAREN }; } // namespace namespace remoting { uint32 AndroidKeycodeToUsbKeycode(size_t android) { if (android >= sizeof (usb_keycodes) / sizeof (uint32)) { LOG(WARNING) << "Attempted to decode out-of-range Android keycode"; return 0; } return usb_keycodes[android]; } } // namespace remoting