adb_usb_map.c revision 1.3 1 /* $NetBSD: adb_usb_map.c,v 1.3 2022/05/14 01:16:55 manu Exp $ */
2
3 /*-
4 * Copyright (c) 2006 Michael Lorenz
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #include <sys/cdefs.h>
30 __KERNEL_RCSID(0, "$NetBSD: adb_usb_map.c,v 1.3 2022/05/14 01:16:55 manu Exp $");
31
32 #include <sys/param.h>
33 #include <sys/device.h>
34
35 #include <dev/wscons/wsksymvar.h>
36
37 /*
38 * Explanation of the differences between ANSI, ISO and JIS:
39 * https://github.com/tmk/tmk_keyboard/blob/master/converter/adb_usb/matrix.c
40 * Summary:
41 * ADB scan code USB scan code
42 * ANSI ISO JIS ANSI ISO JIS
43 * 50 10 50 GRAVE/53 GRAVE/53 GRAVE/53
44 * ---- 50 ---- ---- NUBS/100 ----
45 * 42 112 42 BSLS/49 NUHS/50 NUHS/50
46 * ---- ---- 93 ---- ---- JPY/137
47 * ---- ---- 94 ---- ---- RO/135
48 *
49 * With:
50 * NUBS = Non-US Backslash
51 * NUHS = Non-US Hash
52 * BSLS = Backslash
53 * JPY = Japaneese Yen
54 * RO = ?
55 *
56 * ANSI backslash should be USB scancode 49 but is 50 in the
57 * array below. For most encoding in sys/dev/hid/hidkbdmap.c
58 * (all used for ADB?), 49 and 50 have the same definition.
59 */
60
61 keysym_t adb_to_usb_ansi[] = {
62 /* 0, KS_a */ 4,
63 /* 1, KS_s */ 22,
64 /* 2, KS_d */ 7,
65 /* 3, KS_f */ 9,
66 /* 4, KS_h */ 11,
67 /* 5, KS_g */ 10,
68 /* 6, KS_z */ 29,
69 /* 7, KS_x */ 27,
70 /* 8, KS_c */ 6,
71 /* 9, KS_v */ 25,
72 /* 10, KS_paragraph */ 53,
73 /* 11, KS_b */ 5,
74 /* 12, KS_q */ 20,
75 /* 13, KS_w */ 26,
76 /* 14, KS_e */ 8,
77 /* 15, KS_r */ 21,
78 /* 16, KS_y */ 28,
79 /* 17, KS_t */ 23,
80 /* 18, KS_1 */ 30,
81 /* 19, KS_2 */ 31,
82 /* 20, KS_3 */ 32,
83 /* 21, KS_4 */ 33,
84 /* 22, KS_6 */ 35,
85 /* 23, KS_5 */ 34,
86 /* 24, KS_equal */ 46,
87 /* 25, KS_9 */ 38,
88 /* 26, KS_7 */ 36,
89 /* 27, KS_minus */ 45,
90 /* 28, KS_8 */ 37,
91 /* 29, KS_0 */ 39,
92 /* 30, KS_bracketright */ 48,
93 /* 31, KS_o */ 18,
94 /* 32, KS_u */ 24,
95 /* 33, KS_bracketleft */ 47,
96 /* 34, KS_i */ 12,
97 /* 35, KS_p */ 19,
98 /* 36, KS_Return */ 40,
99 /* 37, KS_l */ 15,
100 /* 38, KS_j */ 13,
101 /* 39, KS_apostrophe */ 52,
102 /* 40, KS_k */ 14,
103 /* 41, KS_semicolon */ 51,
104 /* 42, KS_backslash */ 50, /* Should be 49 */
105 /* 43, KS_comma */ 54,
106 /* 44, KS_slash */ 56,
107 /* 45, KS_n */ 17,
108 /* 46, KS_m */ 16,
109 /* 47, KS_period */ 55,
110 /* 48, KS_Tab */ 43,
111 /* 49, KS_space */ 44,
112 /* 50, KS_grave */ 53,
113 /* 51, KS_Delete */ 42,
114 /* 52, KS_KP_Enter */ 88,
115 /* 53, KS_Escape */ 41,
116 /* 54, KS_Control_L */ 224,
117 /* 55, KS_Cmd */ 227, /* left meta */
118 /* 56, KS_Shift_L */ 225,
119 /* 57, KS_Caps_Lock */ 57,
120 /* 58, KS_Option */ 226,
121 /* 59, KS_Left */ 80,
122 /* 60, KS_Right */ 79,
123 /* 61, KS_Down */ 81,
124 /* 62, KS_Up */ 82,
125 /* 63 */ 0,
126 /* 64 */ 0,
127 /* 65, KS_KP_Decimal */ 99,
128 /* 66 */ 0,
129 /* 67, KS_KP_Multiply */ 85,
130 /* 68 */ 0,
131 /* 69, KS_KP_Add */ 87,
132 /* 70 */ 0,
133 /* 71, KS_Num_Lock */ 83,
134 /* 72 */ 0,
135 /* 73 */ 0,
136 /* 74 */ 0,
137 /* 75, KS_KP_Divide */ 84,
138 /* 76, KS_KP_Enter */ 88,
139 /* 77 */ 0,
140 /* 78, KS_KP_Subtract */ 86,
141 /* 79 */ 0,
142 /* 80 */ 0,
143 /* 81, KS_KP_Equal */ 46, /* no KP_EQUAL on USB? */
144 /* 82, KS_KP_Insert, 0 */ 98,
145 /* 83, KS_KP_End, 1 */ 89,
146 /* 84, KS_KP_Down, 2 */ 90,
147 /* 85, KS_KP_Next, 3 */ 91,
148 /* 86, KS_KP_Left, 4 */ 92,
149 /* 87, KS_KP_Begin 5 */ 93,
150 /* 88, KS_KP_Right 6 */ 94,
151 /* 89, KS_KP_Home 7 */ 95,
152 /* 90 */ 0,
153 /* 91, KS_KP_Up 8 */ 96,
154 /* 92, KS_KP_Prior 9 */ 97,
155 /* 93, KS_backslash */ 100,
156 /* 94, KS_underscore */ 45,
157 /* 95, KS_KP_Delete . */ 99,
158 /* 96, KS_f5 */ 62,
159 /* 97, KS_f6 */ 63,
160 /* 98, KS_f7 */ 64,
161 /* 99, KS_f3 */ 60,
162 /* 100, KS_f8 */ 65,
163 /* 101, KS_f9 */ 66,
164 /* 102 */ 0,
165 /* 103, KS_f11 */ 68,
166 /* 104 */ 0,
167 /* 105, KS_Print_Screen */ 70,
168 /* 106, KS_KP_Enter */ 88,
169 /* 107, KS_Hold_Screen */ 71,
170 /* 108 */ 0,
171 /* 109, KS_f10 */ 67,
172 /* 110 */ 0,
173 /* 111, KS_f12 */ 69,
174 /* 112 */ 0,
175 /* 113, KS_Pause */ 72,
176 /* 114, KS_Insert */ 73,
177 /* 115, KS_Home */ 74,
178 /* 116, KS_Prior */ 75,
179 /* 117, KS_BackSpace */ 76,
180 /* 118, KS_f4 */ 61,
181 /* 119, KS_End */ 77,
182 /* 120, KS_f2 */ 59,
183 /* 121, KS_Next */ 78,
184 /* 122, KS_f1 */ 58,
185 /* 123, KS_Shift_R */ 229,
186 /* 124, KS_Alt_R */ 230,
187 /* 125, KS_Control_R */ 228,
188 /* 126 */ 0,
189 /* 127, KS_Cmd_Debugger */ 102
190 };
191
192 keysym_t adb_to_usb_iso[] = {
193 /* 0, KS_a */ 4,
194 /* 1, KS_s */ 22,
195 /* 2, KS_d */ 7,
196 /* 3, KS_f */ 9,
197 /* 4, KS_h */ 11,
198 /* 5, KS_g */ 10,
199 /* 6, KS_z */ 29,
200 /* 7, KS_x */ 27,
201 /* 8, KS_c */ 6,
202 /* 9, KS_v */ 25,
203 /* 10, KS_paragraph */ 53,
204 /* 11, KS_b */ 5,
205 /* 12, KS_q */ 20,
206 /* 13, KS_w */ 26,
207 /* 14, KS_e */ 8,
208 /* 15, KS_r */ 21,
209 /* 16, KS_y */ 28,
210 /* 17, KS_t */ 23,
211 /* 18, KS_1 */ 30,
212 /* 19, KS_2 */ 31,
213 /* 20, KS_3 */ 32,
214 /* 21, KS_4 */ 33,
215 /* 22, KS_6 */ 35,
216 /* 23, KS_5 */ 34,
217 /* 24, KS_equal */ 46,
218 /* 25, KS_9 */ 38,
219 /* 26, KS_7 */ 36,
220 /* 27, KS_minus */ 45,
221 /* 28, KS_8 */ 37,
222 /* 29, KS_0 */ 39,
223 /* 30, KS_bracketright */ 48,
224 /* 31, KS_o */ 18,
225 /* 32, KS_u */ 24,
226 /* 33, KS_bracketleft */ 47,
227 /* 34, KS_i */ 12,
228 /* 35, KS_p */ 19,
229 /* 36, KS_Return */ 40,
230 /* 37, KS_l */ 15,
231 /* 38, KS_j */ 13,
232 /* 39, KS_apostrophe */ 52,
233 /* 40, KS_k */ 14,
234 /* 41, KS_semicolon */ 51,
235 /* 42, KS_backslash */ 50,
236 /* 43, KS_comma */ 54,
237 /* 44, KS_slash */ 56,
238 /* 45, KS_n */ 17,
239 /* 46, KS_m */ 16,
240 /* 47, KS_period */ 55,
241 /* 48, KS_Tab */ 43,
242 /* 49, KS_space */ 44,
243 /* 50, KS_grave */ 100,
244 /* 51, KS_Delete */ 42,
245 /* 52, KS_KP_Enter */ 88,
246 /* 53, KS_Escape */ 41,
247 /* 54, KS_Control_L */ 224,
248 /* 55, KS_Cmd */ 227, /* left meta */
249 /* 56, KS_Shift_L */ 225,
250 /* 57, KS_Caps_Lock */ 57,
251 /* 58, KS_Option */ 226,
252 /* 59, KS_Left */ 80,
253 /* 60, KS_Right */ 79,
254 /* 61, KS_Down */ 81,
255 /* 62, KS_Up */ 82,
256 /* 63 */ 0,
257 /* 64 */ 0,
258 /* 65, KS_KP_Decimal */ 99,
259 /* 66 */ 0,
260 /* 67, KS_KP_Multiply */ 85,
261 /* 68 */ 0,
262 /* 69, KS_KP_Add */ 87,
263 /* 70 */ 0,
264 /* 71, KS_Num_Lock */ 83,
265 /* 72 */ 0,
266 /* 73 */ 0,
267 /* 74 */ 0,
268 /* 75, KS_KP_Divide */ 84,
269 /* 76, KS_KP_Enter */ 88,
270 /* 77 */ 0,
271 /* 78, KS_KP_Subtract */ 86,
272 /* 79 */ 0,
273 /* 80 */ 0,
274 /* 81, KS_KP_Equal */ 46, /* no KP_EQUAL on USB? */
275 /* 82, KS_KP_Insert, 0 */ 98,
276 /* 83, KS_KP_End, 1 */ 89,
277 /* 84, KS_KP_Down, 2 */ 90,
278 /* 85, KS_KP_Next, 3 */ 91,
279 /* 86, KS_KP_Left, 4 */ 92,
280 /* 87, KS_KP_Begin 5 */ 93,
281 /* 88, KS_KP_Right 6 */ 94,
282 /* 89, KS_KP_Home 7 */ 95,
283 /* 90 */ 0,
284 /* 91, KS_KP_Up 8 */ 96,
285 /* 92, KS_KP_Prior 9 */ 97,
286 /* 93, KS_backslash */ 100,
287 /* 94, KS_underscore */ 45,
288 /* 95, KS_KP_Delete . */ 99,
289 /* 96, KS_f5 */ 62,
290 /* 97, KS_f6 */ 63,
291 /* 98, KS_f7 */ 64,
292 /* 99, KS_f3 */ 60,
293 /* 100, KS_f8 */ 65,
294 /* 101, KS_f9 */ 66,
295 /* 102 */ 0,
296 /* 103, KS_f11 */ 68,
297 /* 104 */ 0,
298 /* 105, KS_Print_Screen */ 70,
299 /* 106, KS_KP_Enter */ 88,
300 /* 107, KS_Hold_Screen */ 71,
301 /* 108 */ 0,
302 /* 109, KS_f10 */ 67,
303 /* 110 */ 0,
304 /* 111, KS_f12 */ 69,
305 /* 112 */ 0,
306 /* 113, KS_Pause */ 72,
307 /* 114, KS_Insert */ 73,
308 /* 115, KS_Home */ 74,
309 /* 116, KS_Prior */ 75,
310 /* 117, KS_BackSpace */ 76,
311 /* 118, KS_f4 */ 61,
312 /* 119, KS_End */ 77,
313 /* 120, KS_f2 */ 59,
314 /* 121, KS_Next */ 78,
315 /* 122, KS_f1 */ 58,
316 /* 123, KS_Shift_R */ 229,
317 /* 124, KS_Alt_R */ 230,
318 /* 125, KS_Control_R */ 228,
319 /* 126 */ 0,
320 /* 127, KS_Cmd_Debugger */ 102
321 };
322
323 keysym_t adb_to_usb_jis[] = { /* XXX not updated from ansi yet */
324 /* 0, KS_a */ 4,
325 /* 1, KS_s */ 22,
326 /* 2, KS_d */ 7,
327 /* 3, KS_f */ 9,
328 /* 4, KS_h */ 11,
329 /* 5, KS_g */ 10,
330 /* 6, KS_z */ 29,
331 /* 7, KS_x */ 27,
332 /* 8, KS_c */ 6,
333 /* 9, KS_v */ 25,
334 /* 10, KS_paragraph */ 53,
335 /* 11, KS_b */ 5,
336 /* 12, KS_q */ 20,
337 /* 13, KS_w */ 26,
338 /* 14, KS_e */ 8,
339 /* 15, KS_r */ 21,
340 /* 16, KS_y */ 28,
341 /* 17, KS_t */ 23,
342 /* 18, KS_1 */ 30,
343 /* 19, KS_2 */ 31,
344 /* 20, KS_3 */ 32,
345 /* 21, KS_4 */ 33,
346 /* 22, KS_6 */ 35,
347 /* 23, KS_5 */ 34,
348 /* 24, KS_equal */ 46,
349 /* 25, KS_9 */ 38,
350 /* 26, KS_7 */ 36,
351 /* 27, KS_minus */ 45,
352 /* 28, KS_8 */ 37,
353 /* 29, KS_0 */ 39,
354 /* 30, KS_bracketright */ 48,
355 /* 31, KS_o */ 18,
356 /* 32, KS_u */ 24,
357 /* 33, KS_bracketleft */ 47,
358 /* 34, KS_i */ 12,
359 /* 35, KS_p */ 19,
360 /* 36, KS_Return */ 40,
361 /* 37, KS_l */ 15,
362 /* 38, KS_j */ 13,
363 /* 39, KS_apostrophe */ 52,
364 /* 40, KS_k */ 14,
365 /* 41, KS_semicolon */ 51,
366 /* 42, KS_backslash */ 50,
367 /* 43, KS_comma */ 54,
368 /* 44, KS_slash */ 56,
369 /* 45, KS_n */ 17,
370 /* 46, KS_m */ 16,
371 /* 47, KS_period */ 55,
372 /* 48, KS_Tab */ 43,
373 /* 49, KS_space */ 44,
374 /* 50, KS_grave */ 53,
375 /* 51, KS_Delete */ 42,
376 /* 52, KS_KP_Enter */ 88,
377 /* 53, KS_Escape */ 41,
378 /* 54, KS_Control_L */ 224,
379 /* 55, KS_Cmd */ 227, /* left meta */
380 /* 56, KS_Shift_L */ 225,
381 /* 57, KS_Caps_Lock */ 57,
382 /* 58, KS_Option */ 226,
383 /* 59, KS_Left */ 80,
384 /* 60, KS_Right */ 79,
385 /* 61, KS_Down */ 81,
386 /* 62, KS_Up */ 82,
387 /* 63 */ 0,
388 /* 64 */ 0,
389 /* 65, KS_KP_Decimal */ 99,
390 /* 66 */ 0,
391 /* 67, KS_KP_Multiply */ 85,
392 /* 68 */ 0,
393 /* 69, KS_KP_Add */ 87,
394 /* 70 */ 0,
395 /* 71, KS_Num_Lock */ 83,
396 /* 72 */ 0,
397 /* 73 */ 0,
398 /* 74 */ 0,
399 /* 75, KS_KP_Divide */ 84,
400 /* 76, KS_KP_Enter */ 88,
401 /* 77 */ 0,
402 /* 78, KS_KP_Subtract */ 86,
403 /* 79 */ 0,
404 /* 80 */ 0,
405 /* 81, KS_KP_Equal */ 46, /* no KP_EQUAL on USB? */
406 /* 82, KS_KP_Insert, 0 */ 98,
407 /* 83, KS_KP_End, 1 */ 89,
408 /* 84, KS_KP_Down, 2 */ 90,
409 /* 85, KS_KP_Next, 3 */ 91,
410 /* 86, KS_KP_Left, 4 */ 92,
411 /* 87, KS_KP_Begin 5 */ 93,
412 /* 88, KS_KP_Right 6 */ 94,
413 /* 89, KS_KP_Home 7 */ 95,
414 /* 90 */ 0,
415 /* 91, KS_KP_Up 8 */ 96,
416 /* 92, KS_KP_Prior 9 */ 97,
417 /* 93, KS_backslash */ 137, /* JPY */
418 /* 94, KS_underscore */ 135, /* RO */
419 /* 95, KS_KP_Delete . */ 99,
420 /* 96, KS_f5 */ 62,
421 /* 97, KS_f6 */ 63,
422 /* 98, KS_f7 */ 64,
423 /* 99, KS_f3 */ 60,
424 /* 100, KS_f8 */ 65,
425 /* 101, KS_f9 */ 66,
426 /* 102 */ 0,
427 /* 103, KS_f11 */ 68,
428 /* 104 */ 0,
429 /* 105, KS_Print_Screen */ 70,
430 /* 106, KS_KP_Enter */ 88,
431 /* 107, KS_Hold_Screen */ 71,
432 /* 108 */ 0,
433 /* 109, KS_f10 */ 67,
434 /* 110 */ 0,
435 /* 111, KS_f12 */ 69,
436 /* 112 */ 0,
437 /* 113, KS_Pause */ 72,
438 /* 114, KS_Insert */ 73,
439 /* 115, KS_Home */ 74,
440 /* 116, KS_Prior */ 75,
441 /* 117, KS_BackSpace */ 76,
442 /* 118, KS_f4 */ 61,
443 /* 119, KS_End */ 77,
444 /* 120, KS_f2 */ 59,
445 /* 121, KS_Next */ 78,
446 /* 122, KS_f1 */ 58,
447 /* 123, KS_Shift_R */ 229,
448 /* 124, KS_Alt_R */ 230,
449 /* 125, KS_Control_R */ 228,
450 /* 126 */ 0,
451 /* 127, KS_Cmd_Debugger */ 102
452 };
453
454