123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562 |
- /*++
- Copyright (c) 2013 Minoca Corp.
- This file is licensed under the terms of the GNU General Public License
- version 3. Alternative licensing terms are available. Contact
- info@minocacorp.com for details. See the LICENSE file at the root of this
- project for complete licensing information.
- Module Name:
- usrinput.h
- Abstract:
- This header contains definitions for the User Input library.
- Author:
- Evan Green 16-Feb-2013
- --*/
- //
- // ------------------------------------------------------------------- Includes
- //
- //
- // ---------------------------------------------------------------- Definitions
- //
- #ifndef USER_INPUT_API
- #define USER_INPUT_API __DLLIMPORT
- #endif
- //
- // Define the name of the pipe where all user input is fed in to.
- //
- #define USER_INPUT_PIPE_NAME "/Pipe/UserInput"
- //
- // Define the current version of the user input keyboard device interface.
- //
- #define USER_INPUT_KEYBOARD_DEVICE_INTERFACE_VERSION 1
- //
- // Define the bitmask for a user input keyboard's LED state.
- //
- #define USER_INPUT_KEYBOARD_LED_NUM_LOCK 0x00000001
- #define USER_INPUT_KEYBOARD_LED_CAPS_LOCK 0x00000002
- #define USER_INPUT_KEYBOARD_LED_SCROLL_LOCK 0x00000004
- #define USER_INPUT_KEYBOARD_LED_COMPOSE 0x00000008
- #define USER_INPUT_KEYBOARD_LED_KANA 0x00000010
- //
- // Define the mouse event standard button flags.
- //
- #define MOUSE_BUTTON_LEFT 0x00000001
- #define MOUSE_BUTTON_RIGHT 0x00000002
- #define MOUSE_BUTTON_MIDDLE 0x00000004
- //
- // ------------------------------------------------------ Data Type Definitions
- //
- typedef enum _USER_INPUT_DEVICE_TYPE {
- UserInputDeviceInvalid,
- UserInputDeviceKeyboard,
- UserInputDeviceMouse,
- UserInputDeviceTypeCount
- } USER_INPUT_DEVICE_TYPE, *PUSER_INPUT_DEVICE_TYPE;
- typedef enum _USER_INPUT_EVENT_TYPE {
- UserInputEventInvalid,
- UserInputEventKeyDown,
- UserInputEventKeyUp,
- UserInputEventMouse,
- UserInputEventCount
- } USER_INPUT_EVENT_TYPE, *PUSER_INPUT_EVENT_TYPE;
- typedef enum _KEYBOARD_KEY {
- KeyboardKeyInvalid, /* 00 */
- KeyboardKeyEscape,
- KeyboardKey1,
- KeyboardKey2,
- KeyboardKey3,
- KeyboardKey4,
- KeyboardKey5,
- KeyboardKey6,
- KeyboardKey7,
- KeyboardKey8,
- KeyboardKey9,
- KeyboardKey0,
- KeyboardKeyDash,
- KeyboardKeyEquals,
- KeyboardKeyBackspace,
- KeyboardKeyTab,
- KeyboardKeyQ, /* 10 */
- KeyboardKeyW,
- KeyboardKeyE,
- KeyboardKeyR,
- KeyboardKeyT,
- KeyboardKeyY,
- KeyboardKeyU,
- KeyboardKeyI,
- KeyboardKeyO,
- KeyboardKeyP,
- KeyboardKeyLeftBracket,
- KeyboardKeyRightBracket,
- KeyboardKeyEnter,
- KeyboardKeyLeftControl,
- KeyboardKeyA,
- KeyboardKeyS,
- KeyboardKeyD, /* 20 */
- KeyboardKeyF,
- KeyboardKeyG,
- KeyboardKeyH,
- KeyboardKeyJ,
- KeyboardKeyK,
- KeyboardKeyL,
- KeyboardKeySemicolon,
- KeyboardKeyApostrophe,
- KeyboardKeyTilde,
- KeyboardKeyLeftShift,
- KeyboardKeyBackslash,
- KeyboardKeyZ,
- KeyboardKeyX,
- KeyboardKeyC,
- KeyboardKeyV,
- KeyboardKeyB, /* 30 */
- KeyboardKeyN,
- KeyboardKeyM,
- KeyboardKeyComma,
- KeyboardKeyPeriod,
- KeyboardKeySlash,
- KeyboardKeyRightShift,
- KeyboardKeyKeypadAsterisk,
- KeyboardKeyLeftAlt,
- KeyboardKeySpace,
- KeyboardKeyCapsLock,
- KeyboardKeyF1,
- KeyboardKeyF2,
- KeyboardKeyF3,
- KeyboardKeyF4,
- KeyboardKeyF5,
- KeyboardKeyF6, /* 40 */
- KeyboardKeyF7,
- KeyboardKeyF8,
- KeyboardKeyF9,
- KeyboardKeyF10,
- KeyboardKeyF11,
- KeyboardKeyF12,
- KeyboardKeyF13,
- KeyboardKeyF14,
- KeyboardKeyF15,
- KeyboardKeyF16,
- KeyboardKeyF17,
- KeyboardKeyF18,
- KeyboardKeyF19,
- KeyboardKeyF20,
- KeyboardKeyF21,
- KeyboardKeyF22, /* 50 */
- KeyboardKeyF23,
- KeyboardKeyF24,
- KeyboardKeyNumLock,
- KeyboardKeyScrollLock,
- KeyboardKeyKeypad0,
- KeyboardKeyKeypad1,
- KeyboardKeyKeypad2,
- KeyboardKeyKeypad3,
- KeyboardKeyKeypad4,
- KeyboardKeyKeypad5,
- KeyboardKeyKeypad6,
- KeyboardKeyKeypad7,
- KeyboardKeyKeypad8,
- KeyboardKeyKeypad9,
- KeyboardKeyKeypadMinus,
- KeyboardKeyKeypadPlus, /* 60 */
- KeyboardKeyKeypadPeriod,
- KeyboardKeySysRq,
- KeyboardKeyInternational1,
- KeyboardKeyInternational2,
- KeyboardKeyInternational3,
- KeyboardKeyInternational4,
- KeyboardKeyInternational5,
- KeyboardKeyInternational6,
- KeyboardKeyInternational7,
- KeyboardKeyInternational8,
- KeyboardKeyInternational9,
- KeyboardKeyHangul,
- KeyboardKeyHanja,
- KeyboardKeyKatakana,
- KeyboardKeyFurigana,
- KeyboardKeyKanji, /* 70 */
- KeyboardKeyHirijana,
- KeyboardKeyZenkaku,
- KeyboardKeyLanguage6,
- KeyboardKeyLanguage7,
- KeyboardKeyLanguage8,
- KeyboardKeyLanguage9,
- KeyboardKeyRedo,
- KeyboardKeyUndo,
- KeyboardKeyPaste,
- KeyboardKeySkipBack,
- KeyboardKeyCut,
- KeyboardKeyCopy,
- KeyboardKeySkipForward,
- KeyboardKeyKeypadEnter,
- KeyboardKeyRightControl,
- KeyboardKeyMail, /* 80 */
- KeyboardKeyMute,
- KeyboardKeyPlay,
- KeyboardKeyStop,
- KeyboardKeyEject,
- KeyboardKeyVolumeDown,
- KeyboardKeyVolumeUp,
- KeyboardKeyWeb,
- KeyboardKeyRightAlt,
- KeyboardKeyHelp,
- KeyboardKeyMusic,
- KeyboardKeyHome,
- KeyboardKeyUp,
- KeyboardKeyPageUp,
- KeyboardKeyLeft,
- KeyboardKeyRight,
- KeyboardKeyEnd, /* 90 */
- KeyboardKeyDown,
- KeyboardKeyPageDown,
- KeyboardKeyInsert,
- KeyboardKeyDelete,
- KeyboardKeyLeftWindows,
- KeyboardKeyRightWindows,
- KeyboardKeyMenu,
- KeyboardKeyPower,
- KeyboardKeySleep,
- KeyboardKeyWake,
- KeyboardKeyPictures,
- KeyboardKeyVideo,
- KeyboardKeyNonUsCurrency,
- KeyboardKeyBreak,
- KeyboardKeyKeypadSlash,
- KeyboardKeyNonUsBackslash, /* A0 */
- KeyboardKeyApplication,
- KeyboardKeyKeypadEquals,
- KeyboardKeyExecute,
- KeyboardKeySelect,
- KeyboardKeyAgain,
- KeyboardKeyFind,
- KeyboardKeyKeypadComma,
- KeyboardKeyCancel,
- KeyboardKeyClear,
- KeyboardKeyPrior,
- KeyboardKeySeparator,
- KeyboardKeyOut,
- KeyboardKeyOperator,
- KeyboardKeyCrSel,
- KeyboardKeyExSel,
- KeyboardKeyKeypad00, /* B0 */
- KeyboardKeyKeypad000,
- KeyboardKeyThousandsSeparator,
- KeyboardKeyDecimalSeparator,
- KeyboardKeyCurrencyUnit,
- KeyboardKeyCurrencySubunit,
- KeyboardKeyKeypadOpenParentheses,
- KeyboardKeyKeypadCloseParentheses,
- KeyboardKeyKeypadOpenCurlyBrace,
- KeyboardKeyKeypadCloseCurlyBrace,
- KeyboardKeyKeypadTab,
- KeyboardKeyKeypadBackspace,
- KeyboardKeyKeypadA,
- KeyboardKeyKeypadB,
- KeyboardKeyKeypadC,
- KeyboardKeyKeypadD,
- KeyboardKeyKeypadE, /* C0 */
- KeyboardKeyKeypadF,
- KeyboardKeyKeypadXor,
- KeyboardKeyKeypadCaret,
- KeyboardKeyKeypadPercent,
- KeyboardKeyKeypadLessThan,
- KeyboardKeyKeypadGreaterThan,
- KeyboardKeyKeypadAmpersand,
- KeyboardKeyKeypadDoubleAmpersand,
- KeyboardKeyKeypadPipe,
- KeyboardKeyKeypadDoublePipe,
- KeyboardKeyKeypadColon,
- KeyboardKeyKeypadHash,
- KeyboardKeyKeypadSpace,
- KeyboardKeyKeypadAt,
- KeyboardKeyKeypadExclamationPoint,
- KeyboardKeyKeypadMemoryStore, /* D0 */
- KeyboardKeyKeypadMemoryRecall,
- KeyboardKeyKeypadMemoryClear,
- KeyboardKeyKeypadMemoryAdd,
- KeyboardKeyKeypadMemorySubtract,
- KeyboardKeyKeypadMemoryMultiply,
- KeyboardKeyKeypadMemoryDivide,
- KeyboardKeyKeypadPlusMinus,
- KeyboardKeyKeypadClear,
- KeyboardKeyKeypadClearEntry,
- KeyboardKeyKeypadBinary,
- KeyboardKeyKeypadOctal,
- KeyboardKeyKeypadDecimal,
- KeyboardKeyKeypadHexadecimal,
- KeyboardKeyPrintScreen,
- KeyboardKeyMax
- } KEYBOARD_KEY, *PKEYBOARD_KEY;
- typedef struct _USER_INPUT_DEVICE USER_INPUT_DEVICE, *PUSER_INPUT_DEVICE;
- /*++
- Structure Description:
- This structure describes a mouse movement event.
- Members:
- MovementX - Stores the movement in the X direction.
- MovementY - Stores the movement in the Y direction.
- ScrollX - Stores the scroll wheel movement in the X direction.
- ScrollY - Stores the scroll whell movement in the Y direction.
- Flags - Stores additional flags.
- Buttons - Stores the button state.
- --*/
- typedef struct _MOUSE_EVENT {
- LONG MovementX;
- LONG MovementY;
- LONG ScrollX;
- LONG ScrollY;
- USHORT Flags;
- USHORT Buttons;
- } MOUSE_EVENT, *PMOUSE_EVENT;
- /*++
- Structure Description:
- This structure describes a user input device event.
- Members:
- EventIdentifier - Stores a unique event ID, assigned when the event is
- reported.
- DeviceIdentifier - Stores the unique identifier assigned to the device.
- DeviceType - Stores the type of device reporting the event.
- EventType - Stores the type of event occurring.
- Timestamp - Stores the time counter value when the event occurred.
- U - Stores the union of possible event data.
- Key - Stores the keyboard key being affected.
- Mouse - Stores the mouse event.
- --*/
- typedef struct _USER_INPUT_EVENT {
- ULONG EventIdentifier;
- ULONG DeviceIdentifier;
- USER_INPUT_DEVICE_TYPE DeviceType;
- USER_INPUT_EVENT_TYPE EventType;
- ULONGLONG Timestamp;
- union {
- KEYBOARD_KEY Key;
- MOUSE_EVENT Mouse;
- } U;
- } USER_INPUT_EVENT, *PUSER_INPUT_EVENT;
- typedef
- KSTATUS
- (*PUSER_INPUT_KEYBOARD_DEVICE_SET_LED_STATE) (
- PVOID Device,
- PVOID DeviceContext,
- ULONG LedState
- );
- /*++
- Routine Description:
- This routine sets a keyboard's LED state (e.g. Number lock, Caps lock and
- scroll lock). The state is absolute; the desired state for each LED must be
- supplied.
- Arguments:
- Device - Supplies a pointer to the OS device representing the user input
- device.
- DeviceContext - Supplies the opaque device context supplied in the device
- description upon registration with the user input library.
- LedState - Supplies a bitmask of flags describing the desired LED state.
- See USER_INPUT_KEYBOARD_LED_* for definition.
- Return Value:
- Status code.
- --*/
- /*++
- Structure Description:
- This structure defines an interface for a keyboard device that allows the
- user input library to update keyboard state.
- Members:
- SetLedState - Stores a pointer to a function used to set the keyboard's LED
- state.
- --*/
- typedef struct _USER_INPUT_KEYBOARD_DEVICE_INTERFACE {
- PUSER_INPUT_KEYBOARD_DEVICE_SET_LED_STATE SetLedState;
- } USER_INPUT_KEYBOARD_DEVICE_INTERFACE, *PUSER_INPUT_KEYBOARD_DEVICE_INTERFACE;
- /*++
- Structure Description:
- This structure describes a user input device that is being registered with
- the user input library.
- Members:
- Device - Stores a pointer to the OS device representing the user input
- device.
- DeviceContext - Stores an opaque token to device specific context.
- Type - Stores the type of user input device being described.
- InterfaceVersion - Stores the version of the device interface. For
- keyboards, set to USER_INPUT_KEYBOARD_DEVICE_INTERFACE_VERSION.
- KeyboardInterface - Stores the interface (function table) for a keyboard
- user input device.
- --*/
- typedef struct _USER_INPUT_DEVICE_DESCRIPTION {
- PVOID Device;
- PVOID DeviceContext;
- USER_INPUT_DEVICE_TYPE Type;
- ULONG InterfaceVersion;
- union {
- USER_INPUT_KEYBOARD_DEVICE_INTERFACE KeyboardInterface;
- } U;
- } USER_INPUT_DEVICE_DESCRIPTION, *PUSER_INPUT_DEVICE_DESCRIPTION;
- //
- // -------------------------------------------------------------------- Globals
- //
- //
- // -------------------------------------------------------- Function Prototypes
- //
- USER_INPUT_API
- HANDLE
- InRegisterInputDevice (
- PUSER_INPUT_DEVICE_DESCRIPTION Description
- );
- /*++
- Routine Description:
- This routine registers a new user input device.
- Arguments:
- Description - Supplies a pointer to the description of the user input
- device being registered.
- Return Value:
- Returns a handle to the user input device on success.
- INVALID_HANDLE on failure.
- --*/
- USER_INPUT_API
- VOID
- InDestroyInputDevice (
- HANDLE Handle
- );
- /*++
- Routine Description:
- This routine tears down state associated with a user input device created
- when the device was registered.
- Arguments:
- Handle - Supplies the handle to the registered device. When this function
- returns, the handle will be invalid.
- Return Value:
- None.
- --*/
- USER_INPUT_API
- KSTATUS
- InReportInputEvent (
- HANDLE Handle,
- PUSER_INPUT_EVENT Event
- );
- /*++
- Routine Description:
- This routine processes a new input event from the given device. This
- routine must be called at low level. The caller is expected to synchronize
- calls to report input for a device.
- Arguments:
- Handle - Supplies the handle to the registered device reporting the event.
- Event - Supplies a pointer to the event that occurred. The caller must
- supply this buffer, but it will only be used for the duration of the
- routine (a copy will be made). The caller must fill out the event type
- and union, and should expect all other fields to be overwritten.
- Return Value:
- STATUS_SUCCESS on success.
- STATUS_BUFFER_FULL if the input pipe is full of events and this one was
- dropped.
- --*/
|