6.16. Data Definitions for libXi

This section defines global identifiers and their values that are associated with interfaces contained in libXi. These definitions are organized into groups that correspond to system headers. This convention is used as a convenience for the reader, and does not imply the existence of these headers, or their content. Where an interface is defined as requiring a particular system header file all of the data definitions for that system header file presented here shall be in effect.

This section gives data definitions to promote binary application portability, not to repeat source interface definitions available elsewhere. System providers and application developers should use this ABI to supplement - not to replace - source interface definition specifications.

This specification uses the ISO C (1999) C Language as the reference programming language, and data definitions are specified in ISO C format. The C language is used here as a convenient notation. Using a C language description of these data objects does not preclude their use by other programming languages.

6.16.1. X11/extensions/XI.h


#define InProximity	(0L << 1)
#define DeviceMode	(1L << 0)
#define DvAccelNum	(1L << 0)
#define DvInteger	(1L << 0)
#define DvString	(1L << 0)
#define DvAccelDenom	(1L << 1)
#define OutOfProximity	(1L << 1)
#define ProximityState	(1L << 1)
#define DvThreshold	(1L << 2)
#define DvKeyClickPercent	(1L<<0)
#define DvPercent	(1L<<1)
#define DvPitch	(1L<<2)
#define DvDuration	(1L<<3)
#define DvLed	(1L<<4)
#define DvLedMode	(1L<<5)
#define DvKey	(1L<<6)
#define DvAutoRepeatMode	(1L<<7)
#define AddToList	0
#define AsyncThisDevice	0
#define COUNT	0
#define DeviceAdded	0
#define Dont_Check	0
#define IsXPointer	0
#define KbdFeedbackClass	0
#define KeyClass	0
#define NewPointer	0
#define Relative	0
#define XI_Absent	0
#define XI_BadDevice	0
#define XI_Initial_Release_Minor	0
#define XPOINTER	0
#define _devicePointerMotionHint	0
#define _devicePresence	0
#define UseXKeyboard	0xFF
#define Absolute	1
#define ButtonClass	1
#define CREATE	1
#define DEVICE_RESOLUTION	1
#define DeleteFromList	1
#define DeviceRemoved	1
#define IsXKeyboard	1
#define NewKeyboard	1
#define NoSuchExtension	1
#define PtrFeedbackClass	1
#define SyncThisDevice	1
#define XI_Add_DevicePresenceNotify_Major	1
#define XI_Add_XChangeDeviceControl_Major	1
#define XI_Add_XDeviceBell_Major	1
#define XI_Add_XDeviceBell_Minor	1
#define XI_Add_XSetDeviceValuators_Major	1
#define XI_BadEvent	1
#define XI_Initial_Release_Major	1
#define XI_Present	1
#define XInput_Initial_Release	1
#define XKEYBOARD	1
#define _deviceButton1Motion	1
#define sz_xAllowDeviceEventsReq	12
#define sz_xChangeDeviceDontPropagateListReq	12
#define sz_xChangeFeedbackControlReq	12
#define sz_xSelectExtensionEventReq	12
#define sz_xUngrabDeviceReq	12
#define sz_xGetDeviceMotionEventsReq	16
#define sz_xSendExtensionEventReq	16
#define sz_xSetDeviceFocusReq	16
#define sz_xUngrabDeviceButtonReq	16
#define sz_xUngrabDeviceKeyReq	16
#define DEVICE_ABS_CALIB	2
#define DeviceEnabled	2
#define IsXExtensionDevice	2
#define ReplayThisDevice	2
#define StringFeedbackClass	2
#define ValuatorClass	2
#define XI_Add_XSetDeviceValuators_Minor	2
#define XI_BadMode	2
#define XInput_Add_XDeviceBell	2
#define _deviceButton2Motion	2
#define sz_xGrabDeviceButtonReq	20
#define sz_xGrabDeviceKeyReq	20
#define sz_xGrabDeviceReq	20
#define AsyncOtherDevices	3
#define DEVICE_CORE	3
#define DeviceDisabled	3
#define FeedbackClass	3
#define FollowKeyboard	3
#define IntegerFeedbackClass	3
#define IsXExtensionKeyboard	3
#define RevertToFollowKeyboard	3
#define XI_Add_XChangeDeviceControl_Minor	3
#define XI_DeviceBusy	3
#define XInput_Add_XSetDeviceValuators	3
#define _deviceButton3Motion	3
#define sz_xChangeDeviceControlReply	32
#define sz_xChangeKeyboardDeviceReply	32
#define sz_xChangePointerDeviceReply	32
#define sz_xGetDeviceButtonMappingReply	32
#define sz_xGetDeviceControlReply	32
#define sz_xGetDeviceDontPropagateListReply	32
#define sz_xGetDeviceFocusReply	32
#define sz_xGetDeviceKeyMappingReply	32
#define sz_xGetDeviceMotionEventsReply	32
#define sz_xGetExtensionVersionReply	32
#define sz_xGetFeedbackControlReply	32
#define sz_xGetSelectedExtensionEventsReply	32
#define sz_xGrabDeviceButtonReply	32
#define sz_xGrabDeviceKeyReply	32
#define sz_xGrabDeviceReply	32
#define sz_xListInputDevicesReply	32
#define sz_xOpenDeviceReply	32
#define sz_xQueryDeviceStateReply	32
#define sz_xSetDeviceButtonMappingReply	32
#define sz_xSetDeviceModeReply	32
#define sz_xSetDeviceModifierMappingReply	32
#define sz_xSetDeviceValuatorsReply	32
#define AsyncAll	4
#define DEVICE_ENABLE	4
#define DeviceUnrecoverable	4
#define IsXExtensionPointer	4
#define LedFeedbackClass	4
#define ProximityClass	4
#define XI_Add_DevicePresenceNotify_Minor	4
#define XI_BadClass	4
#define XInput_Add_XChangeDeviceControl	4
#define _deviceButton4Motion	4
#define sz_xListInputDevicesReq	4
#define BellFeedbackClass	5
#define DEVICE_ABS_AREA	5
#define FocusClass	5
#define SyncAll	5
#define XInput_Add_DevicePresenceNotify	5
#define _deviceButton5Motion	5
#define OtherClass	6
#define _deviceButtonMotion	6
#define _deviceButtonGrab	7
#define _deviceOwnerGrabButton	8
#define sz_xChangeDeviceControlReq	8
#define sz_xChangeDeviceKeyMappingReq	8
#define sz_xChangeKeyboardDeviceReq	8
#define sz_xChangePointerDeviceReq	8
#define sz_xCloseDeviceReq	8
#define sz_xDeviceBellReq	8
#define sz_xGetDeviceButtonMappingReq	8
#define sz_xGetDeviceControlReq	8
#define sz_xGetDeviceDontPropagateListReq	8
#define sz_xGetDeviceFocusReq	8
#define sz_xGetDeviceKeyMappingReq	8
#define sz_xGetDeviceModifierMappingReq	8
#define sz_xGetExtensionVersionReq	8
#define sz_xGetFeedbackControlReq	8
#define sz_xGetSelectedExtensionEventsReq	8
#define sz_xOpenDeviceReq	8
#define sz_xQueryDeviceStateReq	8
#define sz_xSetDeviceButtonMappingReq	8
#define sz_xSetDeviceModeReq	8
#define sz_xSetDeviceModifierMappingReq	8
#define sz_xSetDeviceValuatorsReq	8
#define _noExtensionEvent	9
#define XI_BARCODE	"BARCODE"
#define XI_BUTTONBOX	"BUTTONBOX"
#define XI_CURSORKEYS	"CURSORKEYS"
#define XI_DATAGLOVE	"DATAGLOVE"
#define XI_EYETRACKER	"EYETRACKER"
#define XI_FOOTMOUSE	"FOOTMOUSE"
#define XI_ID_MODULE	"ID_MODULE"
#define XI_KEYBOARD	"KEYBOARD"
#define XI_KNOB_BOX	"KNOB_BOX"
#define XI_MOUSE	"MOUSE"
#define XI_NINE_KNOB	"NINE_KNOB"
#define XI_ONE_KNOB	"ONE_KNOB"
#define XI_QUADRATURE	"QUADRATURE"
#define XI_SPACEBALL	"SPACEBALL"
#define XI_TABLET	"TABLET"
#define XI_TOUCHPAD	"TOUCHPAD"
#define XI_TOUCHSCREEN	"TOUCHSCREEN"
#define XI_TRACKBALL	"TRACKBALL"
#define INAME	"XInputExtension"

