http://cgit.freedesktop.org/xorg/proto/inputproto/tree/specs/XI2proto.txt
-->
+<!-- TODO: Things which need to be done for full XInput support
+ but cannot be done now ( August 18, 2014 ) with the current feature-set
+ of the xml and the generator:
+
+*****
+
+replace "uninterpreted_data" or similar constructs
+with a semantic that shows how to interpret this data.
+This requires enhancements to the xml-schema and generator such as union with selector.
+
+This will, e.g., be necessary for automatically generated byte-order conversion code,
+which will, e.g., be necessary for server-side xcb.
+
+This affects the following:
+* SendExtensionEvent member "events"
+
+*****
+
+Parametrized structs
+
+This is needed for being able to use the value of the field
+"num_axes" of the GetDeviceMotionEvents-reply
+in struct DeviceTimeCoord.
+
+*****
+
+-->
+
+
<xcb header="xinput" extension-xname="XInputExtension" extension-name="Input"
major-version="2" minor-version="3">
<import>xfixes</import>
<fieldref>name_len</fieldref>
</list>
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD16" name="server_major" />
<field type="CARD16" name="server_minor" />
<field type="BOOL" name="present" />
<item name="Proximity"> <value>4</value> </item>
<item name="Focus"> <value>5</value> </item>
<item name="Other"> <value>6</value> </item>
+ <!--
+ value Attach=7 is still contained in XI.h as "#define AttachClass"
+ but it was never transmitted over the protocol.
+ (It was used to tag a fake class created by libXi).
+
+ Even the creation of that fake class has been dropped
+ from libXi in 2009 by the following change:
+ http://cgit.freedesktop.org/xorg/lib/libXi/commit/?id=62858c426e6de1b99df660251737233afd335302
+
+ <item name="Attach"> <value>7</value> </item>
+ -->
</enum>
<enum name="ValuatorMode">
<struct name="InputInfo">
<field type="CARD8" name="class_id" enum="InputClass" />
<field type="CARD8" name="len" />
+ <switch name="info">
+ <fieldref>class_id</fieldref>
+ <case name="key">
+ <enumref ref="InputClass">Key</enumref>
+ <field type="KeyCode" name="min_keycode" />
+ <field type="KeyCode" name="max_keycode" />
+ <field type="CARD16" name="num_keys" />
+ <pad bytes="2" />
+ </case>
+ <case name="button">
+ <enumref ref="InputClass">Button</enumref>
+ <field type="CARD16" name="num_buttons" />
+ </case>
+ <case name="valuator">
+ <enumref ref="InputClass">Valuator</enumref>
+ <field type="CARD8" name="axes_len" />
+ <field type="CARD8" name="mode" enum="ValuatorMode" />
+ <field type="CARD32" name="motion_size" />
+ <list type="AxisInfo" name="axes">
+ <fieldref>axes_len</fieldref>
+ </list>
+ </case>
+ </switch>
</struct>
<struct name="DeviceName">
<request name="ListInputDevices" opcode="2">
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="devices_len" />
<pad bytes="23" />
<list type="DeviceInfo" name="devices">
<fieldref>devices_len</fieldref>
</list>
- <!-- Uninterpreted: list (infos) of InputInfo structures,
- length is <sumof> all devices.num_class_info -->
- <!-- Uninterpreted: list (name) of DeviceName structures -->
+ <list type="InputInfo" name="infos">
+ <sumof ref="devices">
+ <fieldref>num_class_info</fieldref>
+ </sumof>
+ </list>
+ <list type="STR" name="names">
+ <fieldref>devices_len</fieldref>
+ </list>
+ <pad align="4" />
</reply>
</request>
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="num_classes" />
<pad bytes="23" />
<list type="InputClassInfo" name="class_info">
<fieldref>num_classes</fieldref>
</list>
+ <pad align="4" />
</reply>
</request>
<field type="CARD8" name="mode" enum="ValuatorMode" />
<pad bytes="2" />
<reply>
- <pad bytes="1" />
- <field type="CARD8" name="status" altenum="GrabStatus" />
+ <field type="CARD8" name="xi_reply_type" />
+ <!-- values for status: 0: Success, 1: AlreadyGrabbed -->
+ <field type="CARD8" name="status" enum="GrabStatus" />
<pad bytes="23" />
</reply>
</request>
<request name="GetSelectedExtensionEvents" opcode="7">
<field type="WINDOW" name="window" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD16" name="num_this_classes" />
<field type="CARD16" name="num_all_classes" />
<pad bytes="20" />
<request name="GetDeviceDontPropagateList" opcode="9">
<field type="WINDOW" name="window" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD16" name="num_classes" />
<pad bytes="22" />
<list type="EventClass" name="classes">
<struct name="DeviceTimeCoord">
<field type="TIMESTAMP" name="time" />
- <!-- Uninterpreted: list (axisvalues) of CARD32,
+ <!-- Uninterpreted: list (axisvalues) of INT32,
length is num_axes from GetDeviceMotionEvents -->
</struct>
<field type="TIMESTAMP" name="start" />
<field type="TIMESTAMP" name="stop" altenum="Time" />
<field type="CARD8" name="device_id" />
+ <pad bytes="3"/>
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD32" name="num_events" />
<field type="CARD8" name="num_axes" />
<field type="CARD8" name="device_mode" enum="ValuatorMode" />
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
- <field type="CARD8" name="status" altenum="GrabStatus" />
+ <field type="CARD8" name="xi_reply_type" />
+ <!-- only the following GrabStatus-values are valid here:
+ "Success", "AlreadyGrabbed", and "Frozen"
+ -->
+ <field type="CARD8" name="status" enum="GrabStatus" />
<pad bytes="23" />
</reply>
</request>
<field type="CARD8" name="device_id" />
<pad bytes="1" />
<reply>
- <pad bytes="1" />
- <field type="CARD8" name="status" altenum="GrabStatus" />
+ <field type="CARD8" name="xi_reply_type" />
+ <!-- only the following GrabStatus-values are valid here:
+ "Success", "AlreadyGrabbed", and "Frozen"
+ -->
+ <field type="CARD8" name="status" enum="GrabStatus" />
<pad bytes="23" />
</reply>
</request>
<fieldref>num_classes</fieldref>
</list>
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="status" enum="GrabStatus" />
<pad bytes="23" />
</reply>
<request name="UngrabDevice" opcode="14">
<field type="TIMESTAMP" name="time" altenum="Time" />
<field type="CARD8" name="device_id" />
+ <pad bytes="3" />
</request>
<!-- GrabDeviceKey -->
+ <enum name="ModifierDevice">
+ <item name="UseXKeyboard"><value>255</value></item> <!-- 0xff -->
+ </enum>
+
<request name="GrabDeviceKey" opcode="15">
<field type="WINDOW" name="grab_window" />
<field type="CARD16" name="num_classes" />
<field type="CARD16" name="modifiers" mask="ModMask" />
- <field type="CARD8" name="modifier_device" />
+ <field type="CARD8" name="modifier_device" altenum="ModifierDevice" />
<field type="CARD8" name="grabbed_device" />
<field type="CARD8" name="key" altenum="Grab" />
<field type="CARD8" name="this_device_mode" enum="GrabMode" />
<request name="UngrabDeviceKey" opcode="16">
<field type="WINDOW" name="grabWindow" />
<field type="CARD16" name="modifiers" mask="ModMask" />
- <field type="CARD8" name="modifier_device" />
+ <field type="CARD8" name="modifier_device" altenum="ModifierDevice" />
<field type="CARD8" name="key" altenum="Grab" />
<field type="CARD8" name="grabbed_device" />
</request>
<request name="GrabDeviceButton" opcode="17">
<field type="WINDOW" name="grab_window" />
<field type="CARD8" name="grabbed_device" />
- <field type="CARD8" name="modifier_device" />
+ <field type="CARD8" name="modifier_device" altenum="ModifierDevice" />
<field type="CARD16" name="num_classes" />
<field type="CARD16" name="modifiers" mask="ModMask" />
<field type="CARD8" name="this_device_mode" enum="GrabMode" />
<field type="CARD8" name="other_device_mode" enum="GrabMode" />
<field type="CARD8" name="button" altenum="Grab" />
- <field type="CARD8" name="owner_events" />
+ <field type="BOOL" name="owner_events" />
<pad bytes="2" />
<list type="EventClass" name="classes">
<fieldref>num_classes</fieldref>
<request name="UngrabDeviceButton" opcode="18">
<field type="WINDOW" name="grab_window" />
<field type="CARD16" name="modifiers" mask="ModMask" />
- <field type="CARD8" name="modifier_device" />
+ <field type="CARD8" name="modifier_device" altenum="ModifierDevice" />
<field type="CARD8" name="button" altenum="Grab" />
<field type="CARD8" name="grabbed_device" />
+ <pad bytes="3" />
</request>
<!-- AllowDeviceEvents -->
<field type="TIMESTAMP" name="time" altenum="Time" />
<field type="CARD8" name="mode" enum="DeviceInputMode" />
<field type="CARD8" name="device_id" />
+ <pad bytes="2" />
</request>
<!-- GetDeviceFocus -->
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="WINDOW" name="focus" altenum="InputFocus" />
<field type="TIMESTAMP" name="time" />
<field type="CARD8" name="revert_to" enum="InputFocus" />
<field type="TIMESTAMP" name="time" altenum="Time" />
<field type="CARD8" name="revert_to" enum="InputFocus" />
<field type="CARD8" name="device_id" />
+ <pad bytes="2" />
</request>
<!-- GetFeedbackControl -->
<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">
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD16" name="num_feedbacks" />
<pad bytes="22" />
<list type="FeedbackState" name="feedbacks">
<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">
+ <item name="KeyClickPercent"> <bit>0</bit> </item> <!-- 0x01 -->
+ <item name="Percent"> <bit>1</bit> </item> <!-- 0x02 -->
+ <item name="Pitch"> <bit>2</bit> </item> <!-- 0x04 -->
+ <item name="Duration"> <bit>3</bit> </item> <!-- 0x08 -->
+ <item name="Led"> <bit>4</bit> </item> <!-- 0x10 -->
+ <item name="LedMode"> <bit>5</bit> </item> <!-- 0x20 -->
+ <item name="Key"> <bit>6</bit> </item> <!-- 0x40 -->
+ <item name="AutoRepeatMode"> <bit>7</bit> </item> <!-- 0x80 -->
+ <item name="String"> <bit>0</bit> </item> <!-- 0x01 -->
+ <item name="Integer"> <bit>0</bit> </item> <!-- 0x01 -->
+ <item name="AccelNum"> <bit>0</bit> </item> <!-- 0x01 -->
+ <item name="AccelDenom"> <bit>1</bit> </item> <!-- 0x02 -->
+ <item name="Threshold"> <bit>2</bit> </item> <!-- 0x04 -->
+ </enum>
+
<request name="ChangeFeedbackControl" opcode="23">
- <field type="CARD32" name="mask" />
+ <field type="CARD32" name="mask" mask="ChangeFeedbackControlMask" />
<field type="CARD8" name="device_id" />
<field type="CARD8" name="feedback_id" />
+ <pad bytes="2" />
<field type="FeedbackCtl" name="feedback" />
</request>
<field type="CARD8" name="device_id" />
<field type="KeyCode" name="first_keycode" />
<field type="CARD8" name="count" />
+ <pad bytes="1" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="keysyms_per_keycode" />
<pad bytes="23" />
<list type="KEYSYM" name="keysyms">
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="keycodes_per_modifier" />
<pad bytes="23" />
<list type="CARD8" name="keymaps">
<request name="SetDeviceModifierMapping" opcode="27">
<field type="CARD8" name="device_id" />
<field type="CARD8" name="keycodes_per_modifier" />
- <pad bytes="1" />
+ <pad bytes="2" />
<list type="CARD8" name="keymaps">
<op op="*">
<fieldref>keycodes_per_modifier</fieldref>
</op>
</list>
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="status" enum="MappingStatus" />
<pad bytes="23" />
</reply>
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="map_size" />
<pad bytes="23" />
<list type="CARD8" name="map">
<fieldref>map_size</fieldref>
</list>
+ <pad align="4" />
</reply>
</request>
<fieldref>map_size</fieldref>
</list>
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="status" enum="MappingStatus" />
<pad bytes="23" />
</reply>
</list>
</struct>
+ <enum name="ValuatorStateModeMask">
+ <item name="DeviceModeAbsolute"> <bit>0</bit> </item>
+ <item name="OutOfProximity"> <bit>1</bit> </item>
+ </enum>
+
<struct name="ValuatorState">
<field type="CARD8" name="class_id" enum="InputClass" />
<field type="CARD8" name="len" />
<field type="CARD8" name="num_valuators" />
- <field type="CARD8" name="mode" />
- <list type="CARD32" name="valuators">
+ <field type="CARD8" name="mode" mask="ValuatorStateModeMask" />
+ <list type="INT32" name="valuators">
<fieldref>num_valuators</fieldref>
</list>
</struct>
<struct name="InputState">
<field type="CARD8" name="class_id" enum="InputClass" />
<field type="CARD8" name="len" />
- <field type="CARD8" name="num_items" />
- <pad bytes="1" />
- <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="key">
+ <enumref ref="InputClass">Key</enumref>
+ <field type="CARD8" name="num_keys" />
+ <pad bytes="1" />
+ <list type="CARD8" name="keys">
+ <value>32</value>
+ </list>
+ </case>
+ <case name="button">
+ <enumref ref="InputClass">Button</enumref>
+ <field type="CARD8" name="num_buttons" />
+ <pad bytes="1" />
+ <list type="CARD8" name="buttons">
+ <value>32</value>
+ </list>
+ </case>
+ <case name="valuator">
+ <enumref ref="InputClass">Valuator</enumref>
+ <field type="CARD8" name="num_valuators" />
+ <field type="CARD8" name="mode" mask="ValuatorStateModeMask" />
+ <list type="INT32" name="valuators">
+ <fieldref>num_valuators</fieldref>
+ </list>
+ </case>
+ </switch>
</struct>
<request name="QueryDeviceState" opcode="30">
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="num_classes" />
<pad bytes="23" />
<list type="InputState" name="classes">
<fieldref>num_valuators</fieldref>
</list>
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="status" enum="GrabStatus" />
<pad bytes="23" />
</reply>
<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">
<field type="CARD8" name="device_id" />
<pad bytes="1" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="status" altenum="GrabStatus" />
<pad bytes="23" />
<field type="DeviceState" name="control" />
<field type="CARD16" name="len" />
<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>
<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">
<pad bytes="1" />
<field type="DeviceCtl" name="control" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD8" name="status" altenum="GrabStatus" />
<pad bytes="23" />
</reply>
<field type="CARD8" name="device_id" />
<pad bytes="3" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="CARD16" name="num_atoms" />
<pad bytes="22" />
<list type="ATOM" name="atoms">
<!-- ChangeDeviceProperty -->
<enum name="PropertyFormat">
- <item name="8Bits"> <value> 8</value> </item>
+ <item name="8Bits"> <value>8</value> </item>
<item name="16Bits"> <value>16</value> </item>
<item name="32Bits"> <value>32</value> </item>
</enum>
<field type="CARD32" name="num_items" />
<switch name="items">
<fieldref>format</fieldref>
- <!-- <bitcase> is not correct, this would need <cases>s.
- It works in that case, because PropertyFormat items can be
- distinguished exactly as their values don't have equal bits.
- -->
- <bitcase>
+ <case>
<enumref ref="PropertyFormat">8Bits</enumref>
<list type="CARD8" name="data8">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
- <bitcase>
+ <pad align="4" />
+ </case>
+ <case>
<enumref ref="PropertyFormat">16Bits</enumref>
<list type="CARD16" name="data16">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
- <bitcase>
+ <pad align="4" />
+ </case>
+ <case>
<enumref ref="PropertyFormat">32Bits</enumref>
<list type="CARD32" name="data32">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
+ </case>
</switch>
</request>
<field type="BOOL" name="delete" />
<pad bytes="2" />
<reply>
- <pad bytes="1" />
+ <field type="CARD8" name="xi_reply_type" />
<field type="ATOM" name="type" />
<field type="CARD32" name="bytes_after" />
<field type="CARD32" name="num_items" />
<pad bytes="10" />
<switch name="items">
<fieldref>format</fieldref>
- <!-- <bitcase> is not correct, this would need <cases>s.
- It works in that case, because PropertyFormat items can be
- distinguished exactly as their values don't have equal bits.
- -->
- <bitcase>
+ <case>
<enumref ref="PropertyFormat">8Bits</enumref>
<list type="CARD8" name="data8">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
- <bitcase>
+ <pad align="4" />
+ </case>
+ <case>
<enumref ref="PropertyFormat">16Bits</enumref>
<list type="CARD16" name="data16">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
- <bitcase>
+ <pad align="4" />
+ </case>
+ <case>
<enumref ref="PropertyFormat">32Bits</enumref>
<list type="CARD32" name="data32">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
+ </case>
</switch>
</reply>
</request>
<field type="FP1616" name="root_y" />
<field type="FP1616" name="win_x" />
<field type="FP1616" name="win_y" />
- <field type="CARD8" name="same_screen" />
+ <field type="BOOL" name="same_screen" />
<pad bytes="1" />
<field type="CARD16" name="buttons_len" />
<field type="ModifierInfo" name="mods" />
<field type="CARD16" name="type" enum="HierarchyChangeType" />
<field type="CARD16" name="len" />
<field type="CARD16" name="name_len" />
- <field type="CARD8" name="send_core" />
- <field type="CARD8" name="enable" />
+ <field type="BOOL" name="send_core" />
+ <field type="BOOL" name="enable" />
<list type="char" name="name">
<fieldref>name_len</fieldref>
</list>
+ <pad align="4" />
</struct>
<struct name="RemoveMaster">
<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">
<field type="CARD8" name="num_changes" />
+ <pad bytes="3" />
<list type="HierarchyChange" name="changes">
<fieldref>num_changes</fieldref>
</list>
<!-- XISelectEvents -->
+ <enum name="XIEventMask">
+ <item name="DeviceChanged"> <bit>1</bit> </item>
+ <item name="KeyPress"> <bit>2</bit> </item>
+ <item name="KeyRelease"> <bit>3</bit> </item>
+ <item name="ButtonPress"> <bit>4</bit> </item>
+ <item name="ButtonRelease"> <bit>5</bit> </item>
+ <item name="Motion"> <bit>6</bit> </item>
+ <item name="Enter"> <bit>7</bit> </item>
+ <item name="Leave"> <bit>8</bit> </item>
+ <item name="FocusIn"> <bit>9</bit> </item>
+ <item name="FocusOut"> <bit>10</bit> </item>
+ <item name="Hierarchy"> <bit>11</bit> </item>
+ <item name="Property"> <bit>12</bit> </item>
+ <!-- ⋅⋅⋅ Events (v2.1) ⋅⋅⋅ -->
+ <item name="RawKeyPress"> <bit>13</bit> </item>
+ <item name="RawKeyRelease"> <bit>14</bit> </item>
+ <item name="RawButtonPress"> <bit>15</bit> </item>
+ <item name="RawButtonRelease"> <bit>16</bit> </item>
+ <item name="RawMotion"> <bit>17</bit> </item>
+ <!-- ⋅⋅⋅ Events (v2.2) ⋅⋅⋅ -->
+ <item name="TouchBegin"> <bit>18</bit> </item>
+ <item name="TouchUpdate"> <bit>19</bit> </item>
+ <item name="TouchEnd"> <bit>20</bit> </item>
+ <item name="TouchOwnership"> <bit>21</bit> </item>
+ <item name="RawTouchBegin"> <bit>22</bit> </item>
+ <item name="RawTouchUpdate"> <bit>23</bit> </item>
+ <item name="RawTouchEnd"> <bit>24</bit> </item>
+ <!-- ⋅⋅⋅ Events (v2.3) ⋅⋅⋅ -->
+ <item name="BarrierHit"> <bit>25</bit> </item>
+ <item name="BarrierLeave"> <bit>26</bit> </item>
+ </enum>
+
<struct name="EventMask">
<field type="DeviceId" name="deviceid" altenum="Device" />
<field type="CARD16" name="mask_len" />
- <list type="CARD32" name="mask"> <!-- set of EventMaskBit -->
+ <list type="CARD32" name="mask" mask="XIEventMask">
<fieldref>mask_len</fieldref>
</list>
</struct>
<field type="CARD16" name="number" />
<field type="CARD16" name="scroll_type" enum="ScrollType" />
<pad bytes="2" />
- <field type="CARD32" name="flags" enum="ScrollFlags" />
+ <field type="CARD32" name="flags" mask="ScrollFlags" />
<field type="FP3232" name="increment" />
</struct>
<field type="CARD16" name="type" enum="DeviceClassType" />
<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">
<field type="DeviceId" name="deviceid" altenum="Device" />
- <field type="CARD16" name="type" altenum="DeviceType" />
+ <field type="CARD16" name="type" enum="DeviceType" />
<field type="DeviceId" name="attachment" altenum="Device" />
<field type="CARD16" name="num_classes" />
<field type="CARD16" name="name_len" />
<field type="BOOL" name="enabled" />
<pad bytes="1" />
<list type="char" name="name">
- <!-- name_len is without padding, so we've to pad on our own,
- auto align pad after the list would be helpfull -->
- <op op="*">
- <op op="/">
- <op op="+">
- <fieldref>name_len</fieldref>
- <value>3</value>
- </op>
- <value>4</value>
- </op>
- <value>4</value>
- </op>
+ <fieldref>name_len</fieldref>
</list>
+ <pad align="4" />
<list type="DeviceClass" name="classes">
<fieldref>num_classes</fieldref>
</list>
</struct>
<request name="XIPassiveGrabDevice" opcode="54">
+ <!-- field "time" is unused and its value is undefined -->
<field type="TIMESTAMP" name="time" altenum="Time" />
<field type="WINDOW" name="grab_window" />
<field type="CURSOR" name="cursor" />
<field type="CARD32" name="num_items" />
<switch name="items">
<fieldref>format</fieldref>
- <!-- <bitcase> is not correct, this would need <cases>s.
- It works in that case, because PropertyFormat items can be
- distinguished exactly as their values don't have equal bits.
- -->
- <bitcase>
+ <case>
<enumref ref="PropertyFormat">8Bits</enumref>
<list type="CARD8" name="data8">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
- <bitcase>
+ </case>
+ <case>
<enumref ref="PropertyFormat">16Bits</enumref>
<list type="CARD16" name="data16">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
- <bitcase>
+ </case>
+ <case>
<enumref ref="PropertyFormat">32Bits</enumref>
<list type="CARD32" name="data32">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
+ </case>
</switch>
</request>
<pad bytes="11" />
<switch name="items">
<fieldref>format</fieldref>
- <!-- <bitcase> is not correct, this would need <cases>s.
- It works in that case, because PropertyFormat items can be
- distinguished exactly as their values don't have equal bits.
- -->
- <bitcase>
+ <case>
<enumref ref="PropertyFormat">8Bits</enumref>
<list type="CARD8" name="data8">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
- <bitcase>
+ <pad align="4" />
+ </case>
+ <case>
<enumref ref="PropertyFormat">16Bits</enumref>
<list type="CARD16" name="data16">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
- <bitcase>
+ <pad align="4" />
+ </case>
+ <case>
<enumref ref="PropertyFormat">32Bits</enumref>
<list type="CARD32" name="data32">
<fieldref>num_items</fieldref>
</list>
- </bitcase>
+ </case>
</switch>
</reply>
</request>
</list>
</event>
+ <!-- the highest bit in a CARD8 device_id-field indicates that more
+ events will follow -->
+ <enum name="MoreEventsMask">
+ <item name="MoreEvents"> <bit>7</bit> </item> <!-- 0x80 -->
+ </enum>
+
<event name="DeviceKeyPress" number="1">
<field type="BYTE" name="detail" />
<field type="TIMESTAMP" name="time" />
<field type="INT16" name="root_y" />
<field type="INT16" name="event_x" />
<field type="INT16" name="event_y" />
- <field type="CARD16" name="state" />
+ <field type="CARD16" name="state" mask="KeyButMask" />
<field type="BOOL" name="same_screen" />
- <field type="CARD8" name="device_id" />
+ <field type="CARD8" name="device_id" altmask="MoreEventsMask" />
</event>
<eventcopy name="DeviceKeyRelease" number="2" ref="DeviceKeyPress" />
<eventcopy name="DeviceMotionNotify" number="5" ref="DeviceKeyPress" />
<event name="DeviceFocusIn" number="6">
- <field type="BYTE" name="detail" enum="NotifyDetail" />
+ <field type="BYTE" name="detail" enum="xproto:NotifyDetail" />
<field type="TIMESTAMP" name="time" />
<field type="WINDOW" name="window" />
- <field type="BYTE" name="mode" enum="NotifyMode" />
+ <field type="BYTE" name="mode" enum="xproto:NotifyMode" />
<field type="CARD8" name="device_id" />
<pad bytes="18" />
</event>
<eventcopy name="ProximityIn" number="8" ref="DeviceKeyPress" />
<eventcopy name="ProximityOut" number="9" ref="DeviceKeyPress" />
+ <enum name="ClassesReportedMask">
+ <item name="OutOfProximity"> <bit>7</bit> </item> <!-- 0x80 -->
+ <!-- 0 = InProxmity, 1 = OutOfProximity -->
+
+ <item name="DeviceModeAbsolute"> <bit>6</bit> </item> <!-- 0x40 -->
+ <!-- 0 = Relative, 1 = Absolute -->
+
+ <item name="ReportingValuators"> <bit>2</bit> </item> <!-- 0x04 -->
+ <item name="ReportingButtons"> <bit>1</bit> </item> <!-- 0x02 -->
+ <item name="ReportingKeys"> <bit>0</bit> </item> <!-- 0x01 -->
+ </enum>
+
<event name="DeviceStateNotify" number="10">
- <field type="BYTE" name="device_id" />
+ <field type="BYTE" name="device_id" altmask="MoreEventsMask" />
<field type="TIMESTAMP" name="time" />
<field type="CARD8" name="num_keys" />
<field type="CARD8" name="num_buttons" />
<field type="CARD8" name="num_valuators" />
- <field type="CARD8" name="classes_reported" />
+ <field type="CARD8" name="classes_reported" mask="ClassesReportedMask" />
<list type="CARD8" name="buttons">
<value>4</value>
</list>
<event name="DeviceMappingNotify" number="11">
<field type="BYTE" name="device_id" />
- <field type="CARD8" name="request" />
+ <field type="CARD8" name="request" enum="Mapping" />
<field type="KeyCode" name="first_keycode" />
<field type="CARD8" name="count" />
<pad bytes="1" />
<pad bytes="20" />
</event>
+ <enum name="ChangeDevice">
+ <item name="NewPointer"> <value>0</value> </item>
+ <item name="NewKeyboard"> <value>1</value> </item>
+ </enum>
+
<event name="ChangeDeviceNotify" number="12">
<field type="BYTE" name="device_id" />
<field type="TIMESTAMP" name="time" />
- <field type="CARD8" name="request" />
+ <field type="CARD8" name="request" enum="ChangeDevice" />
<pad bytes="23" />
</event>
<event name="DeviceKeyStateNotify" number="13">
- <field type="BYTE" name="device_id" />
+ <field type="BYTE" name="device_id" altmask="MoreEventsMask" />
<list type="CARD8" name="keys">
<value>28</value>
</list>
</event>
<event name="DeviceButtonStateNotify" number="14">
- <field type="BYTE" name="device_id" />
+ <field type="BYTE" name="device_id" altmask="MoreEventsMask" />
<list type="CARD8" name="buttons">
<value>28</value>
</list>
<list type="CARD32" name="valuator_mask">
<fieldref>valuators_len</fieldref>
</list>
- <!-- Uninterpreted: list (axisvalues) of FP3232,
- length is <popcount> on valuator_mask list -->
+ <list type="FP3232" name="axisvalues">
+ <sumof ref="valuator_mask">
+ <popcount>
+ <listelement-ref/>
+ </popcount>
+ </sumof>
+ </list>
</event>
<eventcopy name="KeyRelease" number="3" ref="KeyPress" />
<list type="CARD32" name="valuator_mask">
<fieldref>valuators_len</fieldref>
</list>
- <!-- Uninterpreted: list (axisvalues) of FP3232,
- length is <popcount> on valuator_mask list -->
+ <list type="FP3232" name="axisvalues">
+ <sumof ref="valuator_mask">
+ <popcount>
+ <listelement-ref/>
+ </popcount>
+ </sumof>
+ </list>
</event>
<eventcopy name="ButtonRelease" number="5" ref="ButtonPress" />
<field type="TIMESTAMP" name="time" altenum="Time" />
<!-- event specific fields -->
<field type="DeviceId" name="sourceid" altenum="Device" />
- <field type="CARD8" name="mode" enum="NotifyMode" />
- <field type="CARD8" name="detail" enum="NotifyDetail" />
+ <field type="CARD8" name="mode" enum="xinput:NotifyMode" />
+ <field type="CARD8" name="detail" enum="xinput:NotifyDetail" />
<field type="WINDOW" name="root" />
<field type="WINDOW" name="event" />
<field type="WINDOW" name="child" />
<field type="FP1616" name="root_y" />
<field type="FP1616" name="event_x" />
<field type="FP1616" name="event_y" />
- <field type="CARD8" name="same_screen" />
- <field type="CARD8" name="focus" />
+ <field type="BOOL" name="same_screen" />
+ <field type="BOOL" name="focus" />
<field type="CARD16" name="buttons_len" />
<field type="ModifierInfo" name="mods" />
<field type="GroupInfo" name="group" />
<list type="CARD32" name="valuator_mask">
<fieldref>valuators_len</fieldref>
</list>
- <!-- Uninterpreted: list (axisvalues) of FP3232,
- length is <popcount> on valuator_mask list -->
- <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
- length is <popcount> on valuator_mask list -->
+ <list type="FP3232" name="axisvalues">
+ <sumof ref="valuator_mask">
+ <popcount>
+ <listelement-ref/>
+ </popcount>
+ </sumof>
+ </list>
+ <list type="FP3232" name="axisvalues_raw">
+ <sumof ref="valuator_mask">
+ <popcount>
+ <listelement-ref/>
+ </popcount>
+ </sumof>
+ </list>
</event>
<eventcopy name="RawKeyRelease" number="14" ref="RawKeyPress" />
<list type="CARD32" name="valuator_mask">
<fieldref>valuators_len</fieldref>
</list>
- <!-- Uninterpreted: list (axisvalues) of FP3232,
- length is <popcount> on valuator_mask list -->
- <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
- length is <popcount> on valuator_mask list -->
+ <list type="FP3232" name="axisvalues">
+ <sumof ref="valuator_mask">
+ <popcount>
+ <listelement-ref/>
+ </popcount>
+ </sumof>
+ </list>
+ <list type="FP3232" name="axisvalues_raw">
+ <sumof ref="valuator_mask">
+ <popcount>
+ <listelement-ref/>
+ </popcount>
+ </sumof>
+ </list>
</event>
<eventcopy name="RawButtonRelease" number="16" ref="RawButtonPress" />
<list type="CARD32" name="valuator_mask">
<fieldref>valuators_len</fieldref>
</list>
- <!-- Uninterpreted: list (axisvalues) of FP3232,
- length is <popcount> on valuator_mask list -->
+ <list type="FP3232" name="axisvalues">
+ <sumof ref="valuator_mask">
+ <popcount>
+ <listelement-ref/>
+ </popcount>
+ </sumof>
+ </list>
</event>
<eventcopy name="TouchUpdate" number="19" ref="TouchBegin" />
<list type="CARD32" name="valuator_mask">
<fieldref>valuators_len</fieldref>
</list>
- <!-- Uninterpreted: list (axisvalues) of FP3232,
- length is <popcount> on valuator_mask list -->
- <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
- length is <popcount> on valuator_mask list -->
+ <list type="FP3232" name="axisvalues">
+ <sumof ref="valuator_mask">
+ <popcount>
+ <listelement-ref/>
+ </popcount>
+ </sumof>
+ </list>
+ <list type="FP3232" name="axisvalues_raw">
+ <sumof ref="valuator_mask">
+ <popcount>
+ <listelement-ref/>
+ </popcount>
+ </sumof>
+ </list>
</event>
<eventcopy name="RawTouchUpdate" number="23" ref="RawTouchBegin" />
<!-- ⋅⋅⋅ Events (v2.3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
+ <enum name="BarrierFlags">
+ <item name="PointerReleased"> <bit>0</bit> </item>
+ <item name="DeviceIsGrabbed"> <bit>1</bit> </item>
+ </enum>
+
<event name="BarrierHit" number="25" xge="true">
<field type="DeviceId" name="deviceid" altenum="Device" />
<field type="TIMESTAMP" name="time" altenum="Time" />
<field type="BARRIER" name="barrier" />
<!-- 32 byte boundary -->
<field type="CARD32" name="dtime" />
- <field type="CARD32" name="flags" />
+ <field type="CARD32" name="flags" mask="BarrierFlags" />
<field type="DeviceId" name="sourceid" altenum="Device" />
<pad bytes="2" />
<field type="FP1616" name="root_x" />