inputflow_kmbox/keycodes.rs
1use format_bytes::{write_bytes, DisplayBytes};
2use inputflow::{error::InputFlowError, key_types::KeyboardKey};
3
4
5/// This enum represents which keyboard keys map to which integer for the KMBox api
6#[repr(u8)]
7#[derive(Copy, Clone, Debug)]
8pub enum KMBoxKeyboardKeyCode {
9 None = 0x00,
10 ErrorRollover = 0x01,
11 PostFail = 0x02,
12 ErrorUndefined = 0x03,
13 A = 0x04,
14 B = 0x05,
15 C = 0x06,
16 D = 0x07,
17 E = 0x08,
18 F = 0x09,
19 G = 0x0A,
20 H = 0x0B,
21 I = 0x0C,
22 J = 0x0D,
23 K = 0x0E,
24 L = 0x0F,
25 M = 0x10,
26 N = 0x11,
27 O = 0x12,
28 P = 0x13,
29 Q = 0x14,
30 R = 0x15,
31 S = 0x16,
32 T = 0x17,
33 U = 0x18,
34 V = 0x19,
35 W = 0x1A,
36 X = 0x1B,
37 Y = 0x1C,
38 Z = 0x1D,
39 OneExclamationMark = 0x1E,
40 TwoAt = 0x1F,
41 ThreeNumberSign = 0x20,
42 FourDollar = 0x21,
43 FivePercent = 0x22,
44 SixCaret = 0x23,
45 SevenAmpersand = 0x24,
46 EightAsterisk = 0x25,
47 NineOParenthesis = 0x26,
48 ZeroCParenthesis = 0x27,
49 Enter = 0x28,
50 Escape = 0x29,
51 Backspace = 0x2A,
52 Tab = 0x2B,
53 Spacebar = 0x2C,
54 MinusUnderscore = 0x2D,
55 EqualPlus = 0x2E,
56 OBracketAndOBrace = 0x2F,
57 CBracketAndCBrace = 0x30,
58 BackslashVerticalBar = 0x31,
59 NonUSNumberSignTilde = 0x32,
60 SemicolonColon = 0x33,
61 SingleAndDoubleQuote = 0x34,
62 GraveAccentAndTilde = 0x35,
63 CommaAndLess = 0x36,
64 DotGreater = 0x37,
65 SlashQuestion = 0x38,
66 CapsLock = 0x39,
67 F1 = 0x3A,
68 F2 = 0x3B,
69 F3 = 0x3C,
70 F4 = 0x3D,
71 F5 = 0x3E,
72 F6 = 0x3F,
73 F7 = 0x40,
74 F8 = 0x41,
75 F9 = 0x42,
76 F10 = 0x43,
77 F11 = 0x44,
78 F12 = 0x45,
79 PrintScreen = 0x46,
80 ScrollLock = 0x47,
81 Pause = 0x48,
82 Insert = 0x49,
83 Home = 0x4A,
84 PageUp = 0x4B,
85 Delete = 0x4C,
86 End1 = 0x4D,
87 PageDown = 0x4E,
88 RightArrow = 0x4F,
89 LeftArrow = 0x50,
90 DownArrow = 0x51,
91 UpArrow = 0x52,
92 KeypadNumLockAndClear = 0x53,
93 KeypadSlash = 0x54,
94 KeypadAsterisk = 0x55,
95 KeypadMinus = 0x56,
96 KeypadPlus = 0x57,
97 KeypadEnter = 0x58,
98 Keypad1End = 0x59,
99 Keypad2DownArrow = 0x5A,
100 Keypad3PageDown = 0x5B,
101 Keypad4LeftArrow = 0x5C,
102 Keypad5 = 0x5D,
103 Keypad6RightArrow = 0x5E,
104 Keypad7Home = 0x5F,
105 Keypad8UpArrow = 0x60,
106 Keypad9PageUp = 0x61,
107 Keypad0Insert = 0x62,
108 KeypadDecimalSeparatorDelete = 0x63,
109 NonUSBackslashVerticalBar = 0x64,
110 Application = 0x65,
111 Power = 0x66,
112 KeypadEqual = 0x67,
113 F13 = 0x68,
114 F14 = 0x69,
115 F15 = 0x6A,
116 F16 = 0x6B,
117 F17 = 0x6C,
118 F18 = 0x6D,
119 F19 = 0x6E,
120 F20 = 0x6F,
121 F21 = 0x70,
122 F22 = 0x71,
123 F23 = 0x72,
124 F24 = 0x73,
125 Execute = 0x74,
126 Help = 0x75,
127 Menu = 0x76,
128 Select = 0x77,
129 Stop = 0x78,
130 Again = 0x79,
131 Undo = 0x7A,
132 Cut = 0x7B,
133 Copy = 0x7C,
134 Paste = 0x7D,
135 Find = 0x7E,
136 Mute = 0x7F,
137 VolumeUp = 0x80,
138 VolumeDown = 0x81,
139 LockingCapsLock = 0x82,
140 LockingNumLock = 0x83,
141 LockingScrollLock = 0x84,
142 KeypadComma = 0x85,
143 KeypadEqualSign = 0x86,
144 International1 = 0x87,
145 International2 = 0x88,
146 International3 = 0x89,
147 International4 = 0x8A,
148 International5 = 0x8B,
149 International6 = 0x8C,
150 International7 = 0x8D,
151 International8 = 0x8E,
152 International9 = 0x8F,
153 Lang1 = 0x90,
154 Lang2 = 0x91,
155 Lang3 = 0x92,
156 Lang4 = 0x93,
157 Lang5 = 0x94,
158 Lang6 = 0x95,
159 Lang7 = 0x96,
160 Lang8 = 0x97,
161 Lang9 = 0x98,
162 AlternateErase = 0x99,
163 SysReq = 0x9A,
164 Cancel = 0x9B,
165 Clear = 0x9C,
166 Prior = 0x9D,
167 Return = 0x9E,
168 Separator = 0x9F,
169 Out = 0xA0,
170 Oper = 0xA1,
171 ClearAgain = 0xA2,
172 CrSel = 0xA3,
173 ExSel = 0xA4,
174 Keypad00 = 0xB0,
175 Keypad000 = 0xB1,
176 ThousandsSeparator = 0xB2,
177 DecimalSeparator = 0xB3,
178 CurrencyUnit = 0xB4,
179 CurrencySubUnit = 0xB5,
180 KeypadOParenthesis = 0xB6,
181 KeypadCParenthesis = 0xB7,
182 KeypadOBrace = 0xB8,
183 KeypadCBrace = 0xB9,
184 KeypadTab = 0xBA,
185 KeypadBackspace = 0xBB,
186 KeypadA = 0xBC,
187 KeypadB = 0xBD,
188 KeypadC = 0xBE,
189 KeypadD = 0xBF,
190 KeypadE = 0xC0,
191 KeypadF = 0xC1,
192 KeypadXor = 0xC2,
193 KeypadCaret = 0xC3,
194 KeypadPercent = 0xC4,
195 KeypadLess = 0xC5,
196 KeypadGreater = 0xC6,
197 KeypadAmpersand = 0xC7,
198 KeypadLogicalAnd = 0xC8,
199 KeypadVerticalBar = 0xC9,
200 KeypadLogicalOr = 0xCA,
201 KeypadColon = 0xCB,
202 KeypadNumberSign = 0xCC,
203 KeypadSpace = 0xCD,
204 KeypadAt = 0xCE,
205 KeypadExclamationMark = 0xCF,
206 KeypadMemoryStore = 0xD0,
207 KeypadMemoryRecall = 0xD1,
208 KeypadMemoryClear = 0xD2,
209 KeypadMemoryAdd = 0xD3,
210 KeypadMemorySubtract = 0xD4,
211 KeypadMemoryMultiply = 0xD5,
212 KeypadMemoryDivide = 0xD6,
213 KeypadPlusMinus = 0xD7,
214 KeypadClear = 0xD8,
215 KeypadClearEntry = 0xD9,
216 KeypadBinary = 0xDA,
217 KeypadOctal = 0xDB,
218 KeypadDecimal = 0xDC,
219 KeypadHexadecimal = 0xDD,
220 LeftControl = 0xE0,
221 LeftShift = 0xE1,
222 LeftAlt = 0xE2,
223 LeftGui = 0xE3,
224 RightControl = 0xE4,
225 RightShift = 0xE5,
226 RightAlt = 0xE6,
227 RightGui = 0xE7,
228}
229
230/// Conversion function from inputflow key to KMBox keycode
231/// currently incomplete.
232impl TryFrom<KeyboardKey> for KMBoxKeyboardKeyCode {
233 type Error = InputFlowError;
234
235 fn try_from(key: KeyboardKey) -> Result<Self, Self::Error> {
236 Ok(match key {
237 KeyboardKey::NULL => Self::None,
238 // KeyboardKey::ErrorRollover => Self::ErrorRollover,
239 // KeyboardKey::PostFail => Self::PostFail,
240 // KeyboardKey::ErrorUndefined => Self::ErrorUndefined,
241 KeyboardKey::A => Self::A,
242 KeyboardKey::B => Self::B,
243 KeyboardKey::C => Self::C,
244 KeyboardKey::D => Self::D,
245 KeyboardKey::E => Self::E,
246 KeyboardKey::F => Self::F,
247 KeyboardKey::G => Self::G,
248 KeyboardKey::H => Self::H,
249 KeyboardKey::I => Self::I,
250 KeyboardKey::J => Self::J,
251 KeyboardKey::K => Self::K,
252 KeyboardKey::L => Self::L,
253 KeyboardKey::M => Self::M,
254 KeyboardKey::N => Self::N,
255 KeyboardKey::O => Self::O,
256 KeyboardKey::P => Self::P,
257 KeyboardKey::Q => Self::Q,
258 KeyboardKey::R => Self::R,
259 KeyboardKey::S => Self::S,
260 KeyboardKey::T => Self::T,
261 KeyboardKey::U => Self::U,
262 KeyboardKey::V => Self::V,
263 KeyboardKey::W => Self::W,
264 KeyboardKey::X => Self::X,
265 KeyboardKey::Y => Self::Y,
266 KeyboardKey::Z => Self::Z,
267 // KeyboardKey::OneExclamationMark => Self::OneExclamationMark,
268 // KeyboardKey::TwoAt => Self::TwoAt,
269 // KeyboardKey::ThreeNumberSign => Self::ThreeNumberSign,
270 // KeyboardKey::FourDollar => Self::FourDollar,
271 // KeyboardKey::FivePercent => Self::FivePercent,
272 // KeyboardKey::SixCaret => Self::SixCaret,
273 // KeyboardKey::SevenAmpersand => Self::SevenAmpersand,
274 // KeyboardKey::EightAsterisk => Self::EightAsterisk,
275 // KeyboardKey::NineOParenthesis => Self::NineOParenthesis,
276 // KeyboardKey::ZeroCParenthesis => Self::ZeroCParenthesis,
277 // KeyboardKey::Enter => Self::Enter,
278 // KeyboardKey::Escape => Self::Escape,
279 // KeyboardKey::Backspace => Self::Backspace,
280 // KeyboardKey::Tab => Self::Tab,
281 // KeyboardKey::Spacebar => Self::Spacebar,
282 // KeyboardKey::MinusUnderscore => Self::MinusUnderscore,
283 // KeyboardKey::EqualPlus => Self::EqualPlus,
284 // KeyboardKey::OBracketAndOBrace => Self::OBracketAndOBrace,
285 // KeyboardKey::CBracketAndCBrace => Self::CBracketAndCBrace,
286 // KeyboardKey::BackslashVerticalBar => Self::BackslashVerticalBar,
287 // KeyboardKey::NonUSNumberSignTilde => Self::NonUSNumberSignTilde,
288 // KeyboardKey::SemicolonColon => Self::SemicolonColon,
289 // KeyboardKey::SingleAndDoubleQuote => Self::SingleAndDoubleQuote,
290 // KeyboardKey::GraveAccentAndTilde => Self::GraveAccentAndTilde,
291 // KeyboardKey::CommaAndLess => Self::CommaAndLess,
292 // KeyboardKey::DotGreater => Self::DotGreater,
293 // KeyboardKey::SlashQuestion => Self::SlashQuestion,
294 // KeyboardKey::CapsLock => Self::CapsLock,
295 // KeyboardKey::F1 => Self::F1,
296 // KeyboardKey::F2 => Self::F2,
297 // KeyboardKey::F3 => Self::F3,
298 // KeyboardKey::F4 => Self::F4,
299 // KeyboardKey::F5 => Self::F5,
300 // KeyboardKey::F6 => Self::F6,
301 // KeyboardKey::F7 => Self::F7,
302 // KeyboardKey::F8 => Self::F8,
303 // KeyboardKey::F9 => Self::F9,
304 // KeyboardKey::F10 => Self::F10,
305 // KeyboardKey::F11 => Self::F11,
306 // KeyboardKey::F12 => Self::F12,
307 // KeyboardKey::PrintScreen => Self::PrintScreen,
308 // KeyboardKey::ScrollLock => Self::ScrollLock,
309 // KeyboardKey::Pause => Self::Pause,
310 // KeyboardKey::Insert => Self::Insert,
311 // KeyboardKey::Home => Self::Home,
312 // KeyboardKey::PageUp => Self::PageUp,
313 // KeyboardKey::Delete => Self::Delete,
314 // KeyboardKey::End1 => Self::End1,
315 // KeyboardKey::PageDown => Self::PageDown,
316 // KeyboardKey::RightArrow => Self::RightArrow,
317 // KeyboardKey::LeftArrow => Self::LeftArrow,
318 // KeyboardKey::DownArrow => Self::DownArrow,
319 // KeyboardKey::UpArrow => Self::UpArrow,
320 // KeyboardKey::KeypadNumLockAndClear => Self::KeypadNumLockAndClear,
321 // KeyboardKey::KeypadSlash => Self::KeypadSlash,
322 // KeyboardKey::KeypadAsterisk => Self::KeypadAsterisk,
323 // KeyboardKey::KeypadMinus => Self::KeypadMinus,
324 // KeyboardKey::KeypadPlus => Self::KeypadPlus,
325 // KeyboardKey::KeypadEnter => Self::KeypadEnter,
326 KeyboardKey::NUMPAD1 => Self::Keypad1End,
327 KeyboardKey::NUMPAD2 => Self::Keypad2DownArrow,
328 KeyboardKey::NUMPAD3 => Self::Keypad3PageDown,
329 KeyboardKey::NUMPAD4 => Self::Keypad4LeftArrow,
330 KeyboardKey::NUMPAD5 => Self::Keypad5,
331 KeyboardKey::NUMPAD6 => Self::Keypad6RightArrow,
332 KeyboardKey::NUMPAD7 => Self::Keypad7Home,
333 KeyboardKey::NUMPAD8 => Self::Keypad8UpArrow,
334 KeyboardKey::NUMPAD9 => Self::Keypad9PageUp,
335 KeyboardKey::NUMPAD0 => Self::Keypad0Insert,
336 // KeyboardKey::KeypadDecimalSeparatorDelete => Self::KeypadDecimalSeparatorDelete,
337 // KeyboardKey::NonUSBackslashVerticalBar => Self::NonUSBackslashVerticalBar,
338 // KeyboardKey::Application => Self::Application,
339 // KeyboardKey::Power => Self::Power,
340 // KeyboardKey::KeypadEqual => Self::KeypadEqual,
341 // KeyboardKey::F13 => Self::F13,
342 // KeyboardKey::F14 => Self::F14,
343 // KeyboardKey::F15 => Self::F15,
344 // KeyboardKey::F16 => Self::F16,
345 // KeyboardKey::F17 => Self::F17,
346 // KeyboardKey::F18 => Self::F18,
347 // KeyboardKey::F19 => Self::F19,
348 // KeyboardKey::F20 => Self::F20,
349 // KeyboardKey::F21 => Self::F21,
350 // KeyboardKey::F22 => Self::F22,
351 // KeyboardKey::F23 => Self::F23,
352 // KeyboardKey::F24 => Self::F24,
353 // KeyboardKey::Execute => Self::Execute,
354 // KeyboardKey::Help => Self::Help,
355 // KeyboardKey::Menu => Self::Menu,
356 // KeyboardKey::Select => Self::Select,
357 // KeyboardKey::Stop => Self::Stop,
358 // KeyboardKey::Again => Self::Again,
359 // KeyboardKey::Undo => Self::Undo,
360 // KeyboardKey::Cut => Self::Cut,
361 // KeyboardKey::Copy => Self::Copy,
362 // KeyboardKey::Paste => Self::Paste,
363 // KeyboardKey::Find => Self::Find,
364 // KeyboardKey::Mute => Self::Mute,
365 // KeyboardKey::VolumeUp => Self::VolumeUp,
366 // KeyboardKey::VolumeDown => Self::VolumeDown,
367 // KeyboardKey::LockingCapsLock => Self::LockingCapsLock,
368 // KeyboardKey::LockingNumLock => Self::LockingNumLock,
369 // KeyboardKey::LockingScrollLock => Self::LockingScrollLock,
370 // KeyboardKey::KeypadComma => Self::KeypadComma,
371 // KeyboardKey::KeypadEqualSign => Self::KeypadEqualSign,
372 // KeyboardKey::International1 => Self::International1,
373 // KeyboardKey::International2 => Self::International2,
374 // KeyboardKey::International3 => Self::International3,
375 // KeyboardKey::International4 => Self::International4,
376 // KeyboardKey::International5 => Self::International5,
377 // KeyboardKey::International6 => Self::International6,
378 // KeyboardKey::International7 => Self::International7,
379 // KeyboardKey::International8 => Self::International8,
380 // KeyboardKey::International9 => Self::International9,
381 // KeyboardKey::Lang1 => Self::Lang1,
382 // KeyboardKey::Lang2 => Self::Lang2,
383 // KeyboardKey::Lang3 => Self::Lang3,
384 // KeyboardKey::Lang4 => Self::Lang4,
385 // KeyboardKey::Lang5 => Self::Lang5,
386 // KeyboardKey::Lang6 => Self::Lang6,
387 // KeyboardKey::Lang7 => Self::Lang7,
388 // KeyboardKey::Lang8 => Self::Lang8,
389 // KeyboardKey::Lang9 => Self::Lang9,
390 // KeyboardKey::AlternateErase => Self::AlternateErase,
391 // KeyboardKey::SysReq => Self::SysReq,
392 // KeyboardKey::Cancel => Self::Cancel,
393 // KeyboardKey::Clear => Self::Clear,
394 // KeyboardKey::Prior => Self::Prior,
395 // KeyboardKey::Return => Self::Return,
396 // KeyboardKey::Separator => Self::Separator,
397 // KeyboardKey::Out => Self::Out,
398 // KeyboardKey::Oper => Self::Oper,
399 // KeyboardKey::ClearAgain => Self::ClearAgain,
400 // KeyboardKey::CrSel => Self::CrSel,
401 // KeyboardKey::ExSel => Self::ExSel,
402 // KeyboardKey::Keypad00 => Self::Keypad00,
403 // KeyboardKey::Keypad000 => Self::Keypad000,
404 // KeyboardKey::ThousandsSeparator => Self::ThousandsSeparator,
405 // KeyboardKey::DecimalSeparator => Self::DecimalSeparator,
406 // KeyboardKey::CurrencyUnit => Self::CurrencyUnit,
407 // KeyboardKey::CurrencySubUnit => Self::CurrencySubUnit,
408 // KeyboardKey::KeypadOParenthesis => Self::KeypadOParenthesis,
409 // KeyboardKey::KeypadCParenthesis => Self::KeypadCParenthesis,
410 // KeyboardKey::KeypadOBrace => Self::KeypadOBrace,
411 // KeyboardKey::KeypadCBrace => Self::KeypadCBrace,
412 // KeyboardKey::KeypadTab => Self::KeypadTab,
413 // KeyboardKey::KeypadBackspace => Self::KeypadBackspace,
414 // KeyboardKey::KeypadA => Self::KeypadA,
415 // KeyboardKey::KeypadB => Self::KeypadB,
416 // KeyboardKey::KeypadC => Self::KeypadC,
417 // KeyboardKey::KeypadD => Self::KeypadD,
418 // KeyboardKey::KeypadE => Self::KeypadE,
419 // KeyboardKey::KeypadF => Self::KeypadF,
420 // KeyboardKey::KeypadXor => Self::KeypadXor,
421 // KeyboardKey::KeypadCaret => Self::KeypadCaret,
422 // KeyboardKey::KeypadPercent => Self::KeypadPercent,
423 // KeyboardKey::KeypadLess => Self::KeypadLess,
424 // KeyboardKey::KeypadGreater => Self::KeypadGreater,
425 // KeyboardKey::KeypadAmpersand => Self::KeypadAmpersand,
426 // KeyboardKey::KeypadLogicalAnd => Self::KeypadLogicalAnd,
427 // KeyboardKey::KeypadVerticalBar => Self::KeypadVerticalBar,
428 // KeyboardKey::KeypadLogicalOr => Self::KeypadLogicalOr,
429 // KeyboardKey::KeypadColon => Self::KeypadColon,
430 // KeyboardKey::KeypadNumberSign => Self::KeypadNumberSign,
431 // KeyboardKey::KeypadSpace => Self::KeypadSpace,
432 // KeyboardKey::KeypadAt => Self::KeypadAt,
433 // KeyboardKey::KeypadExclamationMark => Self::KeypadExclamationMark,
434 // KeyboardKey::KeypadMemoryStore => Self::KeypadMemoryStore,
435 // KeyboardKey::KeypadMemoryRecall => Self::KeypadMemoryRecall,
436 // KeyboardKey::KeypadMemoryClear => Self::KeypadMemoryClear,
437 // KeyboardKey::KeypadMemoryAdd => Self::KeypadMemoryAdd,
438 // KeyboardKey::KeypadMemorySubtract => Self::KeypadMemorySubtract,
439 // KeyboardKey::KeypadMemoryMultiply => Self::KeypadMemoryMultiply,
440 // KeyboardKey::KeypadMemoryDivide => Self::KeypadMemoryDivide,
441 // KeyboardKey::KeypadPlusMinus => Self::KeypadPlusMinus,
442 // KeyboardKey::KeypadClear => Self::KeypadClear,
443 // KeyboardKey::KeypadClearEntry => Self::KeypadClearEntry,
444 // KeyboardKey::KeypadBinary => Self::KeypadBinary,
445 // KeyboardKey::KeypadOctal => Self::KeypadOctal,
446 // KeyboardKey::KeypadDecimal => Self::KeypadDecimal,
447 // KeyboardKey::KeypadHexadecimal => Self::KeypadHexadecimal,
448 // KeyboardKey::LeftControl => Self::LeftControl,
449 // KeyboardKey::LeftShift => Self::LeftShift,
450 // KeyboardKey::LeftAlt => Self::LeftAlt,
451 KeyboardKey::LWIN => Self::LeftGui,
452 // KeyboardKey::RightControl => Self::RightControl,
453 // KeyboardKey::RightShift => Self::RightShift,
454 // KeyboardKey::RightAlt => Self::RightAlt,
455 KeyboardKey::RWIN => Self::RightGui,
456 _ => return Err(InputFlowError::InvalidKey),
457 })
458 }
459}
460
461impl DisplayBytes for KMBoxKeyboardKeyCode {
462 fn display_bytes(&self, output: &mut dyn std::io::Write) -> std::io::Result<()> {
463 write_bytes!(output, b"{}", (self.clone() as u8))
464 }
465}
466
467impl std::fmt::Display for KMBoxKeyboardKeyCode {
468 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
469 write!(f,"{:?}", self)
470 // write!(f,"{}", (self.clone() as u8))
471 }
472}