xref: /minix/minix/drivers/hid/pckbd/table.c (revision 7f5f010b)
1 /* Scancode conversion tables from PC keyboard scan codes to USB HID codes. */
2 /*
3  * The contents of this file are based on the Microsoft "USB HID to PS/2 Scan
4  * Code Translation Table" document, of which the purpose is to provide a
5  * translation the other way around.  Therefore, some codes might be missing.
6  */
7 #include <minix/input.h>
8 
9 #include "pckbd.h"
10 
11 const struct scanmap scanmap_normal[KBD_SCAN_CODES] = {
12 	[0x01] = { INPUT_PAGE_KEY,	INPUT_KEY_ESCAPE		},
13 	[0x02] = { INPUT_PAGE_KEY,	INPUT_KEY_1			},
14 	[0x03] = { INPUT_PAGE_KEY,	INPUT_KEY_2			},
15 	[0x04] = { INPUT_PAGE_KEY,	INPUT_KEY_3			},
16 	[0x05] = { INPUT_PAGE_KEY,	INPUT_KEY_4			},
17 	[0x06] = { INPUT_PAGE_KEY,	INPUT_KEY_5			},
18 	[0x07] = { INPUT_PAGE_KEY,	INPUT_KEY_6			},
19 	[0x08] = { INPUT_PAGE_KEY,	INPUT_KEY_7			},
20 	[0x09] = { INPUT_PAGE_KEY,	INPUT_KEY_8			},
21 	[0x0A] = { INPUT_PAGE_KEY,	INPUT_KEY_9			},
22 	[0x0B] = { INPUT_PAGE_KEY,	INPUT_KEY_0			},
23 	[0x0C] = { INPUT_PAGE_KEY,	INPUT_KEY_DASH			},
24 	[0x0D] = { INPUT_PAGE_KEY,	INPUT_KEY_EQUAL			},
25 	[0x0E] = { INPUT_PAGE_KEY,	INPUT_KEY_BACKSPACE		},
26 	[0x0F] = { INPUT_PAGE_KEY,	INPUT_KEY_TAB			},
27 	[0x10] = { INPUT_PAGE_KEY,	INPUT_KEY_Q			},
28 	[0x11] = { INPUT_PAGE_KEY,	INPUT_KEY_W			},
29 	[0x12] = { INPUT_PAGE_KEY,	INPUT_KEY_E			},
30 	[0x13] = { INPUT_PAGE_KEY,	INPUT_KEY_R			},
31 	[0x14] = { INPUT_PAGE_KEY,	INPUT_KEY_T			},
32 	[0x15] = { INPUT_PAGE_KEY,	INPUT_KEY_Y			},
33 	[0x16] = { INPUT_PAGE_KEY,	INPUT_KEY_U			},
34 	[0x17] = { INPUT_PAGE_KEY,	INPUT_KEY_I			},
35 	[0x18] = { INPUT_PAGE_KEY,	INPUT_KEY_O			},
36 	[0x19] = { INPUT_PAGE_KEY,	INPUT_KEY_P			},
37 	[0x1A] = { INPUT_PAGE_KEY,	INPUT_KEY_OPEN_BRACKET		},
38 	[0x1B] = { INPUT_PAGE_KEY,	INPUT_KEY_CLOSE_BRACKET		},
39 	[0x1C] = { INPUT_PAGE_KEY,	INPUT_KEY_ENTER			},
40 	[0x1D] = { INPUT_PAGE_KEY,	INPUT_KEY_LEFT_CTRL		},
41 	[0x1E] = { INPUT_PAGE_KEY,	INPUT_KEY_A			},
42 	[0x1F] = { INPUT_PAGE_KEY,	INPUT_KEY_S			},
43 	[0x20] = { INPUT_PAGE_KEY,	INPUT_KEY_D			},
44 	[0x21] = { INPUT_PAGE_KEY,	INPUT_KEY_F			},
45 	[0x22] = { INPUT_PAGE_KEY,	INPUT_KEY_G			},
46 	[0x23] = { INPUT_PAGE_KEY,	INPUT_KEY_H			},
47 	[0x24] = { INPUT_PAGE_KEY,	INPUT_KEY_J			},
48 	[0x25] = { INPUT_PAGE_KEY,	INPUT_KEY_K			},
49 	[0x26] = { INPUT_PAGE_KEY,	INPUT_KEY_L			},
50 	[0x27] = { INPUT_PAGE_KEY,	INPUT_KEY_SEMICOLON		},
51 	[0x28] = { INPUT_PAGE_KEY,	INPUT_KEY_APOSTROPH		},
52 	[0x29] = { INPUT_PAGE_KEY,	INPUT_KEY_GRAVE_ACCENT		},
53 	[0x2A] = { INPUT_PAGE_KEY,	INPUT_KEY_LEFT_SHIFT		},
54 	[0x2B] = { INPUT_PAGE_KEY,	INPUT_KEY_BACKSLASH		},
55 	[0x2C] = { INPUT_PAGE_KEY,	INPUT_KEY_Z			},
56 	[0x2D] = { INPUT_PAGE_KEY,	INPUT_KEY_X			},
57 	[0x2E] = { INPUT_PAGE_KEY,	INPUT_KEY_C			},
58 	[0x2F] = { INPUT_PAGE_KEY,	INPUT_KEY_V			},
59 	[0x30] = { INPUT_PAGE_KEY,	INPUT_KEY_B			},
60 	[0x31] = { INPUT_PAGE_KEY,	INPUT_KEY_N			},
61 	[0x32] = { INPUT_PAGE_KEY,	INPUT_KEY_M			},
62 	[0x33] = { INPUT_PAGE_KEY,	INPUT_KEY_COMMA			},
63 	[0x34] = { INPUT_PAGE_KEY,	INPUT_KEY_PERIOD		},
64 	[0x35] = { INPUT_PAGE_KEY,	INPUT_KEY_SLASH			},
65 	[0x36] = { INPUT_PAGE_KEY,	INPUT_KEY_RIGHT_SHIFT		},
66 	[0x37] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_STAR		},
67 	[0x38] = { INPUT_PAGE_KEY,	INPUT_KEY_LEFT_ALT		},
68 	[0x39] = { INPUT_PAGE_KEY,	INPUT_KEY_SPACEBAR		},
69 	[0x3A] = { INPUT_PAGE_KEY,	INPUT_KEY_CAPS_LOCK		},
70 	[0x3B] = { INPUT_PAGE_KEY,	INPUT_KEY_F1			},
71 	[0x3C] = { INPUT_PAGE_KEY,	INPUT_KEY_F2			},
72 	[0x3D] = { INPUT_PAGE_KEY,	INPUT_KEY_F3			},
73 	[0x3E] = { INPUT_PAGE_KEY,	INPUT_KEY_F4			},
74 	[0x3F] = { INPUT_PAGE_KEY,	INPUT_KEY_F5			},
75 	[0x40] = { INPUT_PAGE_KEY,	INPUT_KEY_F6			},
76 	[0x41] = { INPUT_PAGE_KEY,	INPUT_KEY_F7			},
77 	[0x42] = { INPUT_PAGE_KEY,	INPUT_KEY_F8			},
78 	[0x43] = { INPUT_PAGE_KEY,	INPUT_KEY_F9			},
79 	[0x44] = { INPUT_PAGE_KEY,	INPUT_KEY_F10			},
80 	[0x45] = { INPUT_PAGE_KEY,	INPUT_KEY_NUM_LOCK		},
81 	[0x46] = { INPUT_PAGE_KEY,	INPUT_KEY_SCROLL_LOCK		},
82 	[0x47] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_7			},
83 	[0x48] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_8			},
84 	[0x49] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_9			},
85 	[0x4A] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_DASH		},
86 	[0x4B] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_4			},
87 	[0x4C] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_5			},
88 	[0x4D] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_6			},
89 	[0x4E] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_PLUS		},
90 	[0x4F] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_1			},
91 	[0x50] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_2			},
92 	[0x51] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_3			},
93 	[0x52] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_0			},
94 	[0x53] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_PERIOD		},
95 	[0x54] = { INPUT_PAGE_KEY,	INPUT_KEY_SYSREQ		},
96 	[0x56] = { INPUT_PAGE_KEY,	INPUT_KEY_EUROPE_2		},
97 	[0x57] = { INPUT_PAGE_KEY,	INPUT_KEY_F11			},
98 	[0x58] = { INPUT_PAGE_KEY,	INPUT_KEY_F12			},
99 	[0x59] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_EQUAL		},
100 	[0x5C] = { INPUT_PAGE_KEY,	INPUT_KEY_I10L_6		},
101 	[0x64] = { INPUT_PAGE_KEY,	INPUT_KEY_F13			},
102 	[0x65] = { INPUT_PAGE_KEY,	INPUT_KEY_F14			},
103 	[0x66] = { INPUT_PAGE_KEY,	INPUT_KEY_F15			},
104 	[0x67] = { INPUT_PAGE_KEY,	INPUT_KEY_F16			},
105 	[0x68] = { INPUT_PAGE_KEY,	INPUT_KEY_F17			},
106 	[0x69] = { INPUT_PAGE_KEY,	INPUT_KEY_F18			},
107 	[0x6A] = { INPUT_PAGE_KEY,	INPUT_KEY_F19			},
108 	[0x6B] = { INPUT_PAGE_KEY,	INPUT_KEY_F20			},
109 	[0x6C] = { INPUT_PAGE_KEY,	INPUT_KEY_F21			},
110 	[0x6D] = { INPUT_PAGE_KEY,	INPUT_KEY_F22			},
111 	[0x6E] = { INPUT_PAGE_KEY,	INPUT_KEY_F23			},
112 	[0x70] = { INPUT_PAGE_KEY,	INPUT_KEY_I10L_2		},
113 	/* The following two keys (0x71, 0x72) are release-only. */
114 	[0x71] = { INPUT_PAGE_KEY,	INPUT_KEY_LANG_2		},
115 	[0x72] = { INPUT_PAGE_KEY,	INPUT_KEY_LANG_1		},
116 	[0x73] = { INPUT_PAGE_KEY,	INPUT_KEY_I10L_1		},
117 	/* The following key (0x76) can be either F24 or LANG_5. */
118 	[0x76] = { INPUT_PAGE_KEY,	INPUT_KEY_F24			},
119 	[0x77] = { INPUT_PAGE_KEY,	INPUT_KEY_LANG_4		},
120 	[0x78] = { INPUT_PAGE_KEY,	INPUT_KEY_LANG_3		},
121 	[0x79] = { INPUT_PAGE_KEY,	INPUT_KEY_I10L_4		},
122 	[0x7B] = { INPUT_PAGE_KEY,	INPUT_KEY_I10L_5		},
123 	[0x7D] = { INPUT_PAGE_KEY,	INPUT_KEY_I10L_3		},
124 	[0x7E] = { INPUT_PAGE_KEY,	INPUT_KEY_EQUAL_SIGN		},
125 };
126 
127 const struct scanmap scanmap_escaped[KBD_SCAN_CODES] = {
128 	[0x10] = { INPUT_PAGE_CONS,	INPUT_CONS_SCAN_PREVIOUS_TRACK	},
129 	[0x19] = { INPUT_PAGE_CONS,	INPUT_CONS_SCAN_NEXT_TRACK	},
130 	[0x1C] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_ENTER		},
131 	[0x1D] = { INPUT_PAGE_KEY,	INPUT_KEY_RIGHT_CTRL		},
132 	[0x20] = { INPUT_PAGE_CONS,	INPUT_CONS_MUTE			},
133 	[0x21] = { INPUT_PAGE_CONS,	INPUT_CONS_AL_CALCULATOR	},
134 	[0x22] = { INPUT_PAGE_CONS,	INPUT_CONS_PLAY_PAUSE		},
135 	[0x24] = { INPUT_PAGE_CONS,	INPUT_CONS_STOP			},
136 	[0x2E] = { INPUT_PAGE_CONS,	INPUT_CONS_VOLUME_DOWN		},
137 	[0x30] = { INPUT_PAGE_CONS,	INPUT_CONS_VOLUME_UP		},
138 	[0x32] = { INPUT_PAGE_CONS,	INPUT_CONS_AC_HOME		},
139 	[0x35] = { INPUT_PAGE_KEY,	INPUT_KEY_KP_SLASH		},
140 	[0x37] = { INPUT_PAGE_KEY,	INPUT_KEY_PRINT_SCREEN		},
141 	[0x38] = { INPUT_PAGE_KEY,	INPUT_KEY_RIGHT_ALT		},
142 	[0x46] = { INPUT_PAGE_KEY,	INPUT_KEY_PAUSE			},
143 	[0x47] = { INPUT_PAGE_KEY,	INPUT_KEY_HOME			},
144 	[0x48] = { INPUT_PAGE_KEY,	INPUT_KEY_UP_ARROW		},
145 	[0x49] = { INPUT_PAGE_KEY,	INPUT_KEY_PAGE_UP		},
146 	[0x4B] = { INPUT_PAGE_KEY,	INPUT_KEY_LEFT_ARROW		},
147 	[0x4D] = { INPUT_PAGE_KEY,	INPUT_KEY_RIGHT_ARROW		},
148 	[0x4F] = { INPUT_PAGE_KEY,	INPUT_KEY_END			},
149 	[0x50] = { INPUT_PAGE_KEY,	INPUT_KEY_DOWN_ARROW		},
150 	[0x51] = { INPUT_PAGE_KEY,	INPUT_KEY_PAGE_DOWN		},
151 	[0x52] = { INPUT_PAGE_KEY,	INPUT_KEY_INSERT		},
152 	[0x53] = { INPUT_PAGE_KEY,	INPUT_KEY_DELETE		},
153 	[0x5B] = { INPUT_PAGE_KEY,	INPUT_KEY_LEFT_GUI		},
154 	[0x5C] = { INPUT_PAGE_KEY,	INPUT_KEY_RIGHT_GUI		},
155 	[0x5D] = { INPUT_PAGE_KEY,	INPUT_KEY_APPLICATION		},
156 	/* The following extended key (0x5E) may also be INPUT_KEY_POWER. */
157 	[0x5E] = { INPUT_PAGE_GD,	INPUT_GD_SYSTEM_POWER_DOWN	},
158 	[0x5F] = { INPUT_PAGE_GD,	INPUT_GD_SYSTEM_SLEEP		},
159 	[0x63] = { INPUT_PAGE_GD,	INPUT_GD_SYSTEM_WAKE_UP		},
160 	[0x65] = { INPUT_PAGE_CONS,	INPUT_CONS_AC_SEARCH		},
161 	[0x66] = { INPUT_PAGE_CONS,	INPUT_CONS_AC_BOOKMARKS		},
162 	[0x67] = { INPUT_PAGE_CONS,	INPUT_CONS_AC_REFRESH		},
163 	[0x68] = { INPUT_PAGE_CONS,	INPUT_CONS_AC_STOP		},
164 	[0x69] = { INPUT_PAGE_CONS,	INPUT_CONS_AC_FORWARD		},
165 	[0x6A] = { INPUT_PAGE_CONS,	INPUT_CONS_AC_BACK		},
166 	[0x6B] = { INPUT_PAGE_CONS,	INPUT_CONS_AL_LOCAL_BROWSER	},
167 	[0x6C] = { INPUT_PAGE_CONS,	INPUT_CONS_AL_EMAIL_READER	},
168 	[0x6D] = { INPUT_PAGE_CONS,	INPUT_CONS_AL_MEDIA_SELECT	},
169 };
170