]> git.donarmstrong.com Git - qmk_firmware.git/blob - tmk_core/common/keycode.h
Add Extrakey support for Brightness up/down (#4477)
[qmk_firmware.git] / tmk_core / common / keycode.h
1 /*
2 Copyright 2011,2012 Jun Wako <wakojun@gmail.com>
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 /*
19  * Keycodes based on HID Keyboard/Keypad Usage Page (0x07) plus media keys from Generic Desktop Page (0x01) and Consumer Page (0x0C)
20  *
21  * See https://web.archive.org/web/20060218214400/http://www.usb.org/developers/devclass_docs/Hut1_12.pdf
22  * or http://www.usb.org/developers/hidpage/Hut1_12v2.pdf (older)
23  */
24 #ifndef KEYCODE_H
25 #define KEYCODE_H
26
27 /* FIXME: Add doxygen comments here */
28
29 #define IS_ERROR(code)           (KC_ROLL_OVER <= (code) && (code) <= KC_UNDEFINED)
30 #define IS_ANY(code)             (KC_A         <= (code) && (code) <= 0xFF)
31 #define IS_KEY(code)             (KC_A         <= (code) && (code) <= KC_EXSEL)
32 #define IS_MOD(code)             (KC_LCTRL     <= (code) && (code) <= KC_RGUI)
33
34 #define IS_SPECIAL(code)         ((0xA5 <= (code) && (code) <= 0xDF) || (0xE8 <= (code) && (code) <= 0xFF))
35 #define IS_SYSTEM(code)          (KC_PWR       <= (code) && (code) <= KC_WAKE)
36 #define IS_CONSUMER(code)        (KC_MUTE      <= (code) && (code) <= KC_BRID)
37
38 #define IS_FN(code)              (KC_FN0       <= (code) && (code) <= KC_FN31)
39
40 #define IS_MOUSEKEY(code)        (KC_MS_UP     <= (code) && (code) <= KC_MS_ACCEL2)
41 #define IS_MOUSEKEY_MOVE(code)   (KC_MS_UP     <= (code) && (code) <= KC_MS_RIGHT)
42 #define IS_MOUSEKEY_BUTTON(code) (KC_MS_BTN1   <= (code) && (code) <= KC_MS_BTN5)
43 #define IS_MOUSEKEY_WHEEL(code)  (KC_MS_WH_UP  <= (code) && (code) <= KC_MS_WH_RIGHT)
44 #define IS_MOUSEKEY_ACCEL(code)  (KC_MS_ACCEL0 <= (code) && (code) <= KC_MS_ACCEL2)
45
46 #define MOD_BIT(code)            (1 << MOD_INDEX(code))
47 #define MOD_INDEX(code)          ((code) & 0x07)
48
49 #define FN_BIT(code)             (1 << FN_INDEX(code))
50 #define FN_INDEX(code)           ((code) - KC_FN0)
51 #define FN_MIN                   KC_FN0
52 #define FN_MAX                   KC_FN31
53
54 /*
55  * Short names for ease of definition of keymap
56  */
57 /* Transparent */
58 #define KC_TRANSPARENT 0x01
59 #define KC_TRNS        KC_TRANSPARENT
60
61 /* Punctuation */
62 #define KC_ENT  KC_ENTER
63 #define KC_ESC  KC_ESCAPE
64 #define KC_BSPC KC_BSPACE
65 #define KC_SPC  KC_SPACE
66 #define KC_MINS KC_MINUS
67 #define KC_EQL  KC_EQUAL
68 #define KC_LBRC KC_LBRACKET
69 #define KC_RBRC KC_RBRACKET
70 #define KC_BSLS KC_BSLASH
71 #define KC_NUHS KC_NONUS_HASH
72 #define KC_SCLN KC_SCOLON
73 #define KC_QUOT KC_QUOTE
74 #define KC_GRV  KC_GRAVE
75 #define KC_COMM KC_COMMA
76 #define KC_SLSH KC_SLASH
77 #define KC_NUBS KC_NONUS_BSLASH
78
79 /* Lock Keys */
80 #define KC_CLCK KC_CAPSLOCK
81 #define KC_CAPS KC_CAPSLOCK
82 #define KC_SLCK KC_SCROLLLOCK
83 #define KC_NLCK KC_NUMLOCK
84 #define KC_LCAP KC_LOCKING_CAPS
85 #define KC_LNUM KC_LOCKING_NUM
86 #define KC_LSCR KC_LOCKING_SCROLL
87
88 /* Commands */
89 #define KC_PSCR KC_PSCREEN
90 #define KC_PAUS KC_PAUSE
91 #define KC_BRK  KC_PAUSE
92 #define KC_INS  KC_INSERT
93 #define KC_DEL  KC_DELETE
94 #define KC_PGDN KC_PGDOWN
95 #define KC_RGHT KC_RIGHT
96 #define KC_APP  KC_APPLICATION
97 #define KC_EXEC KC_EXECUTE
98 #define KC_SLCT KC_SELECT
99 #define KC_AGIN KC_AGAIN
100 #define KC_PSTE KC_PASTE
101 #define KC_ERAS KC_ALT_ERASE
102 #define KC_CLR  KC_CLEAR
103
104 /* Keypad */
105 #define KC_PSLS KC_KP_SLASH
106 #define KC_PAST KC_KP_ASTERISK
107 #define KC_PMNS KC_KP_MINUS
108 #define KC_PPLS KC_KP_PLUS
109 #define KC_PENT KC_KP_ENTER
110 #define KC_P1   KC_KP_1
111 #define KC_P2   KC_KP_2
112 #define KC_P3   KC_KP_3
113 #define KC_P4   KC_KP_4
114 #define KC_P5   KC_KP_5
115 #define KC_P6   KC_KP_6
116 #define KC_P7   KC_KP_7
117 #define KC_P8   KC_KP_8
118 #define KC_P9   KC_KP_9
119 #define KC_P0   KC_KP_0
120 #define KC_PDOT KC_KP_DOT
121 #define KC_PEQL KC_KP_EQUAL
122 #define KC_PCMM KC_KP_COMMA
123
124 /* Japanese specific */
125 #define KC_ZKHK KC_GRAVE
126 #define KC_RO   KC_INT1
127 #define KC_KANA KC_INT2
128 #define KC_JYEN KC_INT3
129 #define KC_HENK KC_INT4
130 #define KC_MHEN KC_INT5
131
132 /* Korean specific */
133 #define KC_HAEN KC_LANG1
134 #define KC_HANJ KC_LANG2
135
136 /* Modifiers */
137 #define KC_LCTL KC_LCTRL
138 #define KC_LSFT KC_LSHIFT
139 #define KC_LCMD KC_LGUI
140 #define KC_LWIN KC_LGUI
141 #define KC_RCTL KC_RCTRL
142 #define KC_RSFT KC_RSHIFT
143 #define KC_RCMD KC_RGUI
144 #define KC_RWIN KC_RGUI
145
146 /* Generic Desktop Page (0x01) */
147 #define KC_PWR  KC_SYSTEM_POWER
148 #define KC_SLEP KC_SYSTEM_SLEEP
149 #define KC_WAKE KC_SYSTEM_WAKE
150
151 /* Consumer Page (0x0C) */
152 #define KC_MUTE KC_AUDIO_MUTE
153 #define KC_VOLU KC_AUDIO_VOL_UP
154 #define KC_VOLD KC_AUDIO_VOL_DOWN
155 #define KC_MNXT KC_MEDIA_NEXT_TRACK
156 #define KC_MPRV KC_MEDIA_PREV_TRACK
157 #define KC_MSTP KC_MEDIA_STOP
158 #define KC_MPLY KC_MEDIA_PLAY_PAUSE
159 #define KC_MSEL KC_MEDIA_SELECT
160 #define KC_EJCT KC_MEDIA_EJECT
161 #define KC_MAIL KC_MAIL
162 #define KC_CALC KC_CALCULATOR
163 #define KC_MYCM KC_MY_COMPUTER
164 #define KC_WSCH KC_WWW_SEARCH
165 #define KC_WHOM KC_WWW_HOME
166 #define KC_WBAK KC_WWW_BACK
167 #define KC_WFWD KC_WWW_FORWARD
168 #define KC_WSTP KC_WWW_STOP
169 #define KC_WREF KC_WWW_REFRESH
170 #define KC_WFAV KC_WWW_FAVORITES
171 #define KC_MFFD KC_MEDIA_FAST_FORWARD
172 #define KC_MRWD KC_MEDIA_REWIND
173 #define KC_BRIU KC_BRIGHTNESS_UP
174 #define KC_BRID KC_BRIGHTNESS_DOWN
175
176 /* Mouse Keys */
177 #define KC_MS_U KC_MS_UP
178 #define KC_MS_D KC_MS_DOWN
179 #define KC_MS_L KC_MS_LEFT
180 #define KC_MS_R KC_MS_RIGHT
181 #define KC_BTN1 KC_MS_BTN1
182 #define KC_BTN2 KC_MS_BTN2
183 #define KC_BTN3 KC_MS_BTN3
184 #define KC_BTN4 KC_MS_BTN4
185 #define KC_BTN5 KC_MS_BTN5
186 #define KC_WH_U KC_MS_WH_UP
187 #define KC_WH_D KC_MS_WH_DOWN
188 #define KC_WH_L KC_MS_WH_LEFT
189 #define KC_WH_R KC_MS_WH_RIGHT
190 #define KC_ACL0 KC_MS_ACCEL0
191 #define KC_ACL1 KC_MS_ACCEL1
192 #define KC_ACL2 KC_MS_ACCEL2
193
194 /* Keyboard/Keypad Page (0x07) */
195 enum hid_keyboard_keypad_usage {
196   KC_NO                   = 0x00,
197   KC_ROLL_OVER,
198   KC_POST_FAIL,
199   KC_UNDEFINED,
200   KC_A,
201   KC_B,
202   KC_C,
203   KC_D,
204   KC_E,
205   KC_F,
206   KC_G,
207   KC_H,
208   KC_I,
209   KC_J,
210   KC_K,
211   KC_L,
212   KC_M,                   //0x10
213   KC_N,
214   KC_O,
215   KC_P,
216   KC_Q,
217   KC_R,
218   KC_S,
219   KC_T,
220   KC_U,
221   KC_V,
222   KC_W,
223   KC_X,
224   KC_Y,
225   KC_Z,
226   KC_1,
227   KC_2,
228   KC_3,                   //0x20
229   KC_4,
230   KC_5,
231   KC_6,
232   KC_7,
233   KC_8,
234   KC_9,
235   KC_0,
236   KC_ENTER,
237   KC_ESCAPE,
238   KC_BSPACE,
239   KC_TAB,
240   KC_SPACE,
241   KC_MINUS,
242   KC_EQUAL,
243   KC_LBRACKET,
244   KC_RBRACKET,            //0x30
245   KC_BSLASH,
246   KC_NONUS_HASH,
247   KC_SCOLON,
248   KC_QUOTE,
249   KC_GRAVE,
250   KC_COMMA,
251   KC_DOT,
252   KC_SLASH,
253   KC_CAPSLOCK,
254   KC_F1,
255   KC_F2,
256   KC_F3,
257   KC_F4,
258   KC_F5,
259   KC_F6,
260   KC_F7,                  //0x40
261   KC_F8,
262   KC_F9,
263   KC_F10,
264   KC_F11,
265   KC_F12,
266   KC_PSCREEN,
267   KC_SCROLLLOCK,
268   KC_PAUSE,
269   KC_INSERT,
270   KC_HOME,
271   KC_PGUP,
272   KC_DELETE,
273   KC_END,
274   KC_PGDOWN,
275   KC_RIGHT,
276   KC_LEFT,                //0x50
277   KC_DOWN,
278   KC_UP,
279   KC_NUMLOCK,
280   KC_KP_SLASH,
281   KC_KP_ASTERISK,
282   KC_KP_MINUS,
283   KC_KP_PLUS,
284   KC_KP_ENTER,
285   KC_KP_1,
286   KC_KP_2,
287   KC_KP_3,
288   KC_KP_4,
289   KC_KP_5,
290   KC_KP_6,
291   KC_KP_7,
292   KC_KP_8,                //0x60
293   KC_KP_9,
294   KC_KP_0,
295   KC_KP_DOT,
296   KC_NONUS_BSLASH,
297   KC_APPLICATION,
298   KC_POWER,
299   KC_KP_EQUAL,
300   KC_F13,
301   KC_F14,
302   KC_F15,
303   KC_F16,
304   KC_F17,
305   KC_F18,
306   KC_F19,
307   KC_F20,
308   KC_F21,                 //0x70
309   KC_F22,
310   KC_F23,
311   KC_F24,
312   KC_EXECUTE,
313   KC_HELP,
314   KC_MENU,
315   KC_SELECT,
316   KC_STOP,
317   KC_AGAIN,
318   KC_UNDO,
319   KC_CUT,
320   KC_COPY,
321   KC_PASTE,
322   KC_FIND,
323   KC__MUTE,
324   KC__VOLUP,              //0x80
325   KC__VOLDOWN,
326   KC_LOCKING_CAPS,
327   KC_LOCKING_NUM,
328   KC_LOCKING_SCROLL,
329   KC_KP_COMMA,
330   KC_KP_EQUAL_AS400,
331   KC_INT1,
332   KC_INT2,
333   KC_INT3,
334   KC_INT4,
335   KC_INT5,
336   KC_INT6,
337   KC_INT7,
338   KC_INT8,
339   KC_INT9,
340   KC_LANG1,               //0x90
341   KC_LANG2,
342   KC_LANG3,
343   KC_LANG4,
344   KC_LANG5,
345   KC_LANG6,
346   KC_LANG7,
347   KC_LANG8,
348   KC_LANG9,
349   KC_ALT_ERASE,
350   KC_SYSREQ,
351   KC_CANCEL,
352   KC_CLEAR,
353   KC_PRIOR,
354   KC_RETURN,
355   KC_SEPARATOR,
356   KC_OUT,                 //0xA0
357   KC_OPER,
358   KC_CLEAR_AGAIN,
359   KC_CRSEL,
360   KC_EXSEL,
361
362 #if 0
363   // ***************************************************************
364   // These keycodes are present in the HID spec, but are           *
365   // nonfunctional on modern OSes. QMK uses this range (0xA5-0xDF) *
366   // for the media and function keys instead - see below.          *
367   // ***************************************************************
368
369   KC_KP_00                = 0xB0,
370   KC_KP_000,
371   KC_THOUSANDS_SEPARATOR,
372   KC_DECIMAL_SEPARATOR,
373   KC_CURRENCY_UNIT,
374   KC_CURRENCY_SUB_UNIT,
375   KC_KP_LPAREN,
376   KC_KP_RPAREN,
377   KC_KP_LCBRACKET,
378   KC_KP_RCBRACKET,
379   KC_KP_TAB,
380   KC_KP_BSPACE,
381   KC_KP_A,
382   KC_KP_B,
383   KC_KP_C,
384   KC_KP_D,
385   KC_KP_E,                //0xC0
386   KC_KP_F,
387   KC_KP_XOR,
388   KC_KP_HAT,
389   KC_KP_PERC,
390   KC_KP_LT,
391   KC_KP_GT,
392   KC_KP_AND,
393   KC_KP_LAZYAND,
394   KC_KP_OR,
395   KC_KP_LAZYOR,
396   KC_KP_COLON,
397   KC_KP_HASH,
398   KC_KP_SPACE,
399   KC_KP_ATMARK,
400   KC_KP_EXCLAMATION,
401   KC_KP_MEM_STORE,        //0xD0
402   KC_KP_MEM_RECALL,
403   KC_KP_MEM_CLEAR,
404   KC_KP_MEM_ADD,
405   KC_KP_MEM_SUB,
406   KC_KP_MEM_MUL,
407   KC_KP_MEM_DIV,
408   KC_KP_PLUS_MINUS,
409   KC_KP_CLEAR,
410   KC_KP_CLEAR_ENTRY,
411   KC_KP_BINARY,
412   KC_KP_OCTAL,
413   KC_KP_DECIMAL,
414   KC_KP_HEXADECIMAL,
415 #endif
416
417   /* Modifiers */
418   KC_LCTRL                = 0xE0,
419   KC_LSHIFT,
420   KC_LALT,
421   KC_LGUI,
422   KC_RCTRL,
423   KC_RSHIFT,
424   KC_RALT,
425   KC_RGUI
426
427   // **********************************************
428   // * 0xF0-0xFF are unallocated in the HID spec. *
429   // * QMK uses these for Mouse Keys - see below. *
430   // **********************************************
431 };
432
433 /* Media and Function keys */
434 enum internal_special_keycodes {
435   /* Generic Desktop Page (0x01) */
436   KC_SYSTEM_POWER         = 0xA5,
437   KC_SYSTEM_SLEEP,
438   KC_SYSTEM_WAKE,
439
440   /* Consumer Page (0x0C) */
441   KC_AUDIO_MUTE,
442   KC_AUDIO_VOL_UP,
443   KC_AUDIO_VOL_DOWN,
444   KC_MEDIA_NEXT_TRACK,
445   KC_MEDIA_PREV_TRACK,
446   KC_MEDIA_STOP,
447   KC_MEDIA_PLAY_PAUSE,
448   KC_MEDIA_SELECT,
449   KC_MEDIA_EJECT,         //0xB0
450   KC_MAIL,
451   KC_CALCULATOR,
452   KC_MY_COMPUTER,
453   KC_WWW_SEARCH,
454   KC_WWW_HOME,
455   KC_WWW_BACK,
456   KC_WWW_FORWARD,
457   KC_WWW_STOP,
458   KC_WWW_REFRESH,
459   KC_WWW_FAVORITES,
460   KC_MEDIA_FAST_FORWARD,
461   KC_MEDIA_REWIND,
462   KC_BRIGHTNESS_UP,
463   KC_BRIGHTNESS_DOWN,
464
465   /* Fn keys */
466   KC_FN0                  = 0xC0,
467   KC_FN1,
468   KC_FN2,
469   KC_FN3,
470   KC_FN4,
471   KC_FN5,
472   KC_FN6,
473   KC_FN7,
474   KC_FN8,
475   KC_FN9,
476   KC_FN10,
477   KC_FN11,
478   KC_FN12,
479   KC_FN13,
480   KC_FN14,
481   KC_FN15,
482   KC_FN16,                //0xD0
483   KC_FN17,
484   KC_FN18,
485   KC_FN19,
486   KC_FN20,
487   KC_FN21,
488   KC_FN22,
489   KC_FN23,
490   KC_FN24,
491   KC_FN25,
492   KC_FN26,
493   KC_FN27,
494   KC_FN28,
495   KC_FN29,
496   KC_FN30,
497   KC_FN31
498 };
499
500 enum mouse_keys {
501   /* Mouse Buttons */
502   KC_MS_UP                = 0xF0,
503   KC_MS_DOWN,
504   KC_MS_LEFT,
505   KC_MS_RIGHT,
506   KC_MS_BTN1,
507   KC_MS_BTN2,
508   KC_MS_BTN3,
509   KC_MS_BTN4,
510   KC_MS_BTN5,
511
512   /* Mouse Wheel */
513   KC_MS_WH_UP,
514   KC_MS_WH_DOWN,
515   KC_MS_WH_LEFT,
516   KC_MS_WH_RIGHT,
517
518   /* Acceleration */
519   KC_MS_ACCEL0,
520   KC_MS_ACCEL1,
521   KC_MS_ACCEL2
522 };
523 #endif