1use super::hid::HidKeyCode;
4
5pub fn from_ascii(ascii: u8) -> (HidKeyCode, bool) {
9 match ascii {
10 b'0' => (HidKeyCode::Kc0, false),
11 b'1' => (HidKeyCode::Kc1, false),
12 b'2' => (HidKeyCode::Kc2, false),
13 b'3' => (HidKeyCode::Kc3, false),
14 b'4' => (HidKeyCode::Kc4, false),
15 b'5' => (HidKeyCode::Kc5, false),
16 b'6' => (HidKeyCode::Kc6, false),
17 b'7' => (HidKeyCode::Kc7, false),
18 b'8' => (HidKeyCode::Kc8, false),
19 b'9' => (HidKeyCode::Kc9, false),
20 b'a' => (HidKeyCode::A, false),
21 b'b' => (HidKeyCode::B, false),
22 b'c' => (HidKeyCode::C, false),
23 b'd' => (HidKeyCode::D, false),
24 b'e' => (HidKeyCode::E, false),
25 b'f' => (HidKeyCode::F, false),
26 b'g' => (HidKeyCode::G, false),
27 b'h' => (HidKeyCode::H, false),
28 b'i' => (HidKeyCode::I, false),
29 b'j' => (HidKeyCode::J, false),
30 b'k' => (HidKeyCode::K, false),
31 b'l' => (HidKeyCode::L, false),
32 b'm' => (HidKeyCode::M, false),
33 b'n' => (HidKeyCode::N, false),
34 b'o' => (HidKeyCode::O, false),
35 b'p' => (HidKeyCode::P, false),
36 b'q' => (HidKeyCode::Q, false),
37 b'r' => (HidKeyCode::R, false),
38 b's' => (HidKeyCode::S, false),
39 b't' => (HidKeyCode::T, false),
40 b'u' => (HidKeyCode::U, false),
41 b'v' => (HidKeyCode::V, false),
42 b'w' => (HidKeyCode::W, false),
43 b'x' => (HidKeyCode::X, false),
44 b'y' => (HidKeyCode::Y, false),
45 b'z' => (HidKeyCode::Z, false),
46 b'A' => (HidKeyCode::A, true),
47 b'B' => (HidKeyCode::B, true),
48 b'C' => (HidKeyCode::C, true),
49 b'D' => (HidKeyCode::D, true),
50 b'E' => (HidKeyCode::E, true),
51 b'F' => (HidKeyCode::F, true),
52 b'G' => (HidKeyCode::G, true),
53 b'H' => (HidKeyCode::H, true),
54 b'I' => (HidKeyCode::I, true),
55 b'J' => (HidKeyCode::J, true),
56 b'K' => (HidKeyCode::K, true),
57 b'L' => (HidKeyCode::L, true),
58 b'M' => (HidKeyCode::M, true),
59 b'N' => (HidKeyCode::N, true),
60 b'O' => (HidKeyCode::O, true),
61 b'P' => (HidKeyCode::P, true),
62 b'Q' => (HidKeyCode::Q, true),
63 b'R' => (HidKeyCode::R, true),
64 b'S' => (HidKeyCode::S, true),
65 b'T' => (HidKeyCode::T, true),
66 b'U' => (HidKeyCode::U, true),
67 b'V' => (HidKeyCode::V, true),
68 b'W' => (HidKeyCode::W, true),
69 b'X' => (HidKeyCode::X, true),
70 b'Y' => (HidKeyCode::Y, true),
71 b'Z' => (HidKeyCode::Z, true),
72 b'!' => (HidKeyCode::Kc1, true),
73 b'@' => (HidKeyCode::Kc2, true),
74 b'#' => (HidKeyCode::Kc3, true),
75 b'$' => (HidKeyCode::Kc4, true),
76 b'%' => (HidKeyCode::Kc5, true),
77 b'^' => (HidKeyCode::Kc6, true),
78 b'&' => (HidKeyCode::Kc7, true),
79 b'*' => (HidKeyCode::Kc8, true),
80 b'(' => (HidKeyCode::Kc9, true),
81 b')' => (HidKeyCode::Kc0, true),
82 b'-' => (HidKeyCode::Minus, false),
83 b'_' => (HidKeyCode::Minus, true),
84 b'=' => (HidKeyCode::Equal, false),
85 b'+' => (HidKeyCode::Equal, true),
86 b'[' => (HidKeyCode::LeftBracket, false),
87 b']' => (HidKeyCode::RightBracket, false),
88 b'{' => (HidKeyCode::LeftBracket, true),
89 b'}' => (HidKeyCode::RightBracket, true),
90 b';' => (HidKeyCode::Semicolon, false),
91 b':' => (HidKeyCode::Semicolon, true),
92 b'\'' => (HidKeyCode::Quote, false),
93 b'"' => (HidKeyCode::Quote, true),
94 b'`' => (HidKeyCode::Grave, false),
95 b'~' => (HidKeyCode::Grave, true),
96 b'\\' => (HidKeyCode::Backslash, false),
97 b'|' => (HidKeyCode::Backslash, true),
98 b',' => (HidKeyCode::Comma, false),
99 b'<' => (HidKeyCode::Comma, true),
100 b'.' => (HidKeyCode::Dot, false),
101 b'>' => (HidKeyCode::Dot, true),
102 b'/' => (HidKeyCode::Slash, false),
103 b'?' => (HidKeyCode::Slash, true),
104 b' ' => (HidKeyCode::Space, false),
105 b'\n' => (HidKeyCode::Enter, false),
106 b'\t' => (HidKeyCode::Tab, false),
107 b'\x08' => (HidKeyCode::Backspace, false),
108 b'\x1B' => (HidKeyCode::Escape, false),
109 b'\x7F' => (HidKeyCode::Delete, false),
110 _ => (HidKeyCode::No, false),
111 }
112}
113
114pub fn to_ascii(keycode: HidKeyCode, shifted: bool) -> u8 {
117 match (keycode, shifted) {
118 (HidKeyCode::Kc0, false) => b'0',
119 (HidKeyCode::Kc1, false) => b'1',
120 (HidKeyCode::Kc2, false) => b'2',
121 (HidKeyCode::Kc3, false) => b'3',
122 (HidKeyCode::Kc4, false) => b'4',
123 (HidKeyCode::Kc5, false) => b'5',
124 (HidKeyCode::Kc6, false) => b'6',
125 (HidKeyCode::Kc7, false) => b'7',
126 (HidKeyCode::Kc8, false) => b'8',
127 (HidKeyCode::Kc9, false) => b'9',
128 (HidKeyCode::A, false) => b'a',
129 (HidKeyCode::B, false) => b'b',
130 (HidKeyCode::C, false) => b'c',
131 (HidKeyCode::D, false) => b'd',
132 (HidKeyCode::E, false) => b'e',
133 (HidKeyCode::F, false) => b'f',
134 (HidKeyCode::G, false) => b'g',
135 (HidKeyCode::H, false) => b'h',
136 (HidKeyCode::I, false) => b'i',
137 (HidKeyCode::J, false) => b'j',
138 (HidKeyCode::K, false) => b'k',
139 (HidKeyCode::L, false) => b'l',
140 (HidKeyCode::M, false) => b'm',
141 (HidKeyCode::N, false) => b'n',
142 (HidKeyCode::O, false) => b'o',
143 (HidKeyCode::P, false) => b'p',
144 (HidKeyCode::Q, false) => b'q',
145 (HidKeyCode::R, false) => b'r',
146 (HidKeyCode::S, false) => b's',
147 (HidKeyCode::T, false) => b't',
148 (HidKeyCode::U, false) => b'u',
149 (HidKeyCode::V, false) => b'v',
150 (HidKeyCode::W, false) => b'w',
151 (HidKeyCode::X, false) => b'x',
152 (HidKeyCode::Y, false) => b'y',
153 (HidKeyCode::Z, false) => b'z',
154 (HidKeyCode::A, true) => b'A',
155 (HidKeyCode::B, true) => b'B',
156 (HidKeyCode::C, true) => b'C',
157 (HidKeyCode::D, true) => b'D',
158 (HidKeyCode::E, true) => b'E',
159 (HidKeyCode::F, true) => b'F',
160 (HidKeyCode::G, true) => b'G',
161 (HidKeyCode::H, true) => b'H',
162 (HidKeyCode::I, true) => b'I',
163 (HidKeyCode::J, true) => b'J',
164 (HidKeyCode::K, true) => b'K',
165 (HidKeyCode::L, true) => b'L',
166 (HidKeyCode::M, true) => b'M',
167 (HidKeyCode::N, true) => b'N',
168 (HidKeyCode::O, true) => b'O',
169 (HidKeyCode::P, true) => b'P',
170 (HidKeyCode::Q, true) => b'Q',
171 (HidKeyCode::R, true) => b'R',
172 (HidKeyCode::S, true) => b'S',
173 (HidKeyCode::T, true) => b'T',
174 (HidKeyCode::U, true) => b'U',
175 (HidKeyCode::V, true) => b'V',
176 (HidKeyCode::W, true) => b'W',
177 (HidKeyCode::X, true) => b'X',
178 (HidKeyCode::Y, true) => b'Y',
179 (HidKeyCode::Z, true) => b'Z',
180 (HidKeyCode::Kc1, true) => b'!',
181 (HidKeyCode::Kc2, true) => b'@',
182 (HidKeyCode::Kc3, true) => b'#',
183 (HidKeyCode::Kc4, true) => b'$',
184 (HidKeyCode::Kc5, true) => b'%',
185 (HidKeyCode::Kc6, true) => b'^',
186 (HidKeyCode::Kc7, true) => b'&',
187 (HidKeyCode::Kc8, true) => b'*',
188 (HidKeyCode::Kc9, true) => b'(',
189 (HidKeyCode::Kc0, true) => b')',
190 (HidKeyCode::Minus, false) => b'-',
191 (HidKeyCode::Minus, true) => b'_',
192 (HidKeyCode::Equal, false) => b'=',
193 (HidKeyCode::Equal, true) => b'+',
194 (HidKeyCode::LeftBracket, false) => b'[',
195 (HidKeyCode::RightBracket, false) => b']',
196 (HidKeyCode::LeftBracket, true) => b'{',
197 (HidKeyCode::RightBracket, true) => b'}',
198 (HidKeyCode::Semicolon, false) => b';',
199 (HidKeyCode::Semicolon, true) => b':',
200 (HidKeyCode::Quote, false) => b'\'',
201 (HidKeyCode::Quote, true) => b'"',
202 (HidKeyCode::Grave, false) => b'`',
203 (HidKeyCode::Grave, true) => b'~',
204 (HidKeyCode::Backslash, false) => b'\\',
205 (HidKeyCode::Backslash, true) => b'|',
206 (HidKeyCode::Comma, false) => b',',
207 (HidKeyCode::Comma, true) => b'<',
208 (HidKeyCode::Dot, false) => b'.',
209 (HidKeyCode::Dot, true) => b'>',
210 (HidKeyCode::Slash, false) => b'/',
211 (HidKeyCode::Slash, true) => b'?',
212 (HidKeyCode::Space, false) => b' ',
213 (HidKeyCode::Enter, false) => b'\n',
214 (HidKeyCode::Tab, false) => b'\t',
215 (HidKeyCode::Backspace, false) => b'\x08',
216 (HidKeyCode::Escape, false) => b'\x1B',
217 (HidKeyCode::Delete, false) => b'\x7F',
218 (_, _) => b'X',
220 }
221}