rmk-types 0.3.0

Common types in RMK
Documentation
//! ASCII to/from keycode conversion.

use super::hid::HidKeyCode;

/// Convert a ascii chat to keycode
/// bool, if the keycode should be shifted
/// assumes en-us keyboard mapping
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),
    }
}

/// Convert a ascii chat to keycode
/// assumes en-us keyboard mapping
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',
        // not supported keycodes
        (_, _) => b'X',
    }
}