1/*
2 * Slightly modified xf86KbdBSD.c which is
3 *
4 * Derived from xf86Kbd.c by S_ren Schmidt (sos@login.dkuug.dk)
5 * which is Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
6 * and from xf86KbdCODrv.c by Holger Veit
7 */
8
9#include <stdint.h>
10
11static uint8_t wsUsbMap[] = {
12 /* 0 */ KEY_NOTUSED,
13 /* 1 */ KEY_NOTUSED,
14 /* 2 */ KEY_NOTUSED,
15 /* 3 */ KEY_NOTUSED,
16 /* 4 */ KEY_A,
17 /* 5 */ KEY_B,
18 /* 6 */ KEY_C,
19 /* 7 */ KEY_D,
20 /* 8 */ KEY_E,
21 /* 9 */ KEY_F,
22 /* 10 */ KEY_G,
23 /* 11 */ KEY_H,
24 /* 12 */ KEY_I,
25 /* 13 */ KEY_J,
26 /* 14 */ KEY_K,
27 /* 15 */ KEY_L,
28 /* 16 */ KEY_M,
29 /* 17 */ KEY_N,
30 /* 18 */ KEY_O,
31 /* 19 */ KEY_P,
32 /* 20 */ KEY_Q,
33 /* 21 */ KEY_R,
34 /* 22 */ KEY_S,
35 /* 23 */ KEY_T,
36 /* 24 */ KEY_U,
37 /* 25 */ KEY_V,
38 /* 26 */ KEY_W,
39 /* 27 */ KEY_X,
40 /* 28 */ KEY_Y,
41 /* 29 */ KEY_Z,
42 /* 30 */ KEY_1, /* 1 !*/
43 /* 31 */ KEY_2, /* 2 @ */
44 /* 32 */ KEY_3, /* 3 # */
45 /* 33 */ KEY_4, /* 4 $ */
46 /* 34 */ KEY_5, /* 5 % */
47 /* 35 */ KEY_6, /* 6 ^ */
48 /* 36 */ KEY_7, /* 7 & */
49 /* 37 */ KEY_8, /* 8 * */
50 /* 38 */ KEY_9, /* 9 ( */
51 /* 39 */ KEY_0, /* 0 ) */
52 /* 40 */ KEY_Enter, /* Return */
53 /* 41 */ KEY_Escape, /* Escape */
54 /* 42 */ KEY_BackSpace, /* Backspace Delete */
55 /* 43 */ KEY_Tab, /* Tab */
56 /* 44 */ KEY_Space, /* Space */
57 /* 45 */ KEY_Minus, /* - _ */
58 /* 46 */ KEY_Equal, /* = + */
59 /* 47 */ KEY_LBrace, /* [ { */
60 /* 48 */ KEY_RBrace, /* ] } */
61 /* 49 */ KEY_BSlash, /* \ | */
62 /* 50 */ KEY_BSlash, /* \ _ # ~ on some keyboards */
63 /* 51 */ KEY_SemiColon, /* ; : */
64 /* 52 */ KEY_Quote, /* ' " */
65 /* 53 */ KEY_Tilde, /* ` ~ */
66 /* 54 */ KEY_Comma, /* , < */
67 /* 55 */ KEY_Period, /* . > */
68 /* 56 */ KEY_Slash, /* / ? */
69 /* 57 */ KEY_CapsLock, /* Caps Lock */
70 /* 58 */ KEY_F1, /* F1 */
71 /* 59 */ KEY_F2, /* F2 */
72 /* 60 */ KEY_F3, /* F3 */
73 /* 61 */ KEY_F4, /* F4 */
74 /* 62 */ KEY_F5, /* F5 */
75 /* 63 */ KEY_F6, /* F6 */
76 /* 64 */ KEY_F7, /* F7 */
77 /* 65 */ KEY_F8, /* F8 */
78 /* 66 */ KEY_F9, /* F9 */
79 /* 67 */ KEY_F10, /* F10 */
80 /* 68 */ KEY_F11, /* F11 */
81 /* 69 */ KEY_F12, /* F12 */
82 /* 70 */ KEY_Print, /* PrintScrn SysReq */
83 /* 71 */ KEY_ScrollLock, /* Scroll Lock */
84 /* 72 */ KEY_Pause, /* Pause Break */
85 /* 73 */ KEY_Insert, /* Insert XXX Help on some Mac Keyboards */
86 /* 74 */ KEY_Home, /* Home */
87 /* 75 */ KEY_PgUp, /* Page Up */
88 /* 76 */ KEY_Delete, /* Delete */
89 /* 77 */ KEY_End, /* End */
90 /* 78 */ KEY_PgDown, /* Page Down */
91 /* 79 */ KEY_Right, /* Right Arrow */
92 /* 80 */ KEY_Left, /* Left Arrow */
93 /* 81 */ KEY_Down, /* Down Arrow */
94 /* 82 */ KEY_Up, /* Up Arrow */
95 /* 83 */ KEY_NumLock, /* Num Lock */
96 /* 84 */ KEY_KP_Divide, /* Keypad / */
97 /* 85 */ KEY_KP_Multiply, /* Keypad * */
98 /* 86 */ KEY_KP_Minus, /* Keypad - */
99 /* 87 */ KEY_KP_Plus, /* Keypad + */
100 /* 88 */ KEY_KP_Enter, /* Keypad Enter */
101 /* 89 */ KEY_KP_1, /* Keypad 1 End */
102 /* 90 */ KEY_KP_2, /* Keypad 2 Down */
103 /* 91 */ KEY_KP_3, /* Keypad 3 Pg Down */
104 /* 92 */ KEY_KP_4, /* Keypad 4 Left */
105 /* 93 */ KEY_KP_5, /* Keypad 5 */
106 /* 94 */ KEY_KP_6, /* Keypad 6 */
107 /* 95 */ KEY_KP_7, /* Keypad 7 Home */
108 /* 96 */ KEY_KP_8, /* Keypad 8 Up */
109 /* 97 */ KEY_KP_9, /* KEypad 9 Pg Up */
110 /* 98 */ KEY_KP_0, /* Keypad 0 Ins */
111 /* 99 */ KEY_KP_Decimal, /* Keypad . Del */
112 /* 100 */ KEY_Less, /* < > on some keyboards */
113 /* 101 */ KEY_Menu, /* Menu */
114 /* 102 */ KEY_Power, /* sleep key on Sun USB */
115 /* 103 */ KEY_KP_Equal, /* Keypad = on Mac keyboards */
116 /* 104 */ KEY_F13,
117 /* 105 */ KEY_F14,
118 /* 106 */ KEY_F15,
119 /* 107 */ KEY_F16,
120 /* 108 */ KEY_NOTUSED,
121 /* 109 */ KEY_Power,
122 /* 110 */ KEY_NOTUSED,
123 /* 111 */ KEY_NOTUSED,
124 /* 112 */ KEY_NOTUSED,
125 /* 113 */ KEY_NOTUSED,
126 /* 114 */ KEY_NOTUSED,
127 /* 115 */ KEY_NOTUSED,
128 /* 116 */ KEY_L7,
129 /* 117 */ KEY_Help,
130 /* 118 */ KEY_L3,
131 /* 119 */ KEY_L5,
132 /* 120 */ KEY_L1,
133 /* 121 */ KEY_L2,
134 /* 122 */ KEY_L4,
135 /* 123 */ KEY_L10,
136 /* 124 */ KEY_L6,
137 /* 125 */ KEY_L8,
138 /* 126 */ KEY_L9,
139 /* 127 */ KEY_Mute,
140 /* 128 */ KEY_AudioRaise,
141 /* 129 */ KEY_AudioLower,
142 /* 130 */ KEY_NOTUSED,
143 /* 131 */ KEY_NOTUSED,
144 /* 132 */ KEY_NOTUSED,
145 /* 133 */ KEY_NOTUSED,
146 /* 134 */ KEY_NOTUSED,
147/*
148 * Special keycodes for Japanese keyboards
149 * Override atKeyname HKTG and BSlash2 code to unique values for JP106 keyboards
150 */
151#undef KEY_HKTG
152#define KEY_HKTG 200 /* Japanese Hiragana Katakana Toggle */
153#undef KEY_BSlash2
154#define KEY_BSlash2 203 /* Japanese '\_' key */
155
156 /* 135 */ KEY_BSlash2, /* Japanese 106 kbd: '\_' */
157 /* 136 */ KEY_HKTG, /* Japanese 106 kbd: Hiragana Katakana toggle */
158 /* 137 */ KEY_Yen, /* Japanese 106 kbd: '\|' */
159 /* 138 */ KEY_XFER, /* Japanese 106 kbd: Henkan */
160 /* 139 */ KEY_NFER, /* Japanese 106 kbd: Muhenkan */
161 /* 140 */ KEY_NOTUSED,
162 /* 141 */ KEY_NOTUSED,
163 /* 142 */ KEY_NOTUSED,
164 /* 143 */ KEY_NOTUSED,
165/*
166 * Special keycodes for Korean keyboards
167 * Define Hangul and Hangul_Hanja unique key codes
168 * These keys also use KANA and EISU on some Macintosh Japanese USB keyboards
169 */
170#define KEY_Hangul 201 /* Also KANA Key on Mac JP USB kbd */
171#define KEY_Hangul_Hanja 202 /* Also EISU Key on Mac JP USB kbd */
172 /* 144 */ KEY_Hangul, /* Korean 106 kbd: Hangul */
173 /* 145 */ KEY_Hangul_Hanja, /* Korean 106 kbd: Hangul Hanja */
174 /* 146 */ KEY_NOTUSED,
175 /* 147 */ KEY_NOTUSED,
176 /* 148 */ KEY_NOTUSED,
177 /* 149 */ KEY_NOTUSED,
178 /* 150 */ KEY_NOTUSED,
179 /* 151 */ KEY_NOTUSED,
180 /* 152 */ KEY_NOTUSED,
181 /* 153 */ KEY_NOTUSED,
182 /* 154 */ KEY_NOTUSED,
183 /* 155 */ KEY_NOTUSED,
184 /* 156 */ KEY_NOTUSED,
185 /* 157 */ KEY_NOTUSED,
186 /* 158 */ KEY_NOTUSED,
187 /* 159 */ KEY_NOTUSED,
188 /* 160 */ KEY_NOTUSED,
189 /* 161 */ KEY_NOTUSED,
190 /* 162 */ KEY_NOTUSED,
191 /* 163 */ KEY_NOTUSED,
192 /* 164 */ KEY_NOTUSED,
193 /* 165 */ KEY_NOTUSED,
194 /* 166 */ KEY_NOTUSED,
195 /* 167 */ KEY_NOTUSED,
196 /* 168 */ KEY_NOTUSED,
197 /* 169 */ KEY_NOTUSED,
198 /* 170 */ KEY_NOTUSED,
199 /* 171 */ KEY_NOTUSED,
200 /* 172 */ KEY_NOTUSED,
201 /* 173 */ KEY_NOTUSED,
202 /* 174 */ KEY_NOTUSED,
203 /* 175 */ KEY_NOTUSED,
204 /* 176 */ KEY_NOTUSED,
205 /* 177 */ KEY_NOTUSED,
206 /* 178 */ KEY_NOTUSED,
207 /* 179 */ KEY_NOTUSED,
208 /* 180 */ KEY_NOTUSED,
209 /* 181 */ KEY_NOTUSED,
210 /* 182 */ KEY_NOTUSED,
211 /* 183 */ KEY_NOTUSED,
212 /* 184 */ KEY_NOTUSED,
213 /* 185 */ KEY_NOTUSED,
214 /* 186 */ KEY_NOTUSED,
215 /* 187 */ KEY_NOTUSED,
216 /* 188 */ KEY_NOTUSED,
217 /* 189 */ KEY_NOTUSED,
218 /* 190 */ KEY_NOTUSED,
219 /* 191 */ KEY_NOTUSED,
220 /* 192 */ KEY_NOTUSED,
221 /* 193 */ KEY_NOTUSED,
222 /* 194 */ KEY_NOTUSED,
223 /* 195 */ KEY_NOTUSED,
224 /* 196 */ KEY_NOTUSED,
225 /* 197 */ KEY_NOTUSED,
226 /* 198 */ KEY_NOTUSED,
227 /* 199 */ KEY_NOTUSED,
228 /* 200 */ KEY_NOTUSED,
229 /* 201 */ KEY_NOTUSED,
230 /* 202 */ KEY_NOTUSED,
231 /* 203 */ KEY_NOTUSED,
232 /* 204 */ KEY_NOTUSED,
233 /* 205 */ KEY_NOTUSED,
234 /* 206 */ KEY_NOTUSED,
235 /* 207 */ KEY_NOTUSED,
236 /* 208 */ KEY_NOTUSED,
237 /* 209 */ KEY_NOTUSED,
238 /* 210 */ KEY_NOTUSED,
239 /* 211 */ KEY_NOTUSED,
240 /* 212 */ KEY_NOTUSED,
241 /* 213 */ KEY_NOTUSED,
242 /* 214 */ KEY_NOTUSED,
243 /* 215 */ KEY_NOTUSED,
244 /* 216 */ KEY_NOTUSED,
245 /* 217 */ KEY_NOTUSED,
246 /* 218 */ KEY_NOTUSED,
247 /* 219 */ KEY_NOTUSED,
248 /* 220 */ KEY_NOTUSED,
249 /* 221 */ KEY_NOTUSED,
250 /* 222 */ KEY_NOTUSED,
251 /* 223 */ KEY_NOTUSED,
252 /* 224 */ KEY_LCtrl, /* Left Control */
253 /* 225 */ KEY_ShiftL, /* Left Shift */
254 /* 226 */ KEY_Alt, /* Left Alt */
255 /* 227 */ KEY_LMeta, /* Left Meta */
256 /* 228 */ KEY_RCtrl, /* Right Control */
257 /* 229 */ KEY_ShiftR, /* Right Shift */
258 /* 230 */ KEY_AltLang, /* Right Alt, AKA AltGr */
259 /* 231 */ KEY_LMeta, /* Right Meta XXX */
260};
261
262static uint8_t wsXtMap[] = {
263 /* 0 */ KEY_NOTUSED,
264 /* 1 */ KEY_Escape,
265 /* 2 */ KEY_1,
266 /* 3 */ KEY_2,
267 /* 4 */ KEY_3,
268 /* 5 */ KEY_4,
269 /* 6 */ KEY_5,
270 /* 7 */ KEY_6,
271 /* 8 */ KEY_7,
272 /* 9 */ KEY_8,
273 /* 10 */ KEY_9,
274 /* 11 */ KEY_0,
275 /* 12 */ KEY_Minus,
276 /* 13 */ KEY_Equal,
277 /* 14 */ KEY_BackSpace,
278 /* 15 */ KEY_Tab,
279 /* 16 */ KEY_Q,
280 /* 17 */ KEY_W,
281 /* 18 */ KEY_E,
282 /* 19 */ KEY_R,
283 /* 20 */ KEY_T,
284 /* 21 */ KEY_Y,
285 /* 22 */ KEY_U,
286 /* 23 */ KEY_I,
287 /* 24 */ KEY_O,
288 /* 25 */ KEY_P,
289 /* 26 */ KEY_LBrace,
290 /* 27 */ KEY_RBrace,
291 /* 28 */ KEY_Enter,
292 /* 29 */ KEY_LCtrl,
293 /* 30 */ KEY_A,
294 /* 31 */ KEY_S,
295 /* 32 */ KEY_D,
296 /* 33 */ KEY_F,
297 /* 34 */ KEY_G,
298 /* 35 */ KEY_H,
299 /* 36 */ KEY_J,
300 /* 37 */ KEY_K,
301 /* 38 */ KEY_L,
302 /* 39 */ KEY_SemiColon,
303 /* 40 */ KEY_Quote,
304 /* 41 */ KEY_Tilde,
305 /* 42 */ KEY_ShiftL,
306 /* 43 */ KEY_BSlash,
307 /* 44 */ KEY_Z,
308 /* 45 */ KEY_X,
309 /* 46 */ KEY_C,
310 /* 47 */ KEY_V,
311 /* 48 */ KEY_B,
312 /* 49 */ KEY_N,
313 /* 50 */ KEY_M,
314 /* 51 */ KEY_Comma,
315 /* 52 */ KEY_Period,
316 /* 53 */ KEY_Slash,
317 /* 54 */ KEY_ShiftR,
318 /* 55 */ KEY_KP_Multiply,
319 /* 56 */ KEY_Alt,
320 /* 57 */ KEY_Space,
321 /* 58 */ KEY_CapsLock,
322 /* 59 */ KEY_F1,
323 /* 60 */ KEY_F2,
324 /* 61 */ KEY_F3,
325 /* 62 */ KEY_F4,
326 /* 63 */ KEY_F5,
327 /* 64 */ KEY_F6,
328 /* 65 */ KEY_F7,
329 /* 66 */ KEY_F8,
330 /* 67 */ KEY_F9,
331 /* 68 */ KEY_F10,
332 /* 69 */ KEY_NumLock,
333 /* 70 */ KEY_ScrollLock,
334 /* 71 */ KEY_KP_7,
335 /* 72 */ KEY_KP_8,
336 /* 73 */ KEY_KP_9,
337 /* 74 */ KEY_KP_Minus,
338 /* 75 */ KEY_KP_4,
339 /* 76 */ KEY_KP_5,
340 /* 77 */ KEY_KP_6,
341 /* 78 */ KEY_KP_Plus,
342 /* 79 */ KEY_KP_1,
343 /* 80 */ KEY_KP_2,
344 /* 81 */ KEY_KP_3,
345 /* 82 */ KEY_KP_0,
346 /* 83 */ KEY_KP_Decimal,
347 /* 84 */ KEY_NOTUSED,
348 /* 85 */ KEY_NOTUSED,
349 /* 86 */ KEY_Less, /* backslash on uk, < on german */
350 /* 87 */ KEY_F11,
351 /* 88 */ KEY_F12,
352 /* 89 */ KEY_NOTUSED,
353 /* 90 */ KEY_NOTUSED,
354 /* 91 */ KEY_NOTUSED,
355 /* 92 */ KEY_NOTUSED,
356 /* 93 */ KEY_NOTUSED,
357 /* 94 */ KEY_NOTUSED,
358 /* 95 */ KEY_NOTUSED,
359 /* 96 */ KEY_NOTUSED,
360 /* 97 */ KEY_NOTUSED,
361 /* 98 */ KEY_NOTUSED,
362 /* 99 */ KEY_NOTUSED,
363 /* 100 */ KEY_NOTUSED,
364 /* 101 */ KEY_NOTUSED,
365 /* 102 */ KEY_NOTUSED,
366 /* 103 */ KEY_NOTUSED,
367 /* 104 */ KEY_NOTUSED,
368 /* 105 */ KEY_NOTUSED,
369 /* 106 */ KEY_NOTUSED,
370 /* 107 */ KEY_NOTUSED,
371 /* 108 */ KEY_NOTUSED,
372 /* 109 */ KEY_NOTUSED,
373 /* 110 */ KEY_NOTUSED,
374 /* 111 */ KEY_NOTUSED,
375 /* 112 */ KEY_NOTUSED,
376 /* 113 */ KEY_NOTUSED,
377 /* 114 */ KEY_NOTUSED,
378 /* 115 */ KEY_NOTUSED,
379 /* 116 */ KEY_NOTUSED,
380 /* 117 */ KEY_NOTUSED,
381 /* 118 */ KEY_NOTUSED,
382 /* 119 */ KEY_NOTUSED,
383 /* 120 */ KEY_NOTUSED,
384 /* 121 */ KEY_NOTUSED,
385 /* 122 */ KEY_NOTUSED,
386 /* 123 */ KEY_NOTUSED,
387 /* 124 */ KEY_NOTUSED,
388 /* 125 */ KEY_NOTUSED,
389 /* 126 */ KEY_NOTUSED,
390 /* 127 */ KEY_Pause,
391 /* 128 */ KEY_NOTUSED,
392 /* 129 */ KEY_NOTUSED,
393 /* 130 */ KEY_NOTUSED,
394 /* 131 */ KEY_NOTUSED,
395 /* 132 */ KEY_NOTUSED,
396 /* 133 */ KEY_NOTUSED,
397 /* 134 */ KEY_NOTUSED,
398 /* 135 */ KEY_NOTUSED,
399 /* 136 */ KEY_NOTUSED,
400 /* 137 */ KEY_NOTUSED,
401 /* 138 */ KEY_NOTUSED,
402 /* 139 */ KEY_NOTUSED,
403 /* 140 */ KEY_NOTUSED,
404 /* 141 */ KEY_NOTUSED,
405 /* 142 */ KEY_NOTUSED,
406 /* 143 */ KEY_NOTUSED,
407 /* 144 */ KEY_NOTUSED,
408 /* 145 */ KEY_NOTUSED,
409 /* 146 */ KEY_NOTUSED,
410 /* 147 */ KEY_NOTUSED,
411 /* 148 */ KEY_NOTUSED,
412 /* 149 */ KEY_NOTUSED,
413 /* 150 */ KEY_NOTUSED,
414 /* 151 */ KEY_NOTUSED,
415 /* 152 */ KEY_NOTUSED,
416 /* 153 */ KEY_NOTUSED,
417 /* 154 */ KEY_NOTUSED,
418 /* 155 */ KEY_NOTUSED,
419 /* 156 */ KEY_KP_Enter,
420 /* 157 */ KEY_RCtrl,
421 /* 158 */ KEY_NOTUSED,
422 /* 159 */ KEY_NOTUSED,
423 /* 160 */ KEY_Mute,
424 /* 161 */ KEY_NOTUSED,
425 /* 162 */ KEY_NOTUSED,
426 /* 163 */ KEY_NOTUSED,
427 /* 164 */ KEY_NOTUSED,
428 /* 165 */ KEY_NOTUSED,
429 /* 166 */ KEY_NOTUSED,
430 /* 167 */ KEY_NOTUSED,
431 /* 168 */ KEY_NOTUSED,
432 /* 169 */ KEY_NOTUSED,
433 /* 170 */ KEY_Print,
434 /* 171 */ KEY_NOTUSED,
435 /* 172 */ KEY_NOTUSED,
436 /* 173 */ KEY_NOTUSED,
437 /* 174 */ KEY_AudioLower,
438 /* 175 */ KEY_AudioRaise,
439 /* 176 */ KEY_NOTUSED,
440 /* 177 */ KEY_NOTUSED,
441 /* 178 */ KEY_NOTUSED,
442 /* 179 */ KEY_NOTUSED,
443 /* 180 */ KEY_NOTUSED,
444 /* 181 */ KEY_KP_Divide,
445 /* 182 */ KEY_NOTUSED,
446 /* 183 */ KEY_Print,
447 /* 184 */ KEY_AltLang,
448 /* 185 */ KEY_NOTUSED,
449 /* 186 */ KEY_NOTUSED,
450 /* 187 */ KEY_NOTUSED,
451 /* 188 */ KEY_NOTUSED,
452 /* 189 */ KEY_NOTUSED,
453 /* 190 */ KEY_NOTUSED,
454 /* 191 */ KEY_NOTUSED,
455 /* 192 */ KEY_NOTUSED,
456 /* 193 */ KEY_NOTUSED,
457 /* 194 */ KEY_NOTUSED,
458 /* 195 */ KEY_NOTUSED,
459 /* 196 */ KEY_NOTUSED,
460 /* 197 */ KEY_NOTUSED,
461 /* 198 */ KEY_NOTUSED,
462 /* 199 */ KEY_Home,
463 /* 200 */ KEY_Up,
464 /* 201 */ KEY_PgUp,
465 /* 202 */ KEY_NOTUSED,
466 /* 203 */ KEY_Left,
467 /* 204 */ KEY_NOTUSED,
468 /* 205 */ KEY_Right,
469 /* 206 */ KEY_NOTUSED,
470 /* 207 */ KEY_End,
471 /* 208 */ KEY_Down,
472 /* 209 */ KEY_PgDown,
473 /* 210 */ KEY_Insert,
474 /* 211 */ KEY_Delete,
475 /* 212 */ KEY_NOTUSED,
476 /* 213 */ KEY_NOTUSED,
477 /* 214 */ KEY_NOTUSED,
478 /* 215 */ KEY_NOTUSED,
479 /* 216 */ KEY_NOTUSED,
480 /* 217 */ KEY_NOTUSED,
481 /* 218 */ KEY_NOTUSED,
482 /* 219 */ KEY_LMeta,
483 /* 220 */ KEY_RMeta,
484 /* 221 */ KEY_Menu,
485};