xinput: struct DeviceClass: full support
[free-sw/xcb/proto] / src / xinput.xml
index 09297e5..e9ff19e 100644 (file)
@@ -46,13 +46,7 @@ This will, e.g., be necessary for automatically generated byte-order conversion
 which will, e.g., be necessary for server-side xcb.
 
 This affects the following:
-* GetFeedbackControl reply field "feedbacks" ( structs FeedbackState, ... )
-* ChangeFeedbackControl request field "feedback" ( structs FeedbackCtl, ... )
 * QueryDeviceState reply field "classes" ( structs InputState, ... )
-* GetDeviceControl reply field "control"  ( structs DeviceState, ... )
-* ChangeDeviceControl request field "control" ( structs ChangeDeviceControl, ... )
-* XIChangeHierarchy request field "changes" ( structs  HierarchyChange, ... )
-* struct XIDeviceInfo field "classes" ( structs DeviceClass, ... )
 * SendExtensionEvent member "events"
 
 *****
@@ -68,13 +62,6 @@ This is needed for the following XI2-events ( and eventcopies thereof )
        TouchBegin
        RawTouchBegin
 
-
-*****
-
-<sumof> should support fields of listmembers.
-
-This is needed for request "ListInputDevices"
-
 *****
 
 xml and generator should support
@@ -605,12 +592,56 @@ in struct DeviceTimeCoord.
         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
         <field type="CARD8"  name="feedback_id" />
         <field type="CARD16" name="len" />
-        <list type="CARD8" name="uninterpreted_data">
-            <op op="-">
-                <fieldref>len</fieldref>
-                <value>4</value>
-            </op>
-        </list>
+        <switch name="data">
+            <fieldref>class_id</fieldref>
+            <case name="keyboard">
+                <enumref ref="FeedbackClass">Keyboard</enumref>
+                <field type="CARD16" name="pitch" />
+                <field type="CARD16" name="duration" />
+                <field type="CARD32" name="led_mask" />
+                <field type="CARD32" name="led_values" />
+                <field type="BOOL"   name="global_auto_repeat" />
+                <field type="CARD8"  name="click" />
+                <field type="CARD8"  name="percent" />
+                <pad bytes="1" />
+                <list type="CARD8" name="auto_repeats">
+                    <value>32</value>
+                </list>
+            </case>
+            <case name="pointer">
+                <enumref ref="FeedbackClass">Pointer</enumref>
+                <pad bytes="2" />
+                <field type="CARD16" name="accel_num" />
+                <field type="CARD16" name="accel_denom" />
+                <field type="CARD16" name="threshold" />
+            </case>
+            <case name="string">
+                <enumref ref="FeedbackClass">String</enumref>
+                <field type="CARD16" name="max_symbols" />
+                <field type="CARD16" name="num_keysyms" />
+                <list type="KEYSYM"  name="keysyms">
+                   <fieldref>num_keysyms</fieldref>
+               </list>
+            </case>
+            <case name="integer">
+                <enumref ref="FeedbackClass">Integer</enumref>
+                <field type="CARD32" name="resolution" />
+                <field type="INT32"  name="min_value" />
+                <field type="INT32"  name="max_value" />
+            </case>
+            <case name="led">
+                <enumref ref="FeedbackClass">Led</enumref>
+                <field type="CARD32" name="led_mask" />
+                <field type="CARD32" name="led_values" />
+            </case>
+            <case name="bell">
+                <enumref ref="FeedbackClass">Bell</enumref>
+                <field type="CARD8"  name="percent" />
+                <pad bytes="3" />
+                <field type="CARD16" name="pitch" />
+                <field type="CARD16" name="duration" />
+            </case>
+        </switch>
     </struct>
 
     <request name="GetFeedbackControl" opcode="22">
@@ -692,12 +723,51 @@ in struct DeviceTimeCoord.
         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
         <field type="CARD8"  name="feedback_id" />
         <field type="CARD16" name="len" />
-        <list type="CARD8" name="uninterpreted_data">
-            <op op="-">
-                <fieldref>len</fieldref>
-                <value>4</value>
-            </op>
-        </list>
+        <switch name="data">
+           <fieldref>class_id</fieldref>
+            <case name="keyboard">
+                <enumref ref="FeedbackClass">Keyboard</enumref>
+               <field type="KeyCode" name="key" />
+               <field type="CARD8"   name="auto_repeat_mode" />
+               <field type="INT8"    name="key_click_percent" />
+               <field type="INT8"    name="bell_percent" />
+               <field type="INT16"   name="bell_pitch" />
+               <field type="INT16"   name="bell_duration" />
+               <field type="CARD32"  name="led_mask" />
+               <field type="CARD32"  name="led_values" />
+            </case>
+            <case name="pointer">
+                <enumref ref="FeedbackClass">Pointer</enumref>
+               <pad bytes="2" />
+               <field type="INT16"  name="num" />
+               <field type="INT16"  name="denom" />
+               <field type="INT16"  name="threshold" />
+            </case>
+            <case name="string">
+                <enumref ref="FeedbackClass">String</enumref>
+               <pad bytes="2" />
+               <field type="CARD16" name="num_keysyms" />
+               <list type="KEYSYM"  name="keysyms">
+                   <fieldref>num_keysyms</fieldref>
+               </list>
+            </case>
+            <case name="integer">
+                <enumref ref="FeedbackClass">Integer</enumref>
+               <field type="INT32"  name="int_to_display" />
+            </case>
+            <case name="led">
+                <enumref ref="FeedbackClass">Led</enumref>
+               <field type="CARD32" name="led_mask" />
+               <field type="CARD32" name="led_values" />
+            </case>
+            <case name="bell">
+                <enumref ref="FeedbackClass">Bell</enumref>
+               <field type="INT8"   name="percent" />
+               <pad bytes="3" />
+               <field type="INT16"  name="pitch" />
+               <field type="INT16"  name="duration" />
+            </case>
+       </switch>
     </struct>
 
     <enum name="ChangeFeedbackControlMask">
