Home | History | Annotate | Line # | Download | only in adb
      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