xenocara/lib/libXi/specs/encoding.xml

2313 lines
48 KiB
XML

<appendix id="input_extension_protocol_encoding">
<title>Input Extension Protocol Encoding</title>
<para>
<function>Syntactic Conventions</function>
</para>
<para>
<!-- .LP -->
All numbers are in decimal,
unless prefixed with #x, in which case they are in hexadecimal (base 16).
</para>
<para>
<!-- .LP -->
The general syntax used to describe requests, replies, errors, events, and
compound types is:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<function>NameofThing</function>
encode-form
...
encode-form
</literallayout>
Each encode-form describes a single component.
</para>
<para>
<!-- .LP -->
For components described in the protocol as:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
name: TYPE
</literallayout>
the encode-form is:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i 2.5i -->
<!-- .ta 1i 1.5i 2.5i -->
N TYPE name
</literallayout>
N is the number of bytes occupied in the data stream,
and TYPE is the interpretation of those bytes.
For example,
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i -->
<!-- .ta 1i 1.5i -->
depth: CARD8
</literallayout>
becomes:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i 2.5i -->
<!-- .ta 1i 1.5i 2.5i -->
1 CARD8 depth
</literallayout>
For components with a static numeric value the encode-form is:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i 2.5i -->
<!-- .ta 1i 1.5i 2.5i -->
N value name
</literallayout>
The value is always interpreted as an N-byte unsigned integer.
For example,
the first two bytes of a Window error are always zero (indicating an
error in general) and three (indicating the Window error in particular):
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i 2.5i -->
<!-- .ta 1i 1.5i 2.5i -->
1 0 Error
1 3 code
</literallayout>
For components described in the protocol as:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
name: <function>{Name1, ..., NameI}</function>
</literallayout>
</para>
<para>
<!-- .LP -->
the encode-form is:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i 2.5i -->
<!-- .ta 1i 1.5i 2.5i -->
N name
value1 Name1
...
valueI NameI
</literallayout>
The value is always interpreted as an N-byte unsigned integer.
Note that the size of N is sometimes larger than that strictly required
to encode the values.
For example:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
class: <function>{InputOutput, InputOnly, CopyFromParent}</function>
</literallayout>
</para>
<para>
<!-- .LP -->
becomes:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i 2.5i 3i -->
<!-- .ta 1i 1.5i 2.5i 3i -->
2 class
0 CopyFromParent
1 InputOutput
2 InputOnly
</literallayout>
For components described in the protocol as:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
NAME: TYPE or <function>Alternative1 ... or AlternativeI</function>
</literallayout>
</para>
<para>
<!-- .LP -->
the encode-form is:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i 2i 2.5i 3i -->
<!-- .ta 1i 1.5i 2i 2.5i 3i -->
N TYPE NAME
value1 Alternative1
...
valueI AlternativeI
</literallayout>
The alternative values are guaranteed not to conflict with the encoding
of TYPE.
For example:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
destination: WINDOW or <function>PointerWindow</function> or <function>InputFocus</function>
</literallayout>
</para>
<para>
<!-- .LP -->
becomes:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i 2.5i -->
<!-- .ta 1i 1.5i 2.5i -->
4 WINDOW destination
0 PointerWindow
1 InputFocus
</literallayout>
For components described in the protocol as:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i -->
<!-- .ta 1i 1.5i -->
value-mask: BITMASK
</literallayout>
the encode-form is:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i 2i 2.5i -->
<!-- .ta 1i 1.5i 2i 2.5i -->
N BITMASK value-mask
mask1 mask-name1
...
maskI mask-nameI
</literallayout>
The individual bits in the mask are specified and named,
and N is 2 or 4.
The most-significant bit in a BITMASK is reserved for use in defining
chained (multiword) bitmasks, as extensions augment existing core requests.
The precise interpretation of this bit is not yet defined here,
although a probable mechanism is that a 1-bit indicates that another N bytes
of bitmask follows, with bits within the overall mask still interpreted
from least-significant to most-significant with an N-byte unit, with N-byte units
interpreted in stream order, and with the overall mask being byte-swapped
in individual N-byte units.
</para>
<para>
<!-- .LP -->
For LISTofVALUE encodings, the request is followed by a section of the form:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i -->
<!-- .ta 1i 1.5i -->
VALUEs
encode-form
...
encode-form
</literallayout>
listing an encode-form for each VALUE.
The NAME in each encode-form keys to the corresponding BITMASK bit.
The encoding of a VALUE always occupies four bytes,
but the number of bytes specified in the encoding-form indicates how
many of the least-significant bytes are actually used;
the remaining bytes are unused and their values do not matter.
</para>
<para>
<!-- .LP -->
In various cases, the number of bytes occupied by a component will be specified
by a lowercase single-letter variable name instead of a specific numeric
value, and often some other component will have its value specified as a
simple numeric expression involving these variables.
Components specified with such expressions are always interpreted
as unsigned integers.
The scope of such variables is always just the enclosing request, reply,
error, event, or compound type structure.
For example:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i 2i 2.5i -->
<!-- .ta 1i 1.5i 2i 2.5i -->
2 3+n request length
4n LISTofPOINT points
</literallayout>
For unused bytes (the values of the bytes are undefined and do not matter),
the encode-form is:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i 2i 2.5i -->
<!-- .ta 1i 1.5i 2i 2.5i -->
N unused
</literallayout>
If the number of unused bytes is variable, the encode-form typically is:
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i 2i 2.5i -->
<!-- .ta 1i 1.5i 2i 2.5i -->
p unused, p=pad(E)
</literallayout>
where E is some expression,
and pad(E) is the number of bytes needed to round E up to a multiple of four.
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA 1i 1.5i 2i 2.5i -->
<!-- .ta 1i 1.5i 2i 2.5i -->
pad(E) = (4 - (E mod 4)) mod 4
</literallayout>
<!-- .ps +2 -->
<function>Common Types</function>
<!-- .ps -->
</para>
<para>
<!-- .LP -->
LISTofFOO
</para>
<itemizedlist>
<listitem>
<para>
In this document the LISTof notation strictly means some number of repetitions
of the FOO encoding;
the actual length of the list is encoded elsewhere.
</para>
</listitem>
</itemizedlist>
<para>
<!-- .LP -->
SETofFOO
</para>
<itemizedlist>
<listitem>
<para>
A set is always represented by a bitmask, with a 1-bit indicating presence in
the set.
</para>
</listitem>
</itemizedlist>
<para>
<!-- .LP -->
BITMASK: CARD32
</para>
<para>
<!-- .LP -->
WINDOW: CARD32
</para>
<para>
<!-- .LP -->
BYTE: 8-bit value
</para>
<para>
<!-- .LP -->
INT8: 8-bit signed integer
</para>
<para>
<!-- .LP -->
INT16: 16-bit signed integer
</para>
<para>
<!-- .LP -->
INT32: 32-bit signed integer
</para>
<para>
<!-- .LP -->
CARD8: 8-bit unsigned integer
</para>
<para>
<!-- .LP -->
CARD16: 16-bit unsigned integer
</para>
<para>
<!-- .LP -->
CARD32: 32-bit unsigned integer
</para>
<para>
<!-- .LP -->
TIMESTAMP: CARD32
</para>
<para>
<!-- .LP -->
EVENTCLASS: CARD32
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .75i 1.75i -->
<!-- .ta .75i 1.75i -->
INPUTCLASS
0 KeyClass
1 ButtonClass
2 ValuatorClass
3 FeedbackClass
4 ProximityClass
5 FocusClass
6 OtherClass
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .75i 1.75i -->
<!-- .ta .75i 1.75i -->
INPUTCLASS
0 KbdFeedbackClass
1 PtrFeedbackClass
2 StringFeedbackClass
3 IntegerFeedbackClass
4 LedFeedbackClass
5 BellFeedbackClass
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .75i 1.75i -->
<!-- .ta .75i 1.75i -->
INPUTINFO
0 KEYINFO
1 BUTTONINFO
2 VALUATORINFO
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .75i 1.75i -->
<!-- .ta .75i 1.75i -->
DEVICEMODE
0 Relative
1 Absolute
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .75i 1.75i -->
<!-- .ta .75i 1.75i -->
PROXIMITYSTATE
0 InProximity
1 OutOfProximity
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .75i 1.75i -->
<!-- .ta .75i 1.75i -->
BOOL
0 False
1 True
</literallayout>
</para>
<para>
<!-- .LP -->
KEYSYM: CARD32
</para>
<para>
<!-- .LP -->
KEYCODE: CARD8
</para>
<para>
<!-- .LP -->
BUTTON: CARD8
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .75i 1.75i -->
<!-- .ta .75i 1.75i -->
SETofKEYBUTMASK
#x0001 Shift
#x0002 Lock
#x0004 Control
#x0008 Mod1
#x0010 Mod2
#x0020 Mod3
#x0040 Mod4
#x0080 Mod5
#x0100 Button1
#x0200 Button2
#x0400 Button3
#x0800 Button4
#x1000 Button5
#xe000 unused but must be zero
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .75i 1.75i -->
<!-- .ta .75i 1.75i -->
SETofKEYMASK
encodings are the same as for SETofKEYBUTMASK, except with
#xff00 unused but must be zero
</literallayout>
</para>
<para>
<!-- .LP -->
STRING8: LISTofCARD8
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
STR
1 n length of name in bytes
n STRING8 name
</literallayout>
<!-- .ps +2 -->
<function>Errors</function>
<!-- .ps -->
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
Request
1 0 Error
1 1 code
2 CARD16 sequence number
4 unused
2 CARD16 minor opcode
1 CARD8 major opcode
21 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
Value
1 0 Error
1 2 code
2 CARD16 sequence number
4 &lt;32-bits&gt; bad value
2 CARD16 minor opcode
1 CARD8 major opcode
21 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
Window
1 0 Error
1 3 code
2 CARD16 sequence number
4 CARD32 bad resource id
2 CARD16 minor opcode
1 CARD8 major opcode
21 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
Match
1 0 Error
1 8 code
2 CARD16 sequence number
4 unused
2 CARD16 minor opcode
1 CARD8 major opcode
21 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
Access
1 0 Error
1 10 code
2 CARD16 sequence number
4 unused
2 CARD16 minor opcode
1 CARD8 major opcode
21 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
Alloc
1 0 Error
1 11 code
2 CARD16 sequence number
4 unused
2 CARD16 minor opcode
1 CARD8 major opcode
21 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
Name
1 0 Error
1 15 code
2 CARD16 sequence number
4 unused
2 CARD16 minor opcode
1 CARD8 major opcode
21 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
Device
1 0 Error
1 CARD8 code
2 CARD16 sequence number
4 unused
2 CARD16 minor opcode
1 CARD8 major opcode
21 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
Event
1 0 Error
1 CARD8 code
2 CARD16 sequence number
4 unused
2 CARD16 minor opcode
1 CARD8 major opcode
21 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
Mode
1 0 Error
1 CARD8 code
2 CARD16 sequence number
4 unused
2 CARD16 minor opcode
1 CARD8 major opcode
21 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
Class
1 0 Error
1 CARD8 code
2 CARD16 sequence number
4 unused
2 CARD16 minor opcode
1 CARD8 major opcode
21 unused
</literallayout>
<!-- .ps +2 -->
Keyboards
<!-- .ps -->
</para>
<para>
<!-- .LP -->
KEYCODE values are always greater than 7 (and less than 256).
</para>
<para>
<!-- .LP -->
KEYSYM values with the bit #x10000000 set are reserved as vendor-specific.
</para>
<para>
<!-- .LP -->
The names and encodings of the standard KEYSYM values are contained in
<!-- .\"Appendix B, Keysym Encoding. -->
appendix F.
</para>
<para>
<!-- .LP -->
<!-- .ps +2 -->
Pointers
<!-- .ps -->
</para>
<para>
<!-- .LP -->
BUTTON values are numbered starting with one.
</para>
<para>
<!-- .LP -->
<!-- .ps +2 -->
Requests
<!-- .ps -->
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
GetExtensionVersion
1 CARD8 input extension opcode
1 1 GetExtensionVersion opcode
2 2+(n+p)/4 request length
2 n length of name
2 unused
n STRING8 name
p unused, p=pad(n)
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
=&gt;
1 1 Reply
1 1 GetExtensionVersion opcode
2 CARD16 sequence number
4 0 reply length
2 CARD16 major version
2 CARD16 minor version
1 BOOL present
19 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
ListInputDevices
1 CARD8 input extension opcode
1 2 ListInputDevices opcode
2 1 request length
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
=&gt;
1 1 Reply
1 2 ListInputDevices opcode
2 CARD16 sequence number
4 (n+p)/4 reply length
1 CARD8 number of input devices
23 unused
n LISTofDEVICEINFO info for each input device
p unused, p=pad(n)
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DEVICEINFO
4 CARD32 device type
1 CARD8 device id
1 CARD8 number of input classes this device reports
1 CARD8 device use
0 IsXPointer
1 IsXKeyboard
2 IsXExtensionDevice
1 unused
n LISTofINPUTINFO input info for each input class
m STR name
p unused, p=pad(m)
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
INPUTINFO KEYINFO or BUTTONINFO or VALUATORINFO
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
KEYINFO
1 0 class id
1 8 length
1 KEYCODE minimum keycode
1 KEYCODE maximum keycode
2 CARD16 number of keys
2 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
BUTTONINFO
1 1 class id
1 4 length
2 CARD16 number of buttons
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .75i 2.0i 3.0i -->
<!-- .ta .2i .75i 2.0i 3.0i -->
VALUATORINFO
1 2 class id
1 8+12n length
1 n number of axes
1 SETofDEVICEMODE mode
4 CARD32 size of motion buffer
12n LISTofAXISINFO valuator limits
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
AXISINFO
4 CARD32 resolution
4 CARD32 minimum value
4 CARD32 maximum value
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
OpenDevice
1 CARD8 input extension opcode
1 3 OpenDevice opcode
2 2 request length
1 CARD8 device id
3 unused
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 3.5i -->
<!-- .ta .2i .5i 1.5i 3.5i -->
=&gt;
1 1 Reply
1 3 OpenDevice opcode
2 CARD16 sequence number
4 (n+p)/4 reply length
1 CARD8 number of input classes
23 unused
n LISTofINPUTCLASSINFO input class information
p unused, p=pad(n)
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
INPUTCLASSINFO
1 CARD8 input class id
0 KEY
1 BUTTON
2 VALUATOR
3 FEEDBACK
4 PROXIMITY
5 FOCUS
6 OTHER
1 CARD8 event type base code for this class
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
CloseDevice
1 CARD8 input extension opcode
1 4 CloseDevice opcode
2 2 request length
1 CARD8 device id
3 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
SetDeviceMode
1 CARD8 input extension opcode
1 5 SetDeviceMode opcode
2 2 request length
1 CARD8 device id
1 CARD8 mode
2 unused
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 3.5i -->
<!-- .ta .2i .5i 1.5i 3.5i -->
=&gt;
1 1 Reply
1 5 SetDeviceMode opcode
2 CARD16 sequence number
4 0 reply length
1 CARD8 status
0 Success
1 AlreadyGrabbed
3 + first_error DeviceBusy
23 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
SelectExtensionEvent
1 CARD8 input extension opcode
1 6 SelectExtensionEvent opcode
2 3+n request length
4 Window event window
2 CARD16 count
2 unused
4n LISTofEVENTCLASS desired events
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
GetSelectedExtensionEvents
1 CARD8 input extension opcode
1 7 GetSelectedExtensionEvents opcode
2 2 request length
4 Window event window
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
=&gt;
1 1 Reply
1 7 GetSelecteExtensionEvents opcode
2 CARD16 sequence number
4 n + m reply length
2 n this client count
2 m all clients count
20 unused
4n LISTofEVENTCLASS this client list
4m LISTofEVENTCLASS all clients list
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
ChangeDeviceDontPropagateList
1 CARD8 input extension opcode
1 8 ChangeDeviceDontPropagateList opcode
2 3+n request length
4 Window event window
2 n count of events
1 mode
0 AddToList
1 DeleteFromList
1 unused
4n LISTofEVENTCLASS desired events
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
GetDeviceDontPropagateList
1 CARD8 input extension opcode
1 9 GetDeviceDontPropagateList opcode
2 2 request length
4 Window event window
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
=&gt;
1 1 Reply
1 9 GetDeviceDontPropagateList opcode
2 CARD16 sequence number
4 n reply length
2 n count of events
22 unused
4n LISTofEVENTCLASS don't propagate list
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
GetDeviceMotionEvents
1 CARD8 input extension opcode
1 10 GetDeviceMotionEvents opcode
2 4 request length
4 TIMESTAMP start
0 CurrentTime
4 TIMESTAMP stop
0 CurrentTime
1 CARD8 device id
3 unused
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 3.5i -->
<!-- .ta .2i .5i 1.5i 3.5i -->
=&gt;
1 1 Reply
1 10 GetDeviceMotionEvents opcode
2 CARD16 sequence number
4 (m+1)n reply length
4 n number of DEVICETIMECOORDs in events
1 m number of valuators per event
1 CARD8 mode of the device
0 Absolute
1 Relative
18 unused
(4m+4)n LISTofDEVICETIMECOORD events
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DEVICETIMECOORD
4 TIMESTAMP time
4m LISTofINT32 valuators
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
ChangeKeyboardDevice
1 CARD8 input extension opcode
1 11 ChangeKeyboardDevice opcode
2 2 request length
1 CARD8 device id
3 unused
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
=&gt;
1 1 Reply
1 11 ChangeKeyboardDevice opcode
2 CARD16 sequence number
4 0 reply length
1 status
0 Success
1 AlreadyGrabbed
2 DeviceFrozen
23 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
ChangePointerDevice
1 CARD8 input extension opcode
1 12 ChangePointerDevice opcode
2 2 request length
1 CARD8 x-axis
1 CARD8 y-axis
1 CARD8 device id
1 unused
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
=&gt;
1 1 Reply
1 12 ChangePointerDevice opcode
2 CARD16 sequence number
4 0 reply length
1 status
0 Success
1 AlreadyGrabbed
2 DeviceFrozen
23 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
GrabDevice
1 CARD8 input extension opcode
1 13 GrabDevice opcode
2 5+n request length
4 WINDOW grab-window
4 TIMESTAMP time
0 CurrentTime
2 n count of events
1 this-device-mode
0 Synchronous
1 Asynchronous
1 other-devices-mode
0 Synchronous
1 Asynchronous
1 BOOL owner-events
1 CARD8 device id
2 unused
4n LISTofEVENTCLASS event list
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
=&gt;
1 1 Reply
1 13 GrabDevice opcode
2 CARD16 sequence number
4 0 reply length
1 status
0 Success
1 AlreadyGrabbed
2 InvalidTime
3 NotViewable
4 Frozen
23 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
UngrabDevice
1 CARD8 input extension opcode
1 14 UngrabDevice opcode
2 3 request length
4 TIMESTAMP time
0 CurrentTime
1 CARD8 device id
3 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
GrabDeviceKey
1 CARD8 input extension opcode
1 15 GrabDeviceKey opcode
2 5+n request length
4 WINDOW grab-window
2 n count of events
2 SETofKEYMASK modifiers
#x8000 AnyModifier
1 CARD8 modifier device
#x0FF UseXKeyboard
1 CARD8 grabbed device
1 KEYCODE key
0 AnyKey
1 this-device-mode
0 Synchronous
1 Asynchronous
1 other-devices-mode
0 Synchronous
1 Asynchronous
1 BOOL owner-events
2 unused
4n LISTofEVENTCLASS event list
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
UngrabDeviceKey
1 CARD8 input extension opcode
1 16 UngrabDeviceKey opcode
2 4 request length
4 WINDOW grab-window
2 SETofKEYMASK modifiers
#x8000 AnyModifier
1 CARD8 modifier device
#x0FF UseXKeyboard
1 KEYCODE key
0 AnyKey
1 CARD8 grabbed device
3 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
GrabDeviceButton
1 CARD8 input extension opcode
1 17 GrabDeviceButton opcode
2 5+n request length
4 WINDOW grab-window
1 CARD8 grabbed device
1 CARD8 modifier device
#x0FF UseXKeyboard
2 n count of desired events
2 SETofKEYMASK modifiers
1 this-device-mode
0 Synchronous
1 Asynchronous
1 other-device-mode
0 Synchronous
1 Asynchronous
1 BUTTON button
0 AnyButton
1 BOOL owner-events
#x8000 AnyModifier
2 unused
4n LISTofEVENTCLASS event list
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
UngrabDeviceButton
1 CARD8 input extension opcode
1 18 UngrabDeviceButton opcode
2 4 request length
4 WINDOW grab-window
2 SETofKEYMASK modifiers
#x8000 AnyModifier
1 CARD8 modifier device
#x0FF UseXKeyboard
1 BUTTON button
0 AnyButton
1 CARD8 grabbed device
3 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
AllowDeviceEvents
1 CARD8 input extension opcode
1 19 AllowDeviceEvents opcode
2 3 request length
4 TIMESTAMP time
0 CurrentTime
1 mode
0 AsyncThisDevice
1 SyncThisDevice
2 ReplayThisDevice
3 AsyncOtherDevices
4 AsyncAll
5 SyncAll
1 CARD8 device id
2 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
GetDeviceFocus
1 CARD8 input extension opcode
1 20 GetDeviceFocus opcode
2 2 request length
1 CARD8 device
3 unused
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
=&gt;
1 1 Reply
1 20 GetDeviceFocus opcode
2 CARD16 sequence number
4 0 reply length
4 WINDOW focus
0 None
1 PointerRoot
3 FollowKeyboard
4 TIMESTAMP focus time
1 revert-to
0 None
1 PointerRoot
2 Parent
3 FollowKeyboard
15 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
SetDeviceFocus
1 CARD8 input extension opcode
1 21 SetDeviceFocus opcode
2 4 request length
4 WINDOW focus
0 None
1 PointerRoot
3 FollowKeyboard
4 TIMESTAMP time
0 CurrentTime
1 revert-to
0 None
1 PointerRoot
2 Parent
3 FollowKeyboard
1 CARD8 device
2 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
GetFeedbackControl
1 CARD8 input extension opcode
1 22 GetFeedbackControl opcode
2 2 request length
1 CARD8 device id
3 unused
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
=&gt;
1 1 Reply
1 22 GetFeedbackControl opcode
2 CARD16 sequence number
4 m/4 reply length
2 n number of feedbacks supported
22 unused
m LISTofFEEDBACKSTATE feedbacks
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
FEEDBACKSTATE KBDFEEDBACKSTATE, PTRFEEDBACKSTATE, INTEGERFEEDBACKSTATE,
STRINGFEEDBACKSTATE, BELLFEEDBACKSTATE, or LEDFEEDBACKSTATE
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
KBDFEEDBACKSTATE
1 0 feedback class id
1 CARD8 id of this feedback
2 20 length
2 CARD16 pitch
2 CARD16 duration
4 CARD32 led_mask
4 CARD32 led_values
1 global_auto_repeat
0 Off
1 On
1 CARD8 click
1 CARD8 percent
1 unused
32 LISTofCARD8 auto_repeats
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
PTRFEEDBACKSTATE
1 0 feedback class id
1 CARD8 id of this feedback
2 12 length
2 unused
2 CARD16 acceleration-numerator
2 CARD16 acceleration-denominator
2 CARD16 threshold
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
INTEGERFEEDBACKSTATE
1 0 feedback class id
1 CARD8 id of this feedback
2 16 length
4 CARD32 resolution
4 INT32 minimum value
4 INT32 maximum value
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
STRINGFEEDBACKSTATE
1 1 feedback class id
1 CARD8 id of this feedback
2 4n+8 length
2 CARD16 max_symbols
2 n number of keysyms supported
4n LISTofKEYSYM key symbols supported
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
BELLFEEDBACKSTATE
1 1 feedback class id
1 CARD8 id of this feedback
2 12 length
1 CARD8 percent
3 unused
2 CARD16 pitch
2 CARD16 duration
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
LEDFEEDBACKSTATE
1 1 feedback class id
1 CARD8 id of this feedback
2 12 length
4 CARD32 led_mask
4 BITMASK led_values
#x0001 On
#x0002 Off
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
ChangeFeedbackControl
1 CARD8 input extension opcode
1 23 ChangeFeedbackControl opcode
2 3+n/4 request length
4 BITMASK value-mask (has n bits set to 1)
#x0001 keyclick-percent
#x0002 bell-percent
#x0004 bell-pitch
#x0008 bell-duration
#x0010 led
#x0020 led-mode
#x0040 key
#x0080 auto-repeat-mode
#x0001 string
#x0001 integer
#x0001 acceleration-numerator
#x0002 acceleration-denominator
#x0004 acceleration-threshold
1 CARD8 device id
1 CARD8 feedback class id
2 unused
n FEEDBACKCLASS
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
FEEDBACKCLASS KBDFEEDBACKCTL, PTRFEEDBACKCTL, INTEGERFEEDBACKCTL,
STRINGFEEDBACKCTL, BELLFEEDBACKCTL, or LEDFEEDBACKCTL
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
KBDFEEDBACKCTL
1 0 feedback class id
1 CARD8 id of this feedback
2 20 length
1 KEYCODE key
1 auto-repeat-mode
0 Off
1 On
2 Default
1 INT8 key-click-percent
1 INT8 bell-percent
2 INT16 bell-pitch
2 INT16 bell-duration
4 CARD32 led_mask
4 CARD32 led_values
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
PTRFEEDBACKCTL
1 1 feedback class id
1 CARD8 id of this feedback
2 12 length
2 unused
2 INT16 numerator
2 INT16 denominator
2 INT16 threshold
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
STRINGCTL
1 2 feedback class id
1 CARD8 id of this feedback
2 4n+8 length
2 unused
2 n number of keysyms to display
4n LISTofKEYSYM list of key symbols to display
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
INTEGERCTL
1 3 feedback class id
1 CARD8 id of this feedback
2 8 length
4 INT32 integer to display
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
LEDCTL
1 4 feedback class id
1 CARD8 id of this feedback
2 12 length
4 CARD32 led_mask
4 BITMASK led_values
#x0001 On
#x0002 Off
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
BELLCTL
1 5 feedback class id
1 CARD8 id of this feedback
2 8 length
1 INT8 percent
3 unused
2 INT16 pitch
2 INT16 duration
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
GetDeviceKeyMapping
1 CARD8 input extension opcode
1 24 GetDeviceKeyMapping opcode
2 2 request length
1 CARD8 device
1 KEYCODE first-keycode
1 CARD8 count
1 unused
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .75i 2.0i 3.0i -->
<!-- .ta .2i .75i 2.0i 3.0i -->
=&gt;
1 1 Reply
1 24 GetDeviceKeyMapping opcode
2 CARD16 sequence number
4 nm reply length (m = count field from the request)
1 n keysyms-per-keycode
23 unused
4nm LISTofKEYSYM keysyms
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .75i 2.0i 3.0i -->
<!-- .ta .2i .75i 2.0i 3.0i -->
ChangeDeviceKeyMapping
1 CARD8 input extension opcode
1 25 ChangeDeviceKeyMapping opcode
2 2+nm request length
1 CARD8 device
1 KEYCODE first-keycode
1 m keysyms-per-keycode
1 n keycode-count
4nm LISTofKEYSYM keysyms
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
GetDeviceModifierMapping
1 CARD8 input extension opcode
1 26 GetDeviceModifierMapping opcode
2 2 request length
1 CARD8 device
3 unused
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
=&gt;
1 1 Reply
1 26 GetDeviceModifierMapping opcode
2 CARD16 sequence number
4 2n reply length
1 n keycodes-per-modifier
23 unused
8n LISTofKEYCODE keycodes
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
SetDeviceModifierMapping
1 CARD8 input extension opcode
1 27 SetDeviceModifier opcode
2 2+2n request length
1 CARD8 device
1 n keycodes-per-modifier
2 unused
8n LISTofKEYCODE keycodes
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
=&gt;
1 1 Reply
1 27 SetDeviceModifierMapping opcode
2 CARD16 sequence number
4 0 reply length
1 status
0 Success
1 Busy
2 Failed
23 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
GetDeviceButtonMapping
1 CARD8 input extension opcode
1 28 GetDeviceButtonMapping opcode
2 2 request length
1 CARD8 device
3 unused
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
=&gt;
1 1 Reply
1 28 GetDeviceButtonMapping opcode
2 CARD16 sequence number
4 (n+p)/4 reply length
1 n number of elements in map list
23 unused
n LISTofCARD8 map
p unused, p=pad(n)
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
SetDeviceButtonMapping
1 CARD8 input extension opcode
1 29 SetDeviceButtonMapping opcode
2 2+(n+p)/4 request length
1 CARD8 device
1 n length of map
2 unused
n LISTofCARD8 map
p unused, p=pad(n)
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
=&gt;
1 1 Reply
1 29 SetDeviceButtonMapping opcode
2 CARD16 sequence number
4 0 reply length
1 status
0 Success
1 Busy
23 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
QueryDeviceState
1 CARD8 input extension opcode
1 30 QueryDeviceState opcode
2 2 request length
1 CARD8 device
3 unused
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
=&gt;
1 1 Reply
1 30 QueryDeviceState opcode
2 CARD16 sequence number
4 m/4 reply length
1 n number of input classes
23 unused
m LISTofINPUTSTATE
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
INPUTSTATE KEYSTATE or BUTTONSTATE or VALUATORSTATE
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
KEYSTATE
1 CARD8 key input class id
1 36 length
1 CARD8 num_keys
1 unused
32 LISTofCARD8 status of keys
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
BUTTONSTATE
1 CARD8 button input class id
1 36 length
1 CARD8 num_buttons
1 unused
32 LISTofCARD8 status of buttons
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
VALUATORSTATE
1 CARD8 valuator input class id
1 4n + 4 length
1 n number of valuators
1 mode
#x01 DeviceMode (0 = Relative, 1 = Absolute)
#x02 ProximityState (0 = InProximity, 1 = OutOfProximity)
4n LISTofCARD32 status of valuators
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
SendExtensionEvent
1 CARD8 input extension opcode
1 31 SendExtensionEvent opcode
2 4 + 8n + m request length
4 WINDOW destination
1 CARD8 device
1 BOOL propagate
2 CARD16 eventclass count
1 CARD8 num_events
3 unused
32n LISTofEVENTS events to send
4m LISTofEVENTCLASS desired events
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DeviceBell
1 CARD8 input extension opcode
1 32 DeviceBell opcode
2 2 request length
1 CARD8 device id
1 CARD8 feedback id
1 CARD8 feedback class
1 INT8 percent
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
SetDeviceValuators
1 CARD8 input extension opcode
1 33 SetDeviceValuators opcode
2 2 + n request length
1 CARD8 device id
1 CARD8 first valuator
1 n number of valuators
1 unused
4n LISTofINT32 valuator values to set
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 3.5i -->
<!-- .ta .2i .5i 1.5i 3.5i -->
=&gt;
1 1 Reply
1 33 SetDeviceValuators opcode
2 CARD16 sequence number
4 0 reply length
1 CARD8 status
0 Success
1 AlreadyGrabbed
23 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
GetDeviceControl
1 CARD8 input extension opcode
1 34 GetDeviceControl opcode
2 2 request length
2 CARD16 device control type
1 CARD8 device id
1 unused
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 3.5i -->
<!-- .ta .2i .5i 1.5i 3.5i -->
=&gt;
1 1 Reply
1 34 GetDeviceControl opcode
2 CARD16 sequence number
4 n/4 reply length
1 CARD8 status
0 Success
1 AlreadyGrabbed
3 + first_error DeviceBusy
23 unused
n DEVICESTATE
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DEVICESTATE DEVICERESOLUTIONSTATE
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DEVICERESOLUTIONSTATE
2 0 control type
2 8 + 12n length
4 n num_valuators
4n LISTOfCARD32 resolution values
4n LISTOfCARD32 resolution min_values
4n LISTOfCARD32 resolution max_values
</literallayout>
</para>
<para>
<!-- .LP -->
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
ChangeDeviceControl
1 CARD8 input extension opcode
1 35 ChangeDeviceControl opcode
2 2+n/4 request length
2 CARD16 control type
1 CARD8 device id
1 unused
n DEVICECONTROL
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DEVICECONTROL DEVICERESOLUTIONCTL
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DEVICERESOLUTIONCTL
2 1 control type
2 8 + 4n length
1 CARD8 first_valuator
1 n num_valuators
2 unused
4n LISTOfCARD32 resolution values
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 3.5i -->
<!-- .ta .2i .5i 1.5i 3.5i -->
=&gt;
1 1 Reply
1 35 ChangeDeviceControl opcode
2 CARD16 sequence number
4 0 reply length
1 CARD8 status
0 Success
1 AlreadyGrabbed
3 + first_error DeviceBusy
23 unused
</literallayout>
<!-- .ps +2 -->
Events
<!-- .ps -->
</para>
<para>
<!-- .LP -->
DeviceKeyPress, DeviceKeyRelease, DeviceButtonPress, DeviceButtonRelease,
ProximityIn, ProximityOut, and DeviceStateNotify events may be followed by
zero or more DeviceValuator events. DeviceMotionNotify events will be
followed by one or more DeviceValuator events.
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DeviceValuator
1 CARD8 code
1 CARD8 device id
2 CARD16 sequence number
2 SETofKEYBUTMASK state
1 n number of valuators this device reports
1 m number of first valuator in this event
24 LISTofINT32 valuators
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DeviceKeyPress
1 CARD8 code
1 KEYCODE detail
2 CARD16 sequence number
4 TIMESTAMP time
4 WINDOW root
4 WINDOW event
4 WINDOW child
0 None
2 INT16 root-x
2 INT16 root-y
2 INT16 event-x
2 INT16 event-y
2 SETofKEYBUTMASK state
1 BOOL same-screen
1 CARD8 device id
#x80 MORE_EVENTS follow
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DeviceKeyRelease
1 CARD8 code
1 KEYCODE detail
2 CARD16 sequence number
4 TIMESTAMP time
4 WINDOW root
4 WINDOW event
4 WINDOW child
0 None
2 INT16 root-x
2 INT16 root-y
2 INT16 event-x
2 INT16 event-y
2 SETofKEYBUTMASK state
1 BOOL same-screen
1 CARD8 device id
#x80 MORE_EVENTS follow
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DeviceButtonPress
1 CARD8 code
1 BUTTON detail
2 CARD16 sequence number
4 TIMESTAMP time
4 WINDOW root
4 WINDOW event
4 WINDOW child
0 None
2 INT16 root-x
2 INT16 root-y
2 INT16 event-x
2 INT16 event-y
2 SETofKEYBUTMASK state
1 BOOL same-screen
1 CARD8 device id
#x80 MORE_EVENTS follow
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DeviceButtonRelease
1 CARD8 code
1 BUTTON detail
2 CARD16 sequence number
4 TIMESTAMP time
4 WINDOW root
4 WINDOW event
4 WINDOW child
0 None
2 INT16 root-x
2 INT16 root-y
2 INT16 event-x
2 INT16 event-y
2 SETofKEYBUTMASK state
1 BOOL same-screen
1 CARD8 device id
#x80 MORE_EVENTS follow
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DeviceMotionNotify
1 CARD8 code
1 detail
0 Normal
1 Hint
2 CARD16 sequence number
4 TIMESTAMP time
4 WINDOW root
4 WINDOW event
4 WINDOW child
0 None
2 INT16 root-x
2 INT16 root-y
2 INT16 event-x
2 INT16 event-y
2 SETofKEYBUTMASK state
1 BOOL same-screen
1 CARD8 device id
#x80 MORE_EVENTS follow
</literallayout>
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DeviceFocusIn
1 CARD8 code
1 detail
0 Ancestor
1 Virtual
2 Inferior
3 Nonlinear
4 NonlinearVirtual
5 Pointer
6 PointerRoot
7 None
2 CARD16 sequence number
4 TIMESTAMP time
4 WINDOW event
1 mode
0 Normal
1 Grab
2 Ungrab
3 WhileGrabbed
1 CARD8 device id
18 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DeviceFocusOut
1 CARD8 code
1 detail
0 Ancestor
1 Virtual
2 Inferior
3 Nonlinear
4 NonlinearVirtual
5 Pointer
6 PointerRoot
7 None
2 CARD16 sequence number
4 TIMESTAMP time
4 WINDOW event
1 mode
0 Normal
1 Grab
2 Ungrab
3 WhileGrabbed
1 CARD8 device id
18 unused
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
ProximityIn
1 CARD8 code
1 unused
2 CARD16 sequence number
4 TIMESTAMP time
4 WINDOW root
4 WINDOW event
4 WINDOW child
0 None
2 INT16 root-x
2 INT16 root-y
2 INT16 event-x
2 INT16 event-y
2 SETofKEYBUTMASK state
1 BOOL same-screen
1 CARD8 device id
#x80 MORE_EVENTS follow
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
ProximityOut
1 CARD8 code
1 unused
2 CARD16 sequence number
4 TIMESTAMP time
4 WINDOW root
4 WINDOW event
4 WINDOW child
0 None
2 INT16 root-x
2 INT16 root-y
2 INT16 event-x
2 INT16 event-y
2 SETofKEYBUTMASK state
1 BOOL same-screen
1 CARD8 device id
#x80 MORE_EVENTS follow
</literallayout>
</para>
<para>
<!-- .LP -->
DeviceStateNotify events may be immediately followed by zero or one
DeviceKeyStateNotify and/ or zero or more DeviceValuator events.
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DeviceStateNotify
1 CARD8 code
1 CARD8 device id
#x80 MORE_EVENTS follow
2 CARD16 sequence number
4 TIMESTAMP time
1 CARD8 num_keys
1 CARD8 num_buttons
1 CARD8 num_valuators
1 CARD8 valuator mode and input classes reported
#x01 reporting keys
#x02 reporting buttons
#x04 reporting valuators
#x40 device mode (0 = Relative, 1 = Absolute)
#x80 proximity state (0 = InProximity, 1 = OutOfProximity)
4 LISTofCARD8 first 32 keys (if reported)
4 LISTofCARD8 first 32 buttons (if reported)
12 LISTofCARD32 first 3 valuators (if reported)
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DeviceKeyStateNotify
1 CARD8 code
1 CARD8 device id
#x80 MORE_EVENTS follow
2 CARD16 sequence number
28 LISTofCARD8 state of keys 33-255
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DeviceButtonStateNotify
1 CARD8 code
1 CARD8 device id
#x80 MORE_EVENTS follow
2 CARD16 sequence number
28 LISTofCARD8 state of buttons 33-255
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DeviceValuator
1 CARD8 code
1 CARD8 device id
2 CARD16 sequence number
2 SETofKEYBUTMASK state
1 n number of valuators this device reports
1 n number of first valuator in this event
24 LISTofINT32 valuators
</literallayout>
</para>
<para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
DeviceMappingNotify
1 CARD8 code
1 CARD8 device id
2 CARD16 sequence number
1 request
0 MappingModifier
1 MappingKeyboard
2 MappingPointer
1 KEYCODE first-keycode
1 CARD8 count
1 unused
4 TIMESTAMP time
20 unused
</literallayout>
</para>
<!-- .LP -->
<literallayout class="monospaced">
<!-- .TA .2i .5i 1.5i 2.5i -->
<!-- .ta .2i .5i 1.5i 2.5i -->
ChangeDeviceNotify
1 CARD8 code
1 CARD8 id of device specified on change request
2 CARD16 sequence number
4 TIMESTAMP time
1 request
0 NewPointer
1 NewKeyboard
23 unused
</literallayout>
<!-- .\" print Table of Contents -->
<!-- .if o .bp \" blank page to make count even -->
<!-- .bp 1 -->
<!-- .af PN i -->
<!-- .PX -->
</appendix>