use crate::keycode::Key;
pub fn keycode_to_key(code: u16) -> Key {
match code {
0x00 => Key::KeyA,
0x01 => Key::KeyS,
0x02 => Key::KeyD,
0x03 => Key::KeyF,
0x04 => Key::KeyH,
0x05 => Key::KeyG,
0x06 => Key::KeyZ,
0x07 => Key::KeyX,
0x08 => Key::KeyC,
0x09 => Key::KeyV,
0x0B => Key::KeyB,
0x0C => Key::KeyQ,
0x0D => Key::KeyW,
0x0E => Key::KeyE,
0x0F => Key::KeyR,
0x10 => Key::KeyY,
0x11 => Key::KeyT,
0x12 => Key::Num1,
0x13 => Key::Num2,
0x14 => Key::Num3,
0x15 => Key::Num4,
0x16 => Key::Num6,
0x17 => Key::Num5,
0x18 => Key::Equal,
0x19 => Key::Num9,
0x1A => Key::Num7,
0x1B => Key::Minus,
0x1C => Key::Num8,
0x1D => Key::Num0,
0x1E => Key::BracketRight,
0x1F => Key::KeyO,
0x20 => Key::KeyU,
0x21 => Key::BracketLeft,
0x22 => Key::KeyI,
0x23 => Key::KeyP,
0x25 => Key::KeyL,
0x26 => Key::KeyJ,
0x27 => Key::Quote,
0x28 => Key::KeyK,
0x29 => Key::Semicolon,
0x2A => Key::Backslash,
0x2B => Key::Comma,
0x2C => Key::Slash,
0x2D => Key::KeyN,
0x2E => Key::KeyM,
0x2F => Key::Period,
0x24 => Key::Enter,
0x30 => Key::Tab,
0x31 => Key::Space,
0x32 => Key::Grave,
0x33 => Key::Backspace,
0x35 => Key::Escape,
0x36 => Key::MetaRight,
0x37 => Key::MetaLeft,
0x38 => Key::ShiftLeft,
0x39 => Key::CapsLock,
0x3A => Key::AltLeft,
0x3B => Key::ControlLeft,
0x3C => Key::ShiftRight,
0x3D => Key::AltRight,
0x3E => Key::ControlRight,
0x7A => Key::F1,
0x78 => Key::F2,
0x63 => Key::F3,
0x76 => Key::F4,
0x60 => Key::F5,
0x61 => Key::F6,
0x62 => Key::F7,
0x64 => Key::F8,
0x65 => Key::F9,
0x6D => Key::F10,
0x67 => Key::F11,
0x6F => Key::F12,
0x69 => Key::F13,
0x6B => Key::F14,
0x71 => Key::F15,
0x6A => Key::F16,
0x40 => Key::F17,
0x4F => Key::F18,
0x50 => Key::F19,
0x5A => Key::F20,
0x73 => Key::Home,
0x77 => Key::End,
0x74 => Key::PageUp,
0x79 => Key::PageDown,
0x7B => Key::ArrowLeft,
0x7C => Key::ArrowRight,
0x7D => Key::ArrowDown,
0x7E => Key::ArrowUp,
0x72 => Key::Insert, 0x75 => Key::Delete,
0x52 => Key::Numpad0,
0x53 => Key::Numpad1,
0x54 => Key::Numpad2,
0x55 => Key::Numpad3,
0x56 => Key::Numpad4,
0x57 => Key::Numpad5,
0x58 => Key::Numpad6,
0x59 => Key::Numpad7,
0x5B => Key::Numpad8,
0x5C => Key::Numpad9,
0x41 => Key::NumpadDecimal,
0x43 => Key::NumpadMultiply,
0x45 => Key::NumpadAdd,
0x47 => Key::NumLock, 0x4B => Key::NumpadDivide,
0x4C => Key::NumpadEnter,
0x4E => Key::NumpadSubtract,
0x51 => Key::NumpadEqual,
0x48 => Key::VolumeUp,
0x49 => Key::VolumeDown,
0x4A => Key::VolumeMute,
_ => Key::Unknown(code as u32),
}
}
pub fn key_to_keycode(key: Key) -> Option<u16> {
Some(match key {
Key::KeyA => 0x00,
Key::KeyS => 0x01,
Key::KeyD => 0x02,
Key::KeyF => 0x03,
Key::KeyH => 0x04,
Key::KeyG => 0x05,
Key::KeyZ => 0x06,
Key::KeyX => 0x07,
Key::KeyC => 0x08,
Key::KeyV => 0x09,
Key::KeyB => 0x0B,
Key::KeyQ => 0x0C,
Key::KeyW => 0x0D,
Key::KeyE => 0x0E,
Key::KeyR => 0x0F,
Key::KeyY => 0x10,
Key::KeyT => 0x11,
Key::KeyU => 0x20,
Key::KeyI => 0x22,
Key::KeyO => 0x1F,
Key::KeyP => 0x23,
Key::KeyL => 0x25,
Key::KeyJ => 0x26,
Key::KeyK => 0x28,
Key::KeyN => 0x2D,
Key::KeyM => 0x2E,
Key::Num1 => 0x12,
Key::Num2 => 0x13,
Key::Num3 => 0x14,
Key::Num4 => 0x15,
Key::Num5 => 0x17,
Key::Num6 => 0x16,
Key::Num7 => 0x1A,
Key::Num8 => 0x1C,
Key::Num9 => 0x19,
Key::Num0 => 0x1D,
Key::Enter => 0x24,
Key::Tab => 0x30,
Key::Space => 0x31,
Key::Grave => 0x32,
Key::Backspace => 0x33,
Key::Escape => 0x35,
Key::MetaLeft => 0x37,
Key::MetaRight => 0x36,
Key::ShiftLeft => 0x38,
Key::CapsLock => 0x39,
Key::AltLeft => 0x3A,
Key::ControlLeft => 0x3B,
Key::ShiftRight => 0x3C,
Key::AltRight => 0x3D,
Key::ControlRight => 0x3E,
Key::Equal => 0x18,
Key::Minus => 0x1B,
Key::BracketLeft => 0x21,
Key::BracketRight => 0x1E,
Key::Quote => 0x27,
Key::Semicolon => 0x29,
Key::Backslash => 0x2A,
Key::Comma => 0x2B,
Key::Slash => 0x2C,
Key::Period => 0x2F,
Key::F1 => 0x7A,
Key::F2 => 0x78,
Key::F3 => 0x63,
Key::F4 => 0x76,
Key::F5 => 0x60,
Key::F6 => 0x61,
Key::F7 => 0x62,
Key::F8 => 0x64,
Key::F9 => 0x65,
Key::F10 => 0x6D,
Key::F11 => 0x67,
Key::F12 => 0x6F,
Key::F13 => 0x69,
Key::F14 => 0x6B,
Key::F15 => 0x71,
Key::F16 => 0x6A,
Key::F17 => 0x40,
Key::F18 => 0x4F,
Key::F19 => 0x50,
Key::F20 => 0x5A,
Key::Home => 0x73,
Key::End => 0x77,
Key::PageUp => 0x74,
Key::PageDown => 0x79,
Key::ArrowLeft => 0x7B,
Key::ArrowRight => 0x7C,
Key::ArrowDown => 0x7D,
Key::ArrowUp => 0x7E,
Key::Insert => 0x72,
Key::Delete => 0x75,
Key::Numpad0 => 0x52,
Key::Numpad1 => 0x53,
Key::Numpad2 => 0x54,
Key::Numpad3 => 0x55,
Key::Numpad4 => 0x56,
Key::Numpad5 => 0x57,
Key::Numpad6 => 0x58,
Key::Numpad7 => 0x59,
Key::Numpad8 => 0x5B,
Key::Numpad9 => 0x5C,
Key::NumpadDecimal => 0x41,
Key::NumpadMultiply => 0x43,
Key::NumpadAdd => 0x45,
Key::NumLock => 0x47,
Key::NumpadDivide => 0x4B,
Key::NumpadEnter => 0x4C,
Key::NumpadSubtract => 0x4E,
Key::NumpadEqual => 0x51,
Key::VolumeUp => 0x48,
Key::VolumeDown => 0x49,
Key::VolumeMute => 0x4A,
_ => return None,
})
}