Mitmgate v0.0.0+dev.3
Man in the Middle Keylogger and Injector
Loading...
Searching...
No Matches
hid_tables.h
Go to the documentation of this file.
1
11
12#ifndef HID_TABLES_H
13#define HID_TABLES_H
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19#include "../typedef.h"
20
21// Helper macros
22#ifndef HIDAPI
24# define HIDAPI static
25#endif
26
28#define HID_USAGE_MAX (0xFF)
30#define HID_BITMASK_LEFT_SHIFT (0x02)
32#define HID_BITMASK_RIGHT_SHIFT (0x20)
33
40 HID_KEY_NONE = 0x00,
44
45 // Letters
46 HID_KEY_A = 0x04,
47 HID_KEY_B = 0x05,
48 HID_KEY_C = 0x06,
49 HID_KEY_D = 0x07,
50 HID_KEY_E = 0x08,
51 HID_KEY_F = 0x09,
52 HID_KEY_G = 0x0A,
53 HID_KEY_H = 0x0B,
54 HID_KEY_I = 0x0C,
55 HID_KEY_J = 0x0D,
56 HID_KEY_K = 0x0E,
57 HID_KEY_L = 0x0F,
58 HID_KEY_M = 0x10,
59 HID_KEY_N = 0x11,
60 HID_KEY_O = 0x12,
61 HID_KEY_P = 0x13,
62 HID_KEY_Q = 0x14,
63 HID_KEY_R = 0x15,
64 HID_KEY_S = 0x16,
65 HID_KEY_T = 0x17,
66 HID_KEY_U = 0x18,
67 HID_KEY_V = 0x19,
68 HID_KEY_W = 0x1A,
69 HID_KEY_X = 0x1B,
70 HID_KEY_Y = 0x1C,
71 HID_KEY_Z = 0x1D,
72
73 // Numbers (Top Row)
74 HID_KEY_1 = 0x1E,
75 HID_KEY_2 = 0x1F,
76 HID_KEY_3 = 0x20,
77 HID_KEY_4 = 0x21,
78 HID_KEY_5 = 0x22,
79 HID_KEY_6 = 0x23,
80 HID_KEY_7 = 0x24,
81 HID_KEY_8 = 0x25,
82 HID_KEY_9 = 0x26,
83 HID_KEY_0 = 0x27,
84
85 // Controls & Symbols
86 HID_KEY_ENTER = 0x28,
87 HID_KEY_ESCAPE = 0x29,
88 HID_KEY_BACKSPACE = 0x2A,
89 HID_KEY_TAB = 0x2B,
90 HID_KEY_SPACE = 0x2C,
91 HID_KEY_MINUS = 0x2D,
92 HID_KEY_EQUAL = 0x2E,
93 HID_KEY_BRACKET_LEFT = 0x2F,
94 HID_KEY_BRACKET_RIGHT = 0x30,
95 HID_KEY_BACKSLASH = 0x31,
96 HID_KEY_SEMICOLON = 0x33,
97 HID_KEY_APOSTROPHE = 0x34,
98 HID_KEY_GRAVE = 0x35,
99 HID_KEY_COMMA = 0x36,
100 HID_KEY_PERIOD = 0x37,
101 HID_KEY_SLASH = 0x38,
102
103 HID_KEY_CAPS_LOCK = 0x39,
104
105 // Function Keys
106 HID_KEY_F1 = 0x3A,
107 HID_KEY_F2 = 0x3B,
108 HID_KEY_F3 = 0x3C,
109 HID_KEY_F4 = 0x3D,
110 HID_KEY_F5 = 0x3E,
111 HID_KEY_F6 = 0x3F,
112 HID_KEY_F7 = 0x40,
113 HID_KEY_F8 = 0x41,
114 HID_KEY_F9 = 0x42,
115 HID_KEY_F10 = 0x43,
116 HID_KEY_F11 = 0x44,
117 HID_KEY_F12 = 0x45,
118
119 // Navigation
120 HID_KEY_PRINT_SCREEN = 0x46,
121 HID_KEY_SCROLL_LOCK = 0x47,
122 HID_KEY_PAUSE = 0x48,
123 HID_KEY_INSERT = 0x49,
124 HID_KEY_HOME = 0x4A,
125 HID_KEY_PAGE_UP = 0x4B,
126 HID_KEY_DELETE = 0x4C,
127 HID_KEY_END = 0x4D,
128 HID_KEY_PAGE_DOWN = 0x4E,
129 HID_KEY_RIGHT = 0x4F,
130 HID_KEY_LEFT = 0x50,
131 HID_KEY_DOWN = 0x51,
132 HID_KEY_UP = 0x52,
133
134 // Modifiers
135 HID_KEY_LEFT_CTRL = 0xE0,
136 HID_KEY_LEFT_SHIFT = 0xE1,
137 HID_KEY_LEFT_ALT = 0xE2,
138 HID_KEY_LEFT_GUI = 0xE3,
139 HID_KEY_RIGHT_CTRL = 0xE4,
140 HID_KEY_RIGHT_SHIFT = 0xE5,
141 HID_KEY_RIGHT_ALT = 0xE6,
142 HID_KEY_RIGHT_GUI = 0xE7
143};
144
150 // 0x00 - 0x03 (Reserved/Error)
151 [0x00] = 0,
152 [0x01] = 0,
153 [0x02] = 0,
154 [0x03] = 0,
155
156 // 0x04 - 0x1D (Letters a-z)
157 [HID_KEY_A] = 'a',
158 [HID_KEY_B] = 'b',
159 [HID_KEY_C] = 'c',
160 [HID_KEY_D] = 'd',
161 [HID_KEY_E] = 'e',
162 [HID_KEY_F] = 'f',
163 [HID_KEY_G] = 'g',
164 [HID_KEY_H] = 'h',
165 [HID_KEY_I] = 'i',
166 [HID_KEY_J] = 'j',
167 [HID_KEY_K] = 'k',
168 [HID_KEY_L] = 'l',
169 [HID_KEY_M] = 'm',
170 [HID_KEY_N] = 'n',
171 [HID_KEY_O] = 'o',
172 [HID_KEY_P] = 'p',
173 [HID_KEY_Q] = 'q',
174 [HID_KEY_R] = 'r',
175 [HID_KEY_S] = 's',
176 [HID_KEY_T] = 't',
177 [HID_KEY_U] = 'u',
178 [HID_KEY_V] = 'v',
179 [HID_KEY_W] = 'w',
180 [HID_KEY_X] = 'x',
181 [HID_KEY_Y] = 'y',
182 [HID_KEY_Z] = 'z',
183
184 // 0x1E - 0x27 (Numbers 1-0)
185 [HID_KEY_1] = '1',
186 [HID_KEY_2] = '2',
187 [HID_KEY_3] = '3',
188 [HID_KEY_4] = '4',
189 [HID_KEY_5] = '5',
190 [HID_KEY_6] = '6',
191 [HID_KEY_7] = '7',
192 [HID_KEY_8] = '8',
193 [HID_KEY_9] = '9',
194 [HID_KEY_0] = '0',
195
196 // 0x28 - 0x38 (Symbols & Controls)
197 [HID_KEY_ENTER] = '\n',
198 [HID_KEY_ESCAPE] = 0x1B,
199 [HID_KEY_BACKSPACE] = '\b',
200 [HID_KEY_TAB] = '\t',
201 [HID_KEY_SPACE] = ' ',
202 [HID_KEY_MINUS] = '-',
203 [HID_KEY_EQUAL] = '=',
204 [HID_KEY_BRACKET_LEFT] = '[',
205 [HID_KEY_BRACKET_RIGHT] = ']',
206 [HID_KEY_BACKSLASH] = '\\',
207 [HID_KEY_SEMICOLON] = ';',
208 [HID_KEY_APOSTROPHE] = '\'',
209 [HID_KEY_GRAVE] = '`',
210 [HID_KEY_COMMA] = ',',
211 [HID_KEY_PERIOD] = '.',
212 [HID_KEY_SLASH] = '/',
213
214 // Keypad (Subset)
215 [0x59] = '1',
216 [0x5A] = '2',
217 [0x5B] = '3',
218 [0x5C] = '4',
219 [0x5D] = '5',
220 [0x5E] = '6',
221 [0x5F] = '7',
222 [0x60] = '8',
223 [0x61] = '9',
224 [0x62] = '0',
225 [0x54] = '/',
226 [0x55] = '*',
227 [0x56] = '-',
228 [0x57] = '+',
229 [0x58] = '\n',
230 [0x63] = '.'};
231
237 // 0x00 - 0x03
238 [0x00] = 0,
239
240 // 0x04 - 0x1D (Letters A-Z)
241 [HID_KEY_A] = 'A',
242 [HID_KEY_B] = 'B',
243 [HID_KEY_C] = 'C',
244 [HID_KEY_D] = 'D',
245 [HID_KEY_E] = 'E',
246 [HID_KEY_F] = 'F',
247 [HID_KEY_G] = 'G',
248 [HID_KEY_H] = 'H',
249 [HID_KEY_I] = 'I',
250 [HID_KEY_J] = 'J',
251 [HID_KEY_K] = 'K',
252 [HID_KEY_L] = 'L',
253 [HID_KEY_M] = 'M',
254 [HID_KEY_N] = 'N',
255 [HID_KEY_O] = 'O',
256 [HID_KEY_P] = 'P',
257 [HID_KEY_Q] = 'Q',
258 [HID_KEY_R] = 'R',
259 [HID_KEY_S] = 'S',
260 [HID_KEY_T] = 'T',
261 [HID_KEY_U] = 'U',
262 [HID_KEY_V] = 'V',
263 [HID_KEY_W] = 'W',
264 [HID_KEY_X] = 'X',
265 [HID_KEY_Y] = 'Y',
266 [HID_KEY_Z] = 'Z',
267
268 // 0x1E - 0x27 (Numbers -> Symbols)
269 [HID_KEY_1] = '!',
270 [HID_KEY_2] = '@',
271 [HID_KEY_3] = '#',
272 [HID_KEY_4] = '$',
273 [HID_KEY_5] = '%',
274 [HID_KEY_6] = '^',
275 [HID_KEY_7] = '&',
276 [HID_KEY_8] = '*',
277 [HID_KEY_9] = '(',
278 [HID_KEY_0] = ')',
279
280 // 0x28 - 0x38 (Symbols & Controls)
281 [HID_KEY_ENTER] = '\n',
282 [HID_KEY_ESCAPE] = 0x1B,
283 [HID_KEY_BACKSPACE] = '\b',
284 [HID_KEY_TAB] = '\t',
285 [HID_KEY_SPACE] = ' ',
286 [HID_KEY_MINUS] = '_',
287 [HID_KEY_EQUAL] = '+',
288 [HID_KEY_BRACKET_LEFT] = '{',
289 [HID_KEY_BRACKET_RIGHT] = '}',
290 [HID_KEY_BACKSLASH] = '|',
291 [HID_KEY_SEMICOLON] = ':',
292 [HID_KEY_APOSTROPHE] = '"',
293 [HID_KEY_GRAVE] = '~',
294 [HID_KEY_COMMA] = '<',
295 [HID_KEY_PERIOD] = '>',
296 [HID_KEY_SLASH] = '?',
297};
298
301
309HIDAPI inline char
310hid_parse_key(u8 modifier, u8 usage_id)
311{
312 if (usage_id >= HID_USAGE_MAX) {
313 return 0;
314 }
315
316 // Check for Left Shift (Bit 1) or Right Shift (Bit 5)
317 u8 is_shifted = (modifier & HID_BITMASK_LEFT_SHIFT) || (modifier & HID_BITMASK_RIGHT_SHIFT);
318
319 // Caps Lock handling requires state tracking external to this function.
320 // This function purely handles Shift-based mapping.
321
322 return is_shifted ? HID_TO_ASCII_UPPER[usage_id] : HID_TO_ASCII_LOWER[usage_id];
323}
324
325#ifdef __cplusplus
326}
327#endif
328#endif // HID_TABLES_H
#define HID_USAGE_MAX
Maximum supported HID Usage ID for the lookup tables.
Definition hid_tables.h:28
#define HID_BITMASK_LEFT_SHIFT
Bitmask for the Left Shift modifier.
Definition hid_tables.h:30
HID_TABLES_KEY_CODES
Full HID Usage IDs (Page 0x07 - Keyboard/Keypad).
Definition hid_tables.h:39
@ HID_KEY_ERROR_UNDEFINED
Definition hid_tables.h:43
@ HID_KEY_ERROR_ROLLOVER
Definition hid_tables.h:41
@ HID_KEY_POST_FAIL
Definition hid_tables.h:42
@ HID_KEY_NONE
Definition hid_tables.h:40
HIDAPI char hid_parse_key(u8 modifier, u8 usage_id)
Parses a HID key combination into an ASCII character.
Definition hid_tables.h:310
#define HID_BITMASK_RIGHT_SHIFT
Bitmask for the Right Shift modifier.
Definition hid_tables.h:32
HIDAPI const char HID_TO_ASCII_LOWER[HID_USAGE_MAX]
Lookup table for Lowercase characters (No Shift). Maps HID Usage IDs to their ASCII representation.
Definition hid_tables.h:149
#define HIDAPI
Defines scope for table data (defaults to static for header-only usage).
Definition hid_tables.h:24
HIDAPI const char HID_TO_ASCII_UPPER[HID_USAGE_MAX]
Lookup table for Uppercase characters (Shift Held). Maps HID Usage IDs to their ASCII representation ...
Definition hid_tables.h:236
enum HID_TABLES_KEY_CODES HidKeyCodes
Typedef for usage in function signatures.
Definition hid_tables.h:300
Global type definitions for the MITMGATE project.
uint8_t u8
Short alias for unsigned 8-bit integer.
Definition typedef.h:20