typedef long unsigned int XEventClass;
typedef struct {
    int present;
    short int major_version;
    short int minor_version;
} XExtensionVersion;

6.16.2. X11/extensions/XInput.h


#define _XINPUT_H_
#define DeviceButtonPress(d,type,_class)	 \
	FindTypeAndClass(d, type, _class, ButtonClass, _deviceButtonPress)
#define DeviceButtonRelease(d,type,_class)	 \
	FindTypeAndClass(d, type, _class, ButtonClass, _deviceButtonRelease)
#define DeviceFocusIn(d,type,_class)	 \
	FindTypeAndClass(d, type, _class, FocusClass, _deviceFocusIn)
#define DeviceFocusOut(d,type,_class)	 \
	FindTypeAndClass(d, type, _class, FocusClass, _deviceFocusOut)
#define DeviceKeyPress(d,type,_class)	 \
	FindTypeAndClass(d, type, _class, KeyClass, _deviceKeyPress)
#define DeviceKeyRelease(d,type,_class)	 \
	FindTypeAndClass(d, type, _class, KeyClass, _deviceKeyRelease)
#define ChangeDeviceNotify(d,type,_class)	 \
	FindTypeAndClass(d, type, _class, OtherClass, _changeDeviceNotify)
#define DeviceMappingNotify(d,type,_class)	 \
	FindTypeAndClass(d, type, _class, OtherClass, _deviceMappingNotify)
#define DeviceStateNotify(d,type,_class)	 \
	FindTypeAndClass(d, type, _class, OtherClass, _deviceStateNotify)
#define ProximityIn(d,type,_class)	 \
	FindTypeAndClass(d, type, _class, ProximityClass, _proximityIn)
#define ProximityOut(d,type,_class)	 \
	FindTypeAndClass(d, type, _class, ProximityClass, _proximityOut)
#define DeviceMotionNotify(d,type,_class)	 \
	FindTypeAndClass(d, type, _class, ValuatorClass, _deviceMotionNotify)
