Add XML description for XInput extension.
[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 <!-- Spec: http://refspecs.freestandards.org/X11/Xinput.pdf -->
30
31 <xcb header="xinput" extension-xname="XInputExtension" extension-name="Input"
32      major-version="1" minor-version="4">
33     <import>xproto</import>
34
35     <typedef oldname="CARD8" newname="KeyCode" />
36     <typedef oldname="CARD32" newname="EventClass" />
37
38     <enum name="ValuatorMode">
39         <item name="Relative"> <value>0</value></item>
40         <item name="Absolute"> <value>1</value></item>
41     </enum>
42
43     <enum name="PropagateMode">
44         <item name="AddToList"> <value>0</value></item>
45         <item name="DeleteFromList"> <value>1</value></item>
46     </enum>
47
48     <!-- GetExtensionVersion -->
49
50     <request name="GetExtensionVersion" opcode="1">
51         <field type="CARD16" name="name_len" />
52         <pad bytes="2" />
53         <list type="char" name="name">
54             <fieldref>name_len</fieldref>
55         </list>
56         <reply>
57             <pad bytes="1" />
58             <field type="CARD16" name="server_major" />
59             <field type="CARD16" name="server_minor" />
60             <field type="CARD8" name="present" />
61             <pad bytes="19" />
62         </reply>
63     </request>
64
65     <!-- ListInputDevices -->
66
67     <request name="ListInputDevices" opcode="2">
68         <reply>
69             <pad bytes="1" />
70             <field type="CARD8" name="devices_len" />
71             <pad bytes="23" />
72             <list type="DeviceInfo" name="devices">
73                 <fieldref>devices_len</fieldref>
74             </list>
75             <!-- Uninterpreted: list of deviceinfo structs of 3 the subtypes -->
76             <!-- Uninterpreted: list of null-terminated strings -->
77         </reply>
78     </request>
79
80     <struct name="DeviceInfo">
81         <field type="ATOM" name="device_type" />
82         <field type="CARD8" name="device_id" />
83         <field type="CARD8" name="num_class_info" />
84         <field type="CARD8" name="device_use" />
85         <pad bytes="1" />
86     </struct>
87
88     <enum name="DeviceUse">
89         <item name="IsXPointer"><value>0</value></item>
90         <item name="IsXKeyboard"><value>1</value></item>
91         <item name="IsXExtensionDevice"><value>2</value></item>
92         <item name="IsXExtensionKeyboard"><value>3</value></item>
93         <item name="IsXExtensionPointer"><value>4</value></item>
94     </enum>
95
96     <struct name="InputInfo">
97         <field type="CARD8" name="class_id" />
98         <field type="CARD8" name="len" />
99     </struct>
100
101     <struct name="KeyInfo">
102         <field type="CARD8" name="class_id" />
103         <field type="CARD8" name="len" />
104         <field type="KeyCode" name="min_keycode" />
105         <field type="KeyCode" name="max_keycode" />
106         <field type="CARD16" name="num_keys" />
107         <pad bytes="2" />
108     </struct>
109
110     <struct name="ButtonInfo">
111         <field type="CARD8" name="class_id" />
112         <field type="CARD8" name="len" />
113         <field type="CARD16" name="num_buttons" />
114     </struct>
115
116     <struct name="ValuatorInfo">
117         <field type="CARD8" name="class_id" />
118         <field type="CARD8" name="len" />
119         <field type="CARD8" name="axes_len" />
120         <field type="CARD8" name="mode" />
121         <field type="CARD32" name="motion_size" />
122         <list type="AxisInfo" name="axes">
123             <fieldref>axes_len</fieldref>
124         </list>
125     </struct>
126
127     <struct name="AxisInfo">
128         <field type="CARD32" name="resolution" />
129         <field type="CARD32" name="minimum" />
130         <field type="CARD32" name="maximum" />
131     </struct>
132
133     <!-- OpenDevice -->
134
135     <request name="OpenDevice" opcode="3">
136         <field type="CARD8" name="device_id" />
137         <pad bytes="3" />
138         <reply>
139             <pad bytes="1" />
140             <field type="CARD8" name="num_classes" />
141             <pad bytes="23" />
142             <list type="InputClassInfo" name="class_info">
143                 <fieldref>num_classes</fieldref>
144             </list>
145         </reply>
146     </request>
147
148     <struct name="InputClassInfo">
149         <field type="CARD8" name="class_id" />
150         <field type="CARD8" name="event_type_base" />
151     </struct>
152
153     <enum name="InputClass">
154         <item name="Key"><value>0</value></item>
155         <item name="Button"><value>1</value></item>
156         <item name="Valuator"><value>2</value></item>
157         <item name="Feedback"><value>3</value></item>
158         <item name="Proximity"><value>4</value></item>
159         <item name="Focus"><value>5</value></item>
160         <item name="Other"><value>6</value></item>
161     </enum>
162
163     <!-- CloseDevice -->
164
165     <request name="CloseDevice" opcode="4">
166         <field type="CARD8" name="device_id" />
167         <pad bytes="3" />
168     </request>
169
170     <!-- SetDeviceMode -->
171
172     <request name="SetDeviceMode" opcode="5">
173         <field type="CARD8" name="device_id" />
174         <field type="CARD8" name="mode" />
175         <pad bytes="2" />
176         <reply>
177             <pad bytes="1" />
178             <field type="CARD8" name="status" />
179             <pad bytes="23" />
180         </reply>
181     </request>
182
183     <!-- SelectExtensionEvent -->
184
185     <request name="SelectExtensionEvent" opcode="6">
186         <field type="WINDOW" name="window" />
187         <field type="CARD16" name="num_classes" />
188         <pad bytes="2" />
189         <list type="EventClass" name="classes">
190             <fieldref>num_classes</fieldref>
191         </list>
192     </request>
193
194     <!-- GetSelectedExtensionEvents -->
195
196     <request name="GetSelectedExtensionEvents" opcode="7">
197         <field type="WINDOW" name="window" />
198         <reply>
199             <pad bytes="1" />
200             <field type="CARD16" name="num_this_classes" />
201             <field type="CARD16" name="num_all_classes" />
202             <pad bytes="20" />
203             <list type="EventClass" name="this_classes">
204                 <fieldref>num_this_classes</fieldref>
205             </list>
206             <list type="EventClass" name="all_classes">
207                 <fieldref>num_all_classes</fieldref>
208             </list>
209         </reply>
210     </request>
211
212     <!-- ChangeDeviceDontPropagateList -->
213
214     <request name="ChangeDeviceDontPropagateList" opcode="8">
215         <field type="WINDOW" name="window" />
216         <field type="CARD16" name="num_classes" />
217         <field type="CARD8" name="mode" />
218         <pad bytes="1" />
219         <list type="EventClass" name="classes">
220             <fieldref>num_classes</fieldref>
221         </list>
222     </request>
223
224     <!-- GetDeviceDontPropagateList -->
225
226     <request name="GetDeviceDontPropagateList" opcode="9">
227         <field type="WINDOW" name="window" />
228         <reply>
229             <pad bytes="1" />
230             <field type="CARD16" name="num_classes" />
231             <pad bytes="22" />
232             <list type="EventClass" name="classes">
233                 <fieldref>num_classes</fieldref>
234             </list>
235         </reply>
236     </request>
237
238     <!-- GetDeviceMotionEvents -->
239
240     <request name="GetDeviceMotionEvents" opcode="10">
241         <field type="TIMESTAMP" name="start" />
242         <field type="TIMESTAMP" name="stop" />
243         <field type="CARD8" name="device_id" />
244         <reply>
245             <pad bytes="1" />
246             <field type="CARD32" name="num_coords" />
247             <field type="CARD8" name="num_axes" />
248             <field type="CARD8" name="device_mode" />
249             <pad bytes="18" />
250             <!-- Uninterpreted: list of DeviceTimeCoord structures -->
251         </reply>
252     </request>
253
254     <struct name="DeviceTimeCoord">
255         <field type="TIMESTAMP" name="time" />
256         <!-- Uninterpreted: list of CARD16 -->
257     </struct>
258
259     <!-- ChangeKeyboardDevice -->
260     <request name="ChangeKeyboardDevice" opcode="11">
261         <field type="CARD8" name="device_id" />
262         <pad bytes="3" />
263         <reply>
264             <pad bytes="1" />
265             <field type="CARD8" name="status" />
266             <pad bytes="23" />
267         </reply>
268     </request>
269
270     <!-- ChangePointerDevice -->
271
272     <request name="ChangePointerDevice" opcode="12">
273         <field type="CARD8" name="x_axis" />
274         <field type="CARD8" name="y_axis" />
275         <field type="CARD8" name="device_id" />
276         <pad bytes="1" />
277         <reply>
278             <pad bytes="1" />
279             <field type="CARD8" name="status" />
280             <pad bytes="23" />
281         </reply>
282     </request>
283
284     <!-- GrabDevice -->
285
286     <request name="GrabDevice" opcode="13">
287         <field type="WINDOW" name="grab_window" />
288         <field type="TIMESTAMP" name="time" />
289         <field type="CARD16" name="num_classes" />
290         <field type="CARD8" name="this_device_mode" />
291         <field type="CARD8" name="other_device_mode" />
292         <field type="BOOL" name="owner_events" />
293         <field type="CARD8" name="device_id" />
294         <pad bytes="2" />
295         <list type="EventClass" name="classes">
296             <fieldref>num_classes</fieldref>
297         </list>
298         <reply>
299             <pad bytes="1" />
300             <field type="CARD8" name="status" />
301             <pad bytes="23" />
302         </reply>
303     </request>
304
305     <!-- UngrabDevice -->
306
307     <request name="UngrabDevice" opcode="14">
308         <field type="TIMESTAMP" name="time" />
309         <field type="CARD8" name="device_id" />
310     </request>
311
312     <!-- GrabDeviceKey -->
313
314     <request name="GrabDeviceKey" opcode="15">
315         <field type="WINDOW" name="grab_window" />
316         <field type="CARD16" name="num_classes" />
317         <field type="CARD16" name="modifiers" />
318         <field type="CARD8" name="modifier_device" />
319         <field type="CARD8" name="grabbed_device" />
320         <field type="CARD8" name="key" />
321         <field type="CARD8" name="this_device_mode" />
322         <field type="CARD8" name="other_device_mode" />
323         <field type="BOOL" name="owner_events" />
324         <pad bytes="2" />
325         <list type="EventClass" name="classes">
326             <fieldref>num_classes</fieldref>
327         </list>
328     </request>
329
330     <!-- UngrabDeviceKey -->
331
332     <request name="UngrabDeviceKey" opcode="16">
333         <field type="WINDOW" name="grabWindow" />
334         <field type="CARD16" name="modifiers" />
335         <field type="CARD8" name="modifier_device" />
336         <field type="CARD8" name="key" />
337         <field type="CARD8" name="grabbed_device" />
338     </request>
339
340     <!-- GrabDeviceButton -->
341
342     <request name="GrabDeviceButton" opcode="17">
343         <field type="WINDOW" name="grab_window" />
344         <field type="CARD8" name="grabbed_device" />
345         <field type="CARD8" name="modifier_device" />
346         <field type="CARD16" name="num_classes" />
347         <field type="CARD16" name="modifiers" />
348         <field type="CARD8" name="this_device_mode" />
349         <field type="CARD8" name="other_device_mode" />
350         <field type="CARD8" name="button" />
351         <field type="CARD8" name="owner_events" />
352         <pad bytes="2" />
353         <list type="EventClass" name="classes">
354             <fieldref>num_classes</fieldref>
355         </list>
356     </request>
357
358     <!-- UngrabDeviceButton -->
359
360     <request name="UngrabDeviceButton" opcode="18">
361         <field type="WINDOW" name="grab_window" />
362         <field type="CARD16" name="modifiers" />
363         <field type="CARD8" name="modifier_device" />
364         <field type="CARD8" name="button" />
365         <field type="CARD8" name="grabbed_device" />
366     </request>
367
368     <!-- AllowDeviceEvents -->
369
370     <request name="AllowDeviceEvents" opcode="19">
371         <field type="TIMESTAMP" name="time" />
372         <field type="CARD8" name="mode" />
373     <field type="CARD8" name="device_id" />
374     </request>
375
376     <!-- GetDeviceFocus -->
377
378     <request name="GetDeviceFocus" opcode="20">
379         <field type="CARD8" name="device_id" />
380         <pad bytes="3" />
381         <reply>
382             <pad bytes="1" />
383             <field type="WINDOW" name="focus" />
384             <field type="TIMESTAMP" name="time" />
385             <field type="CARD8" name="revert_to" />
386             <pad bytes="15" />
387         </reply>
388     </request>
389
390     <!-- SetDeviceFocus -->
391
392     <request name="SetDeviceFocus" opcode="21">
393         <field type="WINDOW" name="focus" />
394         <field type="TIMESTAMP" name="time" />
395         <field type="CARD8" name="revert_to" />
396         <field type="CARD8" name="device_id" />
397     </request>
398
399     <!-- GetFeedbackControl -->
400
401     <request name="GetFeedbackControl" opcode="22">
402         <field type="CARD8" name="device_id" />
403         <pad bytes="3" />
404         <reply>
405             <pad bytes="1" />
406             <field type="CARD16" name="num_feedback" />
407             <pad bytes="22" />
408             <!-- Uninterpreted: list of FeedbackState structures -->
409         </reply>
410     </request>
411
412     <struct name="FeedbackState">
413         <field type="CARD8" name="class_id" />
414         <field type="CARD8" name="id" />
415         <field type="CARD16" name="len" />
416     </struct>
417     
418     <struct name="KbdFeedbackState">
419         <field type="CARD8" name="class_id" />
420         <field type="CARD8" name="id" />
421         <field type="CARD16" name="len" />
422         <field type="CARD16" name="pitch" />
423         <field type="CARD16" name="duration" />
424         <field type="CARD32" name="led_mask" />
425         <field type="CARD32" name="led_values" />
426         <field type="BOOL" name="global_auto_repeat" />
427         <field type="CARD8" name="click" />
428         <field type="CARD8" name="percent" />
429         <pad bytes="1" />
430         <list type="CARD8" name="auto_repeats"><value>32</value></list>
431     </struct>
432
433     <struct name="PtrFeedbackState">
434         <field type="CARD8" name="class_id" />
435         <field type="CARD8" name="id" />
436         <field type="CARD16" name="len" />
437         <pad bytes="2" />
438         <field type="CARD16" name="accel_num" />
439         <field type="CARD16" name="accel_denom" />
440         <field type="CARD16" name="threshold" />
441     </struct>
442
443     <struct name="IntegerFeedbackState">
444         <field type="CARD8" name="class_id" />
445         <field type="CARD8" name="id" />
446         <field type="CARD16" name="len" />
447         <field type="CARD32" name="resolution" />
448         <field type="INT32" name="min_value" />
449         <field type="INT32" name="max_value" />
450     </struct>
451
452     <struct name="StringFeedbackState">
453         <field type="CARD8" name="class_id" />
454         <field type="CARD8" name="id" />
455         <field type="CARD16" name="len" />
456         <field type="CARD16" name="max_symbols" />
457         <field type="CARD16" name="num_keysyms" />
458         <list type="KEYSYM" name="keysyms">
459             <fieldref>num_keysyms</fieldref>
460         </list>
461     </struct>
462
463     <struct name="BellFeedbackState">
464         <field type="CARD8" name="class_id" />
465         <field type="CARD8" name="id" />
466         <field type="CARD16" name="len" />
467         <field type="CARD8" name="percent" />
468         <pad bytes="3" />
469         <field type="CARD16" name="pitch" />
470         <field type="CARD16" name="duration" />
471     </struct>
472
473     <struct name="LedFeedbackState">
474         <field type="CARD8" name="class_id" />
475         <field type="CARD8" name="id" />
476         <field type="CARD16" name="len" />
477         <field type="CARD32" name="led_mask" />
478         <field type="CARD32" name="led_values" />
479     </struct>
480
481     <!-- ChangeFeedbackControl
482
483     <request name="ChangeFeedbackControl" opcode="23">
484         <field type="CARD32" name="mask" />
485         <field type="CARD8" name="device_id" />
486         <field type="CARD8" name="feedback_id" />
487         Uninterpreted: list of FeedbackCtl structures
488     </request>
489
490     -->
491
492     <struct name="FeedbackCtl">
493         <field type="CARD8" name="class_id" />
494         <field type="CARD8" name="id" />
495         <field type="CARD16" name="len" />
496     </struct>
497
498     <struct name="KbdFeedbackCtl">
499         <field type="CARD8" name="class_id" />
500         <field type="CARD8" name="id" />
501         <field type="CARD16" name="len" />
502         <field type="KeyCode" name="key" />
503         <field type="CARD8" name="auto_repeat_mode" />
504         <field type="INT8" name="key_click_percent" />
505         <field type="INT8" name="bell_percent" />
506         <field type="INT16" name="bell_pitch" />
507         <field type="INT16" name="bell_duration" />
508         <field type="CARD32" name="led_mask" />
509         <field type="CARD32" name="led_values" />
510     </struct>
511
512     <struct name="PtrFeedbackCtl">
513         <field type="CARD8" name="class_id" />
514         <field type="CARD8" name="id" />
515         <field type="CARD16" name="len" />
516         <pad bytes="2" />
517         <field type="INT16" name="num" />
518         <field type="INT16" name="denom" />
519         <field type="INT16" name="threshold" />
520     </struct>
521
522     <struct name="IntegerFeedbackCtl">
523         <field type="CARD8" name="class_id" />
524         <field type="CARD8" name="id" />
525         <field type="CARD16" name="len" />
526         <field type="INT32" name="int_to_display" />
527     </struct>
528
529     <struct name="StringFeedbackCtl">
530         <field type="CARD8" name="class_id" />
531         <field type="CARD8" name="id" />
532         <field type="CARD16" name="len" />
533         <pad bytes="2" />
534         <field type="CARD16" name="num_keysyms" />
535         <list type="KEYSYM" name="keysyms">
536             <fieldref>num_keysyms</fieldref>
537         </list>
538     </struct>
539
540     <struct name="BellFeedbackCtl">
541         <field type="CARD8" name="class_id" />
542         <field type="CARD8" name="id" />
543         <field type="CARD16" name="len" />
544         <field type="INT8" name="percent" />
545         <pad bytes="3" />
546         <field type="INT16" name="pitch" />
547         <field type="INT16" name="duration" />
548     </struct>
549
550     <struct name="LedFeedbackCtl">
551         <field type="CARD8" name="class_id" />
552         <field type="CARD8" name="id" />
553         <field type="CARD16" name="len" />
554         <field type="CARD32" name="led_mask" />
555         <field type="CARD32" name="led_values" />
556     </struct>
557
558     <!-- GetDeviceKeyMapping -->
559
560     <request name="GetDeviceKeyMapping" opcode="24">
561         <field type="CARD8" name="device_id" />
562         <field type="KeyCode" name="first_keycode" />
563         <field type="CARD8" name="count" />
564         <reply>
565             <pad bytes="1" />
566             <field type="CARD8" name="keysyms_per_keycode" />
567             <pad bytes="23" />
568             <list type="KEYSYM" name="keysyms">
569                 <fieldref>length</fieldref>
570             </list>
571         </reply>
572     </request>
573
574     <!-- ChangeDeviceKeyMapping -->
575
576     <request name="ChangeDeviceKeyMapping" opcode="25">
577         <field type="CARD8" name="device_id" />
578         <field type="KeyCode" name="first_keycode" />
579         <field type="CARD8" name="keysyms_per_keycode" />
580         <field type="CARD8" name="keycode_count" />
581         <list type="KEYSYM" name="keysyms">
582             <op op="*">
583                 <fieldref>keycode_count</fieldref>
584                 <fieldref>keysyms_per_keycode</fieldref>
585             </op>
586         </list>
587     </request>
588
589     <!-- GetDeviceModifierMapping -->
590
591     <request name="GetDeviceModifierMapping" opcode="26">
592         <field type="CARD8" name="device_id" />
593         <pad bytes="3" />
594         <reply>
595             <pad bytes="1" />
596             <field type="CARD8" name="keycodes_per_modifier" />
597             <pad bytes="23" />
598             <list type="CARD8" name="keymaps">
599                 <op op="*">
600                     <fieldref>keycodes_per_modifier</fieldref>
601                     <value>8</value>
602                 </op>
603             </list>
604         </reply>
605     </request>
606
607     <!-- SetDeviceModifierMapping -->
608
609     <request name="SetDeviceModifierMapping" opcode="27">
610         <field type="CARD8" name="device_id" />
611         <field type="CARD8" name="keycodes_per_modifier" />
612         <pad bytes="1" />
613         <list type="CARD8" name="keymaps">
614             <op op="*">
615                 <fieldref>keycodes_per_modifier</fieldref>
616                 <value>8</value>
617             </op>
618         </list>
619         <reply>
620             <pad bytes="1" />
621             <field type="CARD8" name="status" />
622             <pad bytes="23" />
623         </reply>
624     </request>
625
626     <!-- GetDeviceButtonMapping -->
627
628     <request name="GetDeviceButtonMapping" opcode="28">
629         <field type="CARD8" name="device_id" />
630         <pad bytes="3" />
631         <reply>
632             <pad bytes="1" />
633             <field type="CARD8" name="map_size" />
634             <pad bytes="23" />
635             <list type="CARD8" name="map">
636                 <fieldref>map_size</fieldref>
637             </list>
638         </reply>
639     </request>
640
641     <!-- SetDeviceButtonMapping -->
642
643     <request name="SetDeviceButtonMapping" opcode="29">
644         <field type="CARD8" name="device_id" />
645         <field type="CARD8" name="map_size" />
646         <pad bytes="2" />
647         <list type="CARD8" name="map">
648             <fieldref>map_size</fieldref>
649         </list>
650         <reply>
651             <pad bytes="1" />
652             <field type="CARD8" name="status" />
653             <pad bytes="23" />
654         </reply>
655     </request>
656
657     <!-- QueryDeviceState -->
658
659     <request name="QueryDeviceState" opcode="30">
660         <field type="CARD8" name="device_id" />
661         <pad bytes="3" />
662         <reply>
663             <pad bytes="1" />
664             <field type="CARD8" name="num_classes" />
665             <pad bytes="23" />
666             <!-- Uninterpreted: list of InputState structures -->
667         </reply>
668     </request>
669
670     <struct name="InputState">
671         <field type="CARD8" name="class_id" />
672         <field type="CARD8" name="len" />
673         <field type="CARD8" name="num_items" />
674     </struct>
675
676     <struct name="KeyState">
677         <field type="CARD8" name="class_id" />
678         <field type="CARD8" name="len" />
679         <field type="CARD8" name="num_keys" />
680         <pad bytes="1" />
681         <list type="CARD8" name="keys">
682             <value>32</value>
683         </list>
684     </struct>
685
686     <struct name="ButtonState">
687         <field type="CARD8" name="class_id" />
688         <field type="CARD8" name="len" />
689         <field type="CARD8" name="num_buttons" />
690         <pad bytes="1" />
691         <list type="CARD8" name="buttons">
692             <value>32</value>
693         </list>
694     </struct>
695
696     <struct name="ValuatorState">
697         <field type="CARD8" name="class_id" />
698         <field type="CARD8" name="len" />
699         <field type="CARD8" name="num_valuators" />
700         <field type="CARD8" name="mode" />
701         <list type="CARD32" name="valuators">
702             <fieldref>num_valuators</fieldref>
703         </list>
704     </struct>
705
706     <!-- SendExtensionEvent -->
707
708     <request name="SendExtensionEvent" opcode="31">
709         <field type="WINDOW" name="destination" />
710         <field type="CARD8" name="device_id" />
711         <field type="BOOL" name="propagate" />
712         <field type="CARD16" name="num_classes" />
713         <field type="CARD8" name="num_events" />
714         <pad bytes="3" />
715         <list type="char" name="events">
716             <op op="*">
717                 <fieldref>num_events</fieldref>
718                 <value>32</value>
719             </op>
720         </list>
721         <list type="EventClass" name="classes">
722             <fieldref>num_classes</fieldref>
723         </list>
724     </request>
725
726     <!-- DeviceBell -->
727
728     <request name="DeviceBell" opcode="32">
729         <field type="CARD8" name="device_id" />
730         <field type="CARD8" name="feedback_id" />
731         <field type="CARD8" name="feedback_class" />
732         <field type="INT8" name="percent" />
733     </request>
734
735     <!-- SetDeviceValuators -->
736
737     <request name="SetDeviceValuators" opcode="33">
738         <field type="CARD8" name="device_id" />
739         <field type="CARD8" name="first_valuator" />
740         <field type="CARD8" name="num_valuators" />
741         <pad bytes="1" />
742         <list type="INT32" name="valuators">
743             <fieldref>num_valuators</fieldref>
744         </list>
745         <reply>
746             <pad bytes="1" />
747             <field type="CARD8" name="status" />
748             <pad bytes="23" />
749         </reply>
750     </request>
751
752     <!-- GetDeviceControl -->
753
754     <request name="GetDeviceControl" opcode="34">
755         <field type="CARD16" name="control_id" />
756         <field type="CARD8" name="device_id" />
757         <pad bytes="1" />
758         <reply>
759             <pad bytes="1" />
760             <field type="CARD8" name="status" />
761             <pad bytes="23" />
762             <!-- Uninterpreted: list of DeviceState structures -->
763         </reply>
764     </request>
765
766     <struct name="DeviceState">
767         <field type="CARD16" name="control_id" />
768         <field type="CARD16" name="len" />
769     </struct>
770
771     <struct name="DeviceResolutionState">
772         <field type="CARD16" name="control_id" />
773         <field type="CARD16" name="len" />
774         <field type="CARD32" name="num_valuators" />
775         <list type="CARD32" name="resolution_values">
776             <fieldref>num_valuators</fieldref>
777         </list>
778         <list type="CARD32" name="resolution_min">
779             <fieldref>num_valuators</fieldref>
780         </list>
781         <list type="CARD32" name="resolution_max">
782             <fieldref>num_valuators</fieldref>
783         </list>
784     </struct>
785
786     <struct name="DeviceAbsCalibState">
787         <field type="CARD16" name="control_id" />
788         <field type="CARD16" name="len" />
789         <field type="INT32" name="min_x" />
790         <field type="INT32" name="max_x" />
791         <field type="INT32" name="min_y" />
792         <field type="INT32" name="max_y" />
793         <field type="CARD32" name="flip_x" />
794         <field type="CARD32" name="flip_y" />
795         <field type="CARD32" name="rotation" />
796         <field type="CARD32" name="button_threshold" />
797     </struct>
798
799     <struct name="DeviceAbsAreaState">
800         <field type="CARD16" name="control_id" />
801         <field type="CARD16" name="len" />
802         <field type="CARD32" name="offset_x" />
803         <field type="CARD32" name="offset_y" />
804         <field type="CARD32" name="width" />
805         <field type="CARD32" name="height" />
806         <field type="CARD32" name="screen" />
807         <field type="CARD32" name="following" />
808     </struct>
809
810     <struct name="DeviceCoreState">
811         <field type="CARD16" name="control_id" />
812         <field type="CARD16" name="len" />
813         <field type="CARD8" name="status" />
814         <field type="CARD8" name="iscore" />
815         <pad bytes="2" />
816     </struct>
817
818     <struct name="DeviceEnableState">
819         <field type="CARD16" name="control_id" />
820         <field type="CARD16" name="len" />
821         <field type="CARD8" name="enable" />
822         <pad bytes="3" />
823     </struct>
824
825     <!-- ChangeDeviceControl
826
827     <request name="ChangeDeviceControl" opcode="35">
828         <field type="CARD16" name="control_id" />
829         <field type="CARD8" name="device_id" />
830         <pad bytes="1" />
831         Uninterpreted: list of DeviceCtl structures
832         <reply>
833             <pad byte="1" />
834             <field type="CARD8" name="status" />
835             <pad bytes="23" />
836         </reply>
837     </request>
838
839     -->
840
841     <struct name="DeviceCtl">
842         <field type="CARD16" name="control_id" />
843         <field type="CARD16" name="len" />
844     </struct>
845
846     <struct name="DeviceResolutionCtl">
847         <field type="CARD16" name="control_id" />
848         <field type="CARD16" name="len" />
849         <field type="CARD8" name="first_valuator" />
850         <field type="CARD8" name="num_valuators" />
851         <list type="CARD32" name="resolution_values">
852             <fieldref>num_valuators</fieldref>
853         </list>
854         <pad bytes="2" />
855     </struct>
856
857     <struct name="DeviceAbsCalibCtl">
858         <field type="CARD16" name="control_id" />
859         <field type="CARD16" name="len" />
860         <field type="INT32" name="min_x" />
861         <field type="INT32" name="max_x" />
862         <field type="INT32" name="min_y" />
863         <field type="INT32" name="max_y" />
864         <field type="CARD32" name="flip_x" />
865         <field type="CARD32" name="flip_y" />
866         <field type="CARD32" name="rotation" />
867         <field type="CARD32" name="button_threshold" />
868     </struct>
869
870     <struct name="DeviceAbsAreaCtrl">
871         <field type="CARD16" name="control_id" />
872         <field type="CARD16" name="len" />
873         <field type="CARD32" name="offset_x" />
874         <field type="CARD32" name="offset_y" />
875         <field type="INT32" name="width" />
876         <field type="INT32" name="height" />
877         <field type="INT32" name="screen" />
878         <field type="CARD32" name="following" />
879     </struct>
880
881     <struct name="DeviceCoreCtrl">
882         <field type="CARD16" name="control_id" />
883         <field type="CARD16" name="len" />
884         <field type="CARD8" name="status" />
885         <pad bytes="3" />
886     </struct>
887
888     <struct name="DeviceEnableCtrl">
889         <field type="CARD16" name="control_id" />
890         <field type="CARD16" name="len" />
891         <field type="CARD8" name="enable" />
892         <pad bytes="3" />
893     </struct>
894
895     <!-- EVENTS --> 
896
897     <event name="DeviceValuator" number="0">
898         <field type="CARD8" name="device_id" />
899         <field type="CARD16" name="device_state" />
900         <field type="CARD8" name="num_valuators" />
901         <field type="CARD8" name="first_valuator" />
902         <list type="INT32" name="valuators"><value>6</value></list>
903     </event>
904
905     <event name="DeviceKeyPress" number="1">
906         <field type="BYTE" name="detail" />
907         <field type="TIMESTAMP" name="time" />
908         <field type="WINDOW" name="root" />
909         <field type="WINDOW" name="event" />
910         <field type="WINDOW" name="child" />
911         <field type="INT16" name="root_x" />
912         <field type="INT16" name="root_y" />
913         <field type="INT16" name="event_x" />
914         <field type="INT16" name="event_y" />
915         <field type="CARD16" name="state" />
916         <field type="BOOL" name="same_screen" />
917         <field type="CARD8" name="device_id" />
918     </event>
919
920     <eventcopy name="DeviceKeyRelease" number="2" ref="DeviceKeyPress" />
921     <eventcopy name="DeviceButtonPress" number="3" ref="DeviceKeyPress" />
922     <eventcopy name="DeviceButtonRelease" number="4" ref="DeviceKeyPress" />
923     <eventcopy name="DeviceMotionNotify" number="5" ref="DeviceKeyPress" />
924     <eventcopy name="ProximityIn" number="8" ref="DeviceKeyPress" />
925     <eventcopy name="ProximityOut" number="9" ref="DeviceKeyPress" />
926
927     <event name="FocusIn" number="6">
928         <field type="BYTE" name="detail" />
929         <field type="TIMESTAMP" name="time" />
930         <field type="WINDOW" name="window" />
931         <field type="BYTE" name="mode" />
932         <field type="CARD8" name="device_id" />
933         <pad bytes="18" />
934     </event>
935
936     <eventcopy name="FocusOut" number="7" ref="DeviceKeyPress" />
937
938     <event name="DeviceStateNotify" number="10">
939         <field type="BYTE" name="device_id" />
940         <field type="TIMESTAMP" name="time" />
941         <field type="CARD8" name="num_keys" />
942         <field type="CARD8" name="num_buttons" />
943         <field type="CARD8" name="num_valuators" />
944         <field type="CARD8" name="classes_reported" />
945         <list type="CARD8" name="buttons">
946             <value>4</value>
947         </list>
948         <list type="CARD8" name="keys">
949             <value>4</value>
950         </list>
951         <list type="CARD32" name="valuators">
952             <value>3</value>
953         </list>
954     </event>
955
956     <event name="DeviceMappingNotify" number="11">
957         <field type="BYTE" name="device_id" />
958         <field type="CARD8" name="request" />
959         <field type="KeyCode" name="first_keycode" />
960         <field type="CARD8" name="count" />
961         <pad bytes="1" />
962         <field type="TIMESTAMP" name="time" />
963         <pad bytes="20" />
964     </event>
965
966     <event name="ChangeDeviceNotify" number="12">
967         <field type="BYTE" name="device_id" />
968         <field type="TIMESTAMP" name="time" />
969         <field type="CARD8" name="request" />
970         <pad bytes="23" />
971     </event>
972
973     <event name="DeviceKeyStateNotify" number="13">
974         <field type="BYTE" name="device_id" />
975         <list type="CARD8" name="keys">
976             <value>28</value>
977         </list>
978     </event>
979
980     <event name="DeviceButtonStateNotify" number="14">
981         <field type="BYTE" name="device_id" />
982         <list type="CARD8" name="buttons">
983             <value>28</value>
984         </list>
985     </event>
986
987     <event name="DevicePresenceNotify" number="15">
988         <pad bytes="1" />
989         <field type="TIMESTAMP" name="time" />
990         <field type="BYTE" name="devchange" />
991         <field type="BYTE" name="device_id" />
992         <field type="CARD16" name="control" />
993         <pad bytes="20" />
994     </event>
995 </xcb>