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}