#define FindTypeAndClass(d,type,_class,classid,offset)	 \
	{ int _i; XInputClassInfo *_ip; type = 0; _class = 0; for (_i=0, _ip= \
	((XDevice *) d)->classes; _i< ((XDevice *) d)->num_classes; _i++, \
	_ip++) if (_ip->input_class == classid) {type = _ip->event_type_base + \
	offset; _class = ((XDevice *) d)->device_id << 8 | type;}}
#define DevicePointerMotionHint(d,type,_class)	 \
	{ _class = ((XDevice *) d)->device_id << 8 | \
	_devicePointerMotionHint;}
#define DeviceButton1Motion(d,type,_class)	 \
	{ _class = ((XDevice *) d)->device_id << 8 | _deviceButton1Motion;}
#define DeviceButton2Motion(d,type,_class)	 \
	{ _class = ((XDevice *) d)->device_id << 8 | _deviceButton2Motion;}
#define DeviceButton3Motion(d,type,_class)	 \
	{ _class = ((XDevice *) d)->device_id << 8 | _deviceButton3Motion;}
#define DeviceButton5Motion(d,type,_class)	 \
	{ _class = ((XDevice *) d)->device_id << 8 | _deviceButton5Motion;}
#define DeviceButtonPressGrab(d,type,_class)	 \
	{ _class = ((XDevice *) d)->device_id << 8 | _deviceButtonGrab;}
#define DeviceOwnerGrabButton(d,type,_class)	 \
	{ _class = ((XDevice *) d)->device_id << 8 | _deviceOwnerGrabButton;}
#define NoExtensionEvent(d,type,_class)	 \
	{ _class = ((XDevice *) d)->device_id << 8 | _noExtensionEvent;}
#define _deviceButtonPress	0
#define _deviceFocusIn	0
#define _deviceKeyPress	0
#define _deviceMotionNotify	0
#define _deviceStateNotify	0
#define _proximityIn	0
#define _deviceButtonRelease	1
#define _deviceFocusOut	1
#define _deviceKeyRelease	1
#define _deviceMappingNotify	1
#define _proximityOut	1
#define _changeDeviceNotify	2
#define DeviceButton4Motion(d,type, _class)	{ _class =  ((XDevice *) d)->device_id << 8 | _deviceButton4Motion;}
#define DeviceButtonMotion(d,type, _class)	{ _class =  ((XDevice *) d)->device_id << 8 | _deviceButtonMotion;}
#define DevicePresence(dpy, type, _class)	{\
    extern int _XiGetDevicePresenceNotifyEvent(Display *); \
    type = _XiGetDevicePresenceNotifyEvent(dpy);            \
 _class =  (0x10000 | _devicePresence); \
 }

typedef struct {
    unsigned char input_class;
    unsigned char event_type_base;
} XInputClassInfo;
typedef struct {
    XID device_id;
    int num_classes;
    XInputClassInfo *classes;
} XDevice;
typedef struct {
    int type;
    long unsigned int serial;
    int send_event;
    Display *display;
    Window window;
    XID deviceid;
    Window root;
    Window subwindow;
    Time time;
    int x;
    int y;
    int x_root;
    int y_root;
    unsigned int state;
    unsigned int keycode;
    int same_screen;
    unsigned int device_state;
    unsigned char axes_count;
    unsigned char first_axis;
    int axis_data[6];
} XDeviceKeyEvent;
typedef XDeviceKeyEvent XDeviceKeyPressedEvent;
typedef XDeviceKeyEvent XDeviceKeyReleasedEvent;
typedef struct {
    int type;
    long unsigned int serial;
    int send_event;
    Display *display;
    Window window;
    XID deviceid;
    Window root;
    Window subwindow;
    Time time;
    int x;
    int y;
    int x_root;
    int y_root;
    unsigned int state;
    unsigned int button;
    int same_screen;
    unsigned int device_state;
    unsigned char axes_count;
    unsigned char first_axis;
    int axis_data[6];
} XDeviceButtonEvent;
typedef XDeviceButtonEvent XDeviceButtonPressedEvent;
typedef XDeviceButtonEvent XDeviceButtonReleasedEvent;
typedef struct {
    int type;
    long unsigned int serial;
    int send_event;
    Display *display;
    Window window;
    XID deviceid;
    Window root;
    Window subwindow;
    Time time;
    int x;
    int y;
    int x_root;
    int y_root;
    unsigned int state;
    char is_hint;
    int same_screen;
    unsigned int device_state;
    unsigned char axes_count;
    unsigned char first_axis;
    int axis_data[6];
} XDeviceMotionEvent;
typedef struct {
    int type;
    long unsigned int serial;
    int send_event;
    Display *display;
    Window window;
    XID deviceid;
    int mode;
    int detail;
    Time time;
} XDeviceFocusChangeEvent;
typedef XDeviceFocusChangeEvent XDeviceFocusInEvent;
typedef XDeviceFocusChangeEvent XDeviceFocusOutEvent;
typedef struct {
    int type;
    long unsigned int serial;
    int send_event;
    Display *display;
    Window window;
    XID deviceid;
    Window root;
    Window subwindow;
    Time time;
    int x;
    int y;
    int x_root;
    int y_root;
    unsigned int state;
    int same_screen;
    unsigned int device_state;
    unsigned char axes_count;
    unsigned char first_axis;
    int axis_data[6];
} XProximityNotifyEvent;
typedef XProximityNotifyEvent XProximityInEvent;
typedef XProximityNotifyEvent XProximityOutEvent;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    unsigned c_class;
#else
    unsigned class;
