.\" $XConsortium: encoding.ms,v 1.9 94/04/28 16:38:34 gildea Exp $ \& .sp 1 .XS Appendix A \- Input Extension Protocol Encoding .XE .ce 2 .ps 11 .nr PS 11 .ps +2 \fBAppendix A\fP \fBInput Extension Protocol Encoding\fP .ps .sp 2 .LP .ps 9 .nr PS 9 .vs 10 .nr VS 10 .\"The sections in this appendix correspond to their number counterparts .\"in the protocol document. .ps +2 \fBSyntactic Conventions\fP .ps -3 .LP All numbers are in decimal, unless prefixed with #x, in which case they are in hexadecimal (base 16). .LP The general syntax used to describe requests, replies, errors, events, and compound types is: .LP .DS I \fBNameofThing\fP encode-form ... encode-form .DE Each encode-form describes a single component. .LP For components described in the protocol as: .LP .DS I name: TYPE .DE the encode-form is: .LP .DS I .TA 1i 1.5i 2.5i .ta 1i 1.5i 2.5i N TYPE name .DE N is the number of bytes occupied in the data stream, and TYPE is the interpretation of those bytes. For example, .LP .DS I .TA 1i 1.5i .ta 1i 1.5i depth: CARD8 .DE becomes: .LP .DS I .TA 1i 1.5i 2.5i .ta 1i 1.5i 2.5i 1 CARD8 depth .DE For components with a static numeric value the encode-form is: .LP .DS I .TA 1i 1.5i 2.5i .ta 1i 1.5i 2.5i N value name .DE 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): .LP .DS I .TA 1i 1.5i 2.5i .ta 1i 1.5i 2.5i 1 0 Error 1 3 code .DE For components described in the protocol as: .LP .DS I name: \fB{Name1, ..., NameI}\fP .DE .LP the encode-form is: .LP .DS I .TA 1i 1.5i 2.5i .ta 1i 1.5i 2.5i N name value1 Name1 ... valueI NameI .DE 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: .LP .DS I class: \fB{InputOutput, InputOnly, CopyFromParent}\fP .DE .LP becomes: .LP .DS I .TA 1i 1.5i 2.5i 3i .ta 1i 1.5i 2.5i 3i 2 class 0 CopyFromParent 1 InputOutput 2 InputOnly .DE For components described in the protocol as: .LP .DS I NAME: TYPE or \fBAlternative1 ... or AlternativeI\fP .DE .LP the encode-form is: .LP .DS I .TA 1i 1.5i 2i 2.5i 3i .ta 1i 1.5i 2i 2.5i 3i N TYPE NAME value1 Alternative1 ... valueI AlternativeI .DE The alternative values are guaranteed not to conflict with the encoding of TYPE. For example: .LP .DS destination: WINDOW or \fBPointerWindow\fP or \fBInputFocus\fP .DE .LP becomes: .LP .DS I .TA 1i 1.5i 2.5i .ta 1i 1.5i 2.5i 4 WINDOW destination 0 PointerWindow 1 InputFocus .DE For components described in the protocol as: .LP .DS I .TA 1i 1.5i .ta 1i 1.5i value-mask: BITMASK .DE the encode-form is: .LP .DS I .TA 1i 1.5i 2i 2.5i .ta 1i 1.5i 2i 2.5i N BITMASK value-mask mask1 mask-name1 ... maskI mask-nameI .DE 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. .LP For LISTofVALUE encodings, the request is followed by a section of the form: .LP .DS I .TA 1i 1.5i .ta 1i 1.5i VALUEs encode-form ... encode-form .DE 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. .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: .LP .DS I .TA 1i 1.5i 2i 2.5i .ta 1i 1.5i 2i 2.5i 2 3+n request length 4n LISTofPOINT points .DE For unused bytes (the values of the bytes are undefined and do not matter), the encode-form is: .LP .DS I .TA 1i 1.5i 2i 2.5i .ta 1i 1.5i 2i 2.5i N unused .DE If the number of unused bytes is variable, the encode-form typically is: .LP .DS I .TA 1i 1.5i 2i 2.5i .ta 1i 1.5i 2i 2.5i p unused, p=pad(E) .DE where E is some expression, and pad(E) is the number of bytes needed to round E up to a multiple of four. .LP .DS I .TA 1i 1.5i 2i 2.5i .ta 1i 1.5i 2i 2.5i pad(E) = (4 - (E mod 4)) mod 4 .DE .ps +2 \fBCommon Types\fP .ps .LP LISTofFOO .IP 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. .LP SETofFOO .IP A set is always represented by a bitmask, with a 1-bit indicating presence in the set. .LP BITMASK: CARD32 .LP WINDOW: CARD32 .LP BYTE: 8-bit value .LP INT8: 8-bit signed integer .LP INT16: 16-bit signed integer .LP INT32: 32-bit signed integer .LP CARD8: 8-bit unsigned integer .LP CARD16: 16-bit unsigned integer .LP CARD32: 32-bit unsigned integer .LP TIMESTAMP: CARD32 .LP EVENTCLASS: CARD32 .LP .DS 0 .TA .75i 1.75i .ta .75i 1.75i INPUTCLASS 0 KeyClass 1 ButtonClass 2 ValuatorClass 3 FeedbackClass 4 ProximityClass 5 FocusClass 6 OtherClass .DE .LP .DS 0 .TA .75i 1.75i .ta .75i 1.75i INPUTCLASS 0 KbdFeedbackClass 1 PtrFeedbackClass 2 StringFeedbackClass 3 IntegerFeedbackClass 4 LedFeedbackClass 5 BellFeedbackClass .DE .LP .DS 0 .TA .75i 1.75i .ta .75i 1.75i INPUTINFO 0 KEYINFO 1 BUTTONINFO 2 VALUATORINFO .DE .LP .DS 0 .TA .75i 1.75i .ta .75i 1.75i DEVICEMODE 0 Relative 1 Absolute .DE .LP .DS 0 .TA .75i 1.75i .ta .75i 1.75i PROXIMITYSTATE 0 InProximity 1 OutOfProximity .DE .LP .DS 0 .TA .75i 1.75i .ta .75i 1.75i BOOL 0 False 1 True .DE .LP KEYSYM: CARD32 .LP KEYCODE: CARD8 .LP BUTTON: CARD8 .LP .DS 0 .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 .DE .LP .DS 0 .TA .75i 1.75i .ta .75i 1.75i SETofKEYMASK encodings are the same as for SETofKEYBUTMASK, except with #xff00 unused but must be zero .DE .LP STRING8: LISTofCARD8 .LP .DS 0 .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 .DE .ps +2 \fBErrors\fP .ps .LP .DS 0 .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 .DE .LP .DS 0 .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 <32-bits> bad value 2 CARD16 minor opcode 1 CARD8 major opcode 21 unused .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .ps +2 Keyboards .ps .LP KEYCODE values are always greater than 7 (and less than 256). .LP KEYSYM values with the bit #x10000000 set are reserved as vendor-specific. .LP The names and encodings of the standard KEYSYM values are contained in .\"Appendix B, Keysym Encoding. appendix F. .LP .ps +2 Pointers .ps .LP BUTTON values are numbered starting with one. .LP .ps +2 Requests .ps .LP .DS 0 .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) .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i => 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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i => 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) .DE .LP .DS 0 .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) .DE .LP .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i INPUTINFO KEYINFO or BUTTONINFO or VALUATORINFO .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 3.5i .ta .2i .5i 1.5i 3.5i => 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) .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 3.5i .ta .2i .5i 1.5i 3.5i => 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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i => 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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i => 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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 3.5i .ta .2i .5i 1.5i 3.5i => 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 .DE .LP .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i DEVICETIMECOORD 4 TIMESTAMP time 4m LISTofINT32 valuators .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i => 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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i => 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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i => 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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i => 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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i => 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 .DE .LP .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i FEEDBACKSTATE KBDFEEDBACKSTATE, PTRFEEDBACKSTATE, INTEGERFEEDBACKSTATE, STRINGFEEDBACKSTATE, BELLFEEDBACKSTATE, or LEDFEEDBACKSTATE .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i FEEDBACKCLASS KBDFEEDBACKCTL, PTRFEEDBACKCTL, INTEGERFEEDBACKCTL, STRINGFEEDBACKCTL, BELLFEEDBACKCTL, or LEDFEEDBACKCTL .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .75i 2.0i 3.0i .ta .2i .75i 2.0i 3.0i => 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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i => 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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i => 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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i => 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) .DE .LP .DS 0 .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) .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i => 1 1 Reply 1 29 SetDeviceButtonMapping opcode 2 CARD16 sequence number 4 0 reply length 1 status 0 Success 1 Busy 23 unused .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i => 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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i INPUTSTATE KEYSTATE or BUTTONSTATE or VALUATORSTATE .DE .LP .DS 0 .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 .DE .DS 0 .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 .DE .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 3.5i .ta .2i .5i 1.5i 3.5i => 1 1 Reply 1 33 SetDeviceValuators opcode 2 CARD16 sequence number 4 0 reply length 1 CARD8 status 0 Success 1 AlreadyGrabbed 23 unused .DE .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 3.5i .ta .2i .5i 1.5i 3.5i => 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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i DEVICESTATE DEVICERESOLUTIONSTATE .DE .LP .DS 0 .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 .DE .LP .LP .DS 0 .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 .DE .DS 0 .TA .2i .5i 1.5i 2.5i .ta .2i .5i 1.5i 2.5i DEVICECONTROL DEVICERESOLUTIONCTL .DE .LP .DS 0 .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 .DE .LP .DS 0 .TA .2i .5i 1.5i 3.5i .ta .2i .5i 1.5i 3.5i => 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 .DE .ps +2 Events .ps .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. .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP DeviceStateNotify events may be immediately followed by zero or one DeviceKeyStateNotify and/ or zero or more DeviceValuator events. .LP .DS 0 .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) .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .LP .DS 0 .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 .DE .\" print Table of Contents .if o .bp \" blank page to make count even .bp 1 .af PN i .PX