#ifndef SOCKS_INPUT_H_ #define SOCKS_INPUT_H_ #include enum input_event_type { INPUT_TYPE_UNKNOWN = 0x00u, INPUT_TYPE_KEY = 0x01u, INPUT_TYPE_MOTION = 0x02u, }; enum input_event_motion_type { INPUT_MOTION_TYPE_MOUSE = 0x01u, INPUT_MOTION_TYPE_SCROLL = 0x02u, }; enum input_keycode { KEY_UNKNOWN = 0x00u, KEY_A = 0x01u, KEY_B = 0x02u, KEY_C = 0x03u, KEY_D = 0x04u, KEY_E = 0x05u, KEY_F = 0x06u, KEY_G = 0x07u, KEY_H = 0x08u, KEY_I = 0x09u, KEY_J = 0x0Au, KEY_K = 0x0Bu, KEY_L = 0x0Cu, KEY_M = 0x0Du, KEY_N = 0x0Eu, KEY_O = 0x0Fu, KEY_P = 0x10u, KEY_Q = 0x11u, KEY_R = 0x12u, KEY_S = 0x13u, KEY_T = 0x14u, KEY_U = 0x15u, KEY_V = 0x16u, KEY_W = 0x17u, KEY_X = 0x18u, KEY_Y = 0x19u, KEY_Z = 0x1Au, KEY_KEY_1 = 0x1Bu, KEY_KEY_2 = 0x1Cu, KEY_KEY_3 = 0x1Du, KEY_KEY_4 = 0x1Eu, KEY_KEY_5 = 0x1Fu, KEY_KEY_6 = 0x20u, KEY_KEY_7 = 0x21u, KEY_KEY_8 = 0x22u, KEY_KEY_9 = 0x23u, KEY_KEY_0 = 0x24u, KEY_ENTER = 0x25u, KEY_ESCAPE = 0x26u, KEY_BACKSPACE = 0x27u, KEY_TAB = 0x28u, KEY_SPACE = 0x29u, KEY_MINUS = 0x2Au, KEY_EQUALS = 0x2Bu, KEY_LEFT_BRACE = 0x2Cu, KEY_RIGHT_BRACE = 0x2Du, KEY_BACKSLASH = 0x2Eu, KEY_NON_US_HASH = 0x2Fu, KEY_SEMICOLON = 0x30u, KEY_APOSTROPHE = 0x31u, KEY_GRAVE_ACCENT = 0x32u, KEY_COMMA = 0x33u, KEY_DOT = 0x34u, KEY_SLASH = 0x35u, KEY_CAPS_LOCK = 0x36u, KEY_F1 = 0x37u, KEY_F2 = 0x38u, KEY_F3 = 0x39u, KEY_F4 = 0x3Au, KEY_F5 = 0x3Bu, KEY_F6 = 0x3Cu, KEY_F7 = 0x3Du, KEY_F8 = 0x3Eu, KEY_F9 = 0x3Fu, KEY_F10 = 0x40u, KEY_F11 = 0x41u, KEY_F12 = 0x42u, KEY_PRINT_SCREEN = 0x43u, KEY_SCROLL_LOCK = 0x44u, KEY_PAUSE = 0x45u, KEY_INSERT = 0x46u, KEY_HOME = 0x47u, KEY_PAGE_UP = 0x48u, KEY_DELETE = 0x49u, KEY_END = 0x4Au, KEY_PAGE_DOWN = 0x4Bu, KEY_RIGHT = 0x4Cu, KEY_LEFT = 0x4Du, KEY_DOWN = 0x4Eu, KEY_UP = 0x4Fu, KEY_NUM_LOCK = 0x50u, KEY_KEYPAD_SLASH = 0x51u, KEY_KEYPAD_ASTERISK = 0x52u, KEY_KEYPAD_MINUS = 0x53u, KEY_KEYPAD_PLUS = 0x54u, KEY_KEYPAD_ENTER = 0x55u, KEY_KEYPAD_1 = 0x56u, KEY_KEYPAD_2 = 0x57u, KEY_KEYPAD_3 = 0x58u, KEY_KEYPAD_4 = 0x59u, KEY_KEYPAD_5 = 0x5Au, KEY_KEYPAD_6 = 0x5Bu, KEY_KEYPAD_7 = 0x5Cu, KEY_KEYPAD_8 = 0x5Du, KEY_KEYPAD_9 = 0x5Eu, KEY_KEYPAD_0 = 0x5Fu, KEY_KEYPAD_DOT = 0x60u, KEY_NON_US_BACKSLASH = 0x61u, KEY_KEYPAD_EQUALS = 0x62u, KEY_MENU = 0x63u, KEY_LEFT_CTRL = 0x64u, KEY_LEFT_SHIFT = 0x65u, KEY_LEFT_ALT = 0x66u, KEY_LEFT_META = 0x67u, KEY_RIGHT_CTRL = 0x68u, KEY_RIGHT_SHIFT = 0x69u, KEY_RIGHT_ALT = 0x6Au, KEY_RIGHT_META = 0x6Bu, KEY_MEDIA_MUTE = 0x6Cu, KEY_MEDIA_VOLUME_INCREMENT = 0x6Du, KEY_MEDIA_VOLUME_DECREMENT = 0x6Eu, }; enum input_key_state { INPUT_KEYSTATE_DOWN = 0x00u, INPUT_KEYSTATE_UP = 0x01u, }; enum input_button { INPUT_BUTTON_MOUSE_LEFT = 0x00u, INPUT_BUTTON_MOUSE_MIDDLE = 0x01u, INPUT_BUTTON_MOUSE_RIGHT = 0x02u, INPUT_BUTTON_MOUSE_BACK = 0x03u, INPUT_BUTTON_MOUSE_FORWARD = 0x04u, }; enum input_button_state { INPUT_BUTTON_DOWN = 0x00u, INPUT_BUTTON_UP = 0x01u, }; struct input_event { enum input_event_type ev_type; union { struct { enum input_event_motion_type type; int16_t movement_x; int16_t movement_y; } ev_motion; struct { enum input_button button; enum input_button_state state; } ev_button; struct { enum input_keycode key; enum input_key_state state; } ev_key; }; }; #endif