@@ -1021,12 +1091,53 @@ in struct DeviceTimeCoord.
     <struct name="DeviceState">
         <field type="CARD16" name="control_id" enum="DeviceControl" />
         <field type="CARD16" name="len" />
-        <list type="CARD8" name="uninterpreted_data">
-            <op op="-">
-                <fieldref>len</fieldref>
-                <value>4</value>
-            </op>
-        </list>
+        <switch name="data">
+            <fieldref>control_id</fieldref>
+            <case name="resolution">
+                <enumref ref="DeviceControl">resolution</enumref>
+                <field type="CARD32" name="num_valuators" />
+                <list type="CARD32"  name="resolution_values">
+                    <fieldref>num_valuators</fieldref>
+                </list>
+                <list type="CARD32" name="resolution_min">
+                    <fieldref>num_valuators</fieldref>
+                </list>
+                <list type="CARD32" name="resolution_max">
+                    <fieldref>num_valuators</fieldref>
+                </list>
+            </case>
+            <case name="abs_calib">
+                <enumref ref="DeviceControl">abs_calib</enumref>
+                <field type="INT32"  name="min_x" />
+                <field type="INT32"  name="max_x" />
+                <field type="INT32"  name="min_y" />
+                <field type="INT32"  name="max_y" />
+                <field type="CARD32" name="flip_x" />
+                <field type="CARD32" name="flip_y" />
+                <field type="CARD32" name="rotation" />
+                <field type="CARD32" name="button_threshold" />
+            </case>
+            <case name="core">
+                <enumref ref="DeviceControl">core</enumref>
+                <field type="CARD8"  name="status" />
+                <field type="CARD8"  name="iscore" />
+                <pad bytes="2" />
+            </case>
+            <case name="enable">
+                <enumref ref="DeviceControl">enable</enumref>
+                <field type="CARD8"  name="enable" />
+                <pad bytes="3" />
+            </case>
+            <case name="abs_area">
+                <enumref ref="DeviceControl">abs_area</enumref>
+                <field type="CARD32" name="offset_x" />
+                <field type="CARD32" name="offset_y" />
+                <field type="CARD32" name="width" />
+                <field type="CARD32" name="height" />
+                <field type="CARD32" name="screen" />
+                <field type="CARD32" name="following" />
+            </case>
+        </switch>
     </struct>
 
     <request name="GetDeviceControl" opcode="34">
@@ -1095,12 +1206,48 @@ in struct DeviceTimeCoord.
     <struct name="DeviceCtl">
         <field type="CARD16" name="control_id" enum="DeviceControl" />
         <field type="CARD16" name="len" />
-        <list type="CARD8" name="uninterpreted_data">
-            <op op="-">
-                <fieldref>len</fieldref>
-                <value>4</value>
-            </op>
-        </list>
+        <switch name="data">
+            <fieldref>control_id</fieldref>
+            <case name="resolution">
+                <enumref ref="DeviceControl">resolution</enumref>
+                <field type="CARD8"  name="first_valuator" />
+                <field type="CARD8"  name="num_valuators" />
+                <pad bytes="2" />
+                <list type="CARD32"  name="resolution_values">
+                    <fieldref>num_valuators</fieldref>
+                </list>
+            </case>
+            <case name="abs_calib">
+                <enumref ref="DeviceControl">abs_calib</enumref>
+                <field type="INT32"  name="min_x" />
+                <field type="INT32"  name="max_x" />
+                <field type="INT32"  name="min_y" />
+                <field type="INT32"  name="max_y" />
+                <field type="CARD32" name="flip_x" />
+                <field type="CARD32" name="flip_y" />
+                <field type="CARD32" name="rotation" />
+                <field type="CARD32" name="button_threshold" />
+            </case>
+            <case name="core">
+                <enumref ref="DeviceControl">core</enumref>
+                <field type="CARD8"  name="status" />
+                <pad bytes="3" />
+            </case>
+            <case name="enable">
+                <enumref ref="DeviceControl">enable</enumref>
+                <field type="CARD8"  name="enable" />
+                <pad bytes="3" />
+            </case>
+            <case name="abs_area">
+                <enumref ref="DeviceControl">abs_area</enumref>
+                <field type="CARD32" name="offset_x" />
+                <field type="CARD32" name="offset_y" />
+                <field type="INT32"  name="width" />
+                <field type="INT32"  name="height" />
+                <field type="INT32"  name="screen" />
+                <field type="CARD32" name="following" />
+            </case>
+        </switch>
     </struct>
 
     <request name="ChangeDeviceControl" opcode="35">
