ergodox-firmware/src/lib/usb/usage-page/keyboard.h

298 lines
17 KiB
C

/* ----------------------------------------------------------------------------
* USB Keyboard Key Codes (usage page 0x07)
*
* Taken from [the HID Usage Tables pdf][1], Section 10,
* which can be found on [the HID Page][2] at <http://www.usb.org>
*
* - `Boot Keyboard Req.` indicates that the usage code is one that should be
* supported by the listed types of keyboards (104-key, ...) on boot
*
* - `KEY_` indicates a Keyboard key
* - `KEYPAD_` indicates a Keypad key
* - Multiple names concatenated in CamelCase indicate a single value
* - Multiple names separated by `_`s indicate shifted or alternate values
*
* [1]: http://www.usb.org/developers/devclass_docs/Hut1_12v2.pdf
* [2]: http://www.usb.org/developers/hidpage
* ----------------------------------------------------------------------------
* Copyright (c) 2012 Ben Blazak <benblazak.dev@gmail.com>
* Released under The MIT License (MIT) (see "license.md")
* Project located at <https://github.com/benblazak/ergodox-firmware>
* ------------------------------------------------------------------------- */
#ifndef USB_USAGE_PAGE_KEYBOARD_h
#define USB_USAGE_PAGE_KEYBOARD_h
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// Name ID // PC Mac Unix Boot Keyboard Req.
// --------------------------- ---- -- --- ---- ---------------------
// (Reserved) 0x00 // √ √ √ 84/101/104
#define KEY_ErrorRollOver 0x01 // √ √ √ 84/101/104
#define KEY_POSTFail 0x02 // √ √ √ 84/101/104
#define KEY_ErrorUndefined 0x03 // √ √ √ 84/101/104
#define KEY_a_A 0x04 // √ √ √ 84/101/104
#define KEY_b_B 0x05 // √ √ √ 84/101/104
#define KEY_c_C 0x06 // √ √ √ 84/101/104
#define KEY_d_D 0x07 // √ √ √ 84/101/104
#define KEY_e_E 0x08 // √ √ √ 84/101/104
#define KEY_f_F 0x09 // √ √ √ 84/101/104
#define KEY_g_G 0x0A // √ √ √ 84/101/104
#define KEY_h_H 0x0B // √ √ √ 84/101/104
#define KEY_i_I 0x0C // √ √ √ 84/101/104
#define KEY_j_J 0x0D // √ √ √ 84/101/104
#define KEY_k_K 0x0E // √ √ √ 84/101/104
#define KEY_l_L 0x0F // √ √ √ 84/101/104
#define KEY_m_M 0x10 // √ √ √ 84/101/104
#define KEY_n_N 0x11 // √ √ √ 84/101/104
#define KEY_o_O 0x12 // √ √ √ 84/101/104
#define KEY_p_P 0x13 // √ √ √ 84/101/104
#define KEY_q_Q 0x14 // √ √ √ 84/101/104
#define KEY_r_R 0x15 // √ √ √ 84/101/104
#define KEY_s_S 0x16 // √ √ √ 84/101/104
#define KEY_t_T 0x17 // √ √ √ 84/101/104
#define KEY_u_U 0x18 // √ √ √ 84/101/104
#define KEY_v_V 0x19 // √ √ √ 84/101/104
#define KEY_w_W 0x1A // √ √ √ 84/101/104
#define KEY_x_X 0x1B // √ √ √ 84/101/104
#define KEY_y_Y 0x1C // √ √ √ 84/101/104
#define KEY_z_Z 0x1D // √ √ √ 84/101/104
#define KEY_1_Exclamation 0x1E // √ √ √ 84/101/104
#define KEY_2_At 0x1F // √ √ √ 84/101/104
#define KEY_3_Pound 0x20 // √ √ √ 84/101/104
#define KEY_4_Dollar 0x21 // √ √ √ 84/101/104
#define KEY_5_Percent 0x22 // √ √ √ 84/101/104
#define KEY_6_Caret 0x23 // √ √ √ 84/101/104
#define KEY_7_Ampersand 0x24 // √ √ √ 84/101/104
#define KEY_8_Asterisk 0x25 // √ √ √ 84/101/104
#define KEY_9_LeftParenthesis 0x26 // √ √ √ 84/101/104
#define KEY_0_RightParenthesis 0x27 // √ √ √ 84/101/104
#define KEY_ReturnEnter 0x28 // √ √ √ 84/101/104
#define KEY_Escape 0x29 // √ √ √ 84/101/104
#define KEY_DeleteBackspace 0x2A // √ √ √ 84/101/104
#define KEY_Tab 0x2B // √ √ √ 84/101/104
#define KEY_Spacebar 0x2C // √ √ √ 84/101/104
#define KEY_Dash_Underscore 0x2D // √ √ √ 84/101/104
#define KEY_Equal_Plus 0x2E // √ √ √ 84/101/104
#define KEY_LeftBracket_LeftBrace 0x2F // √ √ √ 84/101/104
#define KEY_RightBracket_RightBrace 0x30 // √ √ √ 84/101/104
#define KEY_Backslash_Pipe 0x31 // √ √ √ 84/101/104
#define KEY_NonUS_Pound_Tilde 0x32 // √ √ √ 84/101/104
#define KEY_Semicolon_Colon 0x33 // √ √ √ 84/101/104
#define KEY_SingleQuote_DoubleQuote 0x34 // √ √ √ 84/101/104
#define KEY_GraveAccent_Tilde 0x35 // √ √ √ 84/101/104
#define KEY_Comma_LessThan 0x36 // √ √ √ 84/101/104
#define KEY_Period_GreaterThan 0x37 // √ √ √ 84/101/104
#define KEY_Slash_Question 0x38 // √ √ √ 84/101/104
#define KEY_CapsLock 0x39 // √ √ √ 84/101/104
#define KEY_F1 0x3A // √ √ √ 84/101/104
#define KEY_F2 0x3B // √ √ √ 84/101/104
#define KEY_F3 0x3C // √ √ √ 84/101/104
#define KEY_F4 0x3D // √ √ √ 84/101/104
#define KEY_F5 0x3E // √ √ √ 84/101/104
#define KEY_F6 0x3F // √ √ √ 84/101/104
#define KEY_F7 0x40 // √ √ √ 84/101/104
#define KEY_F8 0x41 // √ √ √ 84/101/104
#define KEY_F9 0x42 // √ √ √ 84/101/104
#define KEY_F10 0x43 // √ √ √ 84/101/104
#define KEY_F11 0x44 // √ √ √ 101/104
#define KEY_F12 0x45 // √ √ √ 101/104
#define KEY_PrintScreen 0x46 // √ √ √ 101/104
#define KEY_ScrollLock 0x47 // √ √ √ 84/101/104
#define KEY_Pause 0x48 // √ √ √ 101/104
#define KEY_Insert 0x49 // √ √ √ 101/104
#define KEY_Home 0x4A // √ √ √ 101/104
#define KEY_PageUp 0x4B // √ √ √ 101/104
#define KEY_DeleteForward 0x4C // √ √ √ 101/104
#define KEY_End 0x4D // √ √ √ 101/104
#define KEY_PageDown 0x4E // √ √ √ 101/104
#define KEY_RightArrow 0x4F // √ √ √ 101/104
#define KEY_LeftArrow 0x50 // √ √ √ 101/104
#define KEY_DownArrow 0x51 // √ √ √ 101/104
#define KEY_UpArrow 0x52 // √ √ √ 101/104
#define KEYPAD_NumLock_Clear 0x53 // √ √ √ 101/104
#define KEYPAD_Slash 0x54 // √ √ √ 101/104
#define KEYPAD_Asterisk 0x55 // √ √ √ 84/101/104
#define KEYPAD_Minus 0x56 // √ √ √ 84/101/104
#define KEYPAD_Plus 0x57 // √ √ √ 84/101/104
#define KEYPAD_ENTER 0x58 // √ √ √ 101/104
#define KEYPAD_1_End 0x59 // √ √ √ 84/101/104
#define KEYPAD_2_DownArrow 0x5A // √ √ √ 84/101/104
#define KEYPAD_3_PageDown 0x5B // √ √ √ 84/101/104
#define KEYPAD_4_LeftArrow 0x5C // √ √ √ 84/101/104
#define KEYPAD_5 0x5D // √ √ √ 84/101/104
#define KEYPAD_6_RightArrow 0x5E // √ √ √ 84/101/104
#define KEYPAD_7_Home 0x5F // √ √ √ 84/101/104
#define KEYPAD_8_UpArrow 0x60 // √ √ √ 84/101/104
#define KEYPAD_9_PageUp 0x61 // √ √ √ 84/101/104
#define KEYPAD_0_Insert 0x62 // √ √ √ 84/101/104
#define KEYPAD_Period_Delete 0x63 // √ √ √ 84/101/104
#define KEY_NonUS_Backslash_Pipe 0x64 // √ √ √ 84/101/104
#define KEY_Application 0x65 // √ - √ 104
#define KEY_Power 0x66 // - √ √ -
#define KEYPAD_Equal 0x67 // - √ - -
#define KEY_F13 0x68 // - √ - -
#define KEY_F14 0x69 // - √ - -
#define KEY_F15 0x6A // - √ - -
#define KEY_F16 0x6B // - - - -
#define KEY_F17 0x6C // - - - -
#define KEY_F18 0x6D // - - - -
#define KEY_F19 0x6E // - - - -
#define KEY_F20 0x6F // - - - -
#define KEY_F21 0x70 // - - - -
#define KEY_F22 0x71 // - - - -
#define KEY_F23 0x72 // - - - -
#define KEY_F24 0x73 // - - - -
#define KEY_Execute 0x74 // - - √ -
#define KEY_Help 0x75 // - - √ -
#define KEY_Menu 0x76 // - - √ -
#define KEY_Select 0x77 // - - √ -
#define KEY_Stop 0x78 // - - √ -
#define KEY_Again 0x79 // - - √ -
#define KEY_Undo 0x7A // - - √ -
#define KEY_Cut 0x7B // - - √ -
#define KEY_Copy 0x7C // - - √ -
#define KEY_Paste 0x7D // - - √ -
#define KEY_Find 0x7E // - - √ -
#define KEY_Mute 0x7F // - - √ -
#define KEY_VolumeUp 0x80 // - - √ -
#define KEY_VolumeDown 0x81 // - - √ -
#define KEY_LockingCapsLock 0x82 // - - √ -
#define KEY_LockingNumLock 0x83 // - - √ -
#define KEY_LockingScrollLock 0x84 // - - √ -
#define KEYPAD_Comma 0x85 // - - - -
#define KEYPAD_EqualSign 0x86 // - - - -
#define KEY_International1 0x87 // - - - -
#define KEY_International2 0x88 // - - - -
#define KEY_International3 0x89 // - - - -
#define KEY_International4 0x8A // - - - -
#define KEY_International5 0x8B // - - - -
#define KEY_International6 0x8C // - - - -
#define KEY_International7 0x8D // - - - -
#define KEY_International8 0x8E // - - - -
#define KEY_International9 0x8F // - - - -
#define KEY_LANG1 0x90 // - - - -
#define KEY_LANG2 0x91 // - - - -
#define KEY_LANG3 0x92 // - - - -
#define KEY_LANG4 0x93 // - - - -
#define KEY_LANG5 0x94 // - - - -
#define KEY_LANG6 0x95 // - - - -
#define KEY_LANG7 0x96 // - - - -
#define KEY_LANG8 0x97 // - - - -
#define KEY_LANG9 0x98 // - - - -
#define KEY_AlternateErase 0x99 // - - - -
#define KEY_SysReq_Attention 0x9A // - - - -
#define KEY_Cancel 0x9B // - - - -
#define KEY_Clear 0x9C // - - - -
#define KEY_Prior 0x9D // - - - -
#define KEY_Return 0x9E // - - - -
#define KEY_Separator 0x9F // - - - -
#define KEY_Out 0xA0 // - - - -
#define KEY_Oper 0xA1 // - - - -
#define KEY_Clear_Again 0xA2 // - - - -
#define KEY_CrSel_Props 0xA3 // - - - -
#define KEY_ExSel 0xA4 // - - - -
// (Reserved) 0xA5..0xAF // - - - -
#define KEYPAD_00 0xB0 // - - - -
#define KEYPAD_000 0xB1 // - - - -
#define KEY_ThousandsSeparator 0xB2 // - - - -
#define KEY_DecimalSeparator 0xB3 // - - - -
#define KEY_CurrencyUnit 0xB4 // - - - -
#define KEY_CurrencySubunit 0xB5 // - - - -
#define KEYPAD_LeftParenthesis 0xB6 // - - - -
#define KEYPAD_RightParenthesis 0xB7 // - - - -
#define KEYPAD_LeftBrace 0xB8 // - - - -
#define KEYPAD_RightBrace 0xB9 // - - - -
#define KEYPAD_Tab 0xBA // - - - -
#define KEYPAD_Backspace 0xBB // - - - -
#define KEYPAD_A 0xBC // - - - -
#define KEYPAD_B 0xBD // - - - -
#define KEYPAD_C 0xBE // - - - -
#define KEYPAD_D 0xBF // - - - -
#define KEYPAD_E 0xC0 // - - - -
#define KEYPAD_F 0xC1 // - - - -
#define KEYPAD_XOR 0xC2 // - - - -
#define KEYPAD_Caret 0xC3 // - - - -
#define KEYPAD_Percent 0xC4 // - - - -
#define KEYPAD_LessThan 0xC5 // - - - -
#define KEYPAD_GreaterThan 0xC6 // - - - -
#define KEYPAD_Ampersand 0xC7 // - - - -
#define KEYPAD_AmpersandAmpersand 0xC8 // - - - -
#define KEYPAD_Pipe 0xC9 // - - - -
#define KEYPAD_PipePipe 0xCA // - - - -
#define KEYPAD_Colon 0xCB // - - - -
#define KEYPAD_Pound 0xCC // - - - -
#define KEYPAD_Space 0xCD // - - - -
#define KEYPAD_At 0xCE // - - - -
#define KEYPAD_Exclamation 0xCF // - - - -
#define KEYPAD_MemoryStore 0xD0 // - - - -
#define KEYPAD_MemoryRecall 0xD1 // - - - -
#define KEYPAD_MemoryClear 0xD2 // - - - -
#define KEYPAD_MemoryAdd 0xD3 // - - - -
#define KEYPAD_MemorySubtract 0xD4 // - - - -
#define KEYPAD_MemoryMultiply 0xD5 // - - - -
#define KEYPAD_MemoryDivide 0xD6 // - - - -
#define KEYPAD_PlusMinus 0xD7 // - - - -
#define KEYPAD_Clear 0xD8 // - - - -
#define KEYPAD_ClearEntry 0xD9 // - - - -
#define KEYPAD_Binary 0xDA // - - - -
#define KEYPAD_Octal 0xDB // - - - -
#define KEYPAD_Decimal 0xDC // - - - -
#define KEYPAD_Hexadecimal 0xDD // - - - -
// (Reserved) 0xDE..0xDF // - - - -
#define KEY_LeftControl 0xE0 // √ √ √ 84/101/104
#define KEY_LeftShift 0xE1 // √ √ √ 84/101/104
#define KEY_LeftAlt 0xE2 // √ √ √ 84/101/104
#define KEY_LeftGUI 0xE3 // √ √ √ 104
#define KEY_RightControl 0xE4 // √ √ √ 101/104
#define KEY_RightShift 0xE5 // √ √ √ 84/101/104
#define KEY_RightAlt 0xE6 // √ √ √ 101/104
#define KEY_RightGUI 0xE7 // √ √ √ 104
// (Reserved) 0xE8..0xFFFF // - - - -
// Media key codes are not real scan codes, they must be translated to a 16
// bit number by the consumer key key function
#define MEDIAKEY_AUDIO_MUTE 0
#define MEDIAKEY_AUDIO_VOL_UP 1
#define MEDIAKEY_AUDIO_VOL_DOWN 2
#define MEDIAKEY_NEXT_TRACK 3
#define MEDIAKEY_PREV_TRACK 4
#define MEDIAKEY_STOP 5
#define MEDIAKEY_PLAY_PAUSE 6
#define MEDIAKEY_RECORD 7
#define MEDIAKEY_REWIND 8
#define MEDIAKEY_EJECT 9
#define MEDIAKEY_CC_CONFIG 10
#define MEDIAKEY_EMAIL 11
#define MEDIAKEY_CALCULATOR 12
#define MEDIAKEY_LOCAL_BROWSER 13
#define MEDIAKEY_BROWSER_SEARCH 14
#define MEDIAKEY_BROWSER_HOME 15
#define MEDIAKEY_BROWSER_BACK 16
#define MEDIAKEY_BROWSER_FORWARD 17
#define MEDIAKEY_BROWSER_STOP 18
#define MEDIAKEY_BROWSER_REFRESH 19
#define MEDIAKEY_BROWSER_BOOKMARKS 20
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
#endif