]> git.friedersdorff.com Git - max/tmk_keyboard.git/blob - usb_keycodes.h
827e74267fb6d9947a71dddfa0c127dd36508b51
[max/tmk_keyboard.git] / usb_keycodes.h
1 /* 
2  * Key codes from HID Keyboard/Keypad Page
3  * http://www.usb.org/developers/devclass_docs/Hut1_12.pdf
4  *
5  * Based on Keyboard Upgrade v0.3.0 http://github.com/rhomann/kbupgrade
6  */
7 /*
8  * Keyboard Upgrade -- Firmware for homebrew computer keyboard controllers.
9  * Copyright (C) 2009  Robert Homann
10  *
11  * Based on RUMP (http://mg8.org/rump/), Copyright (C) 2008  Chris Lee
12  *
13  * Based on c64key (http://symlink.dk/projects/c64key/),
14  * Copyright (C) 2006-2007  Mikkel Holm Olsen
15  *
16  * Based on HID-Test by Christian Starkjohann, Objective Development
17  *
18  * This file is part of the Keyboard Upgrade package.
19  *
20  * This program is free software; you can redistribute it and/or modify
21  * it under the terms of the GNU General Public License as published by
22  * the Free Software Foundation; either version 2 of the License, or
23  * (at your option) any later version.
24  *
25  * This program is distributed in the hope that it will be useful, but
26  * WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
28  * GNU General Public License for more details.
29  *
30  * You should have received a copy of the GNU General Public License
31  * along with the Keyboard Upgrade package; if not, write to the
32  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
33  * MA  02110-1301  USA
34  */
35 #ifndef USB_KEYCODES_H
36 #define USB_KEYCODES_H
37
38
39 #define IS_ERROR(code)           (KB_ROLL_OVER <= (code) && (code) <= KB_UNDEFINED)
40 #define IS_KEY(code)             (KB_A         <= (code) && (code) <= KB_KP_HEXADECIMAL)
41 #define IS_MOD(code)             (KB_LCTRL     <= (code) && (code) <= KB_RGUI)
42 #define IS_FN(code)              (KB_FN0       <= (code) && (code) <= KB_FN7)
43 #define IS_MOUSEKEY(code)        (KB_MS_UP     <= (code) && (code) <= KB_MS_WH_RIGHT)
44 #define IS_MOUSEKEY_MOVE(code)   (KB_MS_UP     <= (code) && (code) <= KB_MS_RIGHT)
45 #define IS_MOUSEKEY_BUTTON(code) (KB_MS_BTN1   <= (code) && (code) <= KB_MS_BTN5)
46 #define IS_MOUSEKEY_WHEEL(code)  (KB_MS_WH_UP  <= (code) && (code) <= KB_MS_WH_RIGHT)
47
48 #define MOD_BIT(code) (1<<((code) & 0x07))
49 #define FN_BIT(code)  (1<<((code) - KB_FN0))
50
51
52 //
53 // Short names
54 //
55 #define KB_LCTL KB_LCTRL
56 #define KB_RCTL KB_RCTRL
57 #define KB_LSFT KB_LSHIFT
58 #define KB_RSFT KB_RSHIFT
59 #define KB_ESC  KB_ESCAPE
60 #define KB_BSPC KB_BSPACE
61 #define KB_ENT  KB_ENTER
62 #define KB_DEL  KB_DELETE
63 #define KB_INS  KB_INSERT
64 #define KB_CAPS KB_CAPSLOCK
65 #define KB_RGHT KB_RIGHT
66 #define KB_PGDN KB_PGDOWN
67 #define KB_PSCR KB_PSCREEN
68 #define KB_SLCK KB_SCKLOCK
69 #define KB_BRK  KB_BREAK
70 #define KB_NLCK KB_NUMLOCK
71 #define KB_SPC  KB_SPACE
72 #define KB_MINS KB_MINUS
73 #define KB_EQL  KB_EQUAL
74 #define KB_GRV  KB_GRAVE
75 #define KB_RBRC KB_RBRACKET
76 #define KB_LBRC KB_LBRACKET
77 #define KB_COMM KB_COMMA
78 #define KB_BSLS KB_BSLASH
79 #define KB_SLSH KB_SLASH
80 #define KB_SCLN KB_SCOLON
81 #define KB_QUOT KB_QUOTE
82 #define KB_PWR  KB_POWER
83 #define KB_VOLU KB_VOLUP
84 #define KB_VOLD KB_VOLDOWN
85 #define KB_APP  KB_APPLICATION,
86 // Keypad
87 #define KB_P1   KB_KP_1
88 #define KB_P2   KB_KP_2
89 #define KB_P3   KB_KP_3
90 #define KB_P4   KB_KP_4
91 #define KB_P5   KB_KP_5
92 #define KB_P6   KB_KP_6
93 #define KB_P7   KB_KP_7
94 #define KB_P8   KB_KP_8
95 #define KB_P9   KB_KP_9
96 #define KB_P0   KB_KP_0
97 #define KB_PDOT KB_KP_DOT
98 #define KB_PSLS KB_KP_SLASH
99 #define KB_PAST KB_KP_ASTERISK
100 #define KB_PMNS KB_KP_MINUS
101 #define KB_PPLS KB_KP_PLUS
102 #define KB_PEQL KB_KP_EQUAL
103 #define KB_PENT KB_KP_ENTER
104 // Mousekey
105 #define KB_MS_U KB_MS_UP
106 #define KB_MS_D KB_MS_DOWN
107 #define KB_MS_L KB_MS_LEFT
108 #define KB_MS_R KB_MS_RIGHT
109 #define KB_BTN1 KB_MS_BTN1
110 #define KB_BTN2 KB_MS_BTN2
111 #define KB_BTN3 KB_MS_BTN3
112 #define KB_BTN4 KB_MS_BTN4
113 #define KB_BTN5 KB_MS_BTN5
114 #define KB_WH_U KB_MS_WH_UP
115 #define KB_WH_D KB_MS_WH_DOWN
116 #define KB_WH_L KB_MS_WH_LEFT
117 #define KB_WH_R KB_MS_WH_RIGHT
118
119
120 enum keycodes {
121     KB_NO = 0,
122     KB_ROLL_OVER,
123     KB_POST_FAIL,
124     KB_UNDEFINED,
125     KB_A,
126     KB_B,
127     KB_C,
128     KB_D,
129     KB_E,
130     KB_F,
131     KB_G,
132     KB_H,
133     KB_I,
134     KB_J,
135     KB_K,
136     KB_L,
137     KB_M,       /* 0x10 */
138     KB_N,
139     KB_O,
140     KB_P,
141     KB_Q,
142     KB_R,
143     KB_S,
144     KB_T,
145     KB_U,
146     KB_V,
147     KB_W,
148     KB_X,
149     KB_Y,
150     KB_Z,
151     KB_1,
152     KB_2,
153     KB_3,       /* 0x20 */
154     KB_4,
155     KB_5,
156     KB_6,
157     KB_7,
158     KB_8,
159     KB_9,
160     KB_0,
161     KB_ENTER,
162     KB_ESCAPE,
163     KB_BSPACE,
164     KB_TAB,
165     KB_SPACE,
166     KB_MINUS,
167     KB_EQUAL,
168     KB_LBRACKET,          /* [ */
169     KB_RBRACKET,          /* ] */
170     KB_BSLASH,            /* \ (and |) */
171     KB_NONUS_HASH,        /* Non-US # and ~ */
172     KB_SCOLON,            /* ; (and :) */
173     KB_QUOTE,             /* ' and " */
174     KB_GRAVE,             /* Grave accent and tilde */
175     KB_COMMA,             /* , and < */
176     KB_DOT,               /* . and > */
177     KB_SLASH,             /* / and ? */
178     KB_CAPSLOCK,
179     KB_F1,
180     KB_F2,
181     KB_F3,
182     KB_F4,
183     KB_F5,
184     KB_F6,
185     KB_F7,      /* 0x40 */
186     KB_F8,
187     KB_F9,
188     KB_F10,
189     KB_F11,
190     KB_F12,
191     KB_PSCREEN,
192     KB_SCKLOCK,
193     KB_BREAK,
194     KB_INSERT,
195     KB_HOME,
196     KB_PGUP,
197     KB_DELETE,
198     KB_END,
199     KB_PGDOWN,
200     KB_RIGHT,
201     KB_LEFT,    /* 0x50 */
202     KB_DOWN,
203     KB_UP,
204     KB_NUMLOCK,
205     KB_KP_SLASH,
206     KB_KP_ASTERISK,
207     KB_KP_MINUS,
208     KB_KP_PLUS,
209     KB_KP_ENTER,
210     KB_KP_1,
211     KB_KP_2,
212     KB_KP_3,
213     KB_KP_4,
214     KB_KP_5,
215     KB_KP_6,
216     KB_KP_7,
217     KB_KP_8,       /* 0x60 */
218     KB_KP_9,
219     KB_KP_0,
220     KB_KP_DOT,
221     KB_NONUS_BSLASH,      /* Non-US \ and | */
222     KB_APPLICATION,
223     KB_POWER,
224     KB_KP_EQUAL,
225     KB_F13,
226     KB_F14,
227     KB_F15,
228     KB_F16,
229     KB_F17,
230     KB_F18,
231     KB_F19,
232     KB_F20,
233     KB_F21,     /* 0x70 */
234     KB_F22,
235     KB_F23,
236     KB_F24,
237     KB_EXECUTE,
238     KB_HELP,
239     KB_MENU,
240     KB_SELECT,
241     KB_STOP,
242     KB_AGAIN,
243     KB_UNDO,
244     KB_CUT,
245     KB_COPY,
246     KB_PASTE,
247     KB_FIND,
248     KB_MUTE,
249     KB_VOLUP,   /* 0x80 */
250     KB_VOLDOWN,
251     KB_LOCKING_CAPS,      /* locking Caps Lock */
252     KB_LOCKING_NUM,       /* locking Num Lock */
253     KB_LOCKING_SCROLL,    /* locking Scroll Lock */
254     KB_KP_COMMA,
255     KB_KP_EQUAL_AS400,       /* equal sign on AS/400 */
256     KB_INT1,
257     KB_INT2,
258     KB_INT3,
259     KB_INT4,
260     KB_INT5,
261     KB_INT6,
262     KB_INT7,
263     KB_INT8,
264     KB_INT9,
265     KB_LANG1,    /* 0x90 */
266     KB_LANG2,
267     KB_LANG3,
268     KB_LANG4,
269     KB_LANG5,
270     KB_LANG6,
271     KB_LANG7,
272     KB_LANG8,
273     KB_LANG9,
274     KB_ALT_ERASE,
275     KB_SYSREQ,
276     KB_CANCEL,
277     KB_CLEAR,
278     KB_PRIOR,
279     KB_RETURN,
280     KB_SEPARATOR,
281     KB_OUT,
282     KB_OPER,
283     KB_CLEAR_AGAIN,
284     KB_CRSEL,
285     KB_EXSEL,
286
287     KB_KP_00 = 0xB0,
288     KB_KP_000,
289     KB_THOUSANDS_SEPARATOR,
290     KB_DECIMAL_SEPARATOR,
291     KB_CURRENCY_UNIT,
292     KB_CURRENCY_SUB_UNIT,
293     KB_KP_LPAREN,
294     KB_KP_RPAREN,
295     KB_KP_LCBRACKET,         /* { */
296     KB_KP_RCBRACKET,         /* } */
297     KB_KP_TAB,
298     KB_KP_BSPACE,
299     KB_KP_A,
300     KB_KP_B,
301     KB_KP_C,
302     KB_KP_D,
303     KB_KP_E,
304     KB_KP_F,
305     KB_KP_XOR,
306     KB_KP_HAT,
307     KB_KP_PERC,
308     KB_KP_LT,
309     KB_KP_GT,
310     KB_KP_AND,
311     KB_KP_LAZYAND,
312     KB_KP_OR,
313     KB_KP_LAZYOR,
314     KB_KP_COLON,
315     KB_KP_HASH,
316     KB_KP_SPACE,
317     KB_KP_ATMARK,
318     KB_KP_EXCLAMATION,
319     KB_KP_MEM_STORE,
320     KB_KP_MEM_RECALL,
321     KB_KP_MEM_CLEAR,
322     KB_KP_MEM_ADD,
323     KB_KP_MEM_SUB,
324     KB_KP_MEM_MUL,
325     KB_KP_MEM_DIV,
326     KB_KP_PLUS_MINUS,
327     KB_KP_CLEAR,
328     KB_KP_CLEAR_ENTRY,
329     KB_KP_BINARY,
330     KB_KP_OCTAL,
331     KB_KP_DECIMAL,
332     KB_KP_HEXADECIMAL,
333
334     /* modifiers */
335     KB_LCTRL = 0xE0,    /* 0x01 */
336     KB_LSHIFT,          /* 0x02 */
337     KB_LALT,            /* 0x04 */
338     KB_LGUI,            /* 0x08 */
339     KB_RCTRL,           /* 0x10 */
340     KB_RSHIFT,          /* 0x20 */
341     KB_RALT,            /* 0x40 */
342     KB_RGUI,            /* 0x80 */
343
344     /* extensions for internal use */
345     KB_FN0 = 0xE8,
346     KB_FN1,
347     KB_FN2,
348     KB_FN3,
349     KB_FN4,
350     KB_FN5,
351     KB_FN6,
352     KB_FN7,
353     // Mousekey move
354     KB_MS_UP = 0xF0,
355     KB_MS_DOWN,
356     KB_MS_LEFT,
357     KB_MS_RIGHT,
358     // Mousekey buttons
359     KB_MS_BTN1 = 0xF4,
360     KB_MS_BTN2,
361     KB_MS_BTN3,
362     KB_MS_BTN4,
363     KB_MS_BTN5,
364     // Mousekey wheel
365     KB_MS_WH_UP,
366     KB_MS_WH_DOWN,
367     KB_MS_WH_LEFT,
368     KB_MS_WH_RIGHT,
369 };
370
371 #endif /* USB_KEYCODES_H */