TYPE3
[iec.git] / src / type3_AndroidCloud / anbox-master / src / anbox / platform / sdl / keycode_converter.cpp
1 /*
2  * Copyright (C) 2016 Simon Fels <morphis@gravedo.de>
3  *
4  * This program is free software: you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License version 3, as published
6  * by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranties of
10  * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11  * PURPOSE.  See the GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License along
14  * with this program.  If not, see <http://www.gnu.org/licenses/>.
15  *
16  */
17 #pragma GCC diagnostic push
18 #pragma GCC diagnostic ignored "-Wswitch-default"
19 #include "anbox/platform/sdl/keycode_converter.h"
20 #pragma GCC diagnostic pop
21
22 #include <linux/input.h>
23
24 namespace anbox {
25 namespace platform {
26 namespace sdl {
27 std::uint16_t KeycodeConverter::convert(const SDL_Scancode &scan_code) {
28   for (std::uint16_t n = 0; n < code_map.size(); n++) {
29     if (code_map[n] == scan_code) return n;
30   }
31   return KEY_RESERVED;
32 }
33
34 const std::array<SDL_Scancode, 249> KeycodeConverter::code_map = {{
35     SDL_SCANCODE_UNKNOWN,        /*  KEY_RESERVED        0 */
36     SDL_SCANCODE_ESCAPE,         /*  KEY_ESC         1 */
37     SDL_SCANCODE_1,              /*  KEY_1           2 */
38     SDL_SCANCODE_2,              /*  KEY_2           3 */
39     SDL_SCANCODE_3,              /*  KEY_3           4 */
40     SDL_SCANCODE_4,              /*  KEY_4           5 */
41     SDL_SCANCODE_5,              /*  KEY_5           6 */
42     SDL_SCANCODE_6,              /*  KEY_6           7 */
43     SDL_SCANCODE_7,              /*  KEY_7           8 */
44     SDL_SCANCODE_8,              /*  KEY_8           9 */
45     SDL_SCANCODE_9,              /*  KEY_9           10 */
46     SDL_SCANCODE_0,              /*  KEY_0           11 */
47     SDL_SCANCODE_MINUS,          /*  KEY_MINUS       12 */
48     SDL_SCANCODE_EQUALS,         /*  KEY_EQUAL       13 */
49     SDL_SCANCODE_BACKSPACE,      /*  KEY_BACKSPACE       14 */
50     SDL_SCANCODE_TAB,            /*  KEY_TAB         15 */
51     SDL_SCANCODE_Q,              /*  KEY_Q           16 */
52     SDL_SCANCODE_W,              /*  KEY_W           17 */
53     SDL_SCANCODE_E,              /*  KEY_E           18 */
54     SDL_SCANCODE_R,              /*  KEY_R           19 */
55     SDL_SCANCODE_T,              /*  KEY_T           20 */
56     SDL_SCANCODE_Y,              /*  KEY_Y           21 */
57     SDL_SCANCODE_U,              /*  KEY_U           22 */
58     SDL_SCANCODE_I,              /*  KEY_I           23 */
59     SDL_SCANCODE_O,              /*  KEY_O           24 */
60     SDL_SCANCODE_P,              /*  KEY_P           25 */
61     SDL_SCANCODE_LEFTBRACKET,    /*  KEY_LEFTBRACE       26 */
62     SDL_SCANCODE_RIGHTBRACKET,   /*  KEY_RIGHTBRACE      27 */
63     SDL_SCANCODE_RETURN,         /*  KEY_ENTER       28 */
64     SDL_SCANCODE_LCTRL,          /*  KEY_LEFTCTRL        29 */
65     SDL_SCANCODE_A,              /*  KEY_A           30 */
66     SDL_SCANCODE_S,              /*  KEY_S           31 */
67     SDL_SCANCODE_D,              /*  KEY_D           32 */
68     SDL_SCANCODE_F,              /*  KEY_F           33 */
69     SDL_SCANCODE_G,              /*  KEY_G           34 */
70     SDL_SCANCODE_H,              /*  KEY_H           35 */
71     SDL_SCANCODE_J,              /*  KEY_J           36 */
72     SDL_SCANCODE_K,              /*  KEY_K           37 */
73     SDL_SCANCODE_L,              /*  KEY_L           38 */
74     SDL_SCANCODE_SEMICOLON,      /*  KEY_SEMICOLON       39 */
75     SDL_SCANCODE_APOSTROPHE,     /*  KEY_APOSTROPHE      40 */
76     SDL_SCANCODE_GRAVE,          /*  KEY_GRAVE       41 */
77     SDL_SCANCODE_LSHIFT,         /*  KEY_LEFTSHIFT       42 */
78     SDL_SCANCODE_BACKSLASH,      /*  KEY_BACKSLASH       43 */
79     SDL_SCANCODE_Z,              /*  KEY_Z           44 */
80     SDL_SCANCODE_X,              /*  KEY_X           45 */
81     SDL_SCANCODE_C,              /*  KEY_C           46 */
82     SDL_SCANCODE_V,              /*  KEY_V           47 */
83     SDL_SCANCODE_B,              /*  KEY_B           48 */
84     SDL_SCANCODE_N,              /*  KEY_N           49 */
85     SDL_SCANCODE_M,              /*  KEY_M           50 */
86     SDL_SCANCODE_COMMA,          /*  KEY_COMMA       51 */
87     SDL_SCANCODE_PERIOD,         /*  KEY_DOT         52 */
88     SDL_SCANCODE_SLASH,          /*  KEY_SLASH       53 */
89     SDL_SCANCODE_RSHIFT,         /*  KEY_RIGHTSHIFT      54 */
90     SDL_SCANCODE_KP_MULTIPLY,    /*  KEY_KPASTERISK      55 */
91     SDL_SCANCODE_LALT,           /*  KEY_LEFTALT     56 */
92     SDL_SCANCODE_SPACE,          /*  KEY_SPACE       57 */
93     SDL_SCANCODE_CAPSLOCK,       /*  KEY_CAPSLOCK        58 */
94     SDL_SCANCODE_F1,             /*  KEY_F1          59 */
95     SDL_SCANCODE_F2,             /*  KEY_F2          60 */
96     SDL_SCANCODE_F3,             /*  KEY_F3          61 */
97     SDL_SCANCODE_F4,             /*  KEY_F4          62 */
98     SDL_SCANCODE_F5,             /*  KEY_F5          63 */
99     SDL_SCANCODE_F6,             /*  KEY_F6          64 */
100     SDL_SCANCODE_F7,             /*  KEY_F7          65 */
101     SDL_SCANCODE_F8,             /*  KEY_F8          66 */
102     SDL_SCANCODE_F9,             /*  KEY_F9          67 */
103     SDL_SCANCODE_F10,            /*  KEY_F10         68 */
104     SDL_SCANCODE_NUMLOCKCLEAR,   /*  KEY_NUMLOCK     69 */
105     SDL_SCANCODE_SCROLLLOCK,     /*  KEY_SCROLLLOCK      70 */
106     SDL_SCANCODE_KP_7,           /*  KEY_KP7         71 */
107     SDL_SCANCODE_KP_8,           /*  KEY_KP8         72 */
108     SDL_SCANCODE_KP_9,           /*  KEY_KP9         73 */
109     SDL_SCANCODE_KP_MINUS,       /*  KEY_KPMINUS     74 */
110     SDL_SCANCODE_KP_4,           /*  KEY_KP4         75 */
111     SDL_SCANCODE_KP_5,           /*  KEY_KP5         76 */
112     SDL_SCANCODE_KP_6,           /*  KEY_KP6         77 */
113     SDL_SCANCODE_KP_PLUS,        /*  KEY_KPPLUS      78 */
114     SDL_SCANCODE_KP_1,           /*  KEY_KP1         79 */
115     SDL_SCANCODE_KP_2,           /*  KEY_KP2         80 */
116     SDL_SCANCODE_KP_3,           /*  KEY_KP3         81 */
117     SDL_SCANCODE_KP_0,           /*  KEY_KP0         82 */
118     SDL_SCANCODE_KP_PERIOD,      /*  KEY_KPDOT       83 */
119     SDL_SCANCODE_UNKNOWN,        /*  84 */
120     SDL_SCANCODE_LANG5,          /*  KEY_ZENKAKUHANKAKU  85 */
121     SDL_SCANCODE_UNKNOWN,        /*  KEY_102ND       86 */
122     SDL_SCANCODE_F11,            /*  KEY_F11         87 */
123     SDL_SCANCODE_F12,            /*  KEY_F12         88 */
124     SDL_SCANCODE_UNKNOWN,        /*  KEY_RO          89 */
125     SDL_SCANCODE_LANG3,          /*  KEY_KATAKANA        90 */
126     SDL_SCANCODE_LANG4,          /*  KEY_HIRAGANA        91 */
127     SDL_SCANCODE_UNKNOWN,        /*  KEY_HENKAN      92 */
128     SDL_SCANCODE_LANG3,          /*  KEY_KATAKANAHIRAGANA    93 */
129     SDL_SCANCODE_UNKNOWN,        /*  KEY_MUHENKAN        94 */
130     SDL_SCANCODE_KP_COMMA,       /*  KEY_KPJPCOMMA       95 */
131     SDL_SCANCODE_KP_ENTER,       /*  KEY_KPENTER     96 */
132     SDL_SCANCODE_RCTRL,          /*  KEY_RIGHTCTRL       97 */
133     SDL_SCANCODE_KP_DIVIDE,      /*  KEY_KPSLASH     98 */
134     SDL_SCANCODE_SYSREQ,         /*  KEY_SYSRQ       99 */
135     SDL_SCANCODE_RALT,           /*  KEY_RIGHTALT        100 */
136     SDL_SCANCODE_UNKNOWN,        /*  KEY_LINEFEED        101 */
137     SDL_SCANCODE_HOME,           /*  KEY_HOME        102 */
138     SDL_SCANCODE_UP,             /*  KEY_UP          103 */
139     SDL_SCANCODE_PAGEUP,         /*  KEY_PAGEUP      104 */
140     SDL_SCANCODE_LEFT,           /*  KEY_LEFT        105 */
141     SDL_SCANCODE_RIGHT,          /*  KEY_RIGHT       106 */
142     SDL_SCANCODE_END,            /*  KEY_END         107 */
143     SDL_SCANCODE_DOWN,           /*  KEY_DOWN        108 */
144     SDL_SCANCODE_PAGEDOWN,       /*  KEY_PAGEDOWN        109 */
145     SDL_SCANCODE_INSERT,         /*  KEY_INSERT      110 */
146     SDL_SCANCODE_DELETE,         /*  KEY_DELETE      111 */
147     SDL_SCANCODE_UNKNOWN,        /*  KEY_MACRO       112 */
148     SDL_SCANCODE_MUTE,           /*  KEY_MUTE        113 */
149     SDL_SCANCODE_VOLUMEDOWN,     /*  KEY_VOLUMEDOWN      114 */
150     SDL_SCANCODE_VOLUMEUP,       /*  KEY_VOLUMEUP        115 */
151     SDL_SCANCODE_POWER,          /*  KEY_POWER       116 SC System Power Down */
152     SDL_SCANCODE_KP_EQUALS,      /*  KEY_KPEQUAL     117 */
153     SDL_SCANCODE_KP_MINUS,       /*  KEY_KPPLUSMINUS     118 */
154     SDL_SCANCODE_PAUSE,          /*  KEY_PAUSE       119 */
155     SDL_SCANCODE_UNKNOWN,        /*  KEY_SCALE       120 AL Compiz Scale (Expose) */
156     SDL_SCANCODE_KP_COMMA,       /*  KEY_KPCOMMA     121 */
157     SDL_SCANCODE_LANG1,          /*  KEY_HANGEUL,KEY_HANGUEL 122 */
158     SDL_SCANCODE_LANG2,          /*  KEY_HANJA       123 */
159     SDL_SCANCODE_INTERNATIONAL3, /*  KEY_YEN         124 */
160     SDL_SCANCODE_LGUI,           /*  KEY_LEFTMETA        125 */
161     SDL_SCANCODE_RGUI,           /*  KEY_RIGHTMETA       126 */
162     SDL_SCANCODE_APPLICATION,    /*  KEY_COMPOSE     127 */
163     SDL_SCANCODE_STOP,           /*  KEY_STOP        128 AC Stop */
164     SDL_SCANCODE_AGAIN,          /*  KEY_AGAIN       129 */
165     SDL_SCANCODE_UNKNOWN,        /*  KEY_PROPS       130 AC Properties */
166     SDL_SCANCODE_UNDO,           /*  KEY_UNDO        131 AC Undo */
167     SDL_SCANCODE_UNKNOWN,        /*  KEY_FRONT       132 */
168     SDL_SCANCODE_COPY,           /*  KEY_COPY        133 AC Copy */
169     SDL_SCANCODE_UNKNOWN,        /*  KEY_OPEN        134 AC Open */
170     SDL_SCANCODE_PASTE,          /*  KEY_PASTE       135 AC Paste */
171     SDL_SCANCODE_FIND,           /*  KEY_FIND        136 AC Search */
172     SDL_SCANCODE_CUT,            /*  KEY_CUT         137 AC Cut */
173     SDL_SCANCODE_HELP,           /*  KEY_HELP        138 AL Integrated Help Center */
174     SDL_SCANCODE_MENU,           /*  KEY_MENU        139 Menu (show menu) */
175     SDL_SCANCODE_CALCULATOR,     /*  KEY_CALC        140 AL Calculator */
176     SDL_SCANCODE_UNKNOWN,        /*  KEY_SETUP       141 */
177     SDL_SCANCODE_SLEEP,          /*  KEY_SLEEP       142 SC System Sleep */
178     SDL_SCANCODE_UNKNOWN,        /*  KEY_WAKEUP      143 System Wake Up */
179     SDL_SCANCODE_UNKNOWN,        /*  KEY_FILE        144 AL Local Machine Browser */
180     SDL_SCANCODE_UNKNOWN,        /*  KEY_SENDFILE        145 */
181     SDL_SCANCODE_UNKNOWN,        /*  KEY_DELETEFILE      146 */
182     SDL_SCANCODE_UNKNOWN,        /*  KEY_XFER        147 */
183     SDL_SCANCODE_APP1,           /*  KEY_PROG1       148 */
184     SDL_SCANCODE_APP1,           /*  KEY_PROG2       149 */
185     SDL_SCANCODE_WWW,            /*  KEY_WWW         150 AL Internet Browser */
186     SDL_SCANCODE_UNKNOWN,        /*  KEY_MSDOS       151 */
187     SDL_SCANCODE_UNKNOWN,        /*  KEY_COFFEE,KEY_SCREENLOCK      152 AL Terminal
188                                 Lock/Screensaver */
189     SDL_SCANCODE_UNKNOWN,        /*  KEY_DIRECTION       153 */
190     SDL_SCANCODE_UNKNOWN,        /*  KEY_CYCLEWINDOWS    154 */
191     SDL_SCANCODE_MAIL,           /*  KEY_MAIL        155 */
192     SDL_SCANCODE_AC_BOOKMARKS,   /*  KEY_BOOKMARKS       156 AC Bookmarks */
193     SDL_SCANCODE_COMPUTER,       /*  KEY_COMPUTER        157 */
194     SDL_SCANCODE_AC_BACK,        /*  KEY_BACK        158 AC Back */
195     SDL_SCANCODE_AC_FORWARD,     /*  KEY_FORWARD     159 AC Forward */
196     SDL_SCANCODE_UNKNOWN,        /*  KEY_CLOSECD     160 */
197     SDL_SCANCODE_EJECT,          /*  KEY_EJECTCD     161 */
198     SDL_SCANCODE_UNKNOWN,        /*  KEY_EJECTCLOSECD    162 */
199     SDL_SCANCODE_AUDIONEXT,      /*  KEY_NEXTSONG        163 */
200     SDL_SCANCODE_AUDIOPLAY,      /*  KEY_PLAYPAUSE       164 */
201     SDL_SCANCODE_AUDIOPREV,      /*  KEY_PREVIOUSSONG    165 */
202     SDL_SCANCODE_AUDIOSTOP,      /*  KEY_STOPCD      166 */
203     SDL_SCANCODE_UNKNOWN,        /*  KEY_RECORD      167 */
204     SDL_SCANCODE_UNKNOWN,        /*  KEY_REWIND      168 */
205     SDL_SCANCODE_UNKNOWN,        /*  KEY_PHONE       169 Media Select Telephone */
206     SDL_SCANCODE_UNKNOWN,        /*  KEY_ISO         170 */
207     SDL_SCANCODE_UNKNOWN,        /*  KEY_CONFIG      171 AL Consumer Control
208                                   Configuration */
209     SDL_SCANCODE_AC_HOME,        /*  KEY_HOMEPAGE        172 AC Home */
210     SDL_SCANCODE_AC_REFRESH,     /*  KEY_REFRESH     173 AC Refresh */
211     SDL_SCANCODE_UNKNOWN,        /*  KEY_EXIT        174 AC Exit */
212     SDL_SCANCODE_UNKNOWN,        /*  KEY_MOVE        175 */
213     SDL_SCANCODE_UNKNOWN,        /*  KEY_EDIT        176 */
214     SDL_SCANCODE_UNKNOWN,        /*  KEY_SCROLLUP        177 */
215     SDL_SCANCODE_UNKNOWN,        /*  KEY_SCROLLDOWN      178 */
216     SDL_SCANCODE_KP_LEFTPAREN,   /*  KEY_KPLEFTPAREN     179 */
217     SDL_SCANCODE_KP_RIGHTPAREN,  /*  KEY_KPRIGHTPAREN    180 */
218     SDL_SCANCODE_UNKNOWN,        /*  KEY_NEW         181 AC New */
219     SDL_SCANCODE_AGAIN,          /*  KEY_REDO        182 AC Redo/Repeat */
220     SDL_SCANCODE_F13,            /*  KEY_F13         183 */
221     SDL_SCANCODE_F14,            /*  KEY_F14         184 */
222     SDL_SCANCODE_F15,            /*  KEY_F15         185 */
223     SDL_SCANCODE_F16,            /*  KEY_F16         186 */
224     SDL_SCANCODE_F17,            /*  KEY_F17         187 */
225     SDL_SCANCODE_F18,            /*  KEY_F18         188 */
226     SDL_SCANCODE_F19,            /*  KEY_F19         189 */
227     SDL_SCANCODE_F20,            /*  KEY_F20         190 */
228     SDL_SCANCODE_F21,            /*  KEY_F21         191 */
229     SDL_SCANCODE_F22,            /*  KEY_F22         192 */
230     SDL_SCANCODE_F23,            /*  KEY_F23         193 */
231     SDL_SCANCODE_F24,            /*  KEY_F24         194 */
232     SDL_SCANCODE_UNKNOWN,        /*  195 */
233     SDL_SCANCODE_UNKNOWN,        /*  196 */
234     SDL_SCANCODE_UNKNOWN,        /*  197 */
235     SDL_SCANCODE_UNKNOWN,        /*  198 */
236     SDL_SCANCODE_UNKNOWN,        /*  199 */
237     SDL_SCANCODE_UNKNOWN,        /*  KEY_PLAYCD      200 */
238     SDL_SCANCODE_UNKNOWN,        /*  KEY_PAUSECD     201 */
239     SDL_SCANCODE_UNKNOWN,        /*  KEY_PROG3       202 */
240     SDL_SCANCODE_UNKNOWN,        /*  KEY_PROG4       203 */
241     SDL_SCANCODE_UNKNOWN,        /*  KEY_DASHBOARD       204 AL Dashboard */
242     SDL_SCANCODE_UNKNOWN,        /*  KEY_SUSPEND     205 */
243     SDL_SCANCODE_UNKNOWN,        /*  KEY_CLOSE       206 AC Close */
244     SDL_SCANCODE_UNKNOWN,        /*  KEY_PLAY        207 */
245     SDL_SCANCODE_UNKNOWN,        /*  KEY_FASTFORWARD     208 */
246     SDL_SCANCODE_UNKNOWN,        /*  KEY_BASSBOOST       209 */
247     SDL_SCANCODE_UNKNOWN,        /*  KEY_PRINT       210 AC Print */
248     SDL_SCANCODE_UNKNOWN,        /*  KEY_HP          211 */
249     SDL_SCANCODE_UNKNOWN,        /*  KEY_CAMERA      212 */
250     SDL_SCANCODE_UNKNOWN,        /*  KEY_SOUND       213 */
251     SDL_SCANCODE_UNKNOWN,        /*  KEY_QUESTION        214 */
252     SDL_SCANCODE_UNKNOWN,        /*  KEY_EMAIL       215 */
253     SDL_SCANCODE_UNKNOWN,        /*  KEY_CHAT        216 */
254     SDL_SCANCODE_UNKNOWN,        /*  KEY_SEARCH      217 */
255     SDL_SCANCODE_UNKNOWN,        /*  KEY_CONNECT     218 */
256     SDL_SCANCODE_UNKNOWN,        /*  KEY_FINANCE     219 AL Checkbook/Finance */
257     SDL_SCANCODE_UNKNOWN,        /*  KEY_SPORT       220 */
258     SDL_SCANCODE_UNKNOWN,        /*  KEY_SHOP        221 */
259     SDL_SCANCODE_UNKNOWN,        /*  KEY_ALTERASE        222 */
260     SDL_SCANCODE_UNKNOWN,        /*  KEY_CANCEL      223 AC Cancel */
261     SDL_SCANCODE_UNKNOWN,        /*  KEY_BRIGHTNESSDOWN  224 */
262     SDL_SCANCODE_UNKNOWN,        /*  KEY_BRIGHTNESSUP    225 */
263     SDL_SCANCODE_UNKNOWN,        /*  KEY_MEDIA       226 */
264     SDL_SCANCODE_UNKNOWN,        /*  KEY_SWITCHVIDEOMODE 227 Cycle between available
265                              video outputs (Monitor/LCD/TV-out/etc) */
266     SDL_SCANCODE_UNKNOWN,        /*  KEY_KBDILLUMTOGGLE  228 */
267     SDL_SCANCODE_UNKNOWN,        /*  KEY_KBDILLUMDOWN    229 */
268     SDL_SCANCODE_UNKNOWN,        /*  KEY_KBDILLUMUP      230 */
269     SDL_SCANCODE_UNKNOWN,        /*  KEY_SEND        231 AC Send */
270     SDL_SCANCODE_UNKNOWN,        /*  KEY_REPLY       232 AC Reply */
271     SDL_SCANCODE_UNKNOWN,        /*  KEY_FORWARDMAIL     233 AC Forward Msg */
272     SDL_SCANCODE_UNKNOWN,        /*  KEY_SAVE        234 AC Save */
273     SDL_SCANCODE_UNKNOWN,        /*  KEY_DOCUMENTS       235 */
274     SDL_SCANCODE_UNKNOWN,        /*  KEY_BATTERY     236  */
275     SDL_SCANCODE_UNKNOWN,        /*  KEY_BLUETOOTH       237 */
276     SDL_SCANCODE_UNKNOWN,        /*  KEY_WLAN        238 */
277     SDL_SCANCODE_UNKNOWN,        /*  KEY_UWB         239 */
278     SDL_SCANCODE_UNKNOWN,        /*  KEY_UNKNOWN     240 */
279     SDL_SCANCODE_UNKNOWN,        /*  KEY_VIDEO_NEXT      241 drive next video source */
280     SDL_SCANCODE_UNKNOWN,        /*  KEY_VIDEO_PREV      242 drive previous video
281                              source */
282     SDL_SCANCODE_UNKNOWN,        /*  KEY_BRIGHTNESS_CYCLE    243 brightness up, after
283                              max is min */
284     SDL_SCANCODE_UNKNOWN,        /*  KEY_BRIGHTNESS_ZERO 244 brightness off, use
285                              ambient */
286     SDL_SCANCODE_UNKNOWN,        /*  KEY_DISPLAY_OFF     245 display device to off
287                              state */
288     SDL_SCANCODE_UNKNOWN,        /*  KEY_WIMAX       246 */
289     SDL_SCANCODE_UNKNOWN,        /*  KEY_RFKILL      247 Key that controls all radios
290                              */
291     SDL_SCANCODE_UNKNOWN         /*  KEY_MICMUTE     248 Mute / unmute the microphone */
292 }};
293 } // namespace sdl
294 } // namespace platform
295 } // namespace anbox