1XIQUERYDEVICE(libmansuffix) 2============================ 3 4NAME 5---- 6 7 XIQueryDevice, XIFreeDeviceInfo - get information about devices. 8 9SYNOPSIS 10-------- 11 12 #include <X11/extensions/XInput2.h> 13 14 XIDeviceInfo* XIQueryDevice( Display *display, 15 int deviceid, 16 int *ndevices_return); 17 18 XIFreeDeviceInfo( XIDeviceInfo *info); 19 20 deviceid 21 Specifies the device to query or XIAllDevices or 22 XIAllMasterDevices. 23 24 display 25 Specifies the connection to the X server. 26 27 ndevices_return 28 Returns the number of devices returned. 29 30 info 31 A list of device XIDeviceInfo structs to be freed. 32 33 34DESCRIPTION 35----------- 36 37 The XIQueryDevice returns information about one or more input 38 devices. If the deviceid specifies a device, ndevices_return is 39 1 and the returned information describes only the requested 40 device. If deviceid is XIAllDevices or XIAllMasterDevices, 41 ndevices_return is the number of devices or master devices, 42 respectively, and the returned information represents all 43 devices or all master devices, respectively. 44 45 To free the XIDeviceInfo array returned by XIQueryDevice, use 46 XIFreeDeviceInfo. 47 48 For each input device requested, the XIQueryDevice returns an 49 XIDeviceInfo structure. Each structure contains information 50 about the capabilities of one input device available to the 51 server. 52 53 typedef struct 54 { 55 int deviceid; 56 char *name; 57 int use; 58 int attachment; 59 Bool enabled; 60 int num_classes; 61 XIAnyClassInfo **classes; 62 } XIDeviceInfo; 63 64 The deviceid is the numeric unique id of the device. A deviceid 65 is unique for the life-time of a device but a server may re-use 66 the id once a device has been removed. 67 68 The name points to a null-terminated string specifying the 69 identifier of the device. 70 71 The use and attachment fields specify the type of the device 72 and the current attachment or pairing. 73 - If use is XIMasterPointer, the device is a master pointer and 74 attachment specifies the deviceid of the paired master 75 keyboard. 76 - If use is XIMasterKeyboard, the device is a master keyboard, 77 and the attachment field specifies the paired master pointer. 78 - If use is XISlavePointer, the device is a slave device and 79 currently attached to the master pointer specified in 80 attachment. 81 - If use is XISlaveKeyboard, the device is a slave device an 82 currently attached to the master keyboard specified in 83 attachment. 84 - If use is XIFloatingSlave, the device is a slave device 85 currently not attached to any master device. The value of the 86 attachment field for floating slave devices is undefined. 87 88 The enabled field specifies if the device is currently enabled 89 and can send events. Disabled devices will not send events. 90 91 The num_classes field specifies the number of input classes 92 pointed to by classes. The first two fields of all input 93 classes are identical. 94 95 typedef struct 96 { 97 int type; 98 int sourceid; 99 } XIAnyClassInfo; 100 101 The type field specifies the type of the input class. 102 Currently, the following types are defined: 103 XIKeyClass, XIButtonClass, XIValuatorClass, XIScrollClass, 104 XITouchClass, XIGestureClass. 105 106 In the future, additional types may be added. Clients are 107 required to ignore unknown input classes. 108 109 The sourceid is the deviceid this class originated from. For 110 master devices, the sourceid is typically the id of the slave 111 device currently sending events. For slave devices, the 112 sourceid is typically the device's id. 113 114 A device may have zero or one XIButtonClass, denoting the 115 device's capability to send button events. 116 117 typedef struct { 118 int mask_len; 119 unsigned char *mask; 120 } XIButtonState; 121 122 typedef struct 123 { 124 int type; 125 int sourceid; 126 int num_buttons; 127 Atom *labels; 128 XIButtonState state; 129 } XIButtonClassInfo; 130 131 The num_buttons field specifies the number of buttons available 132 on this device. A device that has an XIButtonClass must have at 133 least one button. 134 135 labels is a list of num_buttons Atoms specifying the button 136 labels for this device. If the label is not None, then the 137 label specifies the type of button in physical device order 138 (i.e. as the buttons are numbered on the physical input 139 device). 140 141 The state is the current button state as seen by clients (i.e. 142 after button mapping is applied). The mask_len field specifies 143 the length of mask in bytes. For each button on the device, the 144 respective bit in mask is set if the button is currently 145 logically down. 146 147 A device may have zero or one XIKeyClass, denoting the device's 148 capability to send key events. 149 150 typedef struct 151 { 152 int type; 153 int sourceid; 154 int num_keycodes; 155 int *keycodes; 156 } XIKeyClassInfo; 157 158 The num_keycodes field specifies the number of keycodes 159 available on this device. A device that has an XIKeyClass must 160 have at least one keycode. 161 162 keycodes is a list of num_keycodes keycodes the device may 163 send. 164 165 A device may have zero or more XIValuatorClass, denoting the 166 device's capability to send coordinates. 167 168 typedef struct 169 { 170 int type; 171 int sourceid; 172 int number; 173 Atom label; 174 double min; 175 double max; 176 double value; 177 int resolution; 178 int mode; 179 } XIValuatorClassInfo; 180 181 The number field specifies the number of the axis on the 182 physical device. 183 184 If the label field is not None, the value of label is an Atom 185 describing the axis. 186 187 min and max are the minimum and maximum values allowed on this 188 axis. If both are zero, no minimum or maximum values are set on 189 this device. value is the current value of this axis. 190 191 The resolution field specifies the resolution of the device in 192 units/m. 193 194 The mode specifies the mode of this axis. If the mode is 195 XIModeAbsolute this axis sends absolute coordinates. If the 196 mode is XIModeRelative, this device sends relative coordinates. 197 198 typedef struct 199 { 200 int type; 201 int sourceid; 202 int number; 203 int scroll_type; 204 double increment; 205 int flags; 206 } XIScrollClassInfo; 207 208 This class describes scrolling capability on a valuator. For 209 each XIScrollClassInfo, an XIValuatorClassInfo with the same 210 number is present on the device. 211 212 The number field specifies the valuator number on the physical 213 device that this scroll information applies to. See the 214 respective XIValuatorClassInfo for detailed information on this 215 valuator. 216 217 The scroll_type field specifies the type of scrolling, either 218 XIScrollTypeVertical or XIScrollTypeHorizontal. 219 220 The increment specifies the value change considered one unit of 221 scrolling down. 222 223 The flags field specifies flags that apply to this scrolling 224 information: 225 226 If XIScrollFlagNoEmulation is set, the server will not 227 emulate legacy button events for valuator changes on this 228 valuator. 229 230 If XIScrollFlagPreferred is set, this axis is the 231 preferred axis for this scroll type and will be used for 232 the emulation of XI_Motion events when the driver submits 233 legacy scroll button events. 234 235 typedef struct 236 { 237 int type; 238 int sourceid; 239 int mode; 240 int num_touches; 241 } XITouchClassInfo; 242 243 A device may have zero or one XITouchClassInfo, denoting 244 multi-touch capability on the device. A device with a XITouchClassInfo 245 may send TouchBegin, TouchUpdate, TouchEnd and TouchOwnership events. 246 247 The mode field is either XIDirectTouch for direct-input touch devices 248 such as touchscreens or XIDependentTouch for indirect input devices such 249 as touchpads. For XIDirectTouch devices, touch events are sent to window 250 at the position the touch occurred. For XIDependentTouch devices, touch 251 events are sent to the window at the position of the device's sprite. 252 253 The num_touches field defines the maximum number of simultaneous touches 254 the device supports. A num_touches of 0 means the maximum number of 255 simultaneous touches is undefined or unspecified. This field should be 256 used as a guide only, devices will lie about their capabilities. 257 258 A device with an XITouchClassInfo may still send pointer events. The 259 valuators must be defined with the respective XIValuatorClass 260 classes. A valuator may send both pointer and touch-events. 261 262 typedef struct 263 { 264 int type; 265 int sourceid; 266 int num_touches; 267 } XIGestureClassInfo; 268 269 A device may have zero or one XIGestureClassInfo, denoting 270 touchpad gesture capability on the device. A device with a XIGestureClassInfo 271 may send GestureSwipeBegin, GestureSwipeUpdate, GestureSwipeEnd, 272 GesturePinchBegin, GesturePinchUpdate, GesturePinchEnd. 273 274 The num_touches field defines the maximum number of simultaneous touches 275 the device supports. A num_touches of 0 means the maximum number of 276 simultaneous touches is undefined or unspecified. This field should be 277 used as a guide only, devices will lie about their capabilities. 278 279 XIQueryDevice can generate a BadDevice error. 280 281 XIFreeDeviceInfo frees the information returned by 282 XIQueryDevice. 283 284DIAGNOSTICS 285----------- 286 287 BadDevice 288 An invalid device was specified. The device does not 289 exist or is not a pointer device. 290 291