Skip to main content

pc_keyboard/scancodes/
usbhid.rs

1//! USB Scancode conversions
2
3#[derive(Copy, Clone, Debug, PartialEq, Eq)]
4#[repr(u8)]
5pub enum Modifiers {
6    LCtrl = 0x01,
7    LShift = 0x02,
8    LAlt = 0x04,
9    LGui = 0x08,
10    RCtrl = 0x10,
11    RShift = 0x20,
12    RAlt = 0x40,
13    RGui = 0x80,
14}
15
16const HID_A: u8 = 0x04;
17const HID_B: u8 = 0x05;
18const HID_C: u8 = 0x06;
19const HID_D: u8 = 0x07;
20const HID_E: u8 = 0x08;
21const HID_F: u8 = 0x09;
22const HID_G: u8 = 0x0A;
23const HID_H: u8 = 0x0B;
24const HID_I: u8 = 0x0C;
25const HID_J: u8 = 0x0D;
26const HID_K: u8 = 0x0E;
27const HID_L: u8 = 0x0F;
28const HID_M: u8 = 0x10;
29const HID_N: u8 = 0x11;
30const HID_O: u8 = 0x12;
31const HID_P: u8 = 0x13;
32const HID_Q: u8 = 0x14;
33const HID_R: u8 = 0x15;
34const HID_S: u8 = 0x16;
35const HID_T: u8 = 0x17;
36const HID_U: u8 = 0x18;
37const HID_V: u8 = 0x19;
38const HID_W: u8 = 0x1A;
39const HID_X: u8 = 0x1B;
40const HID_Y: u8 = 0x1C;
41const HID_Z: u8 = 0x1D;
42const HID_1: u8 = 0x1E;
43const HID_2: u8 = 0x1F;
44const HID_3: u8 = 0x20;
45const HID_4: u8 = 0x21;
46const HID_5: u8 = 0x22;
47const HID_6: u8 = 0x23;
48const HID_7: u8 = 0x24;
49const HID_8: u8 = 0x25;
50const HID_9: u8 = 0x26;
51const HID_0: u8 = 0x27;
52const HID_RETURN: u8 = 0x28;
53const HID_ESCAPE: u8 = 0x29;
54const HID_BACKSPACE: u8 = 0x2A;
55const HID_TAB: u8 = 0x2B;
56const HID_SPACEBAR: u8 = 0x2C;
57const HID_UNDERSCORE: u8 = 0x2D;
58const HID_EQUAL: u8 = 0x2E;
59const HID_OPEN_BRACE: u8 = 0x2F;
60const HID_CLOSE_BRACE: u8 = 0x30;
61const HID_BACKSLASH: u8 = 0x31;
62const HID_HASH_TILDE: u8 = 0x32;
63const HID_SEMICOLON: u8 = 0x33;
64const HID_APOSTROPHE: u8 = 0x34;
65const HID_GRAVE_TILDE: u8 = 0x35;
66const HID_COMMA: u8 = 0x36;
67const HID_DOT: u8 = 0x37;
68const HID_SLASH: u8 = 0x38;
69const HID_CAPS_LOCK: u8 = 0x39;
70const HID_F1: u8 = 0x3A;
71const HID_F2: u8 = 0x3B;
72const HID_F3: u8 = 0x3C;
73const HID_F4: u8 = 0x3D;
74const HID_F5: u8 = 0x3E;
75const HID_F6: u8 = 0x3F;
76const HID_F7: u8 = 0x40;
77const HID_F8: u8 = 0x41;
78const HID_F9: u8 = 0x42;
79const HID_F10: u8 = 0x43;
80const HID_F11: u8 = 0x44;
81const HID_F12: u8 = 0x45;
82const HID_PRINTSCREEN: u8 = 0x46;
83const HID_SCROLL_LOCK: u8 = 0x47;
84const HID_PAUSE: u8 = 0x48;
85const HID_INSERT: u8 = 0x49;
86const HID_HOME: u8 = 0x4A;
87const HID_PAGEUP: u8 = 0x4B;
88const HID_DELETE: u8 = 0x4C;
89const HID_END: u8 = 0x4D;
90const HID_PAGEDOWN: u8 = 0x4E;
91const HID_RIGHT: u8 = 0x4F;
92const HID_LEFT: u8 = 0x50;
93const HID_DOWN: u8 = 0x51;
94const HID_UP: u8 = 0x52;
95const HID_KEYPAD_NUM_LOCK: u8 = 0x53;
96const HID_KEYPAD_SLASH: u8 = 0x54;
97const HID_KEYPAD_ASTERISK: u8 = 0x55;
98const HID_KEYPAD_MINUS: u8 = 0x56;
99const HID_KEYPAD_PLUS: u8 = 0x57;
100const HID_KEYPAD_ENTER: u8 = 0x58;
101const HID_KEYPAD_1: u8 = 0x59;
102const HID_KEYPAD_2: u8 = 0x5A;
103const HID_KEYPAD_3: u8 = 0x5B;
104const HID_KEYPAD_4: u8 = 0x5C;
105const HID_KEYPAD_5: u8 = 0x5D;
106const HID_KEYPAD_6: u8 = 0x5E;
107const HID_KEYPAD_7: u8 = 0x5F;
108const HID_KEYPAD_8: u8 = 0x60;
109const HID_KEYPAD_9: u8 = 0x61;
110const HID_KEYPAD_0: u8 = 0x62;
111const HID_KEYPAD_DOT: u8 = 0x63;
112const HID_LEFT_CTRL: u8 = 0xE0;
113const HID_LEFT_SHIFT: u8 = 0xE1;
114const HID_LEFT_ALT: u8 = 0xE2;
115const HID_LEFT_GUI: u8 = 0xE3;
116const HID_RIGHT_CTRL: u8 = 0xE4;
117const HID_RIGHT_SHIFT: u8 = 0xE5;
118const HID_RIGHT_ALT: u8 = 0xE6;
119const HID_RIGHT_GUI: u8 = 0xE7;
120const HID_AT102: u8 = 0x64;
121const HID_APPLICATION: u8 = 0x65;
122
123pub fn convert(usb_keycode: u8) -> crate::KeyCode {
124    match usb_keycode {
125        HID_A => crate::KeyCode::A,
126        HID_B => crate::KeyCode::B,
127        HID_C => crate::KeyCode::C,
128        HID_D => crate::KeyCode::D,
129        HID_E => crate::KeyCode::E,
130        HID_F => crate::KeyCode::F,
131        HID_G => crate::KeyCode::G,
132        HID_H => crate::KeyCode::H,
133        HID_I => crate::KeyCode::I,
134        HID_J => crate::KeyCode::J,
135        HID_K => crate::KeyCode::K,
136        HID_L => crate::KeyCode::L,
137        HID_M => crate::KeyCode::M,
138        HID_N => crate::KeyCode::N,
139        HID_O => crate::KeyCode::O,
140        HID_P => crate::KeyCode::P,
141        HID_Q => crate::KeyCode::Q,
142        HID_R => crate::KeyCode::R,
143        HID_S => crate::KeyCode::S,
144        HID_T => crate::KeyCode::T,
145        HID_U => crate::KeyCode::U,
146        HID_V => crate::KeyCode::V,
147        HID_W => crate::KeyCode::W,
148        HID_X => crate::KeyCode::X,
149        HID_Y => crate::KeyCode::Y,
150        HID_Z => crate::KeyCode::Z,
151        HID_1 => crate::KeyCode::Key1,
152        HID_2 => crate::KeyCode::Key2,
153        HID_3 => crate::KeyCode::Key3,
154        HID_4 => crate::KeyCode::Key4,
155        HID_5 => crate::KeyCode::Key5,
156        HID_6 => crate::KeyCode::Key6,
157        HID_7 => crate::KeyCode::Key7,
158        HID_8 => crate::KeyCode::Key8,
159        HID_9 => crate::KeyCode::Key9,
160        HID_0 => crate::KeyCode::Key0,
161        HID_RETURN => crate::KeyCode::Return,
162        HID_ESCAPE => crate::KeyCode::Escape,
163        HID_BACKSPACE => crate::KeyCode::Backspace,
164        HID_TAB => crate::KeyCode::Tab,
165        HID_SPACEBAR => crate::KeyCode::Spacebar,
166        HID_UNDERSCORE => crate::KeyCode::OemMinus,
167        HID_EQUAL => crate::KeyCode::OemPlus,
168        HID_OPEN_BRACE => crate::KeyCode::Oem4,
169        HID_CLOSE_BRACE => crate::KeyCode::Oem6,
170        HID_BACKSLASH => crate::KeyCode::Oem7,
171        HID_HASH_TILDE => crate::KeyCode::Oem7,
172        HID_SEMICOLON => crate::KeyCode::Oem1,
173        HID_APOSTROPHE => crate::KeyCode::Oem3,
174        HID_GRAVE_TILDE => crate::KeyCode::Oem8,
175        HID_AT102 => crate::KeyCode::Oem5,
176        HID_COMMA => crate::KeyCode::OemComma,
177        HID_DOT => crate::KeyCode::OemPeriod,
178        HID_SLASH => crate::KeyCode::Oem2,
179        HID_CAPS_LOCK => crate::KeyCode::CapsLock,
180        HID_F1 => crate::KeyCode::F1,
181        HID_F2 => crate::KeyCode::F2,
182        HID_F3 => crate::KeyCode::F3,
183        HID_F4 => crate::KeyCode::F4,
184        HID_F5 => crate::KeyCode::F5,
185        HID_F6 => crate::KeyCode::F6,
186        HID_F7 => crate::KeyCode::F7,
187        HID_F8 => crate::KeyCode::F8,
188        HID_F9 => crate::KeyCode::F9,
189        HID_F10 => crate::KeyCode::F10,
190        HID_F11 => crate::KeyCode::F11,
191        HID_F12 => crate::KeyCode::F12,
192        HID_PRINTSCREEN => crate::KeyCode::PrintScreen,
193        HID_SCROLL_LOCK => crate::KeyCode::ScrollLock,
194        HID_PAUSE => crate::KeyCode::PauseBreak,
195        HID_INSERT => crate::KeyCode::Insert,
196        HID_HOME => crate::KeyCode::Home,
197        HID_PAGEUP => crate::KeyCode::PageUp,
198        HID_DELETE => crate::KeyCode::Delete,
199        HID_END => crate::KeyCode::End,
200        HID_PAGEDOWN => crate::KeyCode::PageDown,
201        HID_RIGHT => crate::KeyCode::ArrowRight,
202        HID_LEFT => crate::KeyCode::ArrowLeft,
203        HID_DOWN => crate::KeyCode::ArrowDown,
204        HID_UP => crate::KeyCode::ArrowUp,
205        HID_KEYPAD_NUM_LOCK => crate::KeyCode::NumpadLock,
206        HID_KEYPAD_SLASH => crate::KeyCode::NumpadDivide,
207        HID_KEYPAD_ASTERISK => crate::KeyCode::NumpadMultiply,
208        HID_KEYPAD_MINUS => crate::KeyCode::NumpadSubtract,
209        HID_KEYPAD_PLUS => crate::KeyCode::NumpadAdd,
210        HID_KEYPAD_ENTER => crate::KeyCode::NumpadEnter,
211        HID_KEYPAD_1 => crate::KeyCode::Numpad1,
212        HID_KEYPAD_2 => crate::KeyCode::Numpad2,
213        HID_KEYPAD_3 => crate::KeyCode::Numpad3,
214        HID_KEYPAD_4 => crate::KeyCode::Numpad4,
215        HID_KEYPAD_5 => crate::KeyCode::Numpad5,
216        HID_KEYPAD_6 => crate::KeyCode::Numpad6,
217        HID_KEYPAD_7 => crate::KeyCode::Numpad7,
218        HID_KEYPAD_8 => crate::KeyCode::Numpad8,
219        HID_KEYPAD_9 => crate::KeyCode::Numpad9,
220        HID_KEYPAD_0 => crate::KeyCode::Numpad0,
221        HID_KEYPAD_DOT => crate::KeyCode::NumpadPeriod,
222        HID_LEFT_CTRL => crate::KeyCode::LControl,
223        HID_LEFT_SHIFT => crate::KeyCode::LShift,
224        HID_LEFT_ALT => crate::KeyCode::LAlt,
225        HID_LEFT_GUI => crate::KeyCode::LWin,
226        HID_APPLICATION => crate::KeyCode::Apps,
227        HID_RIGHT_CTRL => crate::KeyCode::RControl,
228        HID_RIGHT_SHIFT => crate::KeyCode::RShift,
229        HID_RIGHT_ALT => crate::KeyCode::RAltGr,
230        HID_RIGHT_GUI => crate::KeyCode::RWin,
231        _ => crate::KeyCode::Unknown,
232    }
233}