• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
AndroidKeycodeToUsbKeycode(size_t android)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