/* $NetBSD: adb_usb_map.c,v 1.3 2022/05/14 01:16:55 manu Exp $ */ /*- * Copyright (c) 2006 Michael Lorenz * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include __KERNEL_RCSID(0, "$NetBSD: adb_usb_map.c,v 1.3 2022/05/14 01:16:55 manu Exp $"); #include #include #include /* * Explanation of the differences between ANSI, ISO and JIS: * https://github.com/tmk/tmk_keyboard/blob/master/converter/adb_usb/matrix.c * Summary: * ADB scan code USB scan code * ANSI ISO JIS ANSI ISO JIS * 50 10 50 GRAVE/53 GRAVE/53 GRAVE/53 * ---- 50 ---- ---- NUBS/100 ---- * 42 112 42 BSLS/49 NUHS/50 NUHS/50 * ---- ---- 93 ---- ---- JPY/137 * ---- ---- 94 ---- ---- RO/135 * * With: * NUBS = Non-US Backslash * NUHS = Non-US Hash * BSLS = Backslash * JPY = Japaneese Yen * RO = ? * * ANSI backslash should be USB scancode 49 but is 50 in the * array below. For most encoding in sys/dev/hid/hidkbdmap.c * (all used for ADB?), 49 and 50 have the same definition. */ keysym_t adb_to_usb_ansi[] = { /* 0, KS_a */ 4, /* 1, KS_s */ 22, /* 2, KS_d */ 7, /* 3, KS_f */ 9, /* 4, KS_h */ 11, /* 5, KS_g */ 10, /* 6, KS_z */ 29, /* 7, KS_x */ 27, /* 8, KS_c */ 6, /* 9, KS_v */ 25, /* 10, KS_paragraph */ 53, /* 11, KS_b */ 5, /* 12, KS_q */ 20, /* 13, KS_w */ 26, /* 14, KS_e */ 8, /* 15, KS_r */ 21, /* 16, KS_y */ 28, /* 17, KS_t */ 23, /* 18, KS_1 */ 30, /* 19, KS_2 */ 31, /* 20, KS_3 */ 32, /* 21, KS_4 */ 33, /* 22, KS_6 */ 35, /* 23, KS_5 */ 34, /* 24, KS_equal */ 46, /* 25, KS_9 */ 38, /* 26, KS_7 */ 36, /* 27, KS_minus */ 45, /* 28, KS_8 */ 37, /* 29, KS_0 */ 39, /* 30, KS_bracketright */ 48, /* 31, KS_o */ 18, /* 32, KS_u */ 24, /* 33, KS_bracketleft */ 47, /* 34, KS_i */ 12, /* 35, KS_p */ 19, /* 36, KS_Return */ 40, /* 37, KS_l */ 15, /* 38, KS_j */ 13, /* 39, KS_apostrophe */ 52, /* 40, KS_k */ 14, /* 41, KS_semicolon */ 51, /* 42, KS_backslash */ 50, /* Should be 49 */ /* 43, KS_comma */ 54, /* 44, KS_slash */ 56, /* 45, KS_n */ 17, /* 46, KS_m */ 16, /* 47, KS_period */ 55, /* 48, KS_Tab */ 43, /* 49, KS_space */ 44, /* 50, KS_grave */ 53, /* 51, KS_Delete */ 42, /* 52, KS_KP_Enter */ 88, /* 53, KS_Escape */ 41, /* 54, KS_Control_L */ 224, /* 55, KS_Cmd */ 227, /* left meta */ /* 56, KS_Shift_L */ 225, /* 57, KS_Caps_Lock */ 57, /* 58, KS_Option */ 226, /* 59, KS_Left */ 80, /* 60, KS_Right */ 79, /* 61, KS_Down */ 81, /* 62, KS_Up */ 82, /* 63 */ 0, /* 64 */ 0, /* 65, KS_KP_Decimal */ 99, /* 66 */ 0, /* 67, KS_KP_Multiply */ 85, /* 68 */ 0, /* 69, KS_KP_Add */ 87, /* 70 */ 0, /* 71, KS_Num_Lock */ 83, /* 72 */ 0, /* 73 */ 0, /* 74 */ 0, /* 75, KS_KP_Divide */ 84, /* 76, KS_KP_Enter */ 88, /* 77 */ 0, /* 78, KS_KP_Subtract */ 86, /* 79 */ 0, /* 80 */ 0, /* 81, KS_KP_Equal */ 46, /* no KP_EQUAL on USB? */ /* 82, KS_KP_Insert, 0 */ 98, /* 83, KS_KP_End, 1 */ 89, /* 84, KS_KP_Down, 2 */ 90, /* 85, KS_KP_Next, 3 */ 91, /* 86, KS_KP_Left, 4 */ 92, /* 87, KS_KP_Begin 5 */ 93, /* 88, KS_KP_Right 6 */ 94, /* 89, KS_KP_Home 7 */ 95, /* 90 */ 0, /* 91, KS_KP_Up 8 */ 96, /* 92, KS_KP_Prior 9 */ 97, /* 93, KS_backslash */ 100, /* 94, KS_underscore */ 45, /* 95, KS_KP_Delete . */ 99, /* 96, KS_f5 */ 62, /* 97, KS_f6 */ 63, /* 98, KS_f7 */ 64, /* 99, KS_f3 */ 60, /* 100, KS_f8 */ 65, /* 101, KS_f9 */ 66, /* 102 */ 0, /* 103, KS_f11 */ 68, /* 104 */ 0, /* 105, KS_Print_Screen */ 70, /* 106, KS_KP_Enter */ 88, /* 107, KS_Hold_Screen */ 71, /* 108 */ 0, /* 109, KS_f10 */ 67, /* 110 */ 0, /* 111, KS_f12 */ 69, /* 112 */ 0, /* 113, KS_Pause */ 72, /* 114, KS_Insert */ 73, /* 115, KS_Home */ 74, /* 116, KS_Prior */ 75, /* 117, KS_BackSpace */ 76, /* 118, KS_f4 */ 61, /* 119, KS_End */ 77, /* 120, KS_f2 */ 59, /* 121, KS_Next */ 78, /* 122, KS_f1 */ 58, /* 123, KS_Shift_R */ 229, /* 124, KS_Alt_R */ 230, /* 125, KS_Control_R */ 228, /* 126 */ 0, /* 127, KS_Cmd_Debugger */ 102 }; keysym_t adb_to_usb_iso[] = { /* 0, KS_a */ 4, /* 1, KS_s */ 22, /* 2, KS_d */ 7, /* 3, KS_f */ 9, /* 4, KS_h */ 11, /* 5, KS_g */ 10, /* 6, KS_z */ 29, /* 7, KS_x */ 27, /* 8, KS_c */ 6, /* 9, KS_v */ 25, /* 10, KS_paragraph */ 53, /* 11, KS_b */ 5, /* 12, KS_q */ 20, /* 13, KS_w */ 26, /* 14, KS_e */ 8, /* 15, KS_r */ 21, /* 16, KS_y */ 28, /* 17, KS_t */ 23, /* 18, KS_1 */ 30, /* 19, KS_2 */ 31, /* 20, KS_3 */ 32, /* 21, KS_4 */ 33, /* 22, KS_6 */ 35, /* 23, KS_5 */ 34, /* 24, KS_equal */ 46, /* 25, KS_9 */ 38, /* 26, KS_7 */ 36, /* 27, KS_minus */ 45, /* 28, KS_8 */ 37, /* 29, KS_0 */ 39, /* 30, KS_bracketright */ 48, /* 31, KS_o */ 18, /* 32, KS_u */ 24, /* 33, KS_bracketleft */ 47, /* 34, KS_i */ 12, /* 35, KS_p */ 19, /* 36, KS_Return */ 40, /* 37, KS_l */ 15, /* 38, KS_j */ 13, /* 39, KS_apostrophe */ 52, /* 40, KS_k */ 14, /* 41, KS_semicolon */ 51, /* 42, KS_backslash */ 50, /* 43, KS_comma */ 54, /* 44, KS_slash */ 56, /* 45, KS_n */ 17, /* 46, KS_m */ 16, /* 47, KS_period */ 55, /* 48, KS_Tab */ 43, /* 49, KS_space */ 44, /* 50, KS_grave */ 100, /* 51, KS_Delete */ 42, /* 52, KS_KP_Enter */ 88, /* 53, KS_Escape */ 41, /* 54, KS_Control_L */ 224, /* 55, KS_Cmd */ 227, /* left meta */ /* 56, KS_Shift_L */ 225, /* 57, KS_Caps_Lock */ 57, /* 58, KS_Option */ 226, /* 59, KS_Left */ 80, /* 60, KS_Right */ 79, /* 61, KS_Down */ 81, /* 62, KS_Up */ 82, /* 63 */ 0, /* 64 */ 0, /* 65, KS_KP_Decimal */ 99, /* 66 */ 0, /* 67, KS_KP_Multiply */ 85, /* 68 */ 0, /* 69, KS_KP_Add */ 87, /* 70 */ 0, /* 71, KS_Num_Lock */ 83, /* 72 */ 0, /* 73 */ 0, /* 74 */ 0, /* 75, KS_KP_Divide */ 84, /* 76, KS_KP_Enter */ 88, /* 77 */ 0, /* 78, KS_KP_Subtract */ 86, /* 79 */ 0, /* 80 */ 0, /* 81, KS_KP_Equal */ 46, /* no KP_EQUAL on USB? */ /* 82, KS_KP_Insert, 0 */ 98, /* 83, KS_KP_End, 1 */ 89, /* 84, KS_KP_Down, 2 */ 90, /* 85, KS_KP_Next, 3 */ 91, /* 86, KS_KP_Left, 4 */ 92, /* 87, KS_KP_Begin 5 */ 93, /* 88, KS_KP_Right 6 */ 94, /* 89, KS_KP_Home 7 */ 95, /* 90 */ 0, /* 91, KS_KP_Up 8 */ 96, /* 92, KS_KP_Prior 9 */ 97, /* 93, KS_backslash */ 100, /* 94, KS_underscore */ 45, /* 95, KS_KP_Delete . */ 99, /* 96, KS_f5 */ 62, /* 97, KS_f6 */ 63, /* 98, KS_f7 */ 64, /* 99, KS_f3 */ 60, /* 100, KS_f8 */ 65, /* 101, KS_f9 */ 66, /* 102 */ 0, /* 103, KS_f11 */ 68, /* 104 */ 0, /* 105, KS_Print_Screen */ 70, /* 106, KS_KP_Enter */ 88, /* 107, KS_Hold_Screen */ 71, /* 108 */ 0, /* 109, KS_f10 */ 67, /* 110 */ 0, /* 111, KS_f12 */ 69, /* 112 */ 0, /* 113, KS_Pause */ 72, /* 114, KS_Insert */ 73, /* 115, KS_Home */ 74, /* 116, KS_Prior */ 75, /* 117, KS_BackSpace */ 76, /* 118, KS_f4 */ 61, /* 119, KS_End */ 77, /* 120, KS_f2 */ 59, /* 121, KS_Next */ 78, /* 122, KS_f1 */ 58, /* 123, KS_Shift_R */ 229, /* 124, KS_Alt_R */ 230, /* 125, KS_Control_R */ 228, /* 126 */ 0, /* 127, KS_Cmd_Debugger */ 102 }; keysym_t adb_to_usb_jis[] = { /* XXX not updated from ansi yet */ /* 0, KS_a */ 4, /* 1, KS_s */ 22, /* 2, KS_d */ 7, /* 3, KS_f */ 9, /* 4, KS_h */ 11, /* 5, KS_g */ 10, /* 6, KS_z */ 29, /* 7, KS_x */ 27, /* 8, KS_c */ 6, /* 9, KS_v */ 25, /* 10, KS_paragraph */ 53, /* 11, KS_b */ 5, /* 12, KS_q */ 20, /* 13, KS_w */ 26, /* 14, KS_e */ 8, /* 15, KS_r */ 21, /* 16, KS_y */ 28, /* 17, KS_t */ 23, /* 18, KS_1 */ 30, /* 19, KS_2 */ 31, /* 20, KS_3 */ 32, /* 21, KS_4 */ 33, /* 22, KS_6 */ 35, /* 23, KS_5 */ 34, /* 24, KS_equal */ 46, /* 25, KS_9 */ 38, /* 26, KS_7 */ 36, /* 27, KS_minus */ 45, /* 28, KS_8 */ 37, /* 29, KS_0 */ 39, /* 30, KS_bracketright */ 48, /* 31, KS_o */ 18, /* 32, KS_u */ 24, /* 33, KS_bracketleft */ 47, /* 34, KS_i */ 12, /* 35, KS_p */ 19, /* 36, KS_Return */ 40, /* 37, KS_l */ 15, /* 38, KS_j */ 13, /* 39, KS_apostrophe */ 52, /* 40, KS_k */ 14, /* 41, KS_semicolon */ 51, /* 42, KS_backslash */ 50, /* 43, KS_comma */ 54, /* 44, KS_slash */ 56, /* 45, KS_n */ 17, /* 46, KS_m */ 16, /* 47, KS_period */ 55, /* 48, KS_Tab */ 43, /* 49, KS_space */ 44, /* 50, KS_grave */ 53, /* 51, KS_Delete */ 42, /* 52, KS_KP_Enter */ 88, /* 53, KS_Escape */ 41, /* 54, KS_Control_L */ 224, /* 55, KS_Cmd */ 227, /* left meta */ /* 56, KS_Shift_L */ 225, /* 57, KS_Caps_Lock */ 57, /* 58, KS_Option */ 226, /* 59, KS_Left */ 80, /* 60, KS_Right */ 79, /* 61, KS_Down */ 81, /* 62, KS_Up */ 82, /* 63 */ 0, /* 64 */ 0, /* 65, KS_KP_Decimal */ 99, /* 66 */ 0, /* 67, KS_KP_Multiply */ 85, /* 68 */ 0, /* 69, KS_KP_Add */ 87, /* 70 */ 0, /* 71, KS_Num_Lock */ 83, /* 72 */ 0, /* 73 */ 0, /* 74 */ 0, /* 75, KS_KP_Divide */ 84, /* 76, KS_KP_Enter */ 88, /* 77 */ 0, /* 78, KS_KP_Subtract */ 86, /* 79 */ 0, /* 80 */ 0, /* 81, KS_KP_Equal */ 46, /* no KP_EQUAL on USB? */ /* 82, KS_KP_Insert, 0 */ 98, /* 83, KS_KP_End, 1 */ 89, /* 84, KS_KP_Down, 2 */ 90, /* 85, KS_KP_Next, 3 */ 91, /* 86, KS_KP_Left, 4 */ 92, /* 87, KS_KP_Begin 5 */ 93, /* 88, KS_KP_Right 6 */ 94, /* 89, KS_KP_Home 7 */ 95, /* 90 */ 0, /* 91, KS_KP_Up 8 */ 96, /* 92, KS_KP_Prior 9 */ 97, /* 93, KS_backslash */ 137, /* JPY */ /* 94, KS_underscore */ 135, /* RO */ /* 95, KS_KP_Delete . */ 99, /* 96, KS_f5 */ 62, /* 97, KS_f6 */ 63, /* 98, KS_f7 */ 64, /* 99, KS_f3 */ 60, /* 100, KS_f8 */ 65, /* 101, KS_f9 */ 66, /* 102 */ 0, /* 103, KS_f11 */ 68, /* 104 */ 0, /* 105, KS_Print_Screen */ 70, /* 106, KS_KP_Enter */ 88, /* 107, KS_Hold_Screen */ 71, /* 108 */ 0, /* 109, KS_f10 */ 67, /* 110 */ 0, /* 111, KS_f12 */ 69, /* 112 */ 0, /* 113, KS_Pause */ 72, /* 114, KS_Insert */ 73, /* 115, KS_Home */ 74, /* 116, KS_Prior */ 75, /* 117, KS_BackSpace */ 76, /* 118, KS_f4 */ 61, /* 119, KS_End */ 77, /* 120, KS_f2 */ 59, /* 121, KS_Next */ 78, /* 122, KS_f1 */ 58, /* 123, KS_Shift_R */ 229, /* 124, KS_Alt_R */ 230, /* 125, KS_Control_R */ 228, /* 126 */ 0, /* 127, KS_Cmd_Debugger */ 102 };