1use kanata_keyberon::key_code::*;
4use once_cell::sync::Lazy;
5use parking_lot::Mutex;
6use rustc_hash::FxHashMap as HashMap;
7
8#[cfg(any(target_os = "linux", target_os = "unknown"))]
9mod linux;
10#[cfg(any(target_os = "macos", target_os = "unknown"))]
11mod macos;
12#[cfg(any(target_os = "windows", target_os = "unknown"))]
13mod windows;
14#[cfg(any(target_os = "macos", target_os = "unknown"))]
15pub use macos::PageCode;
16
17#[cfg(target_os = "windows")]
18pub use windows::VK_KPENTER_FAKE;
19
20mod mappings;
21
22#[cfg(target_os = "unknown")]
23#[derive(Clone, Copy)]
24pub enum Platform {
25 Win,
26 Linux,
27 Macos,
28}
29
30#[cfg(target_os = "unknown")]
31pub static OSCODE_MAPPING_VARIANT: Mutex<Platform> = Mutex::new(Platform::Linux);
32
33impl OsCode {
34 pub fn as_u16(self) -> u16 {
35 #[cfg(target_os = "unknown")]
36 return match *OSCODE_MAPPING_VARIANT.lock() {
37 Platform::Win => self.as_u16_windows(),
38 Platform::Linux => self.as_u16_linux(),
39 Platform::Macos => self.as_u16_macos(),
40 };
41
42 #[cfg(target_os = "linux")]
43 return self.as_u16_linux();
44
45 #[cfg(target_os = "windows")]
46 return self.as_u16_windows();
47
48 #[cfg(target_os = "macos")]
49 return self.as_u16_macos();
50 }
51
52 pub fn from_u16(code: u16) -> Option<Self> {
53 #[cfg(target_os = "unknown")]
54 return match *OSCODE_MAPPING_VARIANT.lock() {
55 Platform::Win => OsCode::from_u16_windows(code),
56 Platform::Linux => OsCode::from_u16_linux(code),
57 Platform::Macos => OsCode::from_u16_macos(code),
58 };
59
60 #[cfg(target_os = "linux")]
61 return OsCode::from_u16_linux(code);
62
63 #[cfg(target_os = "windows")]
64 return OsCode::from_u16_windows(code);
65
66 #[cfg(target_os = "macos")]
67 return OsCode::from_u16_macos(code);
68 }
69
70 pub fn is_modifier(self) -> bool {
71 matches!(
72 self,
73 OsCode::KEY_LEFTSHIFT
74 | OsCode::KEY_RIGHTSHIFT
75 | OsCode::KEY_LEFTMETA
76 | OsCode::KEY_RIGHTMETA
77 | OsCode::KEY_LEFTCTRL
78 | OsCode::KEY_RIGHTCTRL
79 | OsCode::KEY_LEFTALT
80 | OsCode::KEY_RIGHTALT
81 )
82 }
83
84 #[cfg(feature = "zippychord")]
85 pub fn is_zippy_ignored(self) -> bool {
86 matches!(
87 self,
88 OsCode::KEY_LEFTSHIFT
89 | OsCode::KEY_RIGHTSHIFT
90 | OsCode::KEY_LEFTMETA
91 | OsCode::KEY_RIGHTMETA
92 | OsCode::KEY_LEFTCTRL
93 | OsCode::KEY_RIGHTCTRL
94 | OsCode::KEY_LEFTALT
95 | OsCode::KEY_RIGHTALT
96 | OsCode::KEY_ESC
97 | OsCode::KEY_BACKSPACE
98 | OsCode::KEY_DELETE
99 )
100 }
101}
102
103static CUSTOM_STRS_TO_OSCODES: Lazy<Mutex<HashMap<String, OsCode>>> = Lazy::new(|| {
104 let mut mappings = HashMap::default();
105 add_default_str_osc_mappings(&mut mappings);
106 mappings.shrink_to_fit();
107 Mutex::new(mappings)
108});
109
110pub fn replace_custom_str_oscode_mapping(mapping: &HashMap<String, OsCode>) {
119 let mut local_mapping = CUSTOM_STRS_TO_OSCODES.lock();
120 local_mapping.clear();
121 local_mapping.extend(mapping.iter().map(|kv| (kv.0.clone(), *kv.1)));
122 add_default_str_osc_mappings(&mut local_mapping);
123 local_mapping.shrink_to_fit();
124}
125
126pub fn clear_custom_str_oscode_mapping() {
128 let mut local_mapping = CUSTOM_STRS_TO_OSCODES.lock();
129 local_mapping.clear();
130 local_mapping.shrink_to_fit();
131}
132
133fn add_default_str_osc_mappings(mapping: &mut HashMap<String, OsCode>) {
137 const DEFAULT_MAPPINGS: &[(&str, OsCode)] = &[
138 ("+", OsCode::KEY_KPPLUS),
139 ("[", OsCode::KEY_LEFTBRACE),
140 ("]", OsCode::KEY_RIGHTBRACE),
141 ("{", OsCode::KEY_LEFTBRACE),
142 ("}", OsCode::KEY_RIGHTBRACE),
143 ("/", OsCode::KEY_SLASH),
144 (";", OsCode::KEY_SEMICOLON),
145 ("`", OsCode::KEY_GRAVE),
146 ("=", OsCode::KEY_EQUAL),
147 ("-", OsCode::KEY_MINUS),
148 ("'", OsCode::KEY_APOSTROPHE),
149 (",", OsCode::KEY_COMMA),
150 (".", OsCode::KEY_DOT),
151 ("\\", OsCode::KEY_BACKSLASH),
152 ("yen", OsCode::KEY_BACKSLASH),
154 ("¥", OsCode::KEY_YEN),
156 ("right", OsCode::KEY_RIGHT),
157 ("grave", OsCode::KEY_GRAVE),
158 ];
159 for dm in DEFAULT_MAPPINGS {
160 mapping.entry(dm.0.into()).or_insert(dm.1);
161 }
162}
163
164#[rustfmt::skip]
172pub fn str_to_oscode(s: &str) -> Option<OsCode> {
173 if let Some(osc) = CUSTOM_STRS_TO_OSCODES.lock().get(s) {
174 return Some(*osc);
175 }
176 Some(match s {
177 "Backquote" | "grv" | "ˋ" | "˜" => OsCode::KEY_GRAVE,
178 "Digit1" | "1" => OsCode::KEY_1,
179 "Digit2" | "2" => OsCode::KEY_2,
180 "Digit3" | "3" => OsCode::KEY_3,
181 "Digit4" | "4" => OsCode::KEY_4,
182 "Digit5" | "5" => OsCode::KEY_5,
183 "Digit6" | "6" => OsCode::KEY_6,
184 "Digit7" | "7" => OsCode::KEY_7,
185 "Digit8" | "8" => OsCode::KEY_8,
186 "Digit9" | "9" => OsCode::KEY_9,
187 "Digit0" | "0" => OsCode::KEY_0,
188 "Minus" | "min" | "‐" => OsCode::KEY_MINUS,
189 "Equal" | "eql" | "₌" => OsCode::KEY_EQUAL,
190 "Backspace" | "bspc" | "bks" | "␈" | "⌫" => OsCode::KEY_BACKSPACE,
191 "Tab" | "tab" | "⭾" | "↹" => OsCode::KEY_TAB,
192 "KeyQ" | "q" => OsCode::KEY_Q,
193 "KeyW" | "w" => OsCode::KEY_W,
194 "KeyE" | "e" => OsCode::KEY_E,
195 "KeyR" | "r" => OsCode::KEY_R,
196 "KeyT" | "t" => OsCode::KEY_T,
197 "KeyY" | "y" => OsCode::KEY_Y,
198 "KeyU" | "u" => OsCode::KEY_U,
199 "KeyI" | "i" => OsCode::KEY_I,
200 "KeyO" | "o" => OsCode::KEY_O,
201 "KeyP" | "p" => OsCode::KEY_P,
202 "BracketLeft" | "lbrc" | "【" | "「" | "〔" | "⎡" => OsCode::KEY_LEFTBRACE,
203 "BracketRight" | "rbrc" | "】" | "」" | "〕" | "⎣" => OsCode::KEY_RIGHTBRACE,
204 "CapsLock" | "caps" | "⇪" => OsCode::KEY_CAPSLOCK,
205 "KeyA" | "a" => OsCode::KEY_A,
206 "KeyS" | "s" => OsCode::KEY_S,
207 "KeyD" | "d" => OsCode::KEY_D,
208 "KeyF" | "f" => OsCode::KEY_F,
209 "KeyG" | "g" => OsCode::KEY_G,
210 "KeyH" | "h" => OsCode::KEY_H,
211 "KeyJ" | "j" => OsCode::KEY_J,
212 "KeyK" | "k" => OsCode::KEY_K,
213 "KeyL" | "l" => OsCode::KEY_L,
214 "Semicolon" | "scln" | "︔" => OsCode::KEY_SEMICOLON,
215 "Quote" | "apo" | "apos" => OsCode::KEY_APOSTROPHE,
216 "Enter" | "ret" | "return" | "ent" | "enter" | "⏎" | "↩" | "↵" | "↲" | "⤶" | "⎆" | "⌤" | "" => OsCode::KEY_ENTER,
217 "ShiftLeft" | "lshift" | "lshft" | "lsft" | "shft" | "sft" | "‹⇧" => OsCode::KEY_LEFTSHIFT,
218 "KeyZ" | "z" => OsCode::KEY_Z,
219 "KeyX" | "x" => OsCode::KEY_X,
220 "KeyC" | "c" => OsCode::KEY_C,
221 "KeyV" | "v" => OsCode::KEY_V,
222 "KeyB" | "b" => OsCode::KEY_B,
223 "KeyN" | "n" => OsCode::KEY_N,
224 "KeyM" | "m" => OsCode::KEY_M,
225 "Comma" | "comm" | "⸴" => OsCode::KEY_COMMA,
226 "Period" | "." => OsCode::KEY_DOT,
227 "Slash" | "⁄" => OsCode::KEY_SLASH,
228 "Backslash" | "bksl" | "⧵" | "\" => OsCode::KEY_BACKSLASH,
229 "kp=" | "clr" => OsCode::KEY_CLEAR,
230 "Numpad0" | "kp0" | "🔢₀" => OsCode::KEY_KP0,
232 "Numpad1" | "kp1" | "🔢₁" => OsCode::KEY_KP1,
233 "Numpad2" | "kp2" | "🔢₂" => OsCode::KEY_KP2,
234 "Numpad3" | "kp3" | "🔢₃" => OsCode::KEY_KP3,
235 "Numpad4" | "kp4" | "🔢₄" => OsCode::KEY_KP4,
236 "Numpad5" | "kp5" | "🔢₅" => OsCode::KEY_KP5,
237 "Numpad6" | "kp6" | "🔢₆" => OsCode::KEY_KP6,
238 "Numpad7" | "kp7" | "🔢₇" => OsCode::KEY_KP7,
239 "Numpad8" | "kp8" | "🔢₈" => OsCode::KEY_KP8,
240 "Numpad9" | "kp9" | "🔢₉" => OsCode::KEY_KP9,
241 "NumpadEnter" | "kprt" | "🔢⏎" | "🔢↩" | "🔢↵" | "🔢↲" | "🔢⤶" | "🔢⎆" | "🔢⌤" | "🔢" => OsCode::KEY_KPENTER,
242 "NumpadDivide" | "kp/" | "🔢⁄" => OsCode::KEY_KPSLASH,
243 "NumpadAdd" | "kp+" | "🔢₊" => OsCode::KEY_KPPLUS,
244 "NumpadMultiply" | "kp*" | "🔢∗" => OsCode::KEY_KPASTERISK,
245 "NumpadEqual" | "🔢₌" => OsCode::KEY_KPEQUAL,
246 "NumpadSubtract" | "kp-" | "🔢₋" => OsCode::KEY_KPMINUS,
247 "NumpadDecimal" | "kp." | "🔢." => OsCode::KEY_KPDOT,
248 "NumpadComma" | "kp," | "🔢⸴" =>OsCode::KEY_KPCOMMA,
249 "ssrq" | "sys" => OsCode::KEY_SYSRQ,
250 "IntlBackslash" | "102d" | "lsgt" | "nubs" | "nonusbslash" | "﹨" | "<" => OsCode::KEY_102ND,
252 "ScrollLock" | "scrlck" | "slck" | "⇳🔒" => OsCode::KEY_SCROLLLOCK,
253 "Pause" | "pause" | "break" | "brk" => OsCode::KEY_PAUSE,
254 "WakeUp" | "wkup" => OsCode::KEY_WAKEUP,
255 "Escape" | "esc" | "⎋" => OsCode::KEY_ESC,
256 "ShiftRight" | "RightShift" | "rshift" | "rshft" | "rsft" | "⇧›" => OsCode::KEY_RIGHTSHIFT,
257 "ControlLeft" | "lctrl" | "lctl" | "ctl" | "‹⎈" | "‹⌃" => OsCode::KEY_LEFTCTRL,
258 "AltLeft" | "lalt" | "alt" | "‹⎇" | "‹⌥" => OsCode::KEY_LEFTALT,
259 "Space" | "spc" | "␠" | "␣" => OsCode::KEY_SPACE,
260 "AltRight" | "ralt" | "altgr" | "⎇›" | "⌥›" | "⇮" => OsCode::KEY_RIGHTALT,
261 "ContextMenu" | "comp" | "cmps" | "cmp" | "menu" | "apps" | "▤" | "☰" | "𝌆" => OsCode::KEY_COMPOSE,
262 "🎛" => OsCode::KEY_DASHBOARD,
263 "MetaLeft" | "lmeta" | "lmet" | "met" | "‹◆" | "‹⌘" | "‹❖" | "‹⊞" => OsCode::KEY_LEFTMETA,
265 "MetaRight" | "rmeta" | "rmet" | "◆›" | "⌘›" | "❖›" | "⊞›" => OsCode::KEY_RIGHTMETA,
266 "ControlRight" | "rctrl" | "rctl" | "⎈›" | "⌃›" => OsCode::KEY_RIGHTCTRL,
267 "Delete" | "del" | "␡" | "⌦" => OsCode::KEY_DELETE,
268 "Insert" | "ins" | "⎀" => OsCode::KEY_INSERT,
269 "BrowserBack" | "bck" => OsCode::KEY_BACK,
270 "BrowserForward" | "fwd" => OsCode::KEY_FORWARD,
271 "PageUp" | "pgup" | "⇞" | "⎗" => OsCode::KEY_PAGEUP,
272 "PageDown" | "pgdn" | "⇟" | "⎘" => OsCode::KEY_PAGEDOWN,
273 "ArrowUp" | "up" | "▲" | "↑" => OsCode::KEY_UP,
274 "ArrowDown" | "down" | "▼" | "↓" => OsCode::KEY_DOWN,
275 "ArrowLeft" | "lft" | "left" | "◀" | "←" => OsCode::KEY_LEFT,
276 "ArrowRight" | "rght" | "▶" | "→" => OsCode::KEY_RIGHT,
277 "Home" | "home" | "⇤" | "⤒" | "↖" | "⇱" => OsCode::KEY_HOME,
278 "End" | "end" | "⇥" | "⤓" | "↘" | "⇲" => OsCode::KEY_END,
279 "NumLock" | "nlck" | "nlk" | "⇭"=> OsCode::KEY_NUMLOCK,
280 "VolumeMute" | "mute" | "🔇" | "🔈⓪" | "🔈⓿" | "🔈₀" => OsCode::KEY_MUTE,
281 "VolumeUp" | "volu" | "🔊" | "🔈+" | "🔈➕" | "🔈₊" | "🔈⊕" => OsCode::KEY_VOLUMEUP,
282 "VolumeDown" | "voldwn" | "vold" | "🔉" | "🔈−" | "🔈➖" | "🔈₋" | "🔈⊖" => OsCode::KEY_VOLUMEDOWN,
283 "brup" | "bru" | "🔆" => OsCode::KEY_BRIGHTNESSUP,
284 "brdown" | "brdwn" | "brdn" | "🔅" => OsCode::KEY_BRIGHTNESSDOWN,
285 "blup" | "⌨💡+" | "⌨💡➕" | "⌨💡₊" | "⌨💡⊕" => OsCode::KEY_KBDILLUMUP,
286 "bldn" | "⌨💡−" | "⌨💡➖" | "⌨💡₋" | "⌨💡⊖" => OsCode::KEY_KBDILLUMDOWN,
287 "MediaTrackNext" | "next" | "▶▶" => OsCode::KEY_NEXTSONG,
288 "MediaPlayPause" | "pp" | "▶⏸" => OsCode::KEY_PLAYPAUSE,
289 "MediaTrackPrevious" | "prev" | "◀◀" => OsCode::KEY_PREVIOUSSONG,
290 "F1" | "f1" => OsCode::KEY_F1,
291 "F2" | "f2" => OsCode::KEY_F2,
292 "F3" | "f3" => OsCode::KEY_F3,
293 "F4" | "f4" => OsCode::KEY_F4,
294 "F5" | "f5" => OsCode::KEY_F5,
295 "F6" | "f6" => OsCode::KEY_F6,
296 "F7" | "f7" => OsCode::KEY_F7,
297 "F8" | "f8" => OsCode::KEY_F8,
298 "F9" | "f9" => OsCode::KEY_F9,
299 "F10" | "f10" => OsCode::KEY_F10,
300 "F11" | "f11" => OsCode::KEY_F11,
301 "F12" | "f12" => OsCode::KEY_F12,
302 "F13" | "f13" => OsCode::KEY_F13,
303 "F14" | "f14" => OsCode::KEY_F14,
304 "F15" | "f15" => OsCode::KEY_F15,
305 "F16" | "f16" => OsCode::KEY_F16,
306 "F17" | "f17" => OsCode::KEY_F17,
307 "F18" | "f18" => OsCode::KEY_F18,
308 "F19" | "f19" => OsCode::KEY_F19,
309 "F20" | "f20" => OsCode::KEY_F20,
310 "F21" | "f21" => OsCode::KEY_F21,
311 "F22" | "f22" => OsCode::KEY_F22,
312 "F23" | "f23" => OsCode::KEY_F23,
313 "F24" | "f24" => OsCode::KEY_F24,
314 #[cfg(any(target_os = "macos", target_os = "unknown"))]
315 "fn" | "🌐" | "ƒ" | "ⓕ" | "Ⓕ" | "🄵" | "🅕" | "🅵" => OsCode::KEY_FN,
316 #[cfg(target_os = "windows")]
317 "kana" | "katakana" | "katakanahiragana" => OsCode::KEY_HANGEUL,
318 #[cfg(any(target_os = "linux", target_os = "unknown"))]
319 "kana" | "katakanahiragana" => OsCode::KEY_KATAKANAHIRAGANA,
320 #[cfg(any(target_os = "linux", target_os = "unknown"))]
321 "hiragana" => OsCode::KEY_HIRAGANA,
322 #[cfg(any(target_os = "linux", target_os = "unknown"))]
323 "katakana" => OsCode::KEY_KATAKANA,
324 "cnv" | "conv" | "henk" | "hnk" | "henkan" => OsCode::KEY_HENKAN,
325 "ncnv" | "mhnk" | "muhenkan" => OsCode::KEY_MUHENKAN,
326 "IntlRo" | "ro" => OsCode::KEY_RO,
327 #[cfg(any(target_os = "macos", target_os = "unknown"))]
328 "Lang1" | "kana" => OsCode::KEY_HANGEUL,
329 #[cfg(any(target_os = "macos", target_os = "unknown"))]
330 "Lang2" | "eisu" => OsCode::KEY_HANJA,
331
332 #[cfg(any(target_os = "linux", target_os = "unknown"))]
333 "PrintScreen" | "prtsc" | "prnt" | "⎙" => OsCode::KEY_SYSRQ,
334 #[cfg(target_os = "windows")]
335 "PrintScreen" | "prtsc" | "prnt" | "⎙" => OsCode::KEY_PRINT,
336
337 "mlft" | "mouseleft" | "🖰1" | "‹🖰" => OsCode::BTN_LEFT,
339 "mrgt" | "mouseright" | "🖰2" | "🖰›" => OsCode::BTN_RIGHT,
340 "mmid" | "mousemid" | "🖰3" => OsCode::BTN_MIDDLE,
341 "mbck" | "mousebackward" | "🖰4" => OsCode::BTN_SIDE,
342 "mfwd" | "mouseforward" | "🖰5" => OsCode::BTN_EXTRA,
343 "mwu" | "mousewheelup" => OsCode::MouseWheelUp,
344 "mwd" | "mousewheeldown" => OsCode::MouseWheelDown,
345 "mwl" | "mousewheelleft" => OsCode::MouseWheelLeft,
346 "mwr" | "mousewheelright" => OsCode::MouseWheelRight,
347
348 "hmpg" | "homepage" => OsCode::KEY_HOMEPAGE,
349 "mdia" | "media" => OsCode::KEY_MEDIA,
350 "LaunchMail" | "mail" => OsCode::KEY_MAIL,
351 "email" => OsCode::KEY_EMAIL,
352 "calc" => OsCode::KEY_CALC,
353
354 #[cfg(any(target_os = "linux", target_os = "unknown"))]
356 "plyr" | "player" => OsCode::KEY_PLAYER,
357 #[cfg(any(target_os = "linux", target_os = "unknown"))]
358 "powr" | "power" => OsCode::KEY_POWER,
359 #[cfg(any(target_os = "linux", target_os = "unknown"))]
360 "zzz" | "sleep" => OsCode::KEY_SLEEP,
361
362 "sls" | "SpotLightSearch" => OsCode::KEY_249,
363 "dtn" | "Dictation" => OsCode::KEY_250,
364 "dnd" | "DoNotDisturb" => OsCode::KEY_251,
365 "mctl" | "MissionControl" => OsCode::KEY_252,
366 "lpad" | "LaunchPad" => OsCode::KEY_253,
367
368 "nop0" => OsCode::KEY_676,
371 "nop1" => OsCode::KEY_677,
372 "nop2" => OsCode::KEY_678,
373 "nop3" => OsCode::KEY_679,
374 "nop4" => OsCode::KEY_680,
375 "nop5" => OsCode::KEY_681,
376 "nop6" => OsCode::KEY_682,
377 "nop7" => OsCode::KEY_683,
378 "nop8" => OsCode::KEY_684,
379 "nop9" => OsCode::KEY_685,
380
381 "mvmt" | "mousemovement" | "🖰mv" => OsCode::KEY_766,
384
385 _ => return None,
386 })
387}
388
389#[repr(u16)]
393#[allow(non_camel_case_types)]
394#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
395pub enum OsCode {
396 KEY_RESERVED = 0,
397 KEY_ESC = 1,
398 KEY_1 = 2,
399 KEY_2 = 3,
400 KEY_3 = 4,
401 KEY_4 = 5,
402 KEY_5 = 6,
403 KEY_6 = 7,
404 KEY_7 = 8,
405 KEY_8 = 9,
406 KEY_9 = 10,
407 KEY_0 = 11,
408 KEY_MINUS = 12,
409 KEY_EQUAL = 13,
410 KEY_BACKSPACE = 14,
411 KEY_TAB = 15,
412 KEY_Q = 16,
413 KEY_W = 17,
414 KEY_E = 18,
415 KEY_R = 19,
416 KEY_T = 20,
417 KEY_Y = 21,
418 KEY_U = 22,
419 KEY_I = 23,
420 KEY_O = 24,
421 KEY_P = 25,
422 KEY_LEFTBRACE = 26,
423 KEY_RIGHTBRACE = 27,
424 KEY_ENTER = 28,
425 KEY_LEFTCTRL = 29,
426 KEY_A = 30,
427 KEY_S = 31,
428 KEY_D = 32,
429 KEY_F = 33,
430 KEY_G = 34,
431 KEY_H = 35,
432 KEY_J = 36,
433 KEY_K = 37,
434 KEY_L = 38,
435 KEY_SEMICOLON = 39,
436 KEY_APOSTROPHE = 40,
437 KEY_GRAVE = 41,
438 KEY_LEFTSHIFT = 42,
439 KEY_BACKSLASH = 43,
440 KEY_Z = 44,
441 KEY_X = 45,
442 KEY_C = 46,
443 KEY_V = 47,
444 KEY_B = 48,
445 KEY_N = 49,
446 KEY_M = 50,
447 KEY_COMMA = 51,
448 KEY_DOT = 52,
449 KEY_SLASH = 53,
450 KEY_RIGHTSHIFT = 54,
451 KEY_KPASTERISK = 55,
452 KEY_LEFTALT = 56,
453 KEY_SPACE = 57,
454 KEY_CAPSLOCK = 58,
455 KEY_F1 = 59,
456 KEY_F2 = 60,
457 KEY_F3 = 61,
458 KEY_F4 = 62,
459 KEY_F5 = 63,
460 KEY_F6 = 64,
461 KEY_F7 = 65,
462 KEY_F8 = 66,
463 KEY_F9 = 67,
464 KEY_F10 = 68,
465 KEY_NUMLOCK = 69,
466 KEY_SCROLLLOCK = 70,
467 KEY_KP7 = 71,
468 KEY_KP8 = 72,
469 KEY_KP9 = 73,
470 KEY_KPMINUS = 74,
471 KEY_KP4 = 75,
472 KEY_KP5 = 76,
473 KEY_KP6 = 77,
474 KEY_KPPLUS = 78,
475 KEY_KP1 = 79,
476 KEY_KP2 = 80,
477 KEY_KP3 = 81,
478 KEY_KP0 = 82,
479 KEY_KPDOT = 83,
480 KEY_84 = 84,
481 KEY_ZENKAKUHANKAKU = 85,
482 KEY_102ND = 86,
483 KEY_F11 = 87,
484 KEY_F12 = 88,
485 KEY_RO = 89,
486 KEY_KATAKANA = 90,
487 KEY_HIRAGANA = 91,
488 KEY_HENKAN = 92,
489 KEY_KATAKANAHIRAGANA = 93,
490 KEY_MUHENKAN = 94,
491 KEY_KPJPCOMMA = 95,
492 KEY_KPENTER = 96,
493 KEY_RIGHTCTRL = 97,
494 KEY_KPSLASH = 98,
495 KEY_SYSRQ = 99,
496 KEY_RIGHTALT = 100,
497 KEY_LINEFEED = 101,
498 KEY_HOME = 102,
499 KEY_UP = 103,
500 KEY_PAGEUP = 104,
501 KEY_LEFT = 105,
502 KEY_RIGHT = 106,
503 KEY_END = 107,
504 KEY_DOWN = 108,
505 KEY_PAGEDOWN = 109,
506 KEY_INSERT = 110,
507 KEY_DELETE = 111,
508 KEY_MACRO = 112,
509 KEY_MUTE = 113,
510 KEY_VOLUMEDOWN = 114,
511 KEY_VOLUMEUP = 115,
512 KEY_POWER = 116,
513 KEY_KPEQUAL = 117,
514 KEY_KPPLUSMINUS = 118,
515 KEY_PAUSE = 119,
516 KEY_SCALE = 120,
517 KEY_KPCOMMA = 121,
518 KEY_HANGEUL = 122,
519 KEY_HANJA = 123,
520 KEY_YEN = 124,
521 KEY_LEFTMETA = 125,
522 KEY_RIGHTMETA = 126,
523 KEY_COMPOSE = 127,
524 KEY_STOP = 128,
525 KEY_AGAIN = 129,
526 KEY_PROPS = 130,
527 KEY_UNDO = 131,
528 KEY_FRONT = 132,
529 KEY_COPY = 133,
530 KEY_OPEN = 134,
531 KEY_PASTE = 135,
532 KEY_FIND = 136,
533 KEY_CUT = 137,
534 KEY_HELP = 138,
535 KEY_MENU = 139,
536 KEY_CALC = 140,
537 KEY_SETUP = 141,
538 KEY_SLEEP = 142,
539 KEY_WAKEUP = 143,
540 KEY_FILE = 144,
541 KEY_SENDFILE = 145,
542 KEY_DELETEFILE = 146,
543 KEY_XFER = 147,
544 KEY_PROG1 = 148,
545 KEY_PROG2 = 149,
546 KEY_WWW = 150,
547 KEY_MSDOS = 151,
548 KEY_COFFEE = 152,
549 KEY_ROTATE_DISPLAY = 153,
550 KEY_CYCLEWINDOWS = 154,
551 KEY_MAIL = 155,
552 KEY_BOOKMARKS = 156,
553 KEY_COMPUTER = 157,
554 KEY_BACK = 158,
555 KEY_FORWARD = 159,
556 KEY_CLOSECD = 160,
557 KEY_EJECTCD = 161,
558 KEY_EJECTCLOSECD = 162,
559 KEY_NEXTSONG = 163,
560 KEY_PLAYPAUSE = 164,
561 KEY_PREVIOUSSONG = 165,
562 KEY_STOPCD = 166,
563 KEY_RECORD = 167,
564 KEY_REWIND = 168,
565 KEY_PHONE = 169,
566 KEY_ISO = 170,
567 KEY_CONFIG = 171,
568 KEY_HOMEPAGE = 172,
569 KEY_REFRESH = 173,
570 KEY_EXIT = 174,
571 KEY_MOVE = 175,
572 KEY_EDIT = 176,
573 KEY_SCROLLUP = 177,
574 KEY_SCROLLDOWN = 178,
575 KEY_KPLEFTPAREN = 179,
576 KEY_KPRIGHTPAREN = 180,
577 KEY_NEW = 181,
578 KEY_REDO = 182,
579 KEY_F13 = 183,
580 KEY_F14 = 184,
581 KEY_F15 = 185,
582 KEY_F16 = 186,
583 KEY_F17 = 187,
584 KEY_F18 = 188,
585 KEY_F19 = 189,
586 KEY_F20 = 190,
587 KEY_F21 = 191,
588 KEY_F22 = 192,
589 KEY_F23 = 193,
590 KEY_F24 = 194,
591 KEY_195 = 195,
592 KEY_196 = 196,
593 KEY_197 = 197,
594 KEY_198 = 198,
595 KEY_199 = 199,
596 KEY_PLAYCD = 200,
597 KEY_PAUSECD = 201,
598 KEY_PROG3 = 202,
599 KEY_PROG4 = 203,
600 KEY_DASHBOARD = 204,
601 KEY_SUSPEND = 205,
602 KEY_CLOSE = 206,
603 KEY_PLAY = 207,
604 KEY_FASTFORWARD = 208,
605 KEY_BASSBOOST = 209,
606 KEY_PRINT = 210,
607 KEY_HP = 211,
608 KEY_CAMERA = 212,
609 KEY_SOUND = 213,
610 KEY_QUESTION = 214,
611 KEY_EMAIL = 215,
612 KEY_CHAT = 216,
613 KEY_SEARCH = 217,
614 KEY_CONNECT = 218,
615 KEY_FINANCE = 219,
616 KEY_SPORT = 220,
617 KEY_SHOP = 221,
618 KEY_ALTERASE = 222,
619 KEY_CANCEL = 223,
620 KEY_BRIGHTNESSDOWN = 224,
621 KEY_BRIGHTNESSUP = 225,
622 KEY_MEDIA = 226,
623 KEY_SWITCHVIDEOMODE = 227,
624 KEY_KBDILLUMTOGGLE = 228,
625 KEY_KBDILLUMDOWN = 229,
626 KEY_KBDILLUMUP = 230,
627 KEY_SEND = 231,
628 KEY_REPLY = 232,
629 KEY_FORWARDMAIL = 233,
630 KEY_SAVE = 234,
631 KEY_DOCUMENTS = 235,
632 KEY_BATTERY = 236,
633 KEY_BLUETOOTH = 237,
634 KEY_WLAN = 238,
635 KEY_UWB = 239,
636 KEY_UNKNOWN = 240,
637 KEY_VIDEO_NEXT = 241,
638 KEY_VIDEO_PREV = 242,
639 KEY_BRIGHTNESS_CYCLE = 243,
640 KEY_BRIGHTNESS_AUTO = 244,
641 KEY_DISPLAY_OFF = 245,
642 KEY_WWAN = 246,
643 KEY_RFKILL = 247,
644 KEY_MICMUTE = 248,
645 KEY_249 = 249,
646 KEY_250 = 250,
647 KEY_251 = 251,
648 KEY_252 = 252,
649 KEY_253 = 253,
650 KEY_254 = 254,
651 KEY_255 = 255,
652 BTN_0 = 256,
653 BTN_1 = 257,
654 BTN_2 = 258,
655 BTN_3 = 259,
656 BTN_4 = 260,
657 BTN_5 = 261,
658 BTN_6 = 262,
659 BTN_7 = 263,
660 BTN_8 = 264,
661 BTN_9 = 265,
662 KEY_266 = 266,
663 KEY_267 = 267,
664 KEY_268 = 268,
665 KEY_269 = 269,
666 KEY_270 = 270,
667 KEY_271 = 271,
668 BTN_LEFT = 272,
669 BTN_RIGHT = 273,
670 BTN_MIDDLE = 274,
671 BTN_SIDE = 275,
672 BTN_EXTRA = 276,
673 BTN_FORWARD = 277,
674 BTN_BACK = 278,
675 BTN_TASK = 279,
676 KEY_280 = 280,
677 KEY_281 = 281,
678 KEY_282 = 282,
679 KEY_283 = 283,
680 KEY_284 = 284,
681 KEY_285 = 285,
682 KEY_286 = 286,
683 KEY_287 = 287,
684 BTN_TRIGGER = 288,
685 BTN_THUMB = 289,
686 BTN_THUMB2 = 290,
687 BTN_TOP = 291,
688 BTN_TOP2 = 292,
689 BTN_PINKIE = 293,
690 BTN_BASE = 294,
691 BTN_BASE2 = 295,
692 BTN_BASE3 = 296,
693 BTN_BASE4 = 297,
694 BTN_BASE5 = 298,
695 BTN_BASE6 = 299,
696 KEY_300 = 300,
697 KEY_301 = 301,
698 KEY_302 = 302,
699 BTN_DEAD = 303,
700 BTN_SOUTH = 304,
701 BTN_EAST = 305,
702 BTN_C = 306,
703 BTN_NORTH = 307,
704 BTN_WEST = 308,
705 BTN_Z = 309,
706 BTN_TL = 310,
707 BTN_TR = 311,
708 BTN_TL2 = 312,
709 BTN_TR2 = 313,
710 BTN_SELECT = 314,
711 BTN_START = 315,
712 BTN_MODE = 316,
713 BTN_THUMBL = 317,
714 BTN_THUMBR = 318,
715 KEY_319 = 319,
716 BTN_TOOL_PEN = 320,
717 BTN_TOOL_RUBBER = 321,
718 BTN_TOOL_BRUSH = 322,
719 BTN_TOOL_PENCIL = 323,
720 BTN_TOOL_AIRBRUSH = 324,
721 BTN_TOOL_FINGER = 325,
722 BTN_TOOL_MOUSE = 326,
723 BTN_TOOL_LENS = 327,
724 BTN_TOOL_QUINTTAP = 328,
725 BTN_STYLUS3 = 329,
726 BTN_TOUCH = 330,
727 BTN_STYLUS = 331,
728 BTN_STYLUS2 = 332,
729 BTN_TOOL_DOUBLETAP = 333,
730 BTN_TOOL_TRIPLETAP = 334,
731 BTN_TOOL_QUADTAP = 335,
732 BTN_GEAR_DOWN = 336,
733 BTN_GEAR_UP = 337,
734 KEY_338 = 338,
735 KEY_339 = 339,
736 KEY_340 = 340,
737 KEY_341 = 341,
738 KEY_342 = 342,
739 KEY_343 = 343,
740 KEY_344 = 344,
741 KEY_345 = 345,
742 KEY_346 = 346,
743 KEY_347 = 347,
744 KEY_348 = 348,
745 KEY_349 = 349,
746 KEY_350 = 350,
747 KEY_351 = 351,
748 KEY_OK = 352,
749 KEY_SELECT = 353,
750 KEY_GOTO = 354,
751 KEY_CLEAR = 355,
752 KEY_POWER2 = 356,
753 KEY_OPTION = 357,
754 KEY_INFO = 358,
755 KEY_TIME = 359,
756 KEY_VENDOR = 360,
757 KEY_ARCHIVE = 361,
758 KEY_PROGRAM = 362,
759 KEY_CHANNEL = 363,
760 KEY_FAVORITES = 364,
761 KEY_EPG = 365,
762 KEY_PVR = 366,
763 KEY_MHP = 367,
764 KEY_LANGUAGE = 368,
765 KEY_TITLE = 369,
766 KEY_SUBTITLE = 370,
767 KEY_ANGLE = 371,
768 KEY_FULL_SCREEN = 372,
769 KEY_MODE = 373,
770 KEY_KEYBOARD = 374,
771 KEY_ASPECT_RATIO = 375,
772 KEY_PC = 376,
773 KEY_TV = 377,
774 KEY_TV2 = 378,
775 KEY_VCR = 379,
776 KEY_VCR2 = 380,
777 KEY_SAT = 381,
778 KEY_SAT2 = 382,
779 KEY_CD = 383,
780 KEY_TAPE = 384,
781 KEY_RADIO = 385,
782 KEY_TUNER = 386,
783 KEY_PLAYER = 387,
784 KEY_TEXT = 388,
785 KEY_DVD = 389,
786 KEY_AUX = 390,
787 KEY_MP3 = 391,
788 KEY_AUDIO = 392,
789 KEY_VIDEO = 393,
790 KEY_DIRECTORY = 394,
791 KEY_LIST = 395,
792 KEY_MEMO = 396,
793 KEY_CALENDAR = 397,
794 KEY_RED = 398,
795 KEY_GREEN = 399,
796 KEY_YELLOW = 400,
797 KEY_BLUE = 401,
798 KEY_CHANNELUP = 402,
799 KEY_CHANNELDOWN = 403,
800 KEY_FIRST = 404,
801 KEY_LAST = 405,
802 KEY_AB = 406,
803 KEY_NEXT = 407,
804 KEY_RESTART = 408,
805 KEY_SLOW = 409,
806 KEY_SHUFFLE = 410,
807 KEY_BREAK = 411,
808 KEY_PREVIOUS = 412,
809 KEY_DIGITS = 413,
810 KEY_TEEN = 414,
811 KEY_TWEN = 415,
812 KEY_VIDEOPHONE = 416,
813 KEY_GAMES = 417,
814 KEY_ZOOMIN = 418,
815 KEY_ZOOMOUT = 419,
816 KEY_ZOOMRESET = 420,
817 KEY_WORDPROCESSOR = 421,
818 KEY_EDITOR = 422,
819 KEY_SPREADSHEET = 423,
820 KEY_GRAPHICSEDITOR = 424,
821 KEY_PRESENTATION = 425,
822 KEY_DATABASE = 426,
823 KEY_NEWS = 427,
824 KEY_VOICEMAIL = 428,
825 KEY_ADDRESSBOOK = 429,
826 KEY_MESSENGER = 430,
827 KEY_DISPLAYTOGGLE = 431,
828 KEY_SPELLCHECK = 432,
829 KEY_LOGOFF = 433,
830 KEY_DOLLAR = 434,
831 KEY_EURO = 435,
832 KEY_FRAMEBACK = 436,
833 KEY_FRAMEFORWARD = 437,
834 KEY_CONTEXT_MENU = 438,
835 KEY_MEDIA_REPEAT = 439,
836 KEY_10CHANNELSUP = 440,
837 KEY_10CHANNELSDOWN = 441,
838 KEY_IMAGES = 442,
839 KEY_443 = 443,
840 KEY_444 = 444,
841 KEY_445 = 445,
842 KEY_446 = 446,
843 KEY_447 = 447,
844 KEY_DEL_EOL = 448,
845 KEY_DEL_EOS = 449,
846 KEY_INS_LINE = 450,
847 KEY_DEL_LINE = 451,
848 KEY_452 = 452,
849 KEY_453 = 453,
850 KEY_454 = 454,
851 KEY_455 = 455,
852 KEY_456 = 456,
853 KEY_457 = 457,
854 KEY_458 = 458,
855 KEY_459 = 459,
856 KEY_460 = 460,
857 KEY_461 = 461,
858 KEY_462 = 462,
859 KEY_463 = 463,
860 KEY_FN = 464,
861 KEY_FN_ESC = 465,
862 KEY_FN_F1 = 466,
863 KEY_FN_F2 = 467,
864 KEY_FN_F3 = 468,
865 KEY_FN_F4 = 469,
866 KEY_FN_F5 = 470,
867 KEY_FN_F6 = 471,
868 KEY_FN_F7 = 472,
869 KEY_FN_F8 = 473,
870 KEY_FN_F9 = 474,
871 KEY_FN_F10 = 475,
872 KEY_FN_F11 = 476,
873 KEY_FN_F12 = 477,
874 KEY_FN_1 = 478,
875 KEY_FN_2 = 479,
876 KEY_FN_D = 480,
877 KEY_FN_E = 481,
878 KEY_FN_F = 482,
879 KEY_FN_S = 483,
880 KEY_FN_B = 484,
881 KEY_485 = 485,
882 KEY_486 = 486,
883 KEY_487 = 487,
884 KEY_488 = 488,
885 KEY_489 = 489,
886 KEY_490 = 490,
887 KEY_491 = 491,
888 KEY_492 = 492,
889 KEY_493 = 493,
890 KEY_494 = 494,
891 KEY_495 = 495,
892 KEY_496 = 496,
893 KEY_BRL_DOT1 = 497,
894 KEY_BRL_DOT2 = 498,
895 KEY_BRL_DOT3 = 499,
896 KEY_BRL_DOT4 = 500,
897 KEY_BRL_DOT5 = 501,
898 KEY_BRL_DOT6 = 502,
899 KEY_BRL_DOT7 = 503,
900 KEY_BRL_DOT8 = 504,
901 KEY_BRL_DOT9 = 505,
902 KEY_BRL_DOT10 = 506,
903 KEY_507 = 507,
904 KEY_508 = 508,
905 KEY_509 = 509,
906 KEY_510 = 510,
907 KEY_511 = 511,
908 KEY_NUMERIC_0 = 512,
909 KEY_NUMERIC_1 = 513,
910 KEY_NUMERIC_2 = 514,
911 KEY_NUMERIC_3 = 515,
912 KEY_NUMERIC_4 = 516,
913 KEY_NUMERIC_5 = 517,
914 KEY_NUMERIC_6 = 518,
915 KEY_NUMERIC_7 = 519,
916 KEY_NUMERIC_8 = 520,
917 KEY_NUMERIC_9 = 521,
918 KEY_NUMERIC_STAR = 522,
919 KEY_NUMERIC_POUND = 523,
920 KEY_NUMERIC_A = 524,
921 KEY_NUMERIC_B = 525,
922 KEY_NUMERIC_C = 526,
923 KEY_NUMERIC_D = 527,
924 KEY_CAMERA_FOCUS = 528,
925 KEY_WPS_BUTTON = 529,
926 KEY_TOUCHPAD_TOGGLE = 530,
927 KEY_TOUCHPAD_ON = 531,
928 KEY_TOUCHPAD_OFF = 532,
929 KEY_CAMERA_ZOOMIN = 533,
930 KEY_CAMERA_ZOOMOUT = 534,
931 KEY_CAMERA_UP = 535,
932 KEY_CAMERA_DOWN = 536,
933 KEY_CAMERA_LEFT = 537,
934 KEY_CAMERA_RIGHT = 538,
935 KEY_ATTENDANT_ON = 539,
936 KEY_ATTENDANT_OFF = 540,
937 KEY_ATTENDANT_TOGGLE = 541,
938 KEY_LIGHTS_TOGGLE = 542,
939 KEY_543 = 543,
940 BTN_DPAD_UP = 544,
941 BTN_DPAD_DOWN = 545,
942 BTN_DPAD_LEFT = 546,
943 BTN_DPAD_RIGHT = 547,
944 KEY_548 = 548,
945 KEY_549 = 549,
946 KEY_550 = 550,
947 KEY_551 = 551,
948 KEY_552 = 552,
949 KEY_553 = 553,
950 KEY_554 = 554,
951 KEY_555 = 555,
952 KEY_556 = 556,
953 KEY_557 = 557,
954 KEY_558 = 558,
955 KEY_559 = 559,
956 KEY_ALS_TOGGLE = 560,
957 KEY_ROTATE_LOCK_TOGGLE = 561,
958 KEY_562 = 562,
959 KEY_563 = 563,
960 KEY_564 = 564,
961 KEY_565 = 565,
962 KEY_566 = 566,
963 KEY_567 = 567,
964 KEY_568 = 568,
965 KEY_569 = 569,
966 KEY_570 = 570,
967 KEY_571 = 571,
968 KEY_572 = 572,
969 KEY_573 = 573,
970 KEY_574 = 574,
971 KEY_575 = 575,
972 KEY_BUTTONCONFIG = 576,
973 KEY_TASKMANAGER = 577,
974 KEY_JOURNAL = 578,
975 KEY_CONTROLPANEL = 579,
976 KEY_APPSELECT = 580,
977 KEY_SCREENSAVER = 581,
978 KEY_VOICECOMMAND = 582,
979 KEY_ASSISTANT = 583,
980 KEY_KBD_LAYOUT_NEXT = 584,
981 KEY_585 = 585,
982 KEY_586 = 586,
983 KEY_587 = 587,
984 KEY_588 = 588,
985 KEY_589 = 589,
986 KEY_590 = 590,
987 KEY_591 = 591,
988 KEY_BRIGHTNESS_MIN = 592,
989 KEY_BRIGHTNESS_MAX = 593,
990 KEY_594 = 594,
991 KEY_595 = 595,
992 KEY_596 = 596,
993 KEY_597 = 597,
994 KEY_598 = 598,
995 KEY_599 = 599,
996 KEY_600 = 600,
997 KEY_601 = 601,
998 KEY_602 = 602,
999 KEY_603 = 603,
1000 KEY_604 = 604,
1001 KEY_605 = 605,
1002 KEY_606 = 606,
1003 KEY_607 = 607,
1004 KEY_KBDINPUTASSIST_PREV = 608,
1005 KEY_KBDINPUTASSIST_NEXT = 609,
1006 KEY_KBDINPUTASSIST_PREVGROUP = 610,
1007 KEY_KBDINPUTASSIST_NEXTGROUP = 611,
1008 KEY_KBDINPUTASSIST_ACCEPT = 612,
1009 KEY_KBDINPUTASSIST_CANCEL = 613,
1010 KEY_RIGHT_UP = 614,
1011 KEY_RIGHT_DOWN = 615,
1012 KEY_LEFT_UP = 616,
1013 KEY_LEFT_DOWN = 617,
1014 KEY_ROOT_MENU = 618,
1015 KEY_MEDIA_TOP_MENU = 619,
1016 KEY_NUMERIC_11 = 620,
1017 KEY_NUMERIC_12 = 621,
1018 KEY_AUDIO_DESC = 622,
1019 KEY_3D_MODE = 623,
1020 KEY_NEXT_FAVORITE = 624,
1021 KEY_STOP_RECORD = 625,
1022 KEY_PAUSE_RECORD = 626,
1023 KEY_VOD = 627,
1024 KEY_UNMUTE = 628,
1025 KEY_FASTREVERSE = 629,
1026 KEY_SLOWREVERSE = 630,
1027 KEY_DATA = 631,
1028 KEY_ONSCREEN_KEYBOARD = 632,
1029 KEY_633 = 633,
1030 KEY_634 = 634,
1031 KEY_635 = 635,
1032 KEY_636 = 636,
1033 KEY_637 = 637,
1034 KEY_638 = 638,
1035 KEY_639 = 639,
1036 KEY_640 = 640,
1037 KEY_641 = 641,
1038 KEY_642 = 642,
1039 KEY_643 = 643,
1040 KEY_644 = 644,
1041 KEY_645 = 645,
1042 KEY_646 = 646,
1043 KEY_647 = 647,
1044 KEY_648 = 648,
1045 KEY_649 = 649,
1046 KEY_650 = 650,
1047 KEY_651 = 651,
1048 KEY_652 = 652,
1049 KEY_653 = 653,
1050 KEY_654 = 654,
1051 KEY_655 = 655,
1052 KEY_656 = 656, KEY_657 = 657, KEY_658 = 658, KEY_659 = 659,
1056 KEY_660 = 660,
1057 KEY_661 = 661,
1058 KEY_662 = 662,
1059 KEY_663 = 663,
1060 KEY_664 = 664,
1061 KEY_665 = 665,
1062 KEY_666 = 666,
1063 KEY_667 = 667,
1064 KEY_668 = 668,
1065 KEY_669 = 669,
1066 KEY_670 = 670,
1067 KEY_671 = 671,
1068 KEY_672 = 672,
1069 KEY_673 = 673,
1070 KEY_674 = 674,
1071 KEY_675 = 675,
1072 KEY_676 = 676, KEY_677 = 677,
1074 KEY_678 = 678,
1075 KEY_679 = 679,
1076 KEY_680 = 680,
1077 KEY_681 = 681,
1078 KEY_682 = 682,
1079 KEY_683 = 683,
1080 KEY_684 = 684, KEY_685 = 685, KEY_686 = 686,
1083 KEY_687 = 687,
1084 KEY_688 = 688,
1085 KEY_689 = 689,
1086 KEY_690 = 690,
1087 KEY_691 = 691,
1088 KEY_692 = 692,
1089 KEY_693 = 693,
1090 KEY_694 = 694,
1091 KEY_695 = 695,
1092 KEY_696 = 696,
1093 KEY_697 = 697,
1094 KEY_698 = 698,
1095 KEY_699 = 699,
1096 KEY_700 = 700,
1097 KEY_701 = 701,
1098 KEY_702 = 702,
1099 KEY_703 = 703,
1100 BTN_TRIGGER_HAPPY1 = 704,
1101 BTN_TRIGGER_HAPPY2 = 705,
1102 BTN_TRIGGER_HAPPY3 = 706,
1103 BTN_TRIGGER_HAPPY4 = 707,
1104 BTN_TRIGGER_HAPPY5 = 708,
1105 BTN_TRIGGER_HAPPY6 = 709,
1106 BTN_TRIGGER_HAPPY7 = 710,
1107 BTN_TRIGGER_HAPPY8 = 711,
1108 BTN_TRIGGER_HAPPY9 = 712,
1109 BTN_TRIGGER_HAPPY10 = 713,
1110 BTN_TRIGGER_HAPPY11 = 714,
1111 BTN_TRIGGER_HAPPY12 = 715,
1112 BTN_TRIGGER_HAPPY13 = 716,
1113 BTN_TRIGGER_HAPPY14 = 717,
1114 BTN_TRIGGER_HAPPY15 = 718,
1115 BTN_TRIGGER_HAPPY16 = 719,
1116 BTN_TRIGGER_HAPPY17 = 720,
1117 BTN_TRIGGER_HAPPY18 = 721,
1118 BTN_TRIGGER_HAPPY19 = 722,
1119 BTN_TRIGGER_HAPPY20 = 723,
1120 BTN_TRIGGER_HAPPY21 = 724,
1121 BTN_TRIGGER_HAPPY22 = 725,
1122 BTN_TRIGGER_HAPPY23 = 726,
1123 BTN_TRIGGER_HAPPY24 = 727,
1124 BTN_TRIGGER_HAPPY25 = 728,
1125 BTN_TRIGGER_HAPPY26 = 729,
1126 BTN_TRIGGER_HAPPY27 = 730,
1127 BTN_TRIGGER_HAPPY28 = 731,
1128 BTN_TRIGGER_HAPPY29 = 732,
1129 BTN_TRIGGER_HAPPY30 = 733,
1130 BTN_TRIGGER_HAPPY31 = 734,
1131 BTN_TRIGGER_HAPPY32 = 735,
1132 BTN_TRIGGER_HAPPY33 = 736,
1133 BTN_TRIGGER_HAPPY34 = 737,
1134 BTN_TRIGGER_HAPPY35 = 738,
1135 BTN_TRIGGER_HAPPY36 = 739,
1136 BTN_TRIGGER_HAPPY37 = 740,
1137 BTN_TRIGGER_HAPPY38 = 741,
1138 BTN_TRIGGER_HAPPY39 = 742,
1139 BTN_TRIGGER_HAPPY40 = 743,
1140 BTN_MAX = 744,
1141
1142 MouseWheelUp = 745,
1147 MouseWheelDown = 746,
1148 MouseWheelLeft = 747,
1149 MouseWheelRight = 748,
1150
1151 KEY_749 = 749,
1152 KEY_750 = 750,
1153 KEY_751 = 751,
1154 KEY_752 = 752,
1155 KEY_753 = 753,
1156 KEY_754 = 754,
1157 KEY_755 = 755,
1158 KEY_756 = 756,
1159 KEY_757 = 757,
1160 KEY_758 = 758,
1161 KEY_759 = 759,
1162 KEY_760 = 760,
1163 KEY_761 = 761,
1164 KEY_762 = 762,
1165 KEY_763 = 763,
1166 KEY_764 = 764,
1167 KEY_765 = 765,
1168 KEY_766 = 766, KEY_MAX = 767,
1171}
1172
1173use core::fmt;
1174impl fmt::Display for OsCode {
1175 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1176 let self_dbg = format!("{self:?}");
1177 if let Some(key) = self_dbg.strip_prefix("KEY_") {
1178 write!(f, "{}", key)
1179 } else {
1180 write!(f, "{:?}", self)
1181 }
1182 }
1183}
1184
1185#[test]
1186fn parser_key_max_lt_keyberon_key_max() {
1187 assert!(u16::from(OsCode::KEY_MAX) < KEY_MAX);
1188}
1189
1190impl TryFrom<usize> for OsCode {
1191 type Error = ();
1192 fn try_from(item: usize) -> Result<Self, Self::Error> {
1193 match Self::from_u16(item as u16) {
1194 Some(kc) => Ok(kc),
1195 _ => Err(()),
1196 }
1197 }
1198}
1199
1200impl From<u32> for OsCode {
1201 fn from(item: u32) -> Self {
1202 Self::from_u16(item as u16).unwrap_or_else(|| panic!("Invalid KeyCode: {item}"))
1203 }
1204}
1205
1206impl From<u16> for OsCode {
1207 fn from(item: u16) -> Self {
1208 Self::from_u16(item).unwrap_or_else(|| panic!("Invalid KeyCode: {item}"))
1209 }
1210}
1211
1212impl From<OsCode> for usize {
1213 fn from(item: OsCode) -> Self {
1214 item.as_u16() as usize
1215 }
1216}
1217
1218impl From<OsCode> for u32 {
1219 fn from(item: OsCode) -> Self {
1220 item.as_u16() as u32
1221 }
1222}
1223
1224impl From<OsCode> for i32 {
1225 fn from(item: OsCode) -> Self {
1226 item.as_u16() as i32
1227 }
1228}
1229
1230impl From<OsCode> for u16 {
1231 fn from(item: OsCode) -> Self {
1232 item.as_u16()
1233 }
1234}
1235
1236impl From<&OsCode> for KeyCode {
1237 fn from(item: &OsCode) -> KeyCode {
1238 (*item).into()
1239 }
1240}
1241impl From<&KeyCode> for OsCode {
1242 fn from(item: &KeyCode) -> Self {
1243 (*item).into()
1244 }
1245}