use super::hid::HidKeyCode;
pub fn from_ascii(ascii: u8) -> (HidKeyCode, bool) {
match ascii {
b'0' => (HidKeyCode::Kc0, false),
b'1' => (HidKeyCode::Kc1, false),
b'2' => (HidKeyCode::Kc2, false),
b'3' => (HidKeyCode::Kc3, false),
b'4' => (HidKeyCode::Kc4, false),
b'5' => (HidKeyCode::Kc5, false),
b'6' => (HidKeyCode::Kc6, false),
b'7' => (HidKeyCode::Kc7, false),
b'8' => (HidKeyCode::Kc8, false),
b'9' => (HidKeyCode::Kc9, false),
b'a' => (HidKeyCode::A, false),
b'b' => (HidKeyCode::B, false),
b'c' => (HidKeyCode::C, false),
b'd' => (HidKeyCode::D, false),
b'e' => (HidKeyCode::E, false),
b'f' => (HidKeyCode::F, false),
b'g' => (HidKeyCode::G, false),
b'h' => (HidKeyCode::H, false),
b'i' => (HidKeyCode::I, false),
b'j' => (HidKeyCode::J, false),
b'k' => (HidKeyCode::K, false),
b'l' => (HidKeyCode::L, false),
b'm' => (HidKeyCode::M, false),
b'n' => (HidKeyCode::N, false),
b'o' => (HidKeyCode::O, false),
b'p' => (HidKeyCode::P, false),
b'q' => (HidKeyCode::Q, false),
b'r' => (HidKeyCode::R, false),
b's' => (HidKeyCode::S, false),
b't' => (HidKeyCode::T, false),
b'u' => (HidKeyCode::U, false),
b'v' => (HidKeyCode::V, false),
b'w' => (HidKeyCode::W, false),
b'x' => (HidKeyCode::X, false),
b'y' => (HidKeyCode::Y, false),
b'z' => (HidKeyCode::Z, false),
b'A' => (HidKeyCode::A, true),
b'B' => (HidKeyCode::B, true),
b'C' => (HidKeyCode::C, true),
b'D' => (HidKeyCode::D, true),
b'E' => (HidKeyCode::E, true),
b'F' => (HidKeyCode::F, true),
b'G' => (HidKeyCode::G, true),
b'H' => (HidKeyCode::H, true),
b'I' => (HidKeyCode::I, true),
b'J' => (HidKeyCode::J, true),
b'K' => (HidKeyCode::K, true),
b'L' => (HidKeyCode::L, true),
b'M' => (HidKeyCode::M, true),
b'N' => (HidKeyCode::N, true),
b'O' => (HidKeyCode::O, true),
b'P' => (HidKeyCode::P, true),
b'Q' => (HidKeyCode::Q, true),
b'R' => (HidKeyCode::R, true),
b'S' => (HidKeyCode::S, true),
b'T' => (HidKeyCode::T, true),
b'U' => (HidKeyCode::U, true),
b'V' => (HidKeyCode::V, true),
b'W' => (HidKeyCode::W, true),
b'X' => (HidKeyCode::X, true),
b'Y' => (HidKeyCode::Y, true),
b'Z' => (HidKeyCode::Z, true),
b'!' => (HidKeyCode::Kc1, true),
b'@' => (HidKeyCode::Kc2, true),
b'#' => (HidKeyCode::Kc3, true),
b'$' => (HidKeyCode::Kc4, true),
b'%' => (HidKeyCode::Kc5, true),
b'^' => (HidKeyCode::Kc6, true),
b'&' => (HidKeyCode::Kc7, true),
b'*' => (HidKeyCode::Kc8, true),
b'(' => (HidKeyCode::Kc9, true),
b')' => (HidKeyCode::Kc0, true),
b'-' => (HidKeyCode::Minus, false),
b'_' => (HidKeyCode::Minus, true),
b'=' => (HidKeyCode::Equal, false),
b'+' => (HidKeyCode::Equal, true),
b'[' => (HidKeyCode::LeftBracket, false),
b']' => (HidKeyCode::RightBracket, false),
b'{' => (HidKeyCode::LeftBracket, true),
b'}' => (HidKeyCode::RightBracket, true),
b';' => (HidKeyCode::Semicolon, false),
b':' => (HidKeyCode::Semicolon, true),
b'\'' => (HidKeyCode::Quote, false),
b'"' => (HidKeyCode::Quote, true),
b'`' => (HidKeyCode::Grave, false),
b'~' => (HidKeyCode::Grave, true),
b'\\' => (HidKeyCode::Backslash, false),
b'|' => (HidKeyCode::Backslash, true),
b',' => (HidKeyCode::Comma, false),
b'<' => (HidKeyCode::Comma, true),
b'.' => (HidKeyCode::Dot, false),
b'>' => (HidKeyCode::Dot, true),
b'/' => (HidKeyCode::Slash, false),
b'?' => (HidKeyCode::Slash, true),
b' ' => (HidKeyCode::Space, false),
b'\n' => (HidKeyCode::Enter, false),
b'\t' => (HidKeyCode::Tab, false),
b'\x08' => (HidKeyCode::Backspace, false),
b'\x1B' => (HidKeyCode::Escape, false),
b'\x7F' => (HidKeyCode::Delete, false),
_ => (HidKeyCode::No, false),
}
}
pub fn to_ascii(keycode: HidKeyCode, shifted: bool) -> u8 {
match (keycode, shifted) {
(HidKeyCode::Kc0, false) => b'0',
(HidKeyCode::Kc1, false) => b'1',
(HidKeyCode::Kc2, false) => b'2',
(HidKeyCode::Kc3, false) => b'3',
(HidKeyCode::Kc4, false) => b'4',
(HidKeyCode::Kc5, false) => b'5',
(HidKeyCode::Kc6, false) => b'6',
(HidKeyCode::Kc7, false) => b'7',
(HidKeyCode::Kc8, false) => b'8',
(HidKeyCode::Kc9, false) => b'9',
(HidKeyCode::A, false) => b'a',
(HidKeyCode::B, false) => b'b',
(HidKeyCode::C, false) => b'c',
(HidKeyCode::D, false) => b'd',
(HidKeyCode::E, false) => b'e',
(HidKeyCode::F, false) => b'f',
(HidKeyCode::G, false) => b'g',
(HidKeyCode::H, false) => b'h',
(HidKeyCode::I, false) => b'i',
(HidKeyCode::J, false) => b'j',
(HidKeyCode::K, false) => b'k',
(HidKeyCode::L, false) => b'l',
(HidKeyCode::M, false) => b'm',
(HidKeyCode::N, false) => b'n',
(HidKeyCode::O, false) => b'o',
(HidKeyCode::P, false) => b'p',
(HidKeyCode::Q, false) => b'q',
(HidKeyCode::R, false) => b'r',
(HidKeyCode::S, false) => b's',
(HidKeyCode::T, false) => b't',
(HidKeyCode::U, false) => b'u',
(HidKeyCode::V, false) => b'v',
(HidKeyCode::W, false) => b'w',
(HidKeyCode::X, false) => b'x',
(HidKeyCode::Y, false) => b'y',
(HidKeyCode::Z, false) => b'z',
(HidKeyCode::A, true) => b'A',
(HidKeyCode::B, true) => b'B',
(HidKeyCode::C, true) => b'C',
(HidKeyCode::D, true) => b'D',
(HidKeyCode::E, true) => b'E',
(HidKeyCode::F, true) => b'F',
(HidKeyCode::G, true) => b'G',
(HidKeyCode::H, true) => b'H',
(HidKeyCode::I, true) => b'I',
(HidKeyCode::J, true) => b'J',
(HidKeyCode::K, true) => b'K',
(HidKeyCode::L, true) => b'L',
(HidKeyCode::M, true) => b'M',
(HidKeyCode::N, true) => b'N',
(HidKeyCode::O, true) => b'O',
(HidKeyCode::P, true) => b'P',
(HidKeyCode::Q, true) => b'Q',
(HidKeyCode::R, true) => b'R',
(HidKeyCode::S, true) => b'S',
(HidKeyCode::T, true) => b'T',
(HidKeyCode::U, true) => b'U',
(HidKeyCode::V, true) => b'V',
(HidKeyCode::W, true) => b'W',
(HidKeyCode::X, true) => b'X',
(HidKeyCode::Y, true) => b'Y',
(HidKeyCode::Z, true) => b'Z',
(HidKeyCode::Kc1, true) => b'!',
(HidKeyCode::Kc2, true) => b'@',
(HidKeyCode::Kc3, true) => b'#',
(HidKeyCode::Kc4, true) => b'$',
(HidKeyCode::Kc5, true) => b'%',
(HidKeyCode::Kc6, true) => b'^',
(HidKeyCode::Kc7, true) => b'&',
(HidKeyCode::Kc8, true) => b'*',
(HidKeyCode::Kc9, true) => b'(',
(HidKeyCode::Kc0, true) => b')',
(HidKeyCode::Minus, false) => b'-',
(HidKeyCode::Minus, true) => b'_',
(HidKeyCode::Equal, false) => b'=',
(HidKeyCode::Equal, true) => b'+',
(HidKeyCode::LeftBracket, false) => b'[',
(HidKeyCode::RightBracket, false) => b']',
(HidKeyCode::LeftBracket, true) => b'{',
(HidKeyCode::RightBracket, true) => b'}',
(HidKeyCode::Semicolon, false) => b';',
(HidKeyCode::Semicolon, true) => b':',
(HidKeyCode::Quote, false) => b'\'',
(HidKeyCode::Quote, true) => b'"',
(HidKeyCode::Grave, false) => b'`',
(HidKeyCode::Grave, true) => b'~',
(HidKeyCode::Backslash, false) => b'\\',
(HidKeyCode::Backslash, true) => b'|',
(HidKeyCode::Comma, false) => b',',
(HidKeyCode::Comma, true) => b'<',
(HidKeyCode::Dot, false) => b'.',
(HidKeyCode::Dot, true) => b'>',
(HidKeyCode::Slash, false) => b'/',
(HidKeyCode::Slash, true) => b'?',
(HidKeyCode::Space, false) => b' ',
(HidKeyCode::Enter, false) => b'\n',
(HidKeyCode::Tab, false) => b'\t',
(HidKeyCode::Backspace, false) => b'\x08',
(HidKeyCode::Escape, false) => b'\x1B',
(HidKeyCode::Delete, false) => b'\x7F',
(_, _) => b'X',
}
}