150 lines
5.4 KiB
C
150 lines
5.4 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;
|
|
|
|
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;
|