diff options
Diffstat (limited to 'quantum/keycode.h')
| -rw-r--r-- | quantum/keycode.h | 560 | 
1 files changed, 560 insertions, 0 deletions
| diff --git a/quantum/keycode.h b/quantum/keycode.h new file mode 100644 index 0000000000..8facabd818 --- /dev/null +++ b/quantum/keycode.h @@ -0,0 +1,560 @@ +/* +Copyright 2011,2012 Jun Wako <[email protected]> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program.  If not, see <http://www.gnu.org/licenses/>. +*/ + +/* + * Keycodes based on HID Keyboard/Keypad Usage Page (0x07) plus media keys from Generic Desktop Page (0x01) and Consumer Page (0x0C) + * + * See https://web.archive.org/web/20060218214400/http://www.usb.org/developers/devclass_docs/Hut1_12.pdf + * or http://www.usb.org/developers/hidpage/Hut1_12v2.pdf (older) + */ + +#pragma once + +/* FIXME: Add doxygen comments here */ + +#define IS_ERROR(code) (KC_ROLL_OVER <= (code) && (code) <= KC_UNDEFINED) +#define IS_ANY(code) (KC_A <= (code) && (code) <= 0xFF) +#define IS_KEY(code) (KC_A <= (code) && (code) <= KC_EXSEL) +#define IS_MOD(code) (KC_LCTRL <= (code) && (code) <= KC_RGUI) + +#define IS_SPECIAL(code) ((0xA5 <= (code) && (code) <= 0xDF) || (0xE8 <= (code) && (code) <= 0xFF)) +#define IS_SYSTEM(code) (KC_PWR <= (code) && (code) <= KC_WAKE) +#define IS_CONSUMER(code) (KC_MUTE <= (code) && (code) <= KC_BRID) + +#define IS_FN(code) (KC_FN0 <= (code) && (code) <= KC_FN31) + +#define IS_MOUSEKEY(code) (KC_MS_UP <= (code) && (code) <= KC_MS_ACCEL2) +#define IS_MOUSEKEY_MOVE(code) (KC_MS_UP <= (code) && (code) <= KC_MS_RIGHT) +#define IS_MOUSEKEY_BUTTON(code) (KC_MS_BTN1 <= (code) && (code) <= KC_MS_BTN8) +#define IS_MOUSEKEY_WHEEL(code) (KC_MS_WH_UP <= (code) && (code) <= KC_MS_WH_RIGHT) +#define IS_MOUSEKEY_ACCEL(code) (KC_MS_ACCEL0 <= (code) && (code) <= KC_MS_ACCEL2) + +#define MOD_BIT(code) (1 << MOD_INDEX(code)) +#define MOD_INDEX(code) ((code)&0x07) + +#define MOD_MASK_CTRL (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RCTRL)) +#define MOD_MASK_SHIFT (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) +#define MOD_MASK_ALT (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT)) +#define MOD_MASK_GUI (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) +#define MOD_MASK_CS (MOD_MASK_CTRL | MOD_MASK_SHIFT) +#define MOD_MASK_CA (MOD_MASK_CTRL | MOD_MASK_ALT) +#define MOD_MASK_CG (MOD_MASK_CTRL | MOD_MASK_GUI) +#define MOD_MASK_SA (MOD_MASK_SHIFT | MOD_MASK_ALT) +#define MOD_MASK_SG (MOD_MASK_SHIFT | MOD_MASK_GUI) +#define MOD_MASK_AG (MOD_MASK_ALT | MOD_MASK_GUI) +#define MOD_MASK_CSA (MOD_MASK_CTRL | MOD_MASK_SHIFT | MOD_MASK_ALT) +#define MOD_MASK_CSG (MOD_MASK_CTRL | MOD_MASK_SHIFT | MOD_MASK_GUI) +#define MOD_MASK_CAG (MOD_MASK_CTRL | MOD_MASK_ALT | MOD_MASK_GUI) +#define MOD_MASK_SAG (MOD_MASK_SHIFT | MOD_MASK_ALT | MOD_MASK_GUI) +#define MOD_MASK_CSAG (MOD_MASK_CTRL | MOD_MASK_SHIFT | MOD_MASK_ALT | MOD_MASK_GUI) + +#define FN_BIT(code) (1 << FN_INDEX(code)) +#define FN_INDEX(code) ((code)-KC_FN0) +#define FN_MIN KC_FN0 +#define FN_MAX KC_FN31 + +/* + * Short names for ease of definition of keymap + */ +/* Transparent */ +#define KC_TRANSPARENT 0x01 +#define KC_TRNS KC_TRANSPARENT + +/* Punctuation */ +#define KC_ENT KC_ENTER +#define KC_ESC KC_ESCAPE +#define KC_BSPC KC_BSPACE +#define KC_SPC KC_SPACE +#define KC_MINS KC_MINUS +#define KC_EQL KC_EQUAL +#define KC_LBRC KC_LBRACKET +#define KC_RBRC KC_RBRACKET +#define KC_BSLS KC_BSLASH +#define KC_NUHS KC_NONUS_HASH +#define KC_SCLN KC_SCOLON +#define KC_QUOT KC_QUOTE +#define KC_GRV KC_GRAVE +#define KC_COMM KC_COMMA +#define KC_SLSH KC_SLASH +#define KC_NUBS KC_NONUS_BSLASH + +/* Lock Keys */ +#define KC_CLCK KC_CAPSLOCK +#define KC_CAPS KC_CAPSLOCK +#define KC_SLCK KC_SCROLLLOCK +#define KC_NLCK KC_NUMLOCK +#define KC_LCAP KC_LOCKING_CAPS +#define KC_LNUM KC_LOCKING_NUM +#define KC_LSCR KC_LOCKING_SCROLL + +/* Commands */ +#define KC_PSCR KC_PSCREEN +#define KC_PAUS KC_PAUSE +#define KC_BRK KC_PAUSE +#define KC_INS KC_INSERT +#define KC_DEL KC_DELETE +#define KC_PGDN KC_PGDOWN +#define KC_RGHT KC_RIGHT +#define KC_APP KC_APPLICATION +#define KC_EXEC KC_EXECUTE +#define KC_SLCT KC_SELECT +#define KC_AGIN KC_AGAIN +#define KC_PSTE KC_PASTE +#define KC_ERAS KC_ALT_ERASE +#define KC_CLR KC_CLEAR + +/* Keypad */ +#define KC_PSLS KC_KP_SLASH +#define KC_PAST KC_KP_ASTERISK +#define KC_PMNS KC_KP_MINUS +#define KC_PPLS KC_KP_PLUS +#define KC_PENT KC_KP_ENTER +#define KC_P1 KC_KP_1 +#define KC_P2 KC_KP_2 +#define KC_P3 KC_KP_3 +#define KC_P4 KC_KP_4 +#define KC_P5 KC_KP_5 +#define KC_P6 KC_KP_6 +#define KC_P7 KC_KP_7 +#define KC_P8 KC_KP_8 +#define KC_P9 KC_KP_9 +#define KC_P0 KC_KP_0 +#define KC_PDOT KC_KP_DOT +#define KC_PEQL KC_KP_EQUAL +#define KC_PCMM KC_KP_COMMA + +/* Japanese specific */ +#define KC_ZKHK KC_GRAVE +#define KC_RO KC_INT1 +#define KC_KANA KC_INT2 +#define KC_JYEN KC_INT3 +#define KC_HENK KC_INT4 +#define KC_MHEN KC_INT5 + +/* Korean specific */ +#define KC_HAEN KC_LANG1 +#define KC_HANJ KC_LANG2 + +/* Modifiers */ +#define KC_LCTL KC_LCTRL +#define KC_LSFT KC_LSHIFT +#define KC_LOPT KC_LALT +#define KC_LCMD KC_LGUI +#define KC_LWIN KC_LGUI +#define KC_RCTL KC_RCTRL +#define KC_RSFT KC_RSHIFT +#define KC_ALGR KC_RALT +#define KC_ROPT KC_RALT +#define KC_RCMD KC_RGUI +#define KC_RWIN KC_RGUI + +/* Generic Desktop Page (0x01) */ +#define KC_PWR KC_SYSTEM_POWER +#define KC_SLEP KC_SYSTEM_SLEEP +#define KC_WAKE KC_SYSTEM_WAKE + +/* Consumer Page (0x0C) */ +#define KC_MUTE KC_AUDIO_MUTE +#define KC_VOLU KC_AUDIO_VOL_UP +#define KC_VOLD KC_AUDIO_VOL_DOWN +#define KC_MNXT KC_MEDIA_NEXT_TRACK +#define KC_MPRV KC_MEDIA_PREV_TRACK +#define KC_MSTP KC_MEDIA_STOP +#define KC_MPLY KC_MEDIA_PLAY_PAUSE +#define KC_MSEL KC_MEDIA_SELECT +#define KC_EJCT KC_MEDIA_EJECT +#define KC_CALC KC_CALCULATOR +#define KC_MYCM KC_MY_COMPUTER +#define KC_WSCH KC_WWW_SEARCH +#define KC_WHOM KC_WWW_HOME +#define KC_WBAK KC_WWW_BACK +#define KC_WFWD KC_WWW_FORWARD +#define KC_WSTP KC_WWW_STOP +#define KC_WREF KC_WWW_REFRESH +#define KC_WFAV KC_WWW_FAVORITES +#define KC_MFFD KC_MEDIA_FAST_FORWARD +#define KC_MRWD KC_MEDIA_REWIND +#define KC_BRIU KC_BRIGHTNESS_UP +#define KC_BRID KC_BRIGHTNESS_DOWN + +/* System Specific */ +#define KC_BRMU KC_PAUSE +#define KC_BRMD KC_SCROLLLOCK + +/* Mouse Keys */ +#define KC_MS_U KC_MS_UP +#define KC_MS_D KC_MS_DOWN +#define KC_MS_L KC_MS_LEFT +#define KC_MS_R KC_MS_RIGHT +#define KC_BTN1 KC_MS_BTN1 +#define KC_BTN2 KC_MS_BTN2 +#define KC_BTN3 KC_MS_BTN3 +#define KC_BTN4 KC_MS_BTN4 +#define KC_BTN5 KC_MS_BTN5 +#define KC_BTN6 KC_MS_BTN6 +#define KC_BTN7 KC_MS_BTN7 +#define KC_BTN8 KC_MS_BTN8 +#define KC_WH_U KC_MS_WH_UP +#define KC_WH_D KC_MS_WH_DOWN +#define KC_WH_L KC_MS_WH_LEFT +#define KC_WH_R KC_MS_WH_RIGHT +#define KC_ACL0 KC_MS_ACCEL0 +#define KC_ACL1 KC_MS_ACCEL1 +#define KC_ACL2 KC_MS_ACCEL2 + +/* Keyboard/Keypad Page (0x07) */ +enum hid_keyboard_keypad_usage { +    KC_NO = 0x00, +    KC_ROLL_OVER, +    KC_POST_FAIL, +    KC_UNDEFINED, +    KC_A, +    KC_B, +    KC_C, +    KC_D, +    KC_E, +    KC_F, +    KC_G, +    KC_H, +    KC_I, +    KC_J, +    KC_K, +    KC_L, +    KC_M,  // 0x10 +    KC_N, +    KC_O, +    KC_P, +    KC_Q, +    KC_R, +    KC_S, +    KC_T, +    KC_U, +    KC_V, +    KC_W, +    KC_X, +    KC_Y, +    KC_Z, +    KC_1, +    KC_2, +    KC_3,  // 0x20 +    KC_4, +    KC_5, +    KC_6, +    KC_7, +    KC_8, +    KC_9, +    KC_0, +    KC_ENTER, +    KC_ESCAPE, +    KC_BSPACE, +    KC_TAB, +    KC_SPACE, +    KC_MINUS, +    KC_EQUAL, +    KC_LBRACKET, +    KC_RBRACKET,  // 0x30 +    KC_BSLASH, +    KC_NONUS_HASH, +    KC_SCOLON, +    KC_QUOTE, +    KC_GRAVE, +    KC_COMMA, +    KC_DOT, +    KC_SLASH, +    KC_CAPSLOCK, +    KC_F1, +    KC_F2, +    KC_F3, +    KC_F4, +    KC_F5, +    KC_F6, +    KC_F7,  // 0x40 +    KC_F8, +    KC_F9, +    KC_F10, +    KC_F11, +    KC_F12, +    KC_PSCREEN, +    KC_SCROLLLOCK, +    KC_PAUSE, +    KC_INSERT, +    KC_HOME, +    KC_PGUP, +    KC_DELETE, +    KC_END, +    KC_PGDOWN, +    KC_RIGHT, +    KC_LEFT,  // 0x50 +    KC_DOWN, +    KC_UP, +    KC_NUMLOCK, +    KC_KP_SLASH, +    KC_KP_ASTERISK, +    KC_KP_MINUS, +    KC_KP_PLUS, +    KC_KP_ENTER, +    KC_KP_1, +    KC_KP_2, +    KC_KP_3, +    KC_KP_4, +    KC_KP_5, +    KC_KP_6, +    KC_KP_7, +    KC_KP_8,  // 0x60 +    KC_KP_9, +    KC_KP_0, +    KC_KP_DOT, +    KC_NONUS_BSLASH, +    KC_APPLICATION, +    KC_POWER, +    KC_KP_EQUAL, +    KC_F13, +    KC_F14, +    KC_F15, +    KC_F16, +    KC_F17, +    KC_F18, +    KC_F19, +    KC_F20, +    KC_F21,  // 0x70 +    KC_F22, +    KC_F23, +    KC_F24, +    KC_EXECUTE, +    KC_HELP, +    KC_MENU, +    KC_SELECT, +    KC_STOP, +    KC_AGAIN, +    KC_UNDO, +    KC_CUT, +    KC_COPY, +    KC_PASTE, +    KC_FIND, +    KC__MUTE, +    KC__VOLUP,  // 0x80 +    KC__VOLDOWN, +    KC_LOCKING_CAPS, +    KC_LOCKING_NUM, +    KC_LOCKING_SCROLL, +    KC_KP_COMMA, +    KC_KP_EQUAL_AS400, +    KC_INT1, +    KC_INT2, +    KC_INT3, +    KC_INT4, +    KC_INT5, +    KC_INT6, +    KC_INT7, +    KC_INT8, +    KC_INT9, +    KC_LANG1,  // 0x90 +    KC_LANG2, +    KC_LANG3, +    KC_LANG4, +    KC_LANG5, +    KC_LANG6, +    KC_LANG7, +    KC_LANG8, +    KC_LANG9, +    KC_ALT_ERASE, +    KC_SYSREQ, +    KC_CANCEL, +    KC_CLEAR, +    KC_PRIOR, +    KC_RETURN, +    KC_SEPARATOR, +    KC_OUT,  // 0xA0 +    KC_OPER, +    KC_CLEAR_AGAIN, +    KC_CRSEL, +    KC_EXSEL, + +#if 0 +  // *************************************************************** +  // These keycodes are present in the HID spec, but are           * +  // nonfunctional on modern OSes. QMK uses this range (0xA5-0xDF) * +  // for the media and function keys instead - see below.          * +  // *************************************************************** + +  KC_KP_00                = 0xB0, +  KC_KP_000, +  KC_THOUSANDS_SEPARATOR, +  KC_DECIMAL_SEPARATOR, +  KC_CURRENCY_UNIT, +  KC_CURRENCY_SUB_UNIT, +  KC_KP_LPAREN, +  KC_KP_RPAREN, +  KC_KP_LCBRACKET, +  KC_KP_RCBRACKET, +  KC_KP_TAB, +  KC_KP_BSPACE, +  KC_KP_A, +  KC_KP_B, +  KC_KP_C, +  KC_KP_D, +  KC_KP_E,                //0xC0 +  KC_KP_F, +  KC_KP_XOR, +  KC_KP_HAT, +  KC_KP_PERC, +  KC_KP_LT, +  KC_KP_GT, +  KC_KP_AND, +  KC_KP_LAZYAND, +  KC_KP_OR, +  KC_KP_LAZYOR, +  KC_KP_COLON, +  KC_KP_HASH, +  KC_KP_SPACE, +  KC_KP_ATMARK, +  KC_KP_EXCLAMATION, +  KC_KP_MEM_STORE,        //0xD0 +  KC_KP_MEM_RECALL, +  KC_KP_MEM_CLEAR, +  KC_KP_MEM_ADD, +  KC_KP_MEM_SUB, +  KC_KP_MEM_MUL, +  KC_KP_MEM_DIV, +  KC_KP_PLUS_MINUS, +  KC_KP_CLEAR, +  KC_KP_CLEAR_ENTRY, +  KC_KP_BINARY, +  KC_KP_OCTAL, +  KC_KP_DECIMAL, +  KC_KP_HEXADECIMAL, +#endif + +    /* Modifiers */ +    KC_LCTRL = 0xE0, +    KC_LSHIFT, +    KC_LALT, +    KC_LGUI, +    KC_RCTRL, +    KC_RSHIFT, +    KC_RALT, +    KC_RGUI + +    // ********************************************** +    // * 0xF0-0xFF are unallocated in the HID spec. * +    // * QMK uses these for Mouse Keys - see below. * +    // ********************************************** +}; + +/* Media and Function keys */ +enum internal_special_keycodes { +    /* Generic Desktop Page (0x01) */ +    KC_SYSTEM_POWER = 0xA5, +    KC_SYSTEM_SLEEP, +    KC_SYSTEM_WAKE, + +    /* Consumer Page (0x0C) */ +    KC_AUDIO_MUTE, +    KC_AUDIO_VOL_UP, +    KC_AUDIO_VOL_DOWN, +    KC_MEDIA_NEXT_TRACK, +    KC_MEDIA_PREV_TRACK, +    KC_MEDIA_STOP, +    KC_MEDIA_PLAY_PAUSE, +    KC_MEDIA_SELECT, +    KC_MEDIA_EJECT,  // 0xB0 +    KC_MAIL, +    KC_CALCULATOR, +    KC_MY_COMPUTER, +    KC_WWW_SEARCH, +    KC_WWW_HOME, +    KC_WWW_BACK, +    KC_WWW_FORWARD, +    KC_WWW_STOP, +    KC_WWW_REFRESH, +    KC_WWW_FAVORITES, +    KC_MEDIA_FAST_FORWARD, +    KC_MEDIA_REWIND, +    KC_BRIGHTNESS_UP, +    KC_BRIGHTNESS_DOWN, + +    /* Fn keys */ +    KC_FN0 = 0xC0, +    KC_FN1, +    KC_FN2, +    KC_FN3, +    KC_FN4, +    KC_FN5, +    KC_FN6, +    KC_FN7, +    KC_FN8, +    KC_FN9, +    KC_FN10, +    KC_FN11, +    KC_FN12, +    KC_FN13, +    KC_FN14, +    KC_FN15, +    KC_FN16,  // 0xD0 +    KC_FN17, +    KC_FN18, +    KC_FN19, +    KC_FN20, +    KC_FN21, +    KC_FN22, +    KC_FN23, +    KC_FN24, +    KC_FN25, +    KC_FN26, +    KC_FN27, +    KC_FN28, +    KC_FN29, +    KC_FN30, +    KC_FN31 +}; + +enum mouse_keys { +/* Mouse Buttons */ +#ifdef VIA_ENABLE +    KC_MS_UP = 0xF0, +#else +    KC_MS_UP = 0xED, +#endif +    KC_MS_DOWN, +    KC_MS_LEFT, +    KC_MS_RIGHT,  // 0xF0 +    KC_MS_BTN1, +    KC_MS_BTN2, +    KC_MS_BTN3, +    KC_MS_BTN4, +    KC_MS_BTN5, +#ifdef VIA_ENABLE +    KC_MS_BTN6 = KC_MS_BTN5, +    KC_MS_BTN7 = KC_MS_BTN5, +    KC_MS_BTN8 = KC_MS_BTN5, +#else +    KC_MS_BTN6, +    KC_MS_BTN7, +    KC_MS_BTN8, +#endif + +    /* Mouse Wheel */ +    KC_MS_WH_UP, +    KC_MS_WH_DOWN, +    KC_MS_WH_LEFT, +    KC_MS_WH_RIGHT, + +    /* Acceleration */ +    KC_MS_ACCEL0, +    KC_MS_ACCEL1, +    KC_MS_ACCEL2  // 0xFF +}; | 