#endif
    unsigned char length;
} XInputClass;
typedef struct {
    int type;
    long unsigned int serial;
    int send_event;
    Display *display;
    Window window;
    XID deviceid;
    Time time;
    int num_classes;
    char data[64];
} XDeviceStateNotifyEvent;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    unsigned c_class;
#else
    unsigned class;
#endif
    unsigned char length;
    unsigned char num_valuators;
    unsigned char mode;
    int valuators[6];
} XValuatorStatus;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    unsigned c_class;
#else
    unsigned class;
#endif
    unsigned char length;
    short int num_keys;
    char keys[32];
} XKeyStatus;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    unsigned c_class;
#else
    unsigned class;
#endif
    unsigned char length;
    short int num_buttons;
    char buttons[32];
} XButtonStatus;
typedef struct {
    int type;
    long unsigned int serial;
    int send_event;
    Display *display;
    Window window;
    XID deviceid;
    Time time;
    int request;
    int first_keycode;
    int count;
} XDeviceMappingEvent;
typedef struct {
    int type;
    long unsigned int serial;
    int send_event;
    Display *display;
    Window window;
    XID deviceid;
    Time time;
    int request;
} XChangeDeviceNotifyEvent;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    XID id;
} XFeedbackState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    XID id;
    int click;
    int percent;
    int pitch;
    int duration;
    int led_mask;
    int global_auto_repeat;
    char auto_repeats[32];
} XKbdFeedbackState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    XID id;
    int accelNum;
    int accelDenom;
    int threshold;
} XPtrFeedbackState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    XID id;
    int resolution;
    int minVal;
    int maxVal;
} XIntegerFeedbackState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    XID id;
    int max_symbols;
    int num_syms_supported;
    KeySym *syms_supported;
} XStringFeedbackState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    XID id;
    int percent;
    int pitch;
    int duration;
} XBellFeedbackState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    XID id;
    int led_values;
    int led_mask;
} XLedFeedbackState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    XID id;
} XFeedbackControl;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    XID id;
    int accelNum;
    int accelDenom;
    int threshold;
} XPtrFeedbackControl;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    XID id;
    int click;
    int percent;
    int pitch;
    int duration;
    int led_mask;
    int led_value;
    int key;
    int auto_repeat_mode;
} XKbdFeedbackControl;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    XID id;
    int num_keysyms;
    KeySym *syms_to_display;
} XStringFeedbackControl;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    XID id;
    int int_to_display;
} XIntegerFeedbackControl;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    XID id;
    int percent;
    int pitch;
    int duration;
} XBellFeedbackControl;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    XID id;
    int led_mask;
    int led_values;
} XLedFeedbackControl;
typedef struct {
    XID control;
    int length;
} XDeviceControl;
typedef struct {
    XID control;
    int length;
    int first_valuator;
    int num_valuators;
    int *resolutions;
} XDeviceResolutionControl;
typedef struct {
    XID control;
    int length;
    int num_valuators;
    int *resolutions;
    int *min_resolutions;
    int *max_resolutions;
} XDeviceResolutionState;
typedef struct _XAnyClassinfo *XAnyClassPtr;
typedef struct _XAnyClassinfo {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
} XAnyClassInfo;
typedef struct _XDeviceInfo *XDeviceInfoPtr;
typedef struct _XDeviceInfo {
    XID id;
    Atom type;
    char *name;
    int num_classes;
    int use;
    XAnyClassPtr inputclassinfo;
} XDeviceInfo;
typedef struct _XKeyInfo *XKeyInfoPtr;
typedef struct _XKeyInfo {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    short unsigned int min_keycode;
    short unsigned int max_keycode;
    short unsigned int num_keys;
} XKeyInfo;
typedef struct _XButtonInfo *XButtonInfoPtr;
typedef struct _XButtonInfo {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    short int num_buttons;
} XButtonInfo;
typedef struct _XAxisInfo *XAxisInfoPtr;
typedef struct _XAxisInfo {
    int resolution;
    int min_value;
    int max_value;
} XAxisInfo;
typedef struct _XValuatorInfo *XValuatorInfoPtr;
typedef struct _XValuatorInfo {
#if defined(__cplusplus) || defined(c_plusplus)
    XID c_class;
#else
    XID class;
#endif
    int length;
    unsigned char num_axes;
    unsigned char mode;
    long unsigned int motion_buffer;
    XAxisInfoPtr axes;
} XValuatorInfo;
typedef struct {
    XEventClass event_type;
    XID device;
} XEventList;
typedef struct {
    Time time;
    int *data;
} XDeviceTimeCoord;
typedef struct {
    XID device_id;
    int num_classes;
    XInputClass *data;
} XDeviceState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    unsigned c_class;
#else
    unsigned class;
#endif
    unsigned char length;
    unsigned char num_valuators;
    unsigned char mode;
    int *valuators;
} XValuatorState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    unsigned c_class;
#else
    unsigned class;
