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