1use std::time::SystemTime;
2
3use num_derive::{FromPrimitive, ToPrimitive};
4use serde::{Deserialize, Serialize};
5use strum_macros::{EnumString, Display};
6
7#[derive(Serialize, Deserialize, Clone, Copy, Debug, PartialEq, Eq, Hash)]
14pub struct InputEvent {
15 pub time: SystemTime,
16 pub code: EventCode,
17 pub state: KeyState,
18}
19
20#[derive(
21 Serialize, Deserialize, FromPrimitive, ToPrimitive, Clone, Copy, Debug, PartialEq, Eq, Hash,
22)]
23#[allow(dead_code)]
24pub enum KeyState {
25 Up = 0,
26 Down = 1,
27 Held = 2,
28 NotImplemented = 3,
29}
30
31#[derive(Serialize, Deserialize, Clone, Copy, Debug, PartialEq, Eq, Hash)]
32pub enum EventCode {
33 KeyCode(KeyCode),
34 SynCode(SynCode),
35}
36
37#[allow(non_camel_case_types)]
40#[derive(
41 EnumString, Display, Serialize, Deserialize, FromPrimitive, ToPrimitive, Clone, Copy, Debug, PartialEq, Eq, Hash,
42)]
43#[allow(dead_code)]
44pub enum KeyCode {
45 KC_RESERVED = 0,
46 KC_ESC = 1,
47 KC_1 = 2,
48 KC_2 = 3,
49 KC_3 = 4,
50 KC_4 = 5,
51 KC_5 = 6,
52 KC_6 = 7,
53 KC_7 = 8,
54 KC_8 = 9,
55 KC_9 = 10,
56 KC_0 = 11,
57 KC_MINUS = 12,
58 KC_EQUAL = 13,
59 KC_BACKSPACE = 14,
60 KC_TAB = 15,
61 KC_Q = 16,
62 KC_W = 17,
63 KC_E = 18,
64 KC_R = 19,
65 KC_T = 20,
66 KC_Y = 21,
67 KC_U = 22,
68 KC_I = 23,
69 KC_O = 24,
70 KC_P = 25,
71 KC_LEFTBRACE = 26,
72 KC_RIGHTBRACE = 27,
73 KC_ENTER = 28,
74 KC_LEFTCTRL = 29,
75 KC_A = 30,
76 KC_S = 31,
77 KC_D = 32,
78 KC_F = 33,
79 KC_G = 34,
80 KC_H = 35,
81 KC_J = 36,
82 KC_K = 37,
83 KC_L = 38,
84 KC_SEMICOLON = 39,
85 KC_APOSTROPHE = 40,
86 KC_GRAVE = 41,
87 KC_LEFTSHIFT = 42,
88 KC_BACKSLASH = 43,
89 KC_Z = 44,
90 KC_X = 45,
91 KC_C = 46,
92 KC_V = 47,
93 KC_B = 48,
94 KC_N = 49,
95 KC_M = 50,
96 KC_COMMA = 51,
97 KC_DOT = 52,
98 KC_SLASH = 53,
99 KC_RIGHTSHIFT = 54,
100 KC_KPASTERISK = 55,
101 KC_LEFTALT = 56,
102 KC_SPACE = 57,
103 KC_CAPSLOCK = 58,
104 KC_F1 = 59,
105 KC_F2 = 60,
106 KC_F3 = 61,
107 KC_F4 = 62,
108 KC_F5 = 63,
109 KC_F6 = 64,
110 KC_F7 = 65,
111 KC_F8 = 66,
112 KC_F9 = 67,
113 KC_F10 = 68,
114 KC_NUMLOCK = 69,
115 KC_SCROLLLOCK = 70,
116 KC_KP7 = 71,
117 KC_KP8 = 72,
118 KC_KP9 = 73,
119 KC_KPMINUS = 74,
120 KC_KP4 = 75,
121 KC_KP5 = 76,
122 KC_KP6 = 77,
123 KC_KPPLUS = 78,
124 KC_KP1 = 79,
125 KC_KP2 = 80,
126 KC_KP3 = 81,
127 KC_KP0 = 82,
128 KC_KPDOT = 83,
129 KC_ZENKAKUHANKAKU = 85,
130 KC_102ND = 86,
131 KC_F11 = 87,
132 KC_F12 = 88,
133 KC_RO = 89,
134 KC_KATAKANA = 90,
135 KC_HIRAGANA = 91,
136 KC_HENKAN = 92,
137 KC_KATAKANAHIRAGANA = 93,
138 KC_MUHENKAN = 94,
139 KC_KPJPCOMMA = 95,
140 KC_KPENTER = 96,
141 KC_RIGHTCTRL = 97,
142 KC_KPSLASH = 98,
143 KC_SYSRQ = 99,
144 KC_RIGHTALT = 100,
145 KC_LINEFEED = 101,
146 KC_HOME = 102,
147 KC_UP = 103,
148 KC_PAGEUP = 104,
149 KC_LEFT = 105,
150 KC_RIGHT = 106,
151 KC_END = 107,
152 KC_DOWN = 108,
153 KC_PAGEDOWN = 109,
154 KC_INSERT = 110,
155 KC_DELETE = 111,
156 KC_MACRO = 112,
157 KC_MUTE = 113,
158 KC_VOLUMEDOWN = 114,
159 KC_VOLUMEUP = 115,
160 KC_POWER = 116,
161 KC_KPEQUAL = 117,
162 KC_KPPLUSMINUS = 118,
163 KC_PAUSE = 119,
164 KC_SCALE = 120,
165 KC_KPCOMMA = 121,
166 KC_HANGEUL = 122,
167 KC_HANJA = 123,
168 KC_YEN = 124,
169 KC_LEFTMETA = 125,
170 KC_RIGHTMETA = 126,
171 KC_COMPOSE = 127,
172 KC_STOP = 128,
173 KC_AGAIN = 129,
174 KC_PROPS = 130,
175 KC_UNDO = 131,
176 KC_FRONT = 132,
177 KC_COPY = 133,
178 KC_OPEN = 134,
179 KC_PASTE = 135,
180 KC_FIND = 136,
181 KC_CUT = 137,
182 KC_HELP = 138,
183 KC_MENU = 139,
184 KC_CALC = 140,
185 KC_SETUP = 141,
186 KC_SLEEP = 142,
187 KC_WAKEUP = 143,
188 KC_FILE = 144,
189 KC_SENDFILE = 145,
190 KC_DELETEFILE = 146,
191 KC_XFER = 147,
192 KC_PROG1 = 148,
193 KC_PROG2 = 149,
194 KC_WWW = 150,
195 KC_MSDOS = 151,
196 KC_COFFEE = 152,
197 KC_ROTATE_DISPLAY = 153,
198 KC_CYCLEWINDOWS = 154,
199 KC_MAIL = 155,
200 KC_BOOKMARKS = 156,
201 KC_COMPUTER = 157,
202 KC_BACK = 158,
203 KC_FORWARD = 159,
204 KC_CLOSECD = 160,
205 KC_EJECTCD = 161,
206 KC_EJECTCLOSECD = 162,
207 KC_NEXTSONG = 163,
208 KC_PLAYPAUSE = 164,
209 KC_PREVIOUSSONG = 165,
210 KC_STOPCD = 166,
211 KC_RECORD = 167,
212 KC_REWIND = 168,
213 KC_PHONE = 169,
214 KC_ISO = 170,
215 KC_CONFIG = 171,
216 KC_HOMEPAGE = 172,
217 KC_REFRESH = 173,
218 KC_EXIT = 174,
219 KC_MOVE = 175,
220 KC_EDIT = 176,
221 KC_SCROLLUP = 177,
222 KC_SCROLLDOWN = 178,
223 KC_KPLEFTPAREN = 179,
224 KC_KPRIGHTPAREN = 180,
225 KC_NEW = 181,
226 KC_REDO = 182,
227 KC_F13 = 183,
228 KC_F14 = 184,
229 KC_F15 = 185,
230 KC_F16 = 186,
231 KC_F17 = 187,
232 KC_F18 = 188,
233 KC_F19 = 189,
234 KC_F20 = 190,
235 KC_F21 = 191,
236 KC_F22 = 192,
237 KC_F23 = 193,
238 KC_F24 = 194,
239 KC_PLAYCD = 200,
240 KC_PAUSECD = 201,
241 KC_PROG3 = 202,
242 KC_PROG4 = 203,
243 KC_DASHBOARD = 204,
244 KC_SUSPEND = 205,
245 KC_CLOSE = 206,
246 KC_PLAY = 207,
247 KC_FASTFORWARD = 208,
248 KC_BASSBOOST = 209,
249 KC_PRINT = 210,
250 KC_HP = 211,
251 KC_CAMERA = 212,
252 KC_SOUND = 213,
253 KC_QUESTION = 214,
254 KC_EMAIL = 215,
255 KC_CHAT = 216,
256 KC_SEARCH = 217,
257 KC_CONNECT = 218,
258 KC_FINANCE = 219,
259 KC_SPORT = 220,
260 KC_SHOP = 221,
261 KC_ALTERASE = 222,
262 KC_CANCEL = 223,
263 KC_BRIGHTNESSDOWN = 224,
264 KC_BRIGHTNESSUP = 225,
265 KC_MEDIA = 226,
266 KC_SWITCHVIDEOMODE = 227,
267 KC_KBDILLUMTOGGLE = 228,
268 KC_KBDILLUMDOWN = 229,
269 KC_KBDILLUMUP = 230,
270 KC_SEND = 231,
271 KC_REPLY = 232,
272 KC_FORWARDMAIL = 233,
273 KC_SAVE = 234,
274 KC_DOCUMENTS = 235,
275 KC_BATTERY = 236,
276 KC_BLUETOOTH = 237,
277 KC_WLAN = 238,
278 KC_UWB = 239,
279 KC_UNKNOWN = 240,
280 KC_VIDEO_NEXT = 241,
281 KC_VIDEO_PREV = 242,
282 KC_BRIGHTNESS_CYCLE = 243,
283 KC_BRIGHTNESS_AUTO = 244,
284 KC_DISPLAY_OFF = 245,
285 KC_WWAN = 246,
286 KC_RFKILL = 247,
287 KC_MICMUTE = 248,
288 KC_OK = 352,
289 KC_SELECT = 353,
290 KC_GOTO = 354,
291 KC_CLEAR = 355,
292 KC_POWER2 = 356,
293 KC_OPTION = 357,
294 KC_INFO = 358,
295 KC_TIME = 359,
296 KC_VENDOR = 360,
297 KC_ARCHIVE = 361,
298 KC_PROGRAM = 362,
299 KC_CHANNEL = 363,
300 KC_FAVORITES = 364,
301 KC_EPG = 365,
302 KC_PVR = 366,
303 KC_MHP = 367,
304 KC_LANGUAGE = 368,
305 KC_TITLE = 369,
306 KC_SUBTITLE = 370,
307 KC_ANGLE = 371,
308 KC_FULL_SCREEN = 372,
309 KC_MODE = 373,
310 KC_KEYBOARD = 374,
311 KC_ASPECT_RATIO = 375,
312 KC_PC = 376,
313 KC_TV = 377,
314 KC_TV2 = 378,
315 KC_VCR = 379,
316 KC_VCR2 = 380,
317 KC_SAT = 381,
318 KC_SAT2 = 382,
319 KC_CD = 383,
320 KC_TAPE = 384,
321 KC_RADIO = 385,
322 KC_TUNER = 386,
323 KC_PLAYER = 387,
324 KC_TEXT = 388,
325 KC_DVD = 389,
326 KC_AUX = 390,
327 KC_MP3 = 391,
328 KC_AUDIO = 392,
329 KC_VIDEO = 393,
330 KC_DIRECTORY = 394,
331 KC_LIST = 395,
332 KC_MEMO = 396,
333 KC_CALENDAR = 397,
334 KC_RED = 398,
335 KC_GREEN = 399,
336 KC_YELLOW = 400,
337 KC_BLUE = 401,
338 KC_CHANNELUP = 402,
339 KC_CHANNELDOWN = 403,
340 KC_FIRST = 404,
341 KC_LAST = 405,
342 KC_AB = 406,
343 KC_NEXT = 407,
344 KC_RESTART = 408,
345 KC_SLOW = 409,
346 KC_SHUFFLE = 410,
347 KC_BREAK = 411,
348 KC_PREVIOUS = 412,
349 KC_DIGITS = 413,
350 KC_TEEN = 414,
351 KC_TWEN = 415,
352 KC_VIDEOPHONE = 416,
353 KC_GAMES = 417,
354 KC_ZOOMIN = 418,
355 KC_ZOOMOUT = 419,
356 KC_ZOOMRESET = 420,
357 KC_WORDPROCESSOR = 421,
358 KC_EDITOR = 422,
359 KC_SPREADSHEET = 423,
360 KC_GRAPHICSEDITOR = 424,
361 KC_PRESENTATION = 425,
362 KC_DATABASE = 426,
363 KC_NEWS = 427,
364 KC_VOICEMAIL = 428,
365 KC_ADDRESSBOOK = 429,
366 KC_MESSENGER = 430,
367 KC_DISPLAYTOGGLE = 431,
368 KC_SPELLCHECK = 432,
369 KC_LOGOFF = 433,
370 KC_DOLLAR = 434,
371 KC_EURO = 435,
372 KC_FRAMEBACK = 436,
373 KC_FRAMEFORWARD = 437,
374 KC_CONTEXT_MENU = 438,
375 KC_MEDIA_REPEAT = 439,
376 KC_10CHANNELSUP = 440,
377 KC_10CHANNELSDOWN = 441,
378 KC_IMAGES = 442,
379 KC_DEL_EOL = 448,
380 KC_DEL_EOS = 449,
381 KC_INS_LINE = 450,
382 KC_DEL_LINE = 451,
383 KC_FN = 464,
384 KC_FN_ESC = 465,
385 KC_FN_F1 = 466,
386 KC_FN_F2 = 467,
387 KC_FN_F3 = 468,
388 KC_FN_F4 = 469,
389 KC_FN_F5 = 470,
390 KC_FN_F6 = 471,
391 KC_FN_F7 = 472,
392 KC_FN_F8 = 473,
393 KC_FN_F9 = 474,
394 KC_FN_F10 = 475,
395 KC_FN_F11 = 476,
396 KC_FN_F12 = 477,
397 KC_FN_1 = 478,
398 KC_FN_2 = 479,
399 KC_FN_D = 480,
400 KC_FN_E = 481,
401 KC_FN_F = 482,
402 KC_FN_S = 483,
403 KC_FN_B = 484,
404 KC_BRL_DOT1 = 497,
405 KC_BRL_DOT2 = 498,
406 KC_BRL_DOT3 = 499,
407 KC_BRL_DOT4 = 500,
408 KC_BRL_DOT5 = 501,
409 KC_BRL_DOT6 = 502,
410 KC_BRL_DOT7 = 503,
411 KC_BRL_DOT8 = 504,
412 KC_BRL_DOT9 = 505,
413 KC_BRL_DOT10 = 506,
414 KC_NUMERIC_0 = 512,
415 KC_NUMERIC_1 = 513,
416 KC_NUMERIC_2 = 514,
417 KC_NUMERIC_3 = 515,
418 KC_NUMERIC_4 = 516,
419 KC_NUMERIC_5 = 517,
420 KC_NUMERIC_6 = 518,
421 KC_NUMERIC_7 = 519,
422 KC_NUMERIC_8 = 520,
423 KC_NUMERIC_9 = 521,
424 KC_NUMERIC_STAR = 522,
425 KC_NUMERIC_POUND = 523,
426 KC_NUMERIC_A = 524,
427 KC_NUMERIC_B = 525,
428 KC_NUMERIC_C = 526,
429 KC_NUMERIC_D = 527,
430 KC_CAMERA_FOCUS = 528,
431 KC_WPS_BUTTON = 529,
432 KC_TOUCHPAD_TOGGLE = 530,
433 KC_TOUCHPAD_ON = 531,
434 KC_TOUCHPAD_OFF = 532,
435 KC_CAMERA_ZOOMIN = 533,
436 KC_CAMERA_ZOOMOUT = 534,
437 KC_CAMERA_UP = 535,
438 KC_CAMERA_DOWN = 536,
439 KC_CAMERA_LEFT = 537,
440 KC_CAMERA_RIGHT = 538,
441 KC_ATTENDANT_ON = 539,
442 KC_ATTENDANT_OFF = 540,
443 KC_ATTENDANT_TOGGLE = 541,
444 KC_LIGHTS_TOGGLE = 542,
445 KC_ALS_TOGGLE = 560,
446 KC_ROTATE_LOCK_TOGGLE = 561,
447 KC_BUTTONCONFIG = 576,
448 KC_TASKMANAGER = 577,
449 KC_JOURNAL = 578,
450 KC_CONTROLPANEL = 579,
451 KC_APPSELECT = 580,
452 KC_SCREENSAVER = 581,
453 KC_VOICECOMMAND = 582,
454 KC_ASSISTANT = 583,
455 KC_BRIGHTNESS_MIN = 592,
456 KC_BRIGHTNESS_MAX = 593,
457 KC_KBDINPUTASSIST_PREV = 608,
458 KC_KBDINPUTASSIST_NEXT = 609,
459 KC_KBDINPUTASSIST_PREVGROUP = 610,
460 KC_KBDINPUTASSIST_NEXTGROUP = 611,
461 KC_KBDINPUTASSIST_ACCEPT = 612,
462 KC_KBDINPUTASSIST_CANCEL = 613,
463 KC_RIGHT_UP = 614,
464 KC_RIGHT_DOWN = 615,
465 KC_LEFT_UP = 616,
466 KC_LEFT_DOWN = 617,
467 KC_ROOT_MENU = 618,
468 KC_MEDIA_TOP_MENU = 619,
469 KC_NUMERIC_11 = 620,
470 KC_NUMERIC_12 = 621,
471 KC_AUDIO_DESC = 622,
472 KC_3D_MODE = 623,
473 KC_NEXT_FAVORITE = 624,
474 KC_STOP_RECORD = 625,
475 KC_PAUSE_RECORD = 626,
476 KC_VOD = 627,
477 KC_UNMUTE = 628,
478 KC_FASTREVERSE = 629,
479 KC_SLOWREVERSE = 630,
480 KC_DATA = 631,
481 KC_ONSCREEN_KEYBOARD = 632,
482 KC_MAX = 767,
483 NotImplemented = 768,
484}
485
486#[derive(
487 Serialize, Deserialize, FromPrimitive, ToPrimitive, Clone, Copy, Debug, PartialEq, Eq, Hash,
488)]
489pub enum SynCode {
490 Report = 0,
491 Config = 1,
492 MTReport = 2,
493 Dropped = 3,
494 Max = 15,
495}