#endif
    unsigned char length;
    short int num_keys;
    char keys[32];
} XKeyState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    unsigned c_class;
#else
    unsigned class;
#endif
    unsigned char length;
    short int num_buttons;
    char buttons[32];
} XButtonState;
extern int XAllowDeviceEvents(Display *, XDevice *, int, Time);
extern int XChangeDeviceControl(Display *, XDevice *, int,
				XDeviceControl *);
extern int XChangeDeviceDontPropagateList(Display *, Window, int,
					  XEventClass *, int);
extern int XChangeDeviceKeyMapping(Display *, XDevice *, int, int,
				   KeySym *, int);
extern int XChangeFeedbackControl(Display *, XDevice *, unsigned long int,
				  XFeedbackControl *);
extern int XChangeKeyboardDevice(Display *, XDevice *);
extern int XChangePointerDevice(Display *, XDevice *, int, int);
extern int XCloseDevice(Display *, XDevice *);
extern int XDeviceBell(Display *, XDevice *, XID, XID, int);
extern void XFreeDeviceControl(XDeviceControl *);
extern void XFreeDeviceList(XDeviceInfo *);
extern void XFreeDeviceMotionEvents(XDeviceTimeCoord *);
extern void XFreeDeviceState(XDeviceState *);
extern void XFreeFeedbackList(XFeedbackState *);
extern int XGetDeviceButtonMapping(Display *, XDevice *, unsigned char *,
				   unsigned int);
extern XDeviceControl *XGetDeviceControl(Display *, XDevice *, int);
extern XEventClass *XGetDeviceDontPropagateList(Display *, Window, int *);
extern int XGetDeviceFocus(Display *, XDevice *, Window *, int *, Time *);
extern KeySym *XGetDeviceKeyMapping(Display *, XDevice *, unsigned int,
				    int, int *);
extern XModifierKeymap *XGetDeviceModifierMapping(Display *, XDevice *);
extern XDeviceTimeCoord *XGetDeviceMotionEvents(Display *, XDevice *, Time,
						Time, int *, int *, int *);
extern XExtensionVersion *XGetExtensionVersion(Display *, const char *);
extern XFeedbackState *XGetFeedbackControl(Display *, XDevice *, int *);
extern int XGetSelectedExtensionEvents(Display *, Window, int *,
				       XEventClass * *, int *,
				       XEventClass * *);
extern int XGrabDevice(Display *, XDevice *, Window, int, int,
		       XEventClass *, int, int, Time);
extern int XGrabDeviceButton(Display *, XDevice *, unsigned int,
			     unsigned int, XDevice *, Window, int,
			     unsigned int, XEventClass *, int, int);
extern int XGrabDeviceKey(Display *, XDevice *, unsigned int, unsigned int,
			  XDevice *, Window, int, unsigned int,
			  XEventClass *, int, int);
extern XDeviceInfo *XListInputDevices(Display *, int *);
extern XDevice *XOpenDevice(Display *, XID);
extern XDeviceState *XQueryDeviceState(Display *, XDevice *);
extern int XSelectExtensionEvent(Display *, Window, XEventClass *, int);
extern int XSendExtensionEvent(Display *, XDevice *, Window, int, int,
			       XEventClass *, XEvent *);
extern int XSetDeviceButtonMapping(Display *, XDevice *, unsigned char *,
				   int);
extern int XSetDeviceFocus(Display *, XDevice *, Window, int, Time);
extern int XSetDeviceMode(Display *, XDevice *, int);
extern int XSetDeviceModifierMapping(Display *, XDevice *,
				     XModifierKeymap *);
extern int XSetDeviceValuators(Display *, XDevice *, int *, int, int);
extern int XUngrabDevice(Display *, XDevice *, Time);
extern int XUngrabDeviceButton(Display *, XDevice *, unsigned int,
			       unsigned int, XDevice *, Window);
extern int XUngrabDeviceKey(Display *, XDevice *, unsigned int,
			    unsigned int, XDevice *, Window);

6.16.3. X11/extensions/XIproto.h


#define XI_DeviceValuator	0
#define InputClassBits	0x3F
#define DEVICE_BITS	0x7F
#define MORE_EVENTS	0x80
#define CLIENT_REQ	1
#define XI_DeviceKeyPress	1
#define X_GetExtensionVersion	1
#define XI_DeviceStateNotify	10
#define X_GetDeviceMotionEvents	10
#define XI_DeviceMappingNotify	11
#define X_ChangeKeyboardDevice	11
#define XI_ChangeDeviceNotify	12
#define X_ChangePointerDevice	12
#define XI_DeviceKeystateNotify	13
#define X_GrabDevice	13
#define XI_DeviceButtonstateNotify	14
#define X_UngrabDevice	14
#define XI_DevicePresenceNotify	15
#define X_GrabDeviceKey	15
#define IEVENTS	16
#define X_UngrabDeviceKey	16
#define X_GrabDeviceButton	17
#define X_UngrabDeviceButton	18
#define X_AllowDeviceEvents	19
#define XI_DeviceKeyRelease	2
#define X_ListInputDevices	2
#define X_GetDeviceFocus	20
#define X_SetDeviceFocus	21
#define X_GetFeedbackControl	22
#define X_ChangeFeedbackControl	23
#define X_GetDeviceKeyMapping	24
#define X_ChangeDeviceKeyMapping	25
#define X_GetDeviceModifierMapping	26
#define X_SetDeviceModifierMapping	27
#define X_GetDeviceButtonMapping	28
#define X_SetDeviceButtonMapping	29
#define XI_DeviceButtonPress	3
#define X_OpenDevice	3
#define X_QueryDeviceState	30
#define X_SendExtensionEvent	31
#define X_DeviceBell	32
#define X_SetDeviceValuators	33
#define X_GetDeviceControl	34
#define X_ChangeDeviceControl	35
#define XI_DeviceButtonRelease	4
#define X_CloseDevice	4
#define IERRORS	5
#define XI_DeviceMotionNotify	5
#define X_SetDeviceMode	5
#define ModeBitsShift	6
#define XI_DeviceFocusIn	6
#define X_SelectExtensionEvent	6
#define XI_DeviceFocusOut	7
#define X_GetSelectedExtensionEvents	7
#define numInputClasses	7
#define XI_ProximityIn	8
#define X_ChangeDeviceDontPropagateList	8
#define XI_ProximityOut	9
#define X_GetDeviceDontPropagateList	9

