Files
nt-lite/code/public/ntlite/input.h
T

143 lines
5.3 KiB
C

#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 <stdint.h>
#include <stdbool.h>
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;