1#[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}