#pragma once // input.h - canonical keyboard/mouse input ABI shared by kernel, drivers, and user-mode. // // Key values intentionally follow USB HID Keyboard/Keypad usage IDs. PS/2, // USB HID, and future input drivers all translate their hardware format into // these values before entering the kernel input core. #include #include typedef uint16_t INPUT_KEY; #define INPUT_KEY_NONE 0x0000u #define INPUT_KEY_A 0x0004u #define INPUT_KEY_B 0x0005u #define INPUT_KEY_C 0x0006u #define INPUT_KEY_D 0x0007u #define INPUT_KEY_E 0x0008u #define INPUT_KEY_F 0x0009u #define INPUT_KEY_G 0x000Au #define INPUT_KEY_H 0x000Bu #define INPUT_KEY_I 0x000Cu #define INPUT_KEY_J 0x000Du #define INPUT_KEY_K 0x000Eu #define INPUT_KEY_L 0x000Fu #define INPUT_KEY_M 0x0010u #define INPUT_KEY_N 0x0011u #define INPUT_KEY_O 0x0012u #define INPUT_KEY_P 0x0013u #define INPUT_KEY_Q 0x0014u #define INPUT_KEY_R 0x0015u #define INPUT_KEY_S 0x0016u #define INPUT_KEY_T 0x0017u #define INPUT_KEY_U 0x0018u #define INPUT_KEY_V 0x0019u #define INPUT_KEY_W 0x001Au #define INPUT_KEY_X 0x001Bu #define INPUT_KEY_Y 0x001Cu #define INPUT_KEY_Z 0x001Du #define INPUT_KEY_1 0x001Eu #define INPUT_KEY_2 0x001Fu #define INPUT_KEY_3 0x0020u #define INPUT_KEY_4 0x0021u #define INPUT_KEY_5 0x0022u #define INPUT_KEY_6 0x0023u #define INPUT_KEY_7 0x0024u #define INPUT_KEY_8 0x0025u #define INPUT_KEY_9 0x0026u #define INPUT_KEY_0 0x0027u #define INPUT_KEY_ENTER 0x0028u #define INPUT_KEY_ESCAPE 0x0029u #define INPUT_KEY_BACKSPACE 0x002Au #define INPUT_KEY_TAB 0x002Bu #define INPUT_KEY_SPACE 0x002Cu #define INPUT_KEY_MINUS 0x002Du #define INPUT_KEY_EQUAL 0x002Eu #define INPUT_KEY_LEFT_BRACKET 0x002Fu #define INPUT_KEY_RIGHT_BRACKET 0x0030u #define INPUT_KEY_BACKSLASH 0x0031u #define INPUT_KEY_SEMICOLON 0x0033u #define INPUT_KEY_APOSTROPHE 0x0034u #define INPUT_KEY_GRAVE 0x0035u #define INPUT_KEY_COMMA 0x0036u #define INPUT_KEY_PERIOD 0x0037u #define INPUT_KEY_SLASH 0x0038u #define INPUT_KEY_CAPS_LOCK 0x0039u #define INPUT_KEY_F1 0x003Au #define INPUT_KEY_F2 0x003Bu #define INPUT_KEY_F3 0x003Cu #define INPUT_KEY_F4 0x003Du #define INPUT_KEY_F5 0x003Eu #define INPUT_KEY_F6 0x003Fu #define INPUT_KEY_F7 0x0040u #define INPUT_KEY_F8 0x0041u #define INPUT_KEY_F9 0x0042u #define INPUT_KEY_F10 0x0043u #define INPUT_KEY_F11 0x0044u #define INPUT_KEY_F12 0x0045u #define INPUT_KEY_INSERT 0x0049u #define INPUT_KEY_HOME 0x004Au #define INPUT_KEY_PAGE_UP 0x004Bu #define INPUT_KEY_DELETE 0x004Cu #define INPUT_KEY_END 0x004Du #define INPUT_KEY_PAGE_DOWN 0x004Eu #define INPUT_KEY_RIGHT 0x004Fu #define INPUT_KEY_LEFT 0x0050u #define INPUT_KEY_DOWN 0x0051u #define INPUT_KEY_UP 0x0052u #define INPUT_KEY_NUM_LOCK 0x0053u #define INPUT_KEY_KP_DIVIDE 0x0054u #define INPUT_KEY_KP_MULTIPLY 0x0055u #define INPUT_KEY_KP_MINUS 0x0056u #define INPUT_KEY_KP_PLUS 0x0057u #define INPUT_KEY_KP_ENTER 0x0058u #define INPUT_KEY_KP_1 0x0059u #define INPUT_KEY_KP_2 0x005Au #define INPUT_KEY_KP_3 0x005Bu #define INPUT_KEY_KP_4 0x005Cu #define INPUT_KEY_KP_5 0x005Du #define INPUT_KEY_KP_6 0x005Eu #define INPUT_KEY_KP_7 0x005Fu #define INPUT_KEY_KP_8 0x0060u #define INPUT_KEY_KP_9 0x0061u #define INPUT_KEY_KP_0 0x0062u #define INPUT_KEY_KP_PERIOD 0x0063u #define INPUT_KEY_LEFT_CTRL 0x00E0u #define INPUT_KEY_LEFT_SHIFT 0x00E1u #define INPUT_KEY_LEFT_ALT 0x00E2u #define INPUT_KEY_LEFT_GUI 0x00E3u #define INPUT_KEY_RIGHT_CTRL 0x00E4u #define INPUT_KEY_RIGHT_SHIFT 0x00E5u #define INPUT_KEY_RIGHT_ALT 0x00E6u #define INPUT_KEY_RIGHT_GUI 0x00E7u #define INPUT_MOD_LSHIFT (1u << 0) #define INPUT_MOD_RSHIFT (1u << 1) #define INPUT_MOD_LCTRL (1u << 2) #define INPUT_MOD_RCTRL (1u << 3) #define INPUT_MOD_LALT (1u << 4) #define INPUT_MOD_RALT (1u << 5) #define INPUT_MOD_CAPS_LOCK (1u << 6) #define INPUT_MOD_NUM_LOCK (1u << 7) #define INPUT_MOD_LGUI (1u << 8) #define INPUT_MOD_RGUI (1u << 9) #define INPUT_MOD_SHIFT (INPUT_MOD_LSHIFT | INPUT_MOD_RSHIFT) #define INPUT_MOD_CTRL (INPUT_MOD_LCTRL | INPUT_MOD_RCTRL) #define INPUT_MOD_ALT (INPUT_MOD_LALT | INPUT_MOD_RALT) #define INPUT_MOD_GUI (INPUT_MOD_LGUI | INPUT_MOD_RGUI) typedef struct INPUT_KEY_EVENT { INPUT_KEY Key; bool Pressed; } INPUT_KEY_EVENT; typedef struct INPUT_MOUSE_EVENT { int dx; int dy; int wheel; uint8_t buttons; // bit0=left, bit1=right, bit2=middle } INPUT_MOUSE_EVENT; typedef struct INPUT_MOUSE_ABSOLUTE_EVENT { int x; int y; int wheel; uint8_t buttons; // bit0=left, bit1=right, bit2=middle } INPUT_MOUSE_ABSOLUTE_EVENT;