typedef struct _XExtEventInfo {
    Mask mask;
    BYTE type;
    BYTE word;
} XExtEventInfo;
typedef unsigned char *Pointer;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD16 nbytes;
    CARD8 pad1;
    CARD8 pad2;
} xGetExtensionVersionReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD16 major_version;
    CARD16 minor_version;
    BOOL present;
    CARD8 pad1;
    CARD8 pad2;
    CARD8 pad3;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
} xGetExtensionVersionReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
} xListInputDevicesReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 ndevices;
    CARD8 pad1;
    CARD8 pad2;
    CARD8 pad3;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
    CARD32 pad05;
} xListInputDevicesReply;
typedef struct _xDeviceInfo *xDeviceInfoPtr;
typedef struct _xAnyClassinfo *xAnyClassPtr;
typedef struct _xAnyClassinfo {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 length;
} xAnyClassInfo;
typedef struct _xDeviceInfo {
    CARD32 type;
    CARD8 id;
    CARD8 num_classes;
    CARD8 use;
    CARD8 pad1;
} xDeviceInfo;
typedef struct _xKeyInfo *xKeyInfoPtr;
typedef struct _xKeyInfo {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 length;
    CARD8 min_keycode;
    CARD8 max_keycode;
    CARD16 num_keys;
    CARD8 pad1;
    CARD8 pad2;
} xKeyInfo;
typedef struct _xButtonInfo *xButtonInfoPtr;
typedef struct _xButtonInfo {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 length;
    CARD16 num_buttons;
} xButtonInfo;
typedef struct _xValuatorInfo *xValuatorInfoPtr;
typedef struct _xValuatorInfo {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 length;
    CARD8 num_axes;
    CARD8 mode;
    CARD32 motion_buffer_size;
} xValuatorInfo;
typedef struct _xAxisInfo *xAxisInfoPtr;
typedef struct _xAxisInfo {
    CARD32 resolution;
    CARD32 min_value;
    CARD32 max_value;
} xAxisInfo;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
} xOpenDeviceReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 num_classes;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
    CARD32 pad00;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
} xOpenDeviceReply;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 event_type_base;
} xInputClassInfo;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
} xCloseDeviceReq;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    CARD8 mode;
    BYTE pad1;
    BYTE pad2;
} xSetDeviceModeReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 status;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
    CARD32 pad05;
} xSetDeviceModeReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 window;
    CARD16 count;
    CARD16 pad00;
} xSelectExtensionEventReq;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 window;
} xGetSelectedExtensionEventsReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD16 this_client_count;
    CARD16 all_clients_count;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
    CARD32 pad05;
} xGetSelectedExtensionEventsReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 window;
    CARD16 count;
    CARD8 mode;
    BYTE pad;
} xChangeDeviceDontPropagateListReq;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 window;
} xGetDeviceDontPropagateListReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD16 count;
    CARD16 pad00;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
    CARD32 pad05;
} xGetDeviceDontPropagateListReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 start;
    CARD32 stop;
    CARD8 deviceid;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
} xGetDeviceMotionEventsReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD32 nEvents;
    CARD8 axes;
    CARD8 mode;
    BYTE pad1;
    BYTE pad2;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
} xGetDeviceMotionEventsReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
} xChangeKeyboardDeviceReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 status;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
    CARD32 pad05;
} xChangeKeyboardDeviceReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 xaxis;
    CARD8 yaxis;
    CARD8 deviceid;
    BYTE pad1;
} xChangePointerDeviceReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 status;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
    CARD32 pad05;
} xChangePointerDeviceReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 grabWindow;
    CARD32 time;
    CARD16 event_count;
    CARD8 this_device_mode;
    CARD8 other_devices_mode;
    BOOL ownerEvents;
    CARD8 deviceid;
    CARD16 pad01;
} xGrabDeviceReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 status;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
    CARD32 pad05;
} xGrabDeviceReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 time;
    CARD8 deviceid;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
} xUngrabDeviceReq;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 grabWindow;
    CARD16 event_count;
    CARD16 modifiers;
    CARD8 modifier_device;
    CARD8 grabbed_device;
    CARD8 key;
    BYTE this_device_mode;
    BYTE other_devices_mode;
    BOOL ownerEvents;
    BYTE pad1;
    BYTE pad2;
} xGrabDeviceKeyReq;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 grabWindow;
    CARD16 modifiers;
    CARD8 modifier_device;
    CARD8 key;
    CARD8 grabbed_device;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
} xUngrabDeviceKeyReq;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 grabWindow;
    CARD8 grabbed_device;
    CARD8 modifier_device;
    CARD16 event_count;
    CARD16 modifiers;
    BYTE this_device_mode;
    BYTE other_devices_mode;
    CARD8 button;
    BOOL ownerEvents;
    BYTE pad1;
    BYTE pad2;
} xGrabDeviceButtonReq;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 grabWindow;
    CARD16 modifiers;
    CARD8 modifier_device;
    CARD8 button;
    CARD8 grabbed_device;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
} xUngrabDeviceButtonReq;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 time;
    CARD8 mode;
    CARD8 deviceid;
    BYTE pad1;
    BYTE pad2;
} xAllowDeviceEventsReq;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
} xGetDeviceFocusReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD32 focus;
    CARD32 time;
    CARD8 revertTo;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
} xGetDeviceFocusReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 focus;
    CARD32 time;
    CARD8 revertTo;
    CARD8 device;
    CARD16 pad01;
} xSetDeviceFocusReq;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
} xGetFeedbackControlReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD16 num_feedbacks;
    CARD16 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
    CARD32 pad05;
    CARD32 pad06;
} xGetFeedbackControlReply;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 id;
    CARD16 length;
} xFeedbackState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 id;
    CARD16 length;
    CARD16 pitch;
    CARD16 duration;
    CARD32 led_mask;
    CARD32 led_values;
    BOOL global_auto_repeat;
    CARD8 click;
    CARD8 percent;
    BYTE pad;
    BYTE auto_repeats[32];
} xKbdFeedbackState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 id;
    CARD16 length;
    CARD8 pad1;
    CARD8 pad2;
    CARD16 accelNum;
    CARD16 accelDenom;
    CARD16 threshold;
} xPtrFeedbackState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 id;
    CARD16 length;
    CARD32 resolution;
    INT32 min_value;
    INT32 max_value;
} xIntegerFeedbackState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 id;
    CARD16 length;
    CARD16 max_symbols;
    CARD16 num_syms_supported;
} xStringFeedbackState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 id;
    CARD16 length;
    CARD8 percent;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
    CARD16 pitch;
    CARD16 duration;
} xBellFeedbackState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 id;
    CARD16 length;
    CARD32 led_mask;
    CARD32 led_values;
} xLedFeedbackState;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 mask;
    CARD8 deviceid;
    CARD8 feedbackid;
    BYTE pad1;
    BYTE pad2;
} xChangeFeedbackControlReq;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 id;
    CARD16 length;
} xFeedbackCtl;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 id;
    CARD16 length;
    CARD8 key;
    CARD8 auto_repeat_mode;
    INT8 click;
    INT8 percent;
    INT16 pitch;
    INT16 duration;
    CARD32 led_mask;
    CARD32 led_values;
} xKbdFeedbackCtl;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 id;
    CARD16 length;
    CARD8 pad1;
    CARD8 pad2;
    INT16 num;
    INT16 denom;
    INT16 thresh;
} xPtrFeedbackCtl;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 id;
    CARD16 length;
    INT32 int_to_display;
} xIntegerFeedbackCtl;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 id;
    CARD16 length;
    CARD8 pad1;
    CARD8 pad2;
    CARD16 num_keysyms;
} xStringFeedbackCtl;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 id;
    CARD16 length;
    INT8 percent;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
    INT16 pitch;
    INT16 duration;
} xBellFeedbackCtl;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 id;
    CARD16 length;
    CARD32 led_mask;
    CARD32 led_values;
} xLedFeedbackCtl;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    CARD8 firstKeyCode;
    CARD8 count;
    BYTE pad1;
} xGetDeviceKeyMappingReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 keySymsPerKeyCode;
    CARD8 pad0;
    CARD16 pad1;
    CARD32 pad2;
    CARD32 pad3;
    CARD32 pad4;
    CARD32 pad5;
    CARD32 pad6;
} xGetDeviceKeyMappingReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    CARD8 firstKeyCode;
    CARD8 keySymsPerKeyCode;
    CARD8 keyCodes;
} xChangeDeviceKeyMappingReq;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
} xGetDeviceModifierMappingReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 numKeyPerModifier;
    CARD8 pad0;
    CARD16 pad1;
    CARD32 pad2;
    CARD32 pad3;
    CARD32 pad4;
    CARD32 pad5;
    CARD32 pad6;
} xGetDeviceModifierMappingReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    CARD8 numKeyPerModifier;
    CARD16 pad1;
} xSetDeviceModifierMappingReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 success;
    CARD8 pad0;
    CARD16 pad1;
    CARD32 pad2;
    CARD32 pad3;
    CARD32 pad4;
    CARD32 pad5;
    CARD32 pad6;
} xSetDeviceModifierMappingReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
} xGetDeviceButtonMappingReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 nElts;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
    CARD32 pad05;
} xGetDeviceButtonMappingReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    CARD8 map_length;
    BYTE pad1;
    BYTE pad2;
} xSetDeviceButtonMappingReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 status;
    BYTE pad0;
    CARD16 pad1;
    CARD32 pad2;
    CARD32 pad3;
    CARD32 pad4;
    CARD32 pad5;
    CARD32 pad6;
} xSetDeviceButtonMappingReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
} xQueryDeviceStateReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 num_classes;
    BYTE pad0;
    CARD16 pad1;
    CARD32 pad2;
    CARD32 pad3;
    CARD32 pad4;
    CARD32 pad5;
    CARD32 pad6;
} xQueryDeviceStateReply;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 length;
    CARD8 num_keys;
    BYTE pad1;
    CARD8 keys[32];
} xKeyState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 length;
    CARD8 num_buttons;
    BYTE pad1;
    CARD8 buttons[32];
} xButtonState;
typedef struct {
#if defined(__cplusplus) || defined(c_plusplus)
    CARD8 c_class;
#else
    CARD8 class;
#endif
    CARD8 length;
    CARD8 num_valuators;
    CARD8 mode;
} xValuatorState;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD32 destination;
    CARD8 deviceid;
    BOOL propagate;
    CARD16 count;
    CARD8 num_events;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
} xSendExtensionEventReq;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    CARD8 feedbackid;
    CARD8 feedbackclass;
    INT8 percent;
} xDeviceBellReq;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD8 deviceid;
    CARD8 first_valuator;
    CARD8 num_valuators;
    BYTE pad1;
} xSetDeviceValuatorsReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 status;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
    CARD32 pad05;
} xSetDeviceValuatorsReply;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD16 control;
    CARD8 deviceid;
    BYTE pad2;
} xGetDeviceControlReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 status;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
    CARD32 pad05;
} xGetDeviceControlReply;
typedef struct {
    CARD16 control;
    CARD16 length;
} xDeviceState;
typedef struct {
    CARD16 control;
    CARD16 length;
    CARD32 num_valuators;
} xDeviceResolutionState;
typedef struct {
    CARD8 reqType;
    CARD8 ReqType;
    CARD16 length;
    CARD16 control;
    CARD8 deviceid;
    BYTE pad0;
} xChangeDeviceControlReq;
typedef struct {
    CARD8 repType;
    CARD8 RepType;
    CARD16 sequenceNumber;
    CARD32 length;
    CARD8 status;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
    CARD32 pad05;
} xChangeDeviceControlReply;
typedef struct {
    CARD16 control;
    CARD16 length;
} xDeviceCtl;
typedef struct {
    CARD16 control;
    CARD16 length;
    CARD8 first_valuator;
    CARD8 num_valuators;
    CARD8 pad1;
    CARD8 pad2;
} xDeviceResolutionCtl;
typedef struct {
    BYTE type;
    CARD8 deviceid;
    CARD16 sequenceNumber;
    KeyButMask device_state;
    CARD8 num_valuators;
    CARD8 first_valuator;
    INT32 valuator0;
    INT32 valuator1;
    INT32 valuator2;
    INT32 valuator3;
    INT32 valuator4;
    INT32 valuator5;
} deviceValuator;
typedef struct {
    BYTE type;
    BYTE detail;
    CARD16 sequenceNumber;
    CARD32 time;
    CARD32 root;
    CARD32 event;
    CARD32 child;
    INT16 root_x;
    INT16 root_y;
    INT16 event_x;
    INT16 event_y;
    KeyButMask state;
    BOOL same_screen;
    CARD8 deviceid;
} deviceKeyButtonPointer;
typedef struct {
    BYTE type;
    BYTE detail;
    CARD16 sequenceNumber;
    CARD32 time;
    CARD32 window;
    BYTE mode;
    CARD8 deviceid;
    BYTE pad1;
    BYTE pad2;
    CARD32 pad00;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
} deviceFocus;
typedef struct {
    BYTE type;
    BYTE deviceid;
    CARD16 sequenceNumber;
    CARD32 time;
    CARD8 num_keys;
    CARD8 num_buttons;
    CARD8 num_valuators;
    CARD8 classes_reported;
    CARD8 buttons[4];
    CARD8 keys[4];
    INT32 valuator0;
    INT32 valuator1;
    INT32 valuator2;
} deviceStateNotify;
typedef struct {
    BYTE type;
    BYTE deviceid;
    CARD16 sequenceNumber;
    CARD8 keys[28];
} deviceKeyStateNotify;
typedef struct {
    BYTE type;
    BYTE deviceid;
    CARD16 sequenceNumber;
    CARD8 buttons[28];
} deviceButtonStateNotify;
typedef struct {
    BYTE type;
    BYTE deviceid;
    CARD16 sequenceNumber;
    CARD8 request;
    CARD8 firstKeyCode;
    CARD8 count;
    BYTE pad1;
    CARD32 time;
    CARD32 pad00;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
} deviceMappingNotify;
typedef struct {
    BYTE type;
    BYTE deviceid;
    CARD16 sequenceNumber;
    CARD32 time;
    CARD8 request;
    BYTE pad1;
    BYTE pad2;
    BYTE pad3;
    CARD32 pad00;
    CARD32 pad01;
    CARD32 pad02;
    CARD32 pad03;
    CARD32 pad04;
} changeDeviceNotify;