@@ -1352,15 +1499,37 @@ in struct DeviceTimeCoord.
     <struct name="HierarchyChange">
         <field type="CARD16" name="type" enum="HierarchyChangeType" />
         <field type="CARD16" name="len" />
-        <list type="CARD8" name="uninterpreted_data">
-            <op op="-">
-                <op op="*">
-                    <fieldref>len</fieldref>
-                    <value>4</value>
-                </op>
-                <value>4</value>
-            </op>
-        </list>
+        <switch name="data">
+            <fieldref>type</fieldref>
+            <case name="add_master">
+                <enumref ref="HierarchyChangeType">AddMaster</enumref>
+                <field type="CARD16" name="name_len" />
+                <field type="BOOL"   name="send_core" />
+                <field type="BOOL"   name="enable" />
+                <list type="char" name="name">
+                    <fieldref>name_len</fieldref>
+                </list>
+                <pad align="4" />
+            </case>
+            <case name="remove_master">
+                <enumref ref="HierarchyChangeType">RemoveMaster</enumref>
+                <field type="DeviceId" name="deviceid" altenum="Device" />
+                <field type="CARD8"    name="return_mode" enum="ChangeMode" />
+                <pad bytes="1" />
+                <field type="DeviceId" name="return_pointer" altenum="Device" />
+                <field type="DeviceId" name="return_keyboard" altenum="Device" />
+            </case>
+            <case name="attach_slave">
+                <enumref ref="HierarchyChangeType">AttachSlave</enumref>
+                <field type="DeviceId" name="deviceid" altenum="Device" />
+                <field type="DeviceId" name="master" altenum="Device" />
+            </case>
+            <case name="detach_slave">
+                <enumref ref="HierarchyChangeType">DetachSlave</enumref>
+                <field type="DeviceId" name="deviceid" altenum="Device" />
+                <pad bytes="2" />
+            </case>
+        </switch>
     </struct>
 
     <request name="XIChangeHierarchy" opcode="43">
@@ -1557,15 +1726,56 @@ in struct DeviceTimeCoord.
         <field type="CARD16"   name="len" />
         <field type="DeviceId" name="sourceid" />
         <pad bytes="2" />
-        <list type="CARD8" name="uninterpreted_data">
-            <op op="-">
-                <op op="*">
-                    <fieldref>len</fieldref>
-                    <value>4</value>
-                </op>
-                <value>8</value>
-            </op>
-        </list>
+       <switch name="data">
+           <fieldref>type</fieldref>
+           <case name="key">
+               <enumref ref="DeviceClassType">Key</enumref>
+               <field type="CARD16"   name="num_keys" />
+               <list type="CARD32" name="keys">
+                   <fieldref>num_keys</fieldref>
+               </list>
+           </case>
+           <case name="button">
+               <enumref ref="DeviceClassType">Button</enumref>
+               <field type="CARD16"   name="num_buttons" />
+               <list type="CARD32"    name="state">
+                   <op op="/">
+                       <op op="+">
+                           <fieldref>num_buttons</fieldref>
+                           <value>31</value>
+                       </op>
+                       <value>32</value>
+                   </op>
+               </list>
+               <list type="ATOM" name="labels">
+                   <fieldref>num_buttons</fieldref>
+               </list>
+           </case>
+           <case name="valuator">
+               <enumref ref="DeviceClassType">Valuator</enumref>
+               <field type="CARD16"   name="number" />
+               <field type="ATOM"     name="label" />
+               <field type="FP3232"   name="min" />
+               <field type="FP3232"   name="max" />
+               <field type="FP3232"   name="value" />
+               <field type="CARD32"   name="resolution" />
+               <field type="CARD8"    name="mode" enum="ValuatorMode" />
+               <pad bytes="3" />
+           </case>
+           <case name="scroll">
+               <enumref ref="DeviceClassType">Scroll</enumref>
+               <field type="CARD16"   name="number" />
+               <field type="CARD16"   name="scroll_type" enum="ScrollType" />
+               <pad bytes="2" />
+               <field type="CARD32"   name="flags" mask="ScrollFlags" />
+               <field type="FP3232"   name="increment" />
+           </case>
+           <case name="touch">
+               <enumref ref="DeviceClassType">Touch</enumref>
+               <field type="CARD8"    name="mode" enum="TouchMode" />
+               <field type="CARD8"    name="num_touches" />
+           </case>
+       </switch>
     </struct>
 
     <struct name="XIDeviceInfo">