My Project
 All Classes Functions Variables Pages
HIDKeyboardTypes.h
1 /* Copyright (c) 2015 mbed.org, MIT License
2  *
3  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
4  * and associated documentation files (the "Software"), to deal in the Software without
5  * restriction, including without limitation the rights to use, copy, modify, merge, publish,
6  * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
7  * Software is furnished to do so, subject to the following conditions:
8  *
9  * The above copyright notice and this permission notice shall be included in all copies or
10  * substantial portions of the Software.
11  *
12  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
13  * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
14  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
15  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17  *
18  * Note: this file was pulled from different parts of the USBHID library, in mbed SDK
19  */
20 
21 #ifndef KEYBOARD_DEFS_H
22 #define KEYBOARD_DEFS_H
23 
24 #define REPORT_ID_KEYBOARD 1
25 #define REPORT_ID_VOLUME 3
26 
27 /* Modifiers */
28 enum MODIFIER_KEY {
29  KEY_CTRL = 1,
30  KEY_SHIFT = 2,
31  KEY_ALT = 4,
32 };
33 
34 
35 enum MEDIA_KEY {
36  KEY_NEXT_TRACK,
37  KEY_PREVIOUS_TRACK,
38  KEY_STOP,
39  KEY_PLAY_PAUSE,
40  KEY_MUTE,
41  KEY_VOLUME_UP,
42  KEY_VOLUME_DOWN,
43 };
44 
45 enum FUNCTION_KEY {
46  KEY_F1 = 128, /* F1 key */
47  KEY_F2, /* F2 key */
48  KEY_F3, /* F3 key */
49  KEY_F4, /* F4 key */
50  KEY_F5, /* F5 key */
51  KEY_F6, /* F6 key */
52  KEY_F7, /* F7 key */
53  KEY_F8, /* F8 key */
54  KEY_F9, /* F9 key */
55  KEY_F10, /* F10 key */
56  KEY_F11, /* F11 key */
57  KEY_F12, /* F12 key */
58 
59  KEY_PRINT_SCREEN, /* Print Screen key */
60  KEY_SCROLL_LOCK, /* Scroll lock */
61  KEY_CAPS_LOCK, /* caps lock */
62  KEY_NUM_LOCK, /* num lock */
63  KEY_INSERT, /* Insert key */
64  KEY_HOME, /* Home key */
65  KEY_PAGE_UP, /* Page Up key */
66  KEY_PAGE_DOWN, /* Page Down key */
67 
68  RIGHT_ARROW, /* Right arrow */
69  LEFT_ARROW, /* Left arrow */
70  DOWN_ARROW, /* Down arrow */
71  UP_ARROW, /* Up arrow */
72 };
73 
74 typedef struct {
75  unsigned char usage;
76  unsigned char modifier;
77 } KEYMAP;
78 
79 #ifdef US_KEYBOARD
80 /* US keyboard (as HID standard) */
81 #define KEYMAP_SIZE (152)
82 const KEYMAP keymap[KEYMAP_SIZE] = {
83  {0, 0}, /* NUL */
84  {0, 0}, /* SOH */
85  {0, 0}, /* STX */
86  {0, 0}, /* ETX */
87  {0, 0}, /* EOT */
88  {0, 0}, /* ENQ */
89  {0, 0}, /* ACK */
90  {0, 0}, /* BEL */
91  {0x2a, 0}, /* BS */ /* Keyboard Delete (Backspace) */
92  {0x2b, 0}, /* TAB */ /* Keyboard Tab */
93  {0x28, 0}, /* LF */ /* Keyboard Return (Enter) */
94  {0, 0}, /* VT */
95  {0, 0}, /* FF */
96  {0, 0}, /* CR */
97  {0, 0}, /* SO */
98  {0, 0}, /* SI */
99  {0, 0}, /* DEL */
100  {0, 0}, /* DC1 */
101  {0, 0}, /* DC2 */
102  {0, 0}, /* DC3 */
103  {0, 0}, /* DC4 */
104  {0, 0}, /* NAK */
105  {0, 0}, /* SYN */
106  {0, 0}, /* ETB */
107  {0, 0}, /* CAN */
108  {0, 0}, /* EM */
109  {0, 0}, /* SUB */
110  {0, 0}, /* ESC */
111  {0, 0}, /* FS */
112  {0, 0}, /* GS */
113  {0, 0}, /* RS */
114  {0, 0}, /* US */
115  {0x2c, 0}, /* */
116  {0x1e, KEY_SHIFT}, /* ! */
117  {0x34, KEY_SHIFT}, /* " */
118  {0x20, KEY_SHIFT}, /* # */
119  {0x21, KEY_SHIFT}, /* $ */
120  {0x22, KEY_SHIFT}, /* % */
121  {0x24, KEY_SHIFT}, /* & */
122  {0x34, 0}, /* ' */
123  {0x26, KEY_SHIFT}, /* ( */
124  {0x27, KEY_SHIFT}, /* ) */
125  {0x25, KEY_SHIFT}, /* * */
126  {0x2e, KEY_SHIFT}, /* + */
127  {0x36, 0}, /* , */
128  {0x2d, 0}, /* - */
129  {0x37, 0}, /* . */
130  {0x38, 0}, /* / */
131  {0x27, 0}, /* 0 */
132  {0x1e, 0}, /* 1 */
133  {0x1f, 0}, /* 2 */
134  {0x20, 0}, /* 3 */
135  {0x21, 0}, /* 4 */
136  {0x22, 0}, /* 5 */
137  {0x23, 0}, /* 6 */
138  {0x24, 0}, /* 7 */
139  {0x25, 0}, /* 8 */
140  {0x26, 0}, /* 9 */
141  {0x33, KEY_SHIFT}, /* : */
142  {0x33, 0}, /* ; */
143  {0x36, KEY_SHIFT}, /* < */
144  {0x2e, 0}, /* = */
145  {0x37, KEY_SHIFT}, /* > */
146  {0x38, KEY_SHIFT}, /* ? */
147  {0x1f, KEY_SHIFT}, /* @ */
148  {0x04, KEY_SHIFT}, /* A */
149  {0x05, KEY_SHIFT}, /* B */
150  {0x06, KEY_SHIFT}, /* C */
151  {0x07, KEY_SHIFT}, /* D */
152  {0x08, KEY_SHIFT}, /* E */
153  {0x09, KEY_SHIFT}, /* F */
154  {0x0a, KEY_SHIFT}, /* G */
155  {0x0b, KEY_SHIFT}, /* H */
156  {0x0c, KEY_SHIFT}, /* I */
157  {0x0d, KEY_SHIFT}, /* J */
158  {0x0e, KEY_SHIFT}, /* K */
159  {0x0f, KEY_SHIFT}, /* L */
160  {0x10, KEY_SHIFT}, /* M */
161  {0x11, KEY_SHIFT}, /* N */
162  {0x12, KEY_SHIFT}, /* O */
163  {0x13, KEY_SHIFT}, /* P */
164  {0x14, KEY_SHIFT}, /* Q */
165  {0x15, KEY_SHIFT}, /* R */
166  {0x16, KEY_SHIFT}, /* S */
167  {0x17, KEY_SHIFT}, /* T */
168  {0x18, KEY_SHIFT}, /* U */
169  {0x19, KEY_SHIFT}, /* V */
170  {0x1a, KEY_SHIFT}, /* W */
171  {0x1b, KEY_SHIFT}, /* X */
172  {0x1c, KEY_SHIFT}, /* Y */
173  {0x1d, KEY_SHIFT}, /* Z */
174  {0x2f, 0}, /* [ */
175  {0x31, 0}, /* \ */
176  {0x30, 0}, /* ] */
177  {0x23, KEY_SHIFT}, /* ^ */
178  {0x2d, KEY_SHIFT}, /* _ */
179  {0x35, 0}, /* ` */
180  {0x04, 0}, /* a */
181  {0x05, 0}, /* b */
182  {0x06, 0}, /* c */
183  {0x07, 0}, /* d */
184  {0x08, 0}, /* e */
185  {0x09, 0}, /* f */
186  {0x0a, 0}, /* g */
187  {0x0b, 0}, /* h */
188  {0x0c, 0}, /* i */
189  {0x0d, 0}, /* j */
190  {0x0e, 0}, /* k */
191  {0x0f, 0}, /* l */
192  {0x10, 0}, /* m */
193  {0x11, 0}, /* n */
194  {0x12, 0}, /* o */
195  {0x13, 0}, /* p */
196  {0x14, 0}, /* q */
197  {0x15, 0}, /* r */
198  {0x16, 0}, /* s */
199  {0x17, 0}, /* t */
200  {0x18, 0}, /* u */
201  {0x19, 0}, /* v */
202  {0x1a, 0}, /* w */
203  {0x1b, 0}, /* x */
204  {0x1c, 0}, /* y */
205  {0x1d, 0}, /* z */
206  {0x2f, KEY_SHIFT}, /* { */
207  {0x31, KEY_SHIFT}, /* | */
208  {0x30, KEY_SHIFT}, /* } */
209  {0x35, KEY_SHIFT}, /* ~ */
210  {0,0}, /* DEL */
211 
212  {0x3a, 0}, /* F1 */
213  {0x3b, 0}, /* F2 */
214  {0x3c, 0}, /* F3 */
215  {0x3d, 0}, /* F4 */
216  {0x3e, 0}, /* F5 */
217  {0x3f, 0}, /* F6 */
218  {0x40, 0}, /* F7 */
219  {0x41, 0}, /* F8 */
220  {0x42, 0}, /* F9 */
221  {0x43, 0}, /* F10 */
222  {0x44, 0}, /* F11 */
223  {0x45, 0}, /* F12 */
224 
225  {0x46, 0}, /* PRINT_SCREEN */
226  {0x47, 0}, /* SCROLL_LOCK */
227  {0x39, 0}, /* CAPS_LOCK */
228  {0x53, 0}, /* NUM_LOCK */
229  {0x49, 0}, /* INSERT */
230  {0x4a, 0}, /* HOME */
231  {0x4b, 0}, /* PAGE_UP */
232  {0x4e, 0}, /* PAGE_DOWN */
233 
234  {0x4f, 0}, /* RIGHT_ARROW */
235  {0x50, 0}, /* LEFT_ARROW */
236  {0x51, 0}, /* DOWN_ARROW */
237  {0x52, 0}, /* UP_ARROW */
238 };
239 
240 #else
241 /* UK keyboard */
242 #define KEYMAP_SIZE (152)
243 const KEYMAP keymap[KEYMAP_SIZE] = {
244  {0, 0}, /* NUL */
245  {0, 0}, /* SOH */
246  {0, 0}, /* STX */
247  {0, 0}, /* ETX */
248  {0, 0}, /* EOT */
249  {0, 0}, /* ENQ */
250  {0, 0}, /* ACK */
251  {0, 0}, /* BEL */
252  {0x2a, 0}, /* BS */ /* Keyboard Delete (Backspace) */
253  {0x2b, 0}, /* TAB */ /* Keyboard Tab */
254  {0x28, 0}, /* LF */ /* Keyboard Return (Enter) */
255  {0, 0}, /* VT */
256  {0, 0}, /* FF */
257  {0, 0}, /* CR */
258  {0, 0}, /* SO */
259  {0, 0}, /* SI */
260  {0, 0}, /* DEL */
261  {0, 0}, /* DC1 */
262  {0, 0}, /* DC2 */
263  {0, 0}, /* DC3 */
264  {0, 0}, /* DC4 */
265  {0, 0}, /* NAK */
266  {0, 0}, /* SYN */
267  {0, 0}, /* ETB */
268  {0, 0}, /* CAN */
269  {0, 0}, /* EM */
270  {0, 0}, /* SUB */
271  {0, 0}, /* ESC */
272  {0, 0}, /* FS */
273  {0, 0}, /* GS */
274  {0, 0}, /* RS */
275  {0, 0}, /* US */
276  {0x2c, 0}, /* */
277  {0x1e, KEY_SHIFT}, /* ! */
278  {0x1f, KEY_SHIFT}, /* " */
279  {0x32, 0}, /* # */
280  {0x21, KEY_SHIFT}, /* $ */
281  {0x22, KEY_SHIFT}, /* % */
282  {0x24, KEY_SHIFT}, /* & */
283  {0x34, 0}, /* ' */
284  {0x26, KEY_SHIFT}, /* ( */
285  {0x27, KEY_SHIFT}, /* ) */
286  {0x25, KEY_SHIFT}, /* * */
287  {0x2e, KEY_SHIFT}, /* + */
288  {0x36, 0}, /* , */
289  {0x2d, 0}, /* - */
290  {0x37, 0}, /* . */
291  {0x38, 0}, /* / */
292  {0x27, 0}, /* 0 */
293  {0x1e, 0}, /* 1 */
294  {0x1f, 0}, /* 2 */
295  {0x20, 0}, /* 3 */
296  {0x21, 0}, /* 4 */
297  {0x22, 0}, /* 5 */
298  {0x23, 0}, /* 6 */
299  {0x24, 0}, /* 7 */
300  {0x25, 0}, /* 8 */
301  {0x26, 0}, /* 9 */
302  {0x33, KEY_SHIFT}, /* : */
303  {0x33, 0}, /* ; */
304  {0x36, KEY_SHIFT}, /* < */
305  {0x2e, 0}, /* = */
306  {0x37, KEY_SHIFT}, /* > */
307  {0x38, KEY_SHIFT}, /* ? */
308  {0x34, KEY_SHIFT}, /* @ */
309  {0x04, KEY_SHIFT}, /* A */
310  {0x05, KEY_SHIFT}, /* B */
311  {0x06, KEY_SHIFT}, /* C */
312  {0x07, KEY_SHIFT}, /* D */
313  {0x08, KEY_SHIFT}, /* E */
314  {0x09, KEY_SHIFT}, /* F */
315  {0x0a, KEY_SHIFT}, /* G */
316  {0x0b, KEY_SHIFT}, /* H */
317  {0x0c, KEY_SHIFT}, /* I */
318  {0x0d, KEY_SHIFT}, /* J */
319  {0x0e, KEY_SHIFT}, /* K */
320  {0x0f, KEY_SHIFT}, /* L */
321  {0x10, KEY_SHIFT}, /* M */
322  {0x11, KEY_SHIFT}, /* N */
323  {0x12, KEY_SHIFT}, /* O */
324  {0x13, KEY_SHIFT}, /* P */
325  {0x14, KEY_SHIFT}, /* Q */
326  {0x15, KEY_SHIFT}, /* R */
327  {0x16, KEY_SHIFT}, /* S */
328  {0x17, KEY_SHIFT}, /* T */
329  {0x18, KEY_SHIFT}, /* U */
330  {0x19, KEY_SHIFT}, /* V */
331  {0x1a, KEY_SHIFT}, /* W */
332  {0x1b, KEY_SHIFT}, /* X */
333  {0x1c, KEY_SHIFT}, /* Y */
334  {0x1d, KEY_SHIFT}, /* Z */
335  {0x2f, 0}, /* [ */
336  {0x64, 0}, /* \ */
337  {0x30, 0}, /* ] */
338  {0x23, KEY_SHIFT}, /* ^ */
339  {0x2d, KEY_SHIFT}, /* _ */
340  {0x35, 0}, /* ` */
341  {0x04, 0}, /* a */
342  {0x05, 0}, /* b */
343  {0x06, 0}, /* c */
344  {0x07, 0}, /* d */
345  {0x08, 0}, /* e */
346  {0x09, 0}, /* f */
347  {0x0a, 0}, /* g */
348  {0x0b, 0}, /* h */
349  {0x0c, 0}, /* i */
350  {0x0d, 0}, /* j */
351  {0x0e, 0}, /* k */
352  {0x0f, 0}, /* l */
353  {0x10, 0}, /* m */
354  {0x11, 0}, /* n */
355  {0x12, 0}, /* o */
356  {0x13, 0}, /* p */
357  {0x14, 0}, /* q */
358  {0x15, 0}, /* r */
359  {0x16, 0}, /* s */
360  {0x17, 0}, /* t */
361  {0x18, 0}, /* u */
362  {0x19, 0}, /* v */
363  {0x1a, 0}, /* w */
364  {0x1b, 0}, /* x */
365  {0x1c, 0}, /* y */
366  {0x1d, 0}, /* z */
367  {0x2f, KEY_SHIFT}, /* { */
368  {0x64, KEY_SHIFT}, /* | */
369  {0x30, KEY_SHIFT}, /* } */
370  {0x32, KEY_SHIFT}, /* ~ */
371  {0,0}, /* DEL */
372 
373  {0x3a, 0}, /* F1 */
374  {0x3b, 0}, /* F2 */
375  {0x3c, 0}, /* F3 */
376  {0x3d, 0}, /* F4 */
377  {0x3e, 0}, /* F5 */
378  {0x3f, 0}, /* F6 */
379  {0x40, 0}, /* F7 */
380  {0x41, 0}, /* F8 */
381  {0x42, 0}, /* F9 */
382  {0x43, 0}, /* F10 */
383  {0x44, 0}, /* F11 */
384  {0x45, 0}, /* F12 */
385 
386  {0x46, 0}, /* PRINT_SCREEN */
387  {0x47, 0}, /* SCROLL_LOCK */
388  {0x39, 0}, /* CAPS_LOCK */
389  {0x53, 0}, /* NUM_LOCK */
390  {0x49, 0}, /* INSERT */
391  {0x4a, 0}, /* HOME */
392  {0x4b, 0}, /* PAGE_UP */
393  {0x4e, 0}, /* PAGE_DOWN */
394 
395  {0x4f, 0}, /* RIGHT_ARROW */
396  {0x50, 0}, /* LEFT_ARROW */
397  {0x51, 0}, /* DOWN_ARROW */
398  {0x52, 0}, /* UP_ARROW */
399 };
400 #endif
401 
402 #endif
Definition: HIDKeyboardTypes.h:74