Files
riscv64-kernel/src/keymap.rs

297 lines
10 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
use crate::drivers::keyboard::KeyboardState;
#[derive(Debug, Clone, Copy)]
#[derive_const(PartialEq, Eq)]
pub enum ModifierType {
Shift,
Alt,
AltGr,
Control,
}
#[derive(Debug, Clone, Copy)]
#[derive_const(PartialEq, Eq)]
pub enum KeyType {
Ascii(char),
// Special, // F1, Home, etc.
Modifier(ModifierType),
Unknown,
}
pub const fn map_keycode(code: u16, state: &KeyboardState) -> KeyType {
let res = match code {
KEY_BACKSPACE => KeyType::Ascii('\x08'),
KEY_ESCAPE => KeyType::Ascii('\x1b'),
KEY_TAB => KeyType::Ascii('\t'),
KEY_ENTER => KeyType::Ascii('\n'),
KEY_SPACE => KeyType::Ascii(' '),
KEY_LEFTSHIFT | KEY_RIGHTSHIFT => KeyType::Modifier(ModifierType::Shift),
KEY_LEFTCTRL => KeyType::Modifier(ModifierType::Control),
KEY_LEFTALT => KeyType::Modifier(ModifierType::Alt),
KEY_RIGHTALT => KeyType::Modifier(ModifierType::AltGr),
_ => KeyType::Unknown,
};
if res != KeyType::Unknown {
return res;
}
if state.shift_modifier {
match code {
KEY_1 => KeyType::Ascii('1'),
KEY_2 => KeyType::Ascii('2'),
KEY_3 => KeyType::Ascii('3'),
KEY_4 => KeyType::Ascii('4'),
KEY_5 => KeyType::Ascii('5'),
KEY_6 => KeyType::Ascii('6'),
KEY_7 => KeyType::Ascii('7'),
KEY_8 => KeyType::Ascii('8'),
KEY_9 => KeyType::Ascii('9'),
KEY_0 => KeyType::Ascii('0'),
KEY_MINUS => KeyType::Ascii('°'),
KEY_EQUAL => KeyType::Ascii('`'),
KEY_Q => KeyType::Ascii('B'),
KEY_W => KeyType::Ascii('É'),
KEY_E => KeyType::Ascii('P'),
KEY_R => KeyType::Ascii('O'),
KEY_T => KeyType::Ascii('È'),
KEY_Y => KeyType::Ascii('!'),
KEY_U => KeyType::Ascii('V'),
KEY_I => KeyType::Ascii('D'),
KEY_O => KeyType::Ascii('L'),
KEY_P => KeyType::Ascii('J'),
KEY_A => KeyType::Ascii('A'),
KEY_S => KeyType::Ascii('U'),
KEY_D => KeyType::Ascii('I'),
KEY_F => KeyType::Ascii('E'),
KEY_G => KeyType::Ascii(';'),
KEY_H => KeyType::Ascii('C'),
KEY_J => KeyType::Ascii('T'),
KEY_K => KeyType::Ascii('S'),
KEY_L => KeyType::Ascii('R'),
KEY_Z => KeyType::Ascii('À'),
KEY_X => KeyType::Ascii('Y'),
KEY_C => KeyType::Ascii('X'),
KEY_V => KeyType::Ascii(':'),
KEY_B => KeyType::Ascii('K'),
KEY_N => KeyType::Ascii('?'),
KEY_M => KeyType::Ascii('Q'),
KEY_LEFTBRACE => KeyType::Ascii('Z'),
KEY_RIGHTBRACE => KeyType::Ascii('W'),
KEY_BACKSLASH => KeyType::Ascii('Ç'),
KEY_SEMICOLON => KeyType::Ascii('N'),
KEY_APOSTROPHE => KeyType::Ascii('M'),
KEY_COMMA => KeyType::Ascii('G'),
KEY_DOT => KeyType::Ascii('H'),
KEY_SLASH => KeyType::Ascii('F'),
_ => KeyType::Unknown,
}
} else {
if state.alt_gr_modifier {
match code {
// KEY_1 => KeyType::Ascii('—'),
KEY_2 => KeyType::Ascii('<'),
KEY_3 => KeyType::Ascii('>'),
KEY_4 => KeyType::Ascii('['),
KEY_5 => KeyType::Ascii(']'),
KEY_6 => KeyType::Ascii('^'),
KEY_7 => KeyType::Ascii('±'),
// KEY_8 => KeyType::Ascii(''),
KEY_9 => KeyType::Ascii('÷'),
KEY_0 => KeyType::Ascii('×'),
KEY_MINUS => KeyType::Ascii('≠'),
KEY_EQUAL => KeyType::Ascii('‰'),
KEY_Q => KeyType::Ascii('|'),
// KEY_W => KeyType::Ascii(''),
KEY_E => KeyType::Ascii('&'),
KEY_R => KeyType::Ascii('œ'),
// KEY_T => KeyType::Ascii(''),
KEY_Y => KeyType::Ascii('¡'),
// KEY_U => KeyType::Ascii(''),
KEY_I => KeyType::Ascii('ð'),
// KEY_O => KeyType::Ascii(''),
KEY_P => KeyType::Ascii('ij'),
KEY_A => KeyType::Ascii('æ'),
KEY_S => KeyType::Ascii('ù'),
// KEY_D => KeyType::Ascii(''),
// KEY_F => KeyType::Ascii('€'),
// KEY_G => KeyType::Ascii(''),
KEY_H => KeyType::Ascii('©'),
KEY_J => KeyType::Ascii('þ'),
KEY_K => KeyType::Ascii('ß'),
KEY_L => KeyType::Ascii('®'),
KEY_Z => KeyType::Ascii('\\'),
KEY_X => KeyType::Ascii('{'),
KEY_C => KeyType::Ascii('}'),
// KEY_V => KeyType::Ascii('…'),
KEY_B => KeyType::Ascii('~'),
KEY_N => KeyType::Ascii('¿'),
// KEY_M => KeyType::Ascii(''),
KEY_LEFTBRACE => KeyType::Ascii('ə'),
// KEY_RIGHTBRACE => KeyType::Ascii(''),
// KEY_SEMICOLON => KeyType::Ascii(''),
// KEY_APOSTROPHE => KeyType::Ascii(''),
// KEY_COMMA => KeyType::Ascii(''),
// KEY_DOT => KeyType::Ascii('†'),
// KEY_SLASH => KeyType::Ascii(''),
_ => KeyType::Unknown,
}
} else {
match code {
KEY_1 => KeyType::Ascii('"'),
KEY_2 => KeyType::Ascii('«'),
KEY_3 => KeyType::Ascii('»'),
KEY_4 => KeyType::Ascii('('),
KEY_5 => KeyType::Ascii(')'),
KEY_6 => KeyType::Ascii('@'),
KEY_7 => KeyType::Ascii('+'),
KEY_8 => KeyType::Ascii('-'),
KEY_9 => KeyType::Ascii('/'),
KEY_0 => KeyType::Ascii('*'),
KEY_MINUS => KeyType::Ascii('='),
KEY_EQUAL => KeyType::Ascii('%'),
KEY_Q => KeyType::Ascii('b'),
KEY_W => KeyType::Ascii('é'),
KEY_E => KeyType::Ascii('p'),
KEY_R => KeyType::Ascii('o'),
KEY_T => KeyType::Ascii('è'),
KEY_Y => KeyType::Ascii('^'),
KEY_U => KeyType::Ascii('v'),
KEY_I => KeyType::Ascii('d'),
KEY_O => KeyType::Ascii('l'),
KEY_P => KeyType::Ascii('j'),
KEY_A => KeyType::Ascii('a'),
KEY_S => KeyType::Ascii('u'),
KEY_D => KeyType::Ascii('i'),
KEY_F => KeyType::Ascii('e'),
KEY_G => KeyType::Ascii(','),
KEY_H => KeyType::Ascii('c'),
KEY_J => KeyType::Ascii('t'),
KEY_K => KeyType::Ascii('s'),
KEY_L => KeyType::Ascii('r'),
KEY_Z => KeyType::Ascii('à'),
KEY_X => KeyType::Ascii('y'),
KEY_C => KeyType::Ascii('x'),
KEY_V => KeyType::Ascii('.'),
KEY_B => KeyType::Ascii('k'),
KEY_N => KeyType::Ascii('\''),
KEY_M => KeyType::Ascii('q'),
KEY_LEFTBRACE => KeyType::Ascii('z'),
KEY_RIGHTBRACE => KeyType::Ascii('w'),
KEY_BACKSLASH => KeyType::Ascii('ç'),
KEY_SEMICOLON => KeyType::Ascii('n'),
KEY_APOSTROPHE => KeyType::Ascii('m'),
KEY_COMMA => KeyType::Ascii('g'),
KEY_DOT => KeyType::Ascii('h'),
KEY_SLASH => KeyType::Ascii('f'),
_ => KeyType::Unknown,
}
}
}
}
// pub const KEY_RESERVED: u16 = 0;
pub const KEY_ESCAPE: u16 = 1;
pub const KEY_1: u16 = 2;
pub const KEY_2: u16 = 3;
pub const KEY_3: u16 = 4;
pub const KEY_4: u16 = 5;
pub const KEY_5: u16 = 6;
pub const KEY_6: u16 = 7;
pub const KEY_7: u16 = 8;
pub const KEY_8: u16 = 9;
pub const KEY_9: u16 = 10;
pub const KEY_0: u16 = 11;
pub const KEY_MINUS: u16 = 12;
pub const KEY_EQUAL: u16 = 13;
pub const KEY_BACKSPACE: u16 = 14;
pub const KEY_TAB: u16 = 15;
pub const KEY_Q: u16 = 16;
pub const KEY_W: u16 = 17;
pub const KEY_E: u16 = 18;
pub const KEY_R: u16 = 19;
pub const KEY_T: u16 = 20;
pub const KEY_Y: u16 = 21;
pub const KEY_U: u16 = 22;
pub const KEY_I: u16 = 23;
pub const KEY_O: u16 = 24;
pub const KEY_P: u16 = 25;
pub const KEY_LEFTBRACE: u16 = 26;
pub const KEY_RIGHTBRACE: u16 = 27;
pub const KEY_ENTER: u16 = 28;
pub const KEY_LEFTCTRL: u16 = 29;
pub const KEY_A: u16 = 30;
pub const KEY_S: u16 = 31;
pub const KEY_D: u16 = 32;
pub const KEY_F: u16 = 33;
pub const KEY_G: u16 = 34;
pub const KEY_H: u16 = 35;
pub const KEY_J: u16 = 36;
pub const KEY_K: u16 = 37;
pub const KEY_L: u16 = 38;
pub const KEY_SEMICOLON: u16 = 39;
pub const KEY_APOSTROPHE: u16 = 40;
// pub const KEY_GRAVE: u16 = 41;
pub const KEY_LEFTSHIFT: u16 = 42;
pub const KEY_BACKSLASH: u16 = 43;
pub const KEY_Z: u16 = 44;
pub const KEY_X: u16 = 45;
pub const KEY_C: u16 = 46;
pub const KEY_V: u16 = 47;
pub const KEY_B: u16 = 48;
pub const KEY_N: u16 = 49;
pub const KEY_M: u16 = 50;
pub const KEY_COMMA: u16 = 51;
pub const KEY_DOT: u16 = 52;
pub const KEY_SLASH: u16 = 53;
pub const KEY_RIGHTSHIFT: u16 = 54;
pub const KEY_LEFTALT: u16 = 56;
pub const KEY_SPACE: u16 = 57;
// pub const KEY_CAPSLOCK: u16 = 58;
// pub const KEY_F1: u16 = 59;
// pub const KEY_F2: u16 = 60;
// pub const KEY_F3: u16 = 61;
// pub const KEY_F4: u16 = 62;
// pub const KEY_F5: u16 = 63;
// pub const KEY_F6: u16 = 64;
// pub const KEY_F7: u16 = 65;
// pub const KEY_F8: u16 = 66;
// pub const KEY_F9: u16 = 67;
// pub const KEY_F10: u16 = 68;
pub const KEY_RIGHTALT: u16 = 100;
// pub const KEY_HOME: u16 = 102;
// pub const KEY_UP: u16 = 103;
// pub const KEY_PAGEUP: u16 = 104;
// pub const KEY_LEFT: u16 = 105;
// pub const KEY_RIGHT: u16 = 106;
// pub const KEY_END: u16 = 107;
// pub const KEY_DOWN: u16 = 108;
// pub const KEY_PAGEDOWN: u16 = 109;
// pub const KEY_INSERT: u16 = 110;
// pub const KEY_DELETE: u16 = 111;
// pub const KEY_MUTE: u16 = 113;
// pub const KEY_VOLUMEDOWN: u16 = 114;
// pub const KEY_VOLUMEUP: u16 = 115;