xinput: Add XI v1.5
[free-sw/xcb/proto] / src / xinput.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <!--
3 Copyright (C) 2006 Peter Hutterer 
4 All Rights Reserved.
5
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20 ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
23 Except as contained in this notice, the names of the authors or their
24 institutions shall not be used in advertising or otherwise to promote the
25 sale, use or other dealings in this Software without prior written
26 authorization from the authors.
27 -->
28
29 <!-- Specifications:
30      http://cgit.freedesktop.org/xorg/proto/inputproto/tree/specs/XIproto.txt
31 -->
32
33 <xcb header="xinput" extension-xname="XInputExtension" extension-name="Input"
34      major-version="1" minor-version="5">
35     <import>xproto</import>
36
37     <!-- ⋅⋅⋅ Types (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
38
39     <typedef oldname="CARD32" newname="EventClass" />
40     <typedef oldname="CARD8"  newname="KeyCode" />
41
42     <!-- ⋅⋅⋅ Requests (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
43
44     <!-- GetExtensionVersion -->
45
46     <request name="GetExtensionVersion" opcode="1">
47         <field type="CARD16" name="name_len" />
48         <pad bytes="2" />
49         <list type="char" name="name">
50             <fieldref>name_len</fieldref>
51         </list>
52         <reply>
53             <pad bytes="1" />
54             <field type="CARD16" name="server_major" />
55             <field type="CARD16" name="server_minor" />
56             <field type="BOOL"   name="present" />
57             <pad bytes="19" />
58         </reply>
59     </request>
60
61     <!-- ListInputDevices -->
62
63     <enum name="DeviceUse">
64         <item name="IsXPointer">           <value>0</value> </item>
65         <item name="IsXKeyboard">          <value>1</value> </item>
66         <item name="IsXExtensionDevice">   <value>2</value> </item>
67         <item name="IsXExtensionKeyboard"> <value>3</value> </item>
68         <item name="IsXExtensionPointer">  <value>4</value> </item>
69     </enum>
70
71     <enum name="InputClass">
72         <item name="Key">       <value>0</value> </item>
73         <item name="Button">    <value>1</value> </item>
74         <item name="Valuator">  <value>2</value> </item>
75         <item name="Feedback">  <value>3</value> </item>
76         <item name="Proximity"> <value>4</value> </item>
77         <item name="Focus">     <value>5</value> </item>
78         <item name="Other">     <value>6</value> </item>
79     </enum>
80
81     <enum name="ValuatorMode">
82         <item name="Relative"> <value>0</value> </item>
83         <item name="Absolute"> <value>1</value> </item>
84     </enum>
85
86     <struct name="DeviceInfo">
87         <field type="ATOM"  name="device_type" />
88         <field type="CARD8" name="device_id" />
89         <field type="CARD8" name="num_class_info" />
90         <field type="CARD8" name="device_use" enum="DeviceUse" />
91         <pad bytes="1" />
92     </struct>
93
94     <struct name="KeyInfo">
95         <field type="CARD8"   name="class_id" enum="InputClass" />
96         <field type="CARD8"   name="len" />
97         <field type="KeyCode" name="min_keycode" />
98         <field type="KeyCode" name="max_keycode" />
99         <field type="CARD16"  name="num_keys" />
100         <pad bytes="2" />
101     </struct>
102
103     <struct name="ButtonInfo">
104         <field type="CARD8"  name="class_id" enum="InputClass" />
105         <field type="CARD8"  name="len" />
106         <field type="CARD16" name="num_buttons" />
107     </struct>
108
109     <struct name="AxisInfo">
110         <field type="CARD32" name="resolution" />
111         <field type="INT32"  name="minimum" />
112         <field type="INT32"  name="maximum" />
113     </struct>
114
115     <struct name="ValuatorInfo">
116         <field type="CARD8"   name="class_id" enum="InputClass" />
117         <field type="CARD8"   name="len" />
118         <field type="CARD8"   name="axes_len" />
119         <field type="CARD8"   name="mode" enum="ValuatorMode" />
120         <field type="CARD32"  name="motion_size" />
121         <list type="AxisInfo" name="axes">
122             <fieldref>axes_len</fieldref>
123         </list>
124     </struct>
125
126     <struct name="InputInfo">
127         <field type="CARD8" name="class_id" enum="InputClass" />
128         <field type="CARD8" name="len" />
129     </struct>
130
131     <struct name="DeviceName">
132         <field type="CARD8" name="len" />
133         <list type="char"  name="string">
134             <fieldref>len</fieldref>
135         </list>
136     </struct>
137
138     <request name="ListInputDevices" opcode="2">
139         <reply>
140             <pad bytes="1" />
141             <field type="CARD8" name="devices_len" />
142             <pad bytes="23" />
143             <list type="DeviceInfo" name="devices">
144                 <fieldref>devices_len</fieldref>
145             </list>
146             <!-- Uninterpreted: list (infos) of InputInfo structures,
147                                 length is <sumof> all devices.num_class_info -->
148             <!-- Uninterpreted: list (name) of DeviceName structures -->
149         </reply>
150     </request>
151
152     <!-- OpenDevice -->
153
154     <struct name="InputClassInfo">
155         <field type="CARD8" name="class_id" enum="InputClass" />
156         <field type="CARD8" name="event_type_base" />
157     </struct>
158
159     <request name="OpenDevice" opcode="3">
160         <field type="CARD8" name="device_id" />
161         <pad bytes="3" />
162         <reply>
163             <pad bytes="1" />
164             <field type="CARD8" name="num_classes" />
165             <pad bytes="23" />
166             <list type="InputClassInfo" name="class_info">
167                 <fieldref>num_classes</fieldref>
168             </list>
169         </reply>
170     </request>
171
172     <!-- CloseDevice -->
173
174     <request name="CloseDevice" opcode="4">
175         <field type="CARD8" name="device_id" />
176         <pad bytes="3" />
177     </request>
178
179     <!-- SetDeviceMode -->
180
181     <request name="SetDeviceMode" opcode="5">
182         <field type="CARD8" name="device_id" />
183         <field type="CARD8" name="mode" enum="ValuatorMode" />
184         <pad bytes="2" />
185         <reply>
186             <pad bytes="1" />
187             <field type="CARD8" name="status" altenum="GrabStatus" />
188             <pad bytes="23" />
189         </reply>
190     </request>
191
192     <!-- SelectExtensionEvent -->
193
194     <request name="SelectExtensionEvent" opcode="6">
195         <field type="WINDOW" name="window" />
196         <field type="CARD16" name="num_classes" />
197         <pad bytes="2" />
198         <list type="EventClass" name="classes">
199             <fieldref>num_classes</fieldref>
200         </list>
201     </request>
202
203     <!-- GetSelectedExtensionEvents -->
204
205     <request name="GetSelectedExtensionEvents" opcode="7">
206         <field type="WINDOW" name="window" />
207         <reply>
208             <pad bytes="1" />
209             <field type="CARD16" name="num_this_classes" />
210             <field type="CARD16" name="num_all_classes" />
211             <pad bytes="20" />
212             <list type="EventClass" name="this_classes">
213                 <fieldref>num_this_classes</fieldref>
214             </list>
215             <list type="EventClass" name="all_classes">
216                 <fieldref>num_all_classes</fieldref>
217             </list>
218         </reply>
219     </request>
220
221     <!-- ChangeDeviceDontPropagateList -->
222
223     <enum name="PropagateMode">
224         <item name="AddToList">      <value>0</value> </item>
225         <item name="DeleteFromList"> <value>1</value> </item>
226     </enum>
227
228     <request name="ChangeDeviceDontPropagateList" opcode="8">
229         <field type="WINDOW" name="window" />
230         <field type="CARD16" name="num_classes" />
231         <field type="CARD8"  name="mode" enum="PropagateMode" />
232         <pad bytes="1" />
233         <list type="EventClass" name="classes">
234             <fieldref>num_classes</fieldref>
235         </list>
236     </request>
237
238     <!-- GetDeviceDontPropagateList -->
239
240     <request name="GetDeviceDontPropagateList" opcode="9">
241         <field type="WINDOW" name="window" />
242         <reply>
243             <pad bytes="1" />
244             <field type="CARD16" name="num_classes" />
245             <pad bytes="22" />
246             <list type="EventClass" name="classes">
247                 <fieldref>num_classes</fieldref>
248             </list>
249         </reply>
250     </request>
251
252     <!-- GetDeviceMotionEvents -->
253
254     <struct name="DeviceTimeCoord">
255         <field type="TIMESTAMP" name="time" />
256         <!-- Uninterpreted: list (axisvalues) of CARD32,
257                             length is num_axes from GetDeviceMotionEvents -->
258     </struct>
259
260     <request name="GetDeviceMotionEvents" opcode="10">
261         <field type="TIMESTAMP" name="start" />
262         <field type="TIMESTAMP" name="stop" altenum="Time" />
263         <field type="CARD8"     name="device_id" />
264         <reply>
265             <pad bytes="1" />
266             <field type="CARD32" name="num_events" />
267             <field type="CARD8"  name="num_axes" />
268             <field type="CARD8"  name="device_mode" enum="ValuatorMode" />
269             <pad bytes="18" />
270             <!-- Uninterpreted: list (events) of DeviceTimeCoord structures -->
271         </reply>
272     </request>
273
274     <!-- ChangeKeyboardDevice -->
275
276     <request name="ChangeKeyboardDevice" opcode="11">
277         <field type="CARD8" name="device_id" />
278         <pad bytes="3" />
279         <reply>
280             <pad bytes="1" />
281             <field type="CARD8" name="status" altenum="GrabStatus" />
282             <pad bytes="23" />
283         </reply>
284     </request>
285
286     <!-- ChangePointerDevice -->
287
288     <request name="ChangePointerDevice" opcode="12">
289         <field type="CARD8" name="x_axis" />
290         <field type="CARD8" name="y_axis" />
291         <field type="CARD8" name="device_id" />
292         <pad bytes="1" />
293         <reply>
294             <pad bytes="1" />
295             <field type="CARD8" name="status" altenum="GrabStatus" />
296             <pad bytes="23" />
297         </reply>
298     </request>
299
300     <!-- GrabDevice -->
301
302     <request name="GrabDevice" opcode="13">
303         <field type="WINDOW"    name="grab_window" />
304         <field type="TIMESTAMP" name="time" altenum="Time" />
305         <field type="CARD16"    name="num_classes" />
306         <field type="CARD8"     name="this_device_mode" enum="GrabMode" />
307         <field type="CARD8"     name="other_device_mode" enum="GrabMode" />
308         <field type="BOOL"      name="owner_events" />
309         <field type="CARD8"     name="device_id" />
310         <pad bytes="2" />
311         <list type="EventClass" name="classes">
312             <fieldref>num_classes</fieldref>
313         </list>
314         <reply>
315             <pad bytes="1" />
316             <field type="CARD8" name="status" enum="GrabStatus" />
317             <pad bytes="23" />
318         </reply>
319     </request>
320
321     <!-- UngrabDevice -->
322
323     <request name="UngrabDevice" opcode="14">
324         <field type="TIMESTAMP" name="time" altenum="Time" />
325         <field type="CARD8"     name="device_id" />
326     </request>
327
328     <!-- GrabDeviceKey -->
329
330     <request name="GrabDeviceKey" opcode="15">
331         <field type="WINDOW" name="grab_window" />
332         <field type="CARD16" name="num_classes" />
333         <field type="CARD16" name="modifiers" mask="ModMask" />
334         <field type="CARD8"  name="modifier_device" />
335         <field type="CARD8"  name="grabbed_device" />
336         <field type="CARD8"  name="key" altenum="Grab" />
337         <field type="CARD8"  name="this_device_mode" enum="GrabMode" />
338         <field type="CARD8"  name="other_device_mode" enum="GrabMode" />
339         <field type="BOOL"   name="owner_events" />
340         <pad bytes="2" />
341         <list type="EventClass" name="classes">
342             <fieldref>num_classes</fieldref>
343         </list>
344     </request>
345
346     <!-- UngrabDeviceKey -->
347
348     <request name="UngrabDeviceKey" opcode="16">
349         <field type="WINDOW" name="grabWindow" />
350         <field type="CARD16" name="modifiers" mask="ModMask" />
351         <field type="CARD8"  name="modifier_device" />
352         <field type="CARD8"  name="key" altenum="Grab" />
353         <field type="CARD8"  name="grabbed_device" />
354     </request>
355
356     <!-- GrabDeviceButton -->
357
358     <request name="GrabDeviceButton" opcode="17">
359         <field type="WINDOW" name="grab_window" />
360         <field type="CARD8"  name="grabbed_device" />
361         <field type="CARD8"  name="modifier_device" />
362         <field type="CARD16" name="num_classes" />
363         <field type="CARD16" name="modifiers" mask="ModMask" />
364         <field type="CARD8"  name="this_device_mode" enum="GrabMode" />
365         <field type="CARD8"  name="other_device_mode" enum="GrabMode" />
366         <field type="CARD8"  name="button" altenum="Grab" />
367         <field type="CARD8"  name="owner_events" />
368         <pad bytes="2" />
369         <list type="EventClass" name="classes">
370             <fieldref>num_classes</fieldref>
371         </list>
372     </request>
373
374     <!-- UngrabDeviceButton -->
375
376     <request name="UngrabDeviceButton" opcode="18">
377         <field type="WINDOW" name="grab_window" />
378         <field type="CARD16" name="modifiers" mask="ModMask" />
379         <field type="CARD8"  name="modifier_device" />
380         <field type="CARD8"  name="button" altenum="Grab" />
381         <field type="CARD8"  name="grabbed_device" />
382     </request>
383
384     <!-- AllowDeviceEvents -->
385
386     <enum name="DeviceInputMode">
387         <item name="AsyncThisDevice" />
388         <item name="SyncThisDevice" />
389         <item name="ReplayThisDevice" />
390         <item name="AsyncOtherDevices" />
391         <item name="AsyncAll" />
392         <item name="SyncAll" />
393     </enum>
394
395     <request name="AllowDeviceEvents" opcode="19">
396         <field type="TIMESTAMP" name="time" altenum="Time" />
397         <field type="CARD8"     name="mode" enum="DeviceInputMode" />
398         <field type="CARD8"     name="device_id" />
399     </request>
400
401     <!-- GetDeviceFocus -->
402
403     <request name="GetDeviceFocus" opcode="20">
404         <field type="CARD8" name="device_id" />
405         <pad bytes="3" />
406         <reply>
407             <pad bytes="1" />
408             <field type="WINDOW"    name="focus" altenum="InputFocus" />
409             <field type="TIMESTAMP" name="time" />
410             <field type="CARD8"     name="revert_to" enum="InputFocus" />
411             <pad bytes="15" />
412         </reply>
413     </request>
414
415     <!-- SetDeviceFocus -->
416
417     <request name="SetDeviceFocus" opcode="21">
418         <field type="WINDOW"    name="focus" altenum="InputFocus" />
419         <field type="TIMESTAMP" name="time" altenum="Time" />
420         <field type="CARD8"     name="revert_to" enum="InputFocus" />
421         <field type="CARD8"     name="device_id" />
422     </request>
423
424     <!-- GetFeedbackControl -->
425
426     <enum name="FeedbackClass">
427         <item name="Keyboard" />
428         <item name="Pointer" />
429         <item name="String" />
430         <item name="Integer" />
431         <item name="Led" />
432         <item name="Bell" />
433     </enum>
434
435     <struct name="KbdFeedbackState">
436         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
437         <field type="CARD8"  name="feedback_id" />
438         <field type="CARD16" name="len" />
439         <field type="CARD16" name="pitch" />
440         <field type="CARD16" name="duration" />
441         <field type="CARD32" name="led_mask" />
442         <field type="CARD32" name="led_values" />
443         <field type="BOOL"   name="global_auto_repeat" />
444         <field type="CARD8"  name="click" />
445         <field type="CARD8"  name="percent" />
446         <pad bytes="1" />
447         <list type="CARD8" name="auto_repeats">
448             <value>32</value>
449         </list>
450     </struct>
451
452     <struct name="PtrFeedbackState">
453         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
454         <field type="CARD8"  name="feedback_id" />
455         <field type="CARD16" name="len" />
456         <pad bytes="2" />
457         <field type="CARD16" name="accel_num" />
458         <field type="CARD16" name="accel_denom" />
459         <field type="CARD16" name="threshold" />
460     </struct>
461
462     <struct name="IntegerFeedbackState">
463         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
464         <field type="CARD8"  name="feedback_id" />
465         <field type="CARD16" name="len" />
466         <field type="CARD32" name="resolution" />
467         <field type="INT32"  name="min_value" />
468         <field type="INT32"  name="max_value" />
469     </struct>
470
471     <struct name="StringFeedbackState">
472         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
473         <field type="CARD8"  name="feedback_id" />
474         <field type="CARD16" name="len" />
475         <field type="CARD16" name="max_symbols" />
476         <field type="CARD16" name="num_keysyms" />
477         <list type="KEYSYM"  name="keysyms">
478             <fieldref>num_keysyms</fieldref>
479         </list>
480     </struct>
481
482     <struct name="BellFeedbackState">
483         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
484         <field type="CARD8"  name="feedback_id" />
485         <field type="CARD16" name="len" />
486         <field type="CARD8"  name="percent" />
487         <pad bytes="3" />
488         <field type="CARD16" name="pitch" />
489         <field type="CARD16" name="duration" />
490     </struct>
491
492     <struct name="LedFeedbackState">
493         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
494         <field type="CARD8"  name="feedback_id" />
495         <field type="CARD16" name="len" />
496         <field type="CARD32" name="led_mask" />
497         <field type="CARD32" name="led_values" />
498     </struct>
499
500     <struct name="FeedbackState">
501         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
502         <field type="CARD8"  name="feedback_id" />
503         <field type="CARD16" name="len" />
504     </struct>
505
506     <request name="GetFeedbackControl" opcode="22">
507         <field type="CARD8" name="device_id" />
508         <pad bytes="3" />
509         <reply>
510             <pad bytes="1" />
511             <field type="CARD16" name="num_feedbacks" />
512             <pad bytes="22" />
513             <!-- Uninterpreted: list (feedbacks) of FeedbackState structures -->
514         </reply>
515     </request>
516
517     <!-- ChangeFeedbackControl -->
518
519     <struct name="KbdFeedbackCtl">
520         <field type="CARD8"   name="class_id" enum="FeedbackClass" />
521         <field type="CARD8"   name="feedback_id" />
522         <field type="CARD16"  name="len" />
523         <field type="KeyCode" name="key" />
524         <field type="CARD8"   name="auto_repeat_mode" />
525         <field type="INT8"    name="key_click_percent" />
526         <field type="INT8"    name="bell_percent" />
527         <field type="INT16"   name="bell_pitch" />
528         <field type="INT16"   name="bell_duration" />
529         <field type="CARD32"  name="led_mask" />
530         <field type="CARD32"  name="led_values" />
531     </struct>
532
533     <struct name="PtrFeedbackCtl">
534         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
535         <field type="CARD8"  name="feedback_id" />
536         <field type="CARD16" name="len" />
537         <pad bytes="2" />
538         <field type="INT16"  name="num" />
539         <field type="INT16"  name="denom" />
540         <field type="INT16"  name="threshold" />
541     </struct>
542
543     <struct name="IntegerFeedbackCtl">
544         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
545         <field type="CARD8"  name="feedback_id" />
546         <field type="CARD16" name="len" />
547         <field type="INT32"  name="int_to_display" />
548     </struct>
549
550     <struct name="StringFeedbackCtl">
551         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
552         <field type="CARD8"  name="feedback_id" />
553         <field type="CARD16" name="len" />
554         <pad bytes="2" />
555         <field type="CARD16" name="num_keysyms" />
556         <list type="KEYSYM"  name="keysyms">
557             <fieldref>num_keysyms</fieldref>
558         </list>
559     </struct>
560
561     <struct name="BellFeedbackCtl">
562         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
563         <field type="CARD8"  name="feedback_id" />
564         <field type="CARD16" name="len" />
565         <field type="INT8"   name="percent" />
566         <pad bytes="3" />
567         <field type="INT16"  name="pitch" />
568         <field type="INT16"  name="duration" />
569     </struct>
570
571     <struct name="LedFeedbackCtl">
572         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
573         <field type="CARD8"  name="feedback_id" />
574         <field type="CARD16" name="len" />
575         <field type="CARD32" name="led_mask" />
576         <field type="CARD32" name="led_values" />
577     </struct>
578
579     <struct name="FeedbackCtl">
580         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
581         <field type="CARD8"  name="feedback_id" />
582         <field type="CARD16" name="len" />
583     </struct>
584
585     <request name="ChangeFeedbackControl" opcode="23">
586         <field type="CARD32"      name="mask" />
587         <field type="CARD8"       name="device_id" />
588         <field type="CARD8"       name="feedback_id" />
589         <!-- Uninterpreted: field (feedback) of FeedbackCtl structure -->
590     </request>
591
592     <!-- GetDeviceKeyMapping -->
593
594     <request name="GetDeviceKeyMapping" opcode="24">
595         <field type="CARD8"   name="device_id" />
596         <field type="KeyCode" name="first_keycode" />
597         <field type="CARD8"   name="count" />
598         <reply>
599             <pad bytes="1" />
600             <field type="CARD8" name="keysyms_per_keycode" />
601             <pad bytes="23" />
602             <list type="KEYSYM" name="keysyms">
603                 <!-- 'length' is a field in the header -->
604                 <fieldref>length</fieldref>
605             </list>
606         </reply>
607     </request>
608
609     <!-- ChangeDeviceKeyMapping -->
610
611     <request name="ChangeDeviceKeyMapping" opcode="25">
612         <field type="CARD8"   name="device_id" />
613         <field type="KeyCode" name="first_keycode" />
614         <field type="CARD8"   name="keysyms_per_keycode" />
615         <field type="CARD8"   name="keycode_count" />
616         <list type="KEYSYM"   name="keysyms">
617             <op op="*">
618                 <fieldref>keycode_count</fieldref>
619                 <fieldref>keysyms_per_keycode</fieldref>
620             </op>
621         </list>
622     </request>
623
624     <!-- GetDeviceModifierMapping -->
625
626     <request name="GetDeviceModifierMapping" opcode="26">
627         <field type="CARD8" name="device_id" />
628         <pad bytes="3" />
629         <reply>
630             <pad bytes="1" />
631             <field type="CARD8" name="keycodes_per_modifier" />
632             <pad bytes="23" />
633             <list type="CARD8"  name="keymaps">
634                 <op op="*">
635                     <fieldref>keycodes_per_modifier</fieldref>
636                     <value>8</value>
637                 </op>
638             </list>
639         </reply>
640     </request>
641
642     <!-- SetDeviceModifierMapping -->
643
644     <request name="SetDeviceModifierMapping" opcode="27">
645         <field type="CARD8" name="device_id" />
646         <field type="CARD8" name="keycodes_per_modifier" />
647         <pad bytes="1" />
648         <list type="CARD8" name="keymaps">
649             <op op="*">
650                 <fieldref>keycodes_per_modifier</fieldref>
651                 <value>8</value>
652             </op>
653         </list>
654         <reply>
655             <pad bytes="1" />
656             <field type="CARD8" name="status" enum="MappingStatus" />
657             <pad bytes="23" />
658         </reply>
659     </request>
660
661     <!-- GetDeviceButtonMapping -->
662
663     <request name="GetDeviceButtonMapping" opcode="28">
664         <field type="CARD8" name="device_id" />
665         <pad bytes="3" />
666         <reply>
667             <pad bytes="1" />
668             <field type="CARD8" name="map_size" />
669             <pad bytes="23" />
670             <list type="CARD8" name="map">
671                 <fieldref>map_size</fieldref>
672             </list>
673         </reply>
674     </request>
675
676     <!-- SetDeviceButtonMapping -->
677
678     <request name="SetDeviceButtonMapping" opcode="29">
679         <field type="CARD8" name="device_id" />
680         <field type="CARD8" name="map_size" />
681         <pad bytes="2" />
682         <list type="CARD8" name="map">
683             <fieldref>map_size</fieldref>
684         </list>
685         <reply>
686             <pad bytes="1" />
687             <field type="CARD8" name="status" enum="MappingStatus" />
688             <pad bytes="23" />
689         </reply>
690     </request>
691
692     <!-- QueryDeviceState -->
693
694     <struct name="KeyState">
695         <field type="CARD8" name="class_id" enum="InputClass" />
696         <field type="CARD8" name="len" />
697         <field type="CARD8" name="num_keys" />
698         <pad bytes="1" />
699         <list type="CARD8" name="keys">
700             <value>32</value>
701         </list>
702     </struct>
703
704     <struct name="ButtonState">
705         <field type="CARD8" name="class_id" enum="InputClass" />
706         <field type="CARD8" name="len" />
707         <field type="CARD8" name="num_buttons" />
708         <pad bytes="1" />
709         <list type="CARD8" name="buttons">
710             <value>32</value>
711         </list>
712     </struct>
713
714     <struct name="ValuatorState">
715         <field type="CARD8" name="class_id" enum="InputClass" />
716         <field type="CARD8" name="len" />
717         <field type="CARD8" name="num_valuators" />
718         <field type="CARD8" name="mode" />
719         <list type="CARD32" name="valuators">
720             <fieldref>num_valuators</fieldref>
721         </list>
722     </struct>
723
724     <struct name="InputState">
725         <field type="CARD8" name="class_id" enum="InputClass" />
726         <field type="CARD8" name="len" />
727         <field type="CARD8" name="num_items" />
728     </struct>
729
730     <request name="QueryDeviceState" opcode="30">
731         <field type="CARD8" name="device_id" />
732         <pad bytes="3" />
733         <reply>
734             <pad bytes="1" />
735             <field type="CARD8" name="num_classes" />
736             <pad bytes="23" />
737             <!-- Uninterpreted: list (classes) of InputState structures -->
738         </reply>
739     </request>
740
741     <!-- SendExtensionEvent -->
742
743     <request name="SendExtensionEvent" opcode="31">
744         <field type="WINDOW" name="destination" />
745         <field type="CARD8"  name="device_id" />
746         <field type="BOOL"   name="propagate" />
747         <field type="CARD16" name="num_classes" />
748         <field type="CARD8"  name="num_events" />
749         <pad bytes="3" />
750         <list type="CARD8" name="events">
751             <op op="*">
752                 <fieldref>num_events</fieldref>
753                 <value>32</value>
754             </op>
755         </list>
756         <list type="EventClass" name="classes">
757             <fieldref>num_classes</fieldref>
758         </list>
759     </request>
760
761     <!-- DeviceBell -->
762
763     <request name="DeviceBell" opcode="32">
764         <field type="CARD8" name="device_id" />
765         <field type="CARD8" name="feedback_id" />
766         <field type="CARD8" name="feedback_class" />
767         <field type="INT8"  name="percent" />
768     </request>
769
770     <!-- SetDeviceValuators -->
771
772     <request name="SetDeviceValuators" opcode="33">
773         <field type="CARD8" name="device_id" />
774         <field type="CARD8" name="first_valuator" />
775         <field type="CARD8" name="num_valuators" />
776         <pad bytes="1" />
777         <list type="INT32" name="valuators">
778             <fieldref>num_valuators</fieldref>
779         </list>
780         <reply>
781             <pad bytes="1" />
782             <field type="CARD8" name="status" enum="GrabStatus" />
783             <pad bytes="23" />
784         </reply>
785     </request>
786
787     <!-- GetDeviceControl -->
788
789     <enum name="DeviceControl">
790         <item name="resolution"> <value>1</value> </item>
791         <item name="abs_calib">  <value>2</value> </item>
792         <item name="core">       <value>3</value> </item>
793         <item name="enable">     <value>4</value> </item>
794         <item name="abs_area">   <value>5</value> </item>
795     </enum>
796
797     <struct name="DeviceResolutionState">
798         <field type="CARD16" name="control_id" enum="DeviceControl" />
799         <field type="CARD16" name="len" />
800         <field type="CARD32" name="num_valuators" />
801         <list type="CARD32"  name="resolution_values">
802             <fieldref>num_valuators</fieldref>
803         </list>
804         <list type="CARD32" name="resolution_min">
805             <fieldref>num_valuators</fieldref>
806         </list>
807         <list type="CARD32" name="resolution_max">
808             <fieldref>num_valuators</fieldref>
809         </list>
810     </struct>
811
812     <struct name="DeviceAbsCalibState">
813         <field type="CARD16" name="control_id" enum="DeviceControl" />
814         <field type="CARD16" name="len" />
815         <field type="INT32"  name="min_x" />
816         <field type="INT32"  name="max_x" />
817         <field type="INT32"  name="min_y" />
818         <field type="INT32"  name="max_y" />
819         <field type="CARD32" name="flip_x" />
820         <field type="CARD32" name="flip_y" />
821         <field type="CARD32" name="rotation" />
822         <field type="CARD32" name="button_threshold" />
823     </struct>
824
825     <struct name="DeviceAbsAreaState">
826         <field type="CARD16" name="control_id" enum="DeviceControl" />
827         <field type="CARD16" name="len" />
828         <field type="CARD32" name="offset_x" />
829         <field type="CARD32" name="offset_y" />
830         <field type="CARD32" name="width" />
831         <field type="CARD32" name="height" />
832         <field type="CARD32" name="screen" />
833         <field type="CARD32" name="following" />
834     </struct>
835
836     <struct name="DeviceCoreState">
837         <field type="CARD16" name="control_id" enum="DeviceControl" />
838         <field type="CARD16" name="len" />
839         <field type="CARD8"  name="status" />
840         <field type="CARD8"  name="iscore" />
841         <pad bytes="2" />
842     </struct>
843
844     <struct name="DeviceEnableState">
845         <field type="CARD16" name="control_id" enum="DeviceControl" />
846         <field type="CARD16" name="len" />
847         <field type="CARD8"  name="enable" />
848         <pad bytes="3" />
849     </struct>
850
851     <struct name="DeviceState">
852         <field type="CARD16" name="control_id" enum="DeviceControl" />
853         <field type="CARD16" name="len" />
854     </struct>
855
856     <request name="GetDeviceControl" opcode="34">
857         <field type="CARD16" name="control_id" enum="DeviceControl" />
858         <field type="CARD8"  name="device_id" />
859         <pad bytes="1" />
860         <reply>
861             <pad bytes="1" />
862             <field type="CARD8" name="status" altenum="GrabStatus" />
863             <pad bytes="23" />
864             <!-- Uninterpreted: field (control) of DeviceState structure -->
865         </reply>
866     </request>
867
868     <!-- ChangeDeviceControl -->
869
870     <struct name="DeviceResolutionCtl">
871         <field type="CARD16" name="control_id" enum="DeviceControl" />
872         <field type="CARD16" name="len" />
873         <field type="CARD8"  name="first_valuator" />
874         <field type="CARD8"  name="num_valuators" />
875         <list type="CARD32"  name="resolution_values">
876             <fieldref>num_valuators</fieldref>
877         </list>
878     </struct>
879
880     <struct name="DeviceAbsCalibCtl">
881         <field type="CARD16" name="control_id" enum="DeviceControl" />
882         <field type="CARD16" name="len" />
883         <field type="INT32"  name="min_x" />
884         <field type="INT32"  name="max_x" />
885         <field type="INT32"  name="min_y" />
886         <field type="INT32"  name="max_y" />
887         <field type="CARD32" name="flip_x" />
888         <field type="CARD32" name="flip_y" />
889         <field type="CARD32" name="rotation" />
890         <field type="CARD32" name="button_threshold" />
891     </struct>
892
893     <struct name="DeviceAbsAreaCtrl">
894         <field type="CARD16" name="control_id" enum="DeviceControl" />
895         <field type="CARD16" name="len" />
896         <field type="CARD32" name="offset_x" />
897         <field type="CARD32" name="offset_y" />
898         <field type="INT32"  name="width" />
899         <field type="INT32"  name="height" />
900         <field type="INT32"  name="screen" />
901         <field type="CARD32" name="following" />
902     </struct>
903
904     <struct name="DeviceCoreCtrl">
905         <field type="CARD16" name="control_id" enum="DeviceControl" />
906         <field type="CARD16" name="len" />
907         <field type="CARD8"  name="status" />
908         <pad bytes="3" />
909     </struct>
910
911     <struct name="DeviceEnableCtrl">
912         <field type="CARD16" name="control_id" enum="DeviceControl" />
913         <field type="CARD16" name="len" />
914         <field type="CARD8"  name="enable" />
915         <pad bytes="3" />
916     </struct>
917
918     <struct name="DeviceCtl">
919         <field type="CARD16" name="control_id" enum="DeviceControl" />
920         <field type="CARD16" name="len" />
921     </struct>
922
923     <request name="ChangeDeviceControl" opcode="35">
924         <field type="CARD16" name="control_id" enum="DeviceControl" />
925         <field type="CARD8"  name="device_id" />
926         <pad bytes="1" />
927         <!-- Uninterpreted: field (control) of DeviceCtl structure -->
928         <reply>
929             <pad bytes="1" />
930             <field type="CARD8" name="status" altenum="GrabStatus" />
931             <pad bytes="23" />
932         </reply>
933     </request>
934
935     <!-- ⋅⋅⋅ Requests (v1.5) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
936
937     <!-- ListDeviceProperties -->
938
939     <request name="ListDeviceProperties" opcode="36">
940         <field type="CARD8"  name="device_id" />
941         <pad bytes="3" />
942         <reply>
943             <pad bytes="1" />
944             <field type="CARD16" name="num_atoms" />
945             <pad bytes="22" />
946             <list type="ATOM" name="atoms">
947                 <fieldref>num_atoms</fieldref>
948             </list>
949         </reply>
950     </request>
951
952     <!-- ChangeDeviceProperty -->
953
954     <enum name="PropertyFormat">
955         <item name="8Bits">  <value> 8</value> </item>
956         <item name="16Bits"> <value>16</value> </item>
957         <item name="32Bits"> <value>32</value> </item>
958     </enum>
959
960     <request name="ChangeDeviceProperty" opcode="37">
961         <field type="ATOM"  name="property" />
962         <field type="ATOM"  name="type" />
963         <field type="CARD8" name="device_id" />
964         <field type="CARD8" name="format" enum="PropertyFormat" />
965         <field type="CARD8" name="mode" enum="PropMode" />
966         <pad bytes="1" />
967         <field type="CARD32" name="num_items" />
968         <switch name="items">
969             <fieldref>format</fieldref>
970             <!-- <bitcase> is not correct, this would need <cases>s.
971                  It works in that case, because PropertyFormat items can be
972                  distinguished exactly as their values don't have equal bits.
973             -->
974             <bitcase>
975                 <enumref ref="PropertyFormat">8Bits</enumref>
976                 <list type="CARD8" name="data8">
977                     <fieldref>num_items</fieldref>
978                 </list>
979             </bitcase>
980             <bitcase>
981                 <enumref ref="PropertyFormat">16Bits</enumref>
982                 <list type="CARD16" name="data16">
983                     <fieldref>num_items</fieldref>
984                 </list>
985             </bitcase>
986             <bitcase>
987                 <enumref ref="PropertyFormat">32Bits</enumref>
988                 <list type="CARD32" name="data32">
989                     <fieldref>num_items</fieldref>
990                 </list>
991             </bitcase>
992         </switch>
993     </request>
994
995     <!-- DeleteDeviceProperty -->
996
997     <request name="DeleteDeviceProperty" opcode="38">
998         <field type="ATOM"  name="property" />
999         <field type="CARD8" name="device_id" />
1000         <pad bytes="3" />
1001     </request>
1002
1003     <!-- GetDeviceProperty -->
1004
1005     <request name="GetDeviceProperty" opcode="39">
1006         <field type="ATOM"   name="property" />
1007         <field type="ATOM"   name="type" />
1008         <field type="CARD32" name="offset" />
1009         <field type="CARD32" name="len" />
1010         <field type="CARD8"  name="device_id" />
1011         <field type="BOOL"   name="delete" />
1012         <pad bytes="2" />
1013         <reply>
1014             <pad bytes="1" />
1015             <field type="ATOM"   name="type" />
1016             <field type="CARD32" name="bytes_after" />
1017             <field type="CARD32" name="num_items" />
1018             <field type="CARD8"  name="format" enum="PropertyFormat" />
1019             <field type="CARD8"  name="device_id" />
1020             <pad bytes="10" />
1021             <switch name="items">
1022                 <fieldref>format</fieldref>
1023                 <!-- <bitcase> is not correct, this would need <cases>s.
1024                      It works in that case, because PropertyFormat items can be
1025                      distinguished exactly as their values don't have equal bits.
1026                 -->
1027                 <bitcase>
1028                     <enumref ref="PropertyFormat">8Bits</enumref>
1029                     <list type="CARD8" name="data8">
1030                         <fieldref>num_items</fieldref>
1031                     </list>
1032                 </bitcase>
1033                 <bitcase>
1034                     <enumref ref="PropertyFormat">16Bits</enumref>
1035                     <list type="CARD16" name="data16">
1036                         <fieldref>num_items</fieldref>
1037                     </list>
1038                 </bitcase>
1039                 <bitcase>
1040                     <enumref ref="PropertyFormat">32Bits</enumref>
1041                     <list type="CARD32" name="data32">
1042                         <fieldref>num_items</fieldref>
1043                     </list>
1044                 </bitcase>
1045             </switch>
1046         </reply>
1047     </request>
1048
1049     <!-- ⋅⋅⋅ Events (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1050     <!-- Notes:
1051          - A 'len' field in a v1++ structure is in bytes.
1052     -->
1053
1054     <event name="DeviceValuator" number="0">
1055         <field type="CARD8"  name="device_id" />
1056         <field type="CARD16" name="device_state" />
1057         <field type="CARD8"  name="num_valuators" />
1058         <field type="CARD8"  name="first_valuator" />
1059         <list type="INT32"   name="valuators">
1060             <value>6</value>
1061         </list>
1062     </event>
1063
1064     <event name="DeviceKeyPress" number="1">
1065         <field type="BYTE"      name="detail" />
1066         <field type="TIMESTAMP" name="time" />
1067         <field type="WINDOW"    name="root" />
1068         <field type="WINDOW"    name="event" />
1069         <field type="WINDOW"    name="child" altenum="Window" />
1070         <field type="INT16"     name="root_x" />
1071         <field type="INT16"     name="root_y" />
1072         <field type="INT16"     name="event_x" />
1073         <field type="INT16"     name="event_y" />
1074         <field type="CARD16"    name="state" />
1075         <field type="BOOL"      name="same_screen" />
1076         <field type="CARD8"     name="device_id" />
1077     </event>
1078
1079     <eventcopy name="DeviceKeyRelease"    number="2" ref="DeviceKeyPress" />
1080     <eventcopy name="DeviceButtonPress"   number="3" ref="DeviceKeyPress" />
1081     <eventcopy name="DeviceButtonRelease" number="4" ref="DeviceKeyPress" />
1082     <eventcopy name="DeviceMotionNotify"  number="5" ref="DeviceKeyPress" />
1083
1084     <event name="DeviceFocusIn" number="6">
1085         <field type="BYTE"      name="detail" enum="NotifyDetail" />
1086         <field type="TIMESTAMP" name="time" />
1087         <field type="WINDOW"    name="window" />
1088         <field type="BYTE"      name="mode" enum="NotifyMode" />
1089         <field type="CARD8"     name="device_id" />
1090         <pad bytes="18" />
1091     </event>
1092
1093     <eventcopy name="DeviceFocusOut" number="7" ref="DeviceFocusIn" />
1094     <eventcopy name="ProximityIn"    number="8" ref="DeviceKeyPress" />
1095     <eventcopy name="ProximityOut"   number="9" ref="DeviceKeyPress" />
1096
1097     <event name="DeviceStateNotify" number="10">
1098         <field type="BYTE"      name="device_id" />
1099         <field type="TIMESTAMP" name="time" />
1100         <field type="CARD8"     name="num_keys" />
1101         <field type="CARD8"     name="num_buttons" />
1102         <field type="CARD8"     name="num_valuators" />
1103         <field type="CARD8"     name="classes_reported" />
1104         <list type="CARD8"      name="buttons">
1105             <value>4</value>
1106         </list>
1107         <list type="CARD8" name="keys">
1108             <value>4</value>
1109         </list>
1110         <list type="CARD32" name="valuators">
1111             <value>3</value>
1112         </list>
1113     </event>
1114
1115     <event name="DeviceMappingNotify" number="11">
1116         <field type="BYTE"    name="device_id" />
1117         <field type="CARD8"   name="request" />
1118         <field type="KeyCode" name="first_keycode" />
1119         <field type="CARD8"   name="count" />
1120         <pad bytes="1" />
1121         <field type="TIMESTAMP" name="time" />
1122         <pad bytes="20" />
1123     </event>
1124
1125     <event name="ChangeDeviceNotify" number="12">
1126         <field type="BYTE"      name="device_id" />
1127         <field type="TIMESTAMP" name="time" />
1128         <field type="CARD8"     name="request" />
1129         <pad bytes="23" />
1130     </event>
1131
1132     <event name="DeviceKeyStateNotify" number="13">
1133         <field type="BYTE" name="device_id" />
1134         <list type="CARD8" name="keys">
1135             <value>28</value>
1136         </list>
1137     </event>
1138
1139     <event name="DeviceButtonStateNotify" number="14">
1140         <field type="BYTE" name="device_id" />
1141         <list type="CARD8" name="buttons">
1142             <value>28</value>
1143         </list>
1144     </event>
1145
1146     <!-- ⋅⋅⋅ Events (v1.4) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1147
1148     <enum name="DeviceChange">
1149         <item name="Added" />
1150         <item name="Removed" />
1151         <item name="Enabled" />
1152         <item name="Disabled" />
1153         <item name="Unrecoverable" />
1154         <item name="ControlChanged" />
1155     </enum>
1156
1157     <event name="DevicePresenceNotify" number="15">
1158         <pad bytes="1" />
1159         <field type="TIMESTAMP" name="time" />
1160         <field type="BYTE"      name="devchange" enum="DeviceChange" />
1161         <field type="BYTE"      name="device_id" />
1162         <field type="CARD16"    name="control" />
1163         <pad bytes="20" />
1164     </event>
1165
1166     <!-- ⋅⋅⋅ Events (v1.5) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1167
1168     <event name="DevicePropertyNotify" number="16">
1169         <field type="BYTE"      name="state" enum="Property" />
1170         <field type="TIMESTAMP" name="time" />
1171         <field type="ATOM"      name="property" />
1172         <pad bytes="19" />
1173         <field type="CARD8"     name="device_id" />
1174     </event>
1175
1176     <!-- ⋅⋅⋅ Errors (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1177
1178     <error name="Device"     number="0" />
1179     <error name="Event"      number="1" />
1180     <error name="Mode"       number="2" />
1181     <error name="DeviceBusy" number="3" />
1182     <error name="Class"      number="4" />
1183
1184 </xcb>