Home | History | Annotate | Download | only in jni
      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