#[repr(u16)]
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum Scancode {
Unknown,
Escape,
One,
Two,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
Zero,
Minus,
Equal,
Backspace,
Tab,
Q,
W,
E,
R,
T,
Y,
U,
I,
O,
P,
LeftBrace,
RightBrace,
Enter,
LeftControl,
A,
D,
S,
F,
G,
H,
J,
K,
L,
Semicolon,
Apostrope,
Grave,
LeftShift,
Backslash,
Z,
X,
C,
V,
B,
N,
M,
Comma,
Dot,
Slash,
RightShift,
KeyPadAsterick,
LeftAlt,
Space,
CapsLock,
F1,
F2,
F3,
F4,
F5,
F6,
F7,
F8,
F9,
F10,
NumLock,
ScrollLock,
KeyPad7,
KeyPad8,
KeyPad9,
KeyPadMinus,
KeyPad4,
KeyPad5,
KeyPad6,
KeyPadPlus,
KeyPad1,
KeyPad2,
KeyPad3,
KeyPad0,
KeyPadDot,
NonUSBackslash,
F11,
F12,
KeyPadEnter,
RightAlt,
Home,
Up,
PageUp,
Left,
Right,
End,
Down,
PageDown,
Insert,
Delete,
KeyPadEqual,
KeyPadPlusMinus,
}
#[cfg(target_os = "linux")]
impl From<u32> for Scancode {
fn from(sc: u32) -> Self {
match sc {
1 => Scancode::Escape,
2 => Scancode::One,
3 => Scancode::Two,
4 => Scancode::Three,
5 => Scancode::Four,
6 => Scancode::Five,
7 => Scancode::Six,
8 => Scancode::Seven,
9 => Scancode::Eight,
10 => Scancode::Nine,
11 => Scancode::Zero,
12 => Scancode::Minus,
13 => Scancode::Equal,
14 => Scancode::Backspace,
15 => Scancode::Tab,
16 => Scancode::Q,
17 => Scancode::W,
18 => Scancode::E,
19 => Scancode::R,
20 => Scancode::T,
21 => Scancode::Y,
22 => Scancode::U,
23 => Scancode::I,
24 => Scancode::O,
25 => Scancode::P,
26 => Scancode::LeftBrace,
27 => Scancode::RightBrace,
28 => Scancode::Enter,
29 => Scancode::LeftControl,
30 => Scancode::A,
31 => Scancode::S,
32 => Scancode::D,
33 => Scancode::F,
34 => Scancode::G,
35 => Scancode::H,
36 => Scancode::J,
37 => Scancode::K,
38 => Scancode::L,
39 => Scancode::Semicolon,
40 => Scancode::Apostrope,
41 => Scancode::Grave,
42 => Scancode::LeftShift,
43 => Scancode::Backslash,
44 => Scancode::Z,
45 => Scancode::X,
46 => Scancode::C,
47 => Scancode::V,
48 => Scancode::B,
49 => Scancode::N,
50 => Scancode::M,
51 => Scancode::Comma,
52 => Scancode::Dot,
53 => Scancode::Slash,
54 => Scancode::RightShift,
55 => Scancode::KeyPadAsterick,
56 => Scancode::LeftAlt,
57 => Scancode::Space,
58 => Scancode::CapsLock,
59 => Scancode::F1,
60 => Scancode::F2,
61 => Scancode::F3,
62 => Scancode::F4,
63 => Scancode::F5,
64 => Scancode::F6,
65 => Scancode::F7,
66 => Scancode::F8,
67 => Scancode::F9,
68 => Scancode::F10,
69 => Scancode::NumLock,
70 => Scancode::ScrollLock,
71 => Scancode::KeyPad7,
72 => Scancode::KeyPad8,
73 => Scancode::KeyPad9,
74 => Scancode::KeyPadMinus,
75 => Scancode::KeyPad4,
76 => Scancode::KeyPad5,
77 => Scancode::KeyPad6,
78 => Scancode::KeyPadPlus,
79 => Scancode::KeyPad1,
80 => Scancode::KeyPad2,
81 => Scancode::KeyPad3,
82 => Scancode::KeyPad0,
83 => Scancode::KeyPadDot,
86 => Scancode::NonUSBackslash,
87 => Scancode::F11,
88 => Scancode::F12,
96 => Scancode::KeyPadEnter,
100 => Scancode::RightAlt,
102 => Scancode::Home,
103 => Scancode::Up,
104 => Scancode::PageUp,
105 => Scancode::Left,
106 => Scancode::Right,
107 => Scancode::End,
108 => Scancode::Down,
109 => Scancode::PageDown,
110 => Scancode::Insert,
111 => Scancode::Delete,
117 => Scancode::KeyPadEqual,
118 => Scancode::KeyPadPlusMinus,
_ => Scancode::Unknown,
}
}
}
#[cfg(target_os = "windows")]
impl From<u32> for Scancode {
fn from(sc: u32) -> Self {
match sc {
0x01 => Scancode::Escape,
0x02 => Scancode::One,
0x03 => Scancode::Two,
0x04 => Scancode::Three,
0x05 => Scancode::Four,
0x06 => Scancode::Five,
0x07 => Scancode::Six,
0x08 => Scancode::Seven,
0x09 => Scancode::Eight,
0x0A => Scancode::Nine,
0x0B => Scancode::Zero,
0x0C => Scancode::Minus,
0x0D => Scancode::Equal,
0x0E => Scancode::Backspace,
0x0F => Scancode::Tab,
0x10 => Scancode::Q,
0x11 => Scancode::W,
0x12 => Scancode::E,
0x13 => Scancode::R,
0x14 => Scancode::T,
0x15 => Scancode::Y,
0x16 => Scancode::U,
0x17 => Scancode::I,
0x18 => Scancode::O,
0x19 => Scancode::P,
0x1A => Scancode::LeftBrace,
0x1B => Scancode::RightBrace,
0x1C => Scancode::Enter,
0x1D => Scancode::LeftControl,
0x1E => Scancode::A,
0x1F => Scancode::S,
0x20 => Scancode::D,
0x21 => Scancode::F,
0x22 => Scancode::G,
0x23 => Scancode::H,
0x24 => Scancode::J,
0x25 => Scancode::K,
0x26 => Scancode::L,
0x27 => Scancode::Semicolon,
0x28 => Scancode::Apostrope,
0x29 => Scancode::Grave,
0x2A => Scancode::LeftShift,
0x2B => Scancode::Backslash,
0x2C => Scancode::Z,
0x2D => Scancode::X,
0x2E => Scancode::C,
0x2F => Scancode::V,
0x30 => Scancode::B,
0x31 => Scancode::N,
0x32 => Scancode::M,
0x33 => Scancode::Comma,
0x34 => Scancode::Dot,
0x35 => Scancode::Slash,
0x36 => Scancode::RightShift,
0x37 => Scancode::KeyPadAsterick,
0x38 => Scancode::LeftAlt,
0x39 => Scancode::Space,
0x3A => Scancode::CapsLock,
0x3B => Scancode::F1,
0x3C => Scancode::F2,
0x3D => Scancode::F3,
0x3E => Scancode::F4,
0x3F => Scancode::F5,
0x40 => Scancode::F6,
0x41 => Scancode::F7,
0x42 => Scancode::F8,
0x43 => Scancode::F9,
0x44 => Scancode::F10,
0xE045 | 0x45 => Scancode::NumLock,
0x46 => Scancode::ScrollLock,
0x47 => Scancode::KeyPad7,
0x48 => Scancode::KeyPad8,
0x49 => Scancode::KeyPad9,
0x4A => Scancode::KeyPadMinus,
0x4B => Scancode::KeyPad4,
0x4C => Scancode::KeyPad5,
0x4D => Scancode::KeyPad6,
0x4E => Scancode::KeyPadPlus,
0x4F => Scancode::KeyPad1,
0x50 => Scancode::KeyPad2,
0x51 => Scancode::KeyPad3,
0x52 => Scancode::KeyPad0,
0x53 => Scancode::KeyPadDot,
0x56 => Scancode::NonUSBackslash,
0x57 => Scancode::F11,
0x58 => Scancode::F12,
0xE01C => Scancode::KeyPadEnter,
0xE038 => Scancode::RightAlt,
0xE047 => Scancode::Home,
0xE048 => Scancode::Up,
0xE049 => Scancode::PageUp,
0xE04B => Scancode::Left,
0xE04D => Scancode::Right,
0xE04F => Scancode::End,
0xE050 => Scancode::Down,
0xE051 => Scancode::PageDown,
0xE052 => Scancode::Insert,
0xE053 => Scancode::Delete,
_ => Scancode::Unknown,
}
}
}