2 /* ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/
10 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 * for the specific language governing rights and limitations under the
15 * The Original Code is libguac-client-rdp.
17 * The Initial Developer of the Original Code is
19 * Portions created by the Initial Developer are Copyright (C) 2011
20 * the Initial Developer. All Rights Reserved.
25 * Alternatively, the contents of this file may be used under the terms of
26 * either the GNU General Public License Version 2 or later (the "GPL"), or
27 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28 * in which case the provisions of the GPL or the LGPL are applicable instead
29 * of those above. If you wish to allow use of your version of this file only
30 * under the terms of either the GPL or the LGPL, and not to allow others to
31 * use your version of this file under the terms of the MPL, indicate your
32 * decision by deleting the provisions above and replace them with the notice
33 * and other provisions required by the GPL or the LGPL. If you do not delete
34 * the provisions above, a recipient may use your version of this file under
35 * the terms of any one of the MPL, the GPL or the LGPL.
37 * ***** END LICENSE BLOCK ***** */
39 #include <freerdp/input.h>
41 #include "rdp_keymap.h"
43 static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = {
46 { .keysym = 0x0020, .scancode = 0x39 },
49 { .keysym = 0x0021, .scancode = 0x02,
50 .set_keysyms = GUAC_KEYSYMS_SHIFT },
53 { .keysym = 0x0022, .scancode = 0x28,
54 .set_keysyms = GUAC_KEYSYMS_SHIFT },
57 { .keysym = 0x0023, .scancode = 0x04,
58 .set_keysyms = GUAC_KEYSYMS_SHIFT },
61 { .keysym = 0x0024, .scancode = 0x05,
62 .set_keysyms = GUAC_KEYSYMS_SHIFT },
65 { .keysym = 0x0025, .scancode = 0x06,
66 .set_keysyms = GUAC_KEYSYMS_SHIFT },
69 { .keysym = 0x0026, .scancode = 0x08,
70 .set_keysyms = GUAC_KEYSYMS_SHIFT },
73 { .keysym = 0x0027, .scancode = 0x28 },
76 { .keysym = 0x0028, .scancode = 0x0A,
77 .set_keysyms = GUAC_KEYSYMS_SHIFT },
80 { .keysym = 0x0029, .scancode = 0x0B,
81 .set_keysyms = GUAC_KEYSYMS_SHIFT },
84 { .keysym = 0x002a, .scancode = 0x09,
85 .set_keysyms = GUAC_KEYSYMS_SHIFT },
88 { .keysym = 0x002b, .scancode = 0x0D,
89 .set_keysyms = GUAC_KEYSYMS_SHIFT },
92 { .keysym = 0x002c, .scancode = 0x33 },
95 { .keysym = 0x002d, .scancode = 0x0C },
98 { .keysym = 0x002e, .scancode = 0x34 },
101 { .keysym = 0x002f, .scancode = 0x35 },
104 { .keysym = 0x0030, .scancode = 0x0B },
107 { .keysym = 0x0031, .scancode = 0x02 },
110 { .keysym = 0x0032, .scancode = 0x03 },
113 { .keysym = 0x0033, .scancode = 0x04 },
116 { .keysym = 0x0034, .scancode = 0x05 },
119 { .keysym = 0x0035, .scancode = 0x06 },
122 { .keysym = 0x0036, .scancode = 0x07 },
125 { .keysym = 0x0037, .scancode = 0x08 },
128 { .keysym = 0x0038, .scancode = 0x09 },
131 { .keysym = 0x0039, .scancode = 0x0A },
134 { .keysym = 0x003a, .scancode = 0x27,
135 .set_keysyms = GUAC_KEYSYMS_SHIFT },
138 { .keysym = 0x003b, .scancode = 0x27 },
141 { .keysym = 0x003c, .scancode = 0x33,
142 .set_keysyms = GUAC_KEYSYMS_SHIFT },
145 { .keysym = 0x003d, .scancode = 0x0D },
148 { .keysym = 0x003e, .scancode = 0x34,
149 .set_keysyms = GUAC_KEYSYMS_SHIFT },
152 { .keysym = 0x003f, .scancode = 0x35,
153 .set_keysyms = GUAC_KEYSYMS_SHIFT },
156 { .keysym = 0x0040, .scancode = 0x03,
157 .set_keysyms = GUAC_KEYSYMS_SHIFT },
160 { .keysym = 0x0041, .scancode = 0x1E,
161 .set_keysyms = GUAC_KEYSYMS_SHIFT },
164 { .keysym = 0x0042, .scancode = 0x30,
165 .set_keysyms = GUAC_KEYSYMS_SHIFT },
168 { .keysym = 0x0043, .scancode = 0x2E,
169 .set_keysyms = GUAC_KEYSYMS_SHIFT },
172 { .keysym = 0x0044, .scancode = 0x20,
173 .set_keysyms = GUAC_KEYSYMS_SHIFT },
176 { .keysym = 0x0045, .scancode = 0x12,
177 .set_keysyms = GUAC_KEYSYMS_SHIFT },
180 { .keysym = 0x0046, .scancode = 0x21,
181 .set_keysyms = GUAC_KEYSYMS_SHIFT },
184 { .keysym = 0x0047, .scancode = 0x22,
185 .set_keysyms = GUAC_KEYSYMS_SHIFT },
188 { .keysym = 0x0048, .scancode = 0x23,
189 .set_keysyms = GUAC_KEYSYMS_SHIFT },
192 { .keysym = 0x0049, .scancode = 0x17,
193 .set_keysyms = GUAC_KEYSYMS_SHIFT },
196 { .keysym = 0x004a, .scancode = 0x24,
197 .set_keysyms = GUAC_KEYSYMS_SHIFT },
200 { .keysym = 0x004b, .scancode = 0x25,
201 .set_keysyms = GUAC_KEYSYMS_SHIFT },
204 { .keysym = 0x004c, .scancode = 0x26,
205 .set_keysyms = GUAC_KEYSYMS_SHIFT },
208 { .keysym = 0x004d, .scancode = 0x32,
209 .set_keysyms = GUAC_KEYSYMS_SHIFT },
212 { .keysym = 0x004e, .scancode = 0x31,
213 .set_keysyms = GUAC_KEYSYMS_SHIFT },
216 { .keysym = 0x004f, .scancode = 0x18,
217 .set_keysyms = GUAC_KEYSYMS_SHIFT },
220 { .keysym = 0x0050, .scancode = 0x19,
221 .set_keysyms = GUAC_KEYSYMS_SHIFT },
224 { .keysym = 0x0051, .scancode = 0x10,
225 .set_keysyms = GUAC_KEYSYMS_SHIFT },
228 { .keysym = 0x0052, .scancode = 0x13,
229 .set_keysyms = GUAC_KEYSYMS_SHIFT },
232 { .keysym = 0x0053, .scancode = 0x1F,
233 .set_keysyms = GUAC_KEYSYMS_SHIFT },
236 { .keysym = 0x0054, .scancode = 0x14,
237 .set_keysyms = GUAC_KEYSYMS_SHIFT },
240 { .keysym = 0x0055, .scancode = 0x16,
241 .set_keysyms = GUAC_KEYSYMS_SHIFT },
244 { .keysym = 0x0056, .scancode = 0x2F,
245 .set_keysyms = GUAC_KEYSYMS_SHIFT },
248 { .keysym = 0x0057, .scancode = 0x11,
249 .set_keysyms = GUAC_KEYSYMS_SHIFT },
252 { .keysym = 0x0058, .scancode = 0x2D,
253 .set_keysyms = GUAC_KEYSYMS_SHIFT },
256 { .keysym = 0x0059, .scancode = 0x15,
257 .set_keysyms = GUAC_KEYSYMS_SHIFT },
260 { .keysym = 0x005a, .scancode = 0x2C,
261 .set_keysyms = GUAC_KEYSYMS_SHIFT },
264 { .keysym = 0x005b, .scancode = 0x1A },
267 { .keysym = 0x005c, .scancode = 0x2B },
270 { .keysym = 0x005d, .scancode = 0x1B },
273 { .keysym = 0x005e, .scancode = 0x29,
274 .set_keysyms = GUAC_KEYSYMS_SHIFT },
277 { .keysym = 0x005f, .scancode = 0x0C,
278 .set_keysyms = GUAC_KEYSYMS_SHIFT },
281 { .keysym = 0x0060, .scancode = 0x29 },
284 { .keysym = 0x0061, .scancode = 0x1E },
287 { .keysym = 0x0062, .scancode = 0x30 },
290 { .keysym = 0x0063, .scancode = 0x2E },
293 { .keysym = 0x0064, .scancode = 0x20 },
296 { .keysym = 0x0065, .scancode = 0x12 },
299 { .keysym = 0x0066, .scancode = 0x21 },
302 { .keysym = 0x0067, .scancode = 0x22 },
305 { .keysym = 0x0068, .scancode = 0x23 },
308 { .keysym = 0x0069, .scancode = 0x17 },
311 { .keysym = 0x006a, .scancode = 0x24 },
314 { .keysym = 0x006b, .scancode = 0x25 },
317 { .keysym = 0x006c, .scancode = 0x26 },
320 { .keysym = 0x006d, .scancode = 0x32 },
323 { .keysym = 0x006e, .scancode = 0x31 },
326 { .keysym = 0x006f, .scancode = 0x18 },
329 { .keysym = 0x0070, .scancode = 0x19 },
332 { .keysym = 0x0071, .scancode = 0x10 },
335 { .keysym = 0x0072, .scancode = 0x13 },
338 { .keysym = 0x0073, .scancode = 0x1F },
341 { .keysym = 0x0074, .scancode = 0x14 },
344 { .keysym = 0x0075, .scancode = 0x16 },
347 { .keysym = 0x0076, .scancode = 0x2F },
350 { .keysym = 0x0077, .scancode = 0x11 },
353 { .keysym = 0x0078, .scancode = 0x2D },
356 { .keysym = 0x0079, .scancode = 0x15 },
359 { .keysym = 0x007a, .scancode = 0x2C },
362 { .keysym = 0x007b, .scancode = 0x1A,
363 .set_keysyms = GUAC_KEYSYMS_SHIFT },
366 { .keysym = 0x007c, .scancode = 0x2B,
367 .set_keysyms = GUAC_KEYSYMS_SHIFT },
370 { .keysym = 0x007d, .scancode = 0x1B,
371 .set_keysyms = GUAC_KEYSYMS_SHIFT },
374 { .keysym = 0x007e, .scancode = 0x29,
375 .set_keysyms = GUAC_KEYSYMS_SHIFT },
381 const guac_rdp_keymap guac_rdp_keymap_en_us = {
383 .name = "en-us-qwerty",
385 .parent = &guac_rdp_keymap_base,
386 .mapping = __guac_rdp_keymap_mapping