diff options
Diffstat (limited to 'xorg-server/hw/dmx/doc/DMXSpec.txt')
-rw-r--r-- | xorg-server/hw/dmx/doc/DMXSpec.txt | 875 |
1 files changed, 875 insertions, 0 deletions
diff --git a/xorg-server/hw/dmx/doc/DMXSpec.txt b/xorg-server/hw/dmx/doc/DMXSpec.txt new file mode 100644 index 000000000..4009f1210 --- /dev/null +++ b/xorg-server/hw/dmx/doc/DMXSpec.txt @@ -0,0 +1,875 @@ + + + Client-to-Server DMX Extension to the X Protocol + + $Date$, $Revision$ + + Rickard E. (Rik) Faith (faith@redhat.com) + Kevin E. Martin (kem@redhat.com) + + Copyright 2002-2004 Red Hat Inc., Raleigh, North Carolina. + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation files + (the "Software"), to deal in the Software without restriction, + including without limitation on the rights to use, copy, modify, + merge, publish, distribute, sublicense, and/or sell copies of the + Software, and to permit persons to whom the Software is furnished to + do so, subject to the following conditions: + + The above copyright notice and this permission notice (including the + next paragraph) shall be included in all copies or substantial + portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + + +1. Overview + + The client-to-server DMX extension to the X protocol (DMX) provides + normal client applications with the ability to determine information + about the characteristics of the Xdmx server and the back-end X + servers that DMX is using. + + The name for this extension is "DMX". + + + +2. Syntactic conventions + + This document uses the same syntactic conventions requests and data + types as [X11R6.4]. + + + +3. Data types + + No new data types are defined by this extension. All data types + referenced in this document are defined in [X11R6.4]. + + + +4. Requests + + DMXQueryVersion + ==> + majorVersion: CARD32 + minorVersion: CARD32 + patchVersion: CARD32 + + Errors: None + + The protocol this extension actually supports is indicated by + majorVersion and minorVersion (patchVersion indicates the + patchlevel and is for informational purposes only). + + Any incompatible changes to the protocol should be indicated by + incrementing majorVersion. + + Small, upward-compatible changes should be indicated by incrementing + minorVersion. + + Servers that support the protocol defined in this document will + return a majorVersion of 2 and a minorVersion of 2. + + (Version 1.5 was the last version in the 1.x series; version 2.0 was + a testing version that was poorly defined.) + + + + DMXSync + ==> + status: CARD32 + + Errors: None + + This request was first supported in version 1.5 of this protocol. + The status field in the reply was introduced in version 2.0 of this + protocol. Since the status field is ignored, no changes to the + underlying protocol were required. + + This request flushes all pending protocol requests between the Xdmx + server and each back-end X server. It is used by clients that + talk directly to back-end X servers to ensure that all pending Xdmx + requests have reached all back-end servers and have been processed + by those servers. + + The value of status is always 0. + + + + DMXForceWindowCreation + window: CARD32 + ==> + status: CARD32 + + Errors: Window + + This request was first supported in version 1.2 of this protocol. + This request was changed to have a reply in version 2.0 of this + protocol. The old version of this request was deprecated and will + return BadImplementation. + + When using the lazy window creation optimization, windows are not + created on the back-end X servers until they are required. This + request forces the immediate creation of the window requested. + + The value of status is always 0. + + + + + DMXGetScreenCount + ==> + screenCount: CARD32 + + Errors: None + + This request returns the number of screens that the Xdmx server + controls. Since a DMX screen usually fills all of the available + area on a back-end server, there is usually a one-to-one + correspondence between DMX screens and backend servers. However, it + is also possible for a DMX screen to cover only part of the + available area on a back-end server, and for more than one DMX + screen to occupy different parts of the visible area on the same + back-end server. + + A DMX screen may be managed as a regular X screen in the Xdmx server + or may be joined with other DMX screens using Xinerama. + + + + DMXGetScreenAttributes + physicalScreen: CARD32 + ==> + displayName: STRING8 + logicalScreen: CARD32 + screenWindowWidth: CARD16 + screenWindowHeight: CARD16 + screenWindowXoffset: INT16 + screenWindowYoffset: INT16 + rootWindowWidth: CARD16 + rootWindowHeight: CARD16 + rootWindowXoffset: INT16 + rootWindowYoffset: INT16 + rootWindowXorigin: INT16 + rootWindowYorigin: INT16 + + Errors: Value + + This request is new in version 2.0 of this protocol. The old + DMXGetScreenInformation request is deprecated and will now return + BadImplementation. + + This request returns attributes about a single DMX screen. + + The physicalScreen value is between 0 and screenCount-1, inclusive + (values outside this range will result in a Value error). + + The displayname is the name used to open the display, either from + the Xdmx command-line or from the configuration file. + + The logicalScreen value is the value of the screen that that Xdmx + server exports to clients. When Xinerama is in use, this value is + typically 0 for all values of physicalScreen. If Xinerama is in + use, the rootWindowXOrigin and rootWindowYOrigin values specify + where the physical screen is positioned in the global Xinerama + coordinate system. Otherwise, these values are set to 0. + + The screenWindow values comprise a geometry specification (see + X(7x)) for the location of the DMX screen on the back-end screen. + The coordinant system of the back-end display is used. + + The first four rootWindow values comprise a geometry specification + (see X(7x)) for the location of the root window on the screen + window. The coordinant system of the screen window is used. In + most cases, the root window will have the same geometry as the DMX + screen window, and will occupy the same area of the back-end + display. (This would not be the case, for example, if automatic + projector alignment is used.) + + + + DMXChangeScreensAttributes + screenCount: CARD32 + maskCount: CARD32 + screens: LISTofCARD32 + valueMasks: LISTofCARD32 + valueList: LISTofVALUES + ==> + status: CARD32 + errorScreen: CARD32 + + Errors: Length, Alloc + + This request was first supported in version 2.0 of this protocol. + (A singular version of this request with the ability to change some + RootWindow attributes was supported in version 1.3 of this protocol, + has been deprecated, and will return BadImplementation.) + + This request changes the geometries and positions of the DMX screen + and DMX root windows on the back-end X servers. + + The valueMask and valueList specify which attributes are to be + changed. The possible values are: + + Attribute Type + + ScreenWindowWidth CARD16 + ScreenWindowHeight CARD16 + ScreenWindowXoffset INT16 + ScreenWindowYoffset INT16 + RootWindowWidth CARD16 + RootWindowHeight CARD16 + RootWindowXoffset INT16 + RootWindowYoffset INT16 + RootWindowXorigin INT16 + RootWindowYorigin INT16 + + The attribute values have the same meaning as do the corresponding + values for DMXGetScreenAttributes. + + Non-fatal errors will be returned in status (0 otherwise): + DmxBadXinerama: Xinerama is not active + DmxBadValue: The resulting position is not allowed + (e.g., one corner is outside the bounding box) + On error, errorScreen will contain the number of the screen that + caused the first error. + + + + DMXAddScreen + displayName: STRING8 + physicalScreen: CARD32 + valueMask: CARD32 + valueList: LISTofVALUES + ==> + status: CARD32 + physicalScreen: CARD32 + + Errors: Length, Alloc, Value + + This request was first supported in version 2.2 of this protocol. + + This request re-attaches the back-end physicalScreen to the Xdmx + server. Only back-end screens that have been previously detached + with DMXRemoveScreen may be added. The name of the back-end display + is given in displayName, and this will replace the name of the + back-end screen that was detached. Both the displayName and + physicalScreen must be correct for this request to work. + + The valueMask and valueList specify the attributes to be used. The + possible values are: + + Attribute Type + + ScreenWindowWidth CARD16 + ScreenWindowHeight CARD16 + ScreenWindowXoffset INT16 + ScreenWindowYoffset INT16 + RootWindowWidth CARD16 + RootWindowHeight CARD16 + RootWindowXoffset INT16 + RootWindowYoffset INT16 + RootWindowXorigin INT16 + RootWindowYorigin INT16 + + The attribute values have the same meaning as do the corresponding + values for DMXGetScreenAttributes. + + On success, status will be 0 and physicalScreen will contain the new + screen number. On failure, status will be non-zero. The status + will be 1 if any of the following occured: + * the -addremovescreens command-line option was not specified on + the Xdmx command line + * the value of physicalScreen is out of range + * physicalScreen has not been detached (with DMXRemoveScreen) + * displayName cannot be opened + * the visuals of displayname do not match the visuals that Xdmx + is using + * the screen data for displayName does not match the data for the + previously removed display + The status will be DmxBadValue if the attribute values are out of + range. + + + + DMXRemoveScreen + physicalScreen: CARD32 + ==> + status: CARD32 + + Errors: None + + This request was first supported in version 2.2 of this protocol. + + This request detaches the physicalScreen screen. + + On success, status will be 0. On failure, the status will 1 if any + of the following occur: + * the -addremovescreens command-line option was not specified on + the Xdmx command line + * the value of physicalScreen is out of range + * the back-end screen has already been detached. + + + + DMXGetWindowAttributes + window: CARD32 + ==> + screenCount: CARD32 + screens: LISTofCARD32 + windows: LISTofCARD32 + pos: LISTofRECTANGLE + vis: LISTofRECTANGLE + + Errors: Window, Alloc + + This request computes the return values incorrectly for version 1.0 + of this protocol. Version 1.1 of this protocol conforms to this + description. In version 2.0, the name of this request was changed + from DMXGetWindowInformation. However, since the request itself did + not change, no changes to the underlying protocol were made. + + Given a window ID on the Xdmx server, this request returns data + about how the window is represented on the back-end X servers. For + each back-end X server that displays a portion of the window, the + following information is returned: + 1) the number of the physical screen containing that portion + (which can be used with the DMXGetScreenAttributes request + to obtain more information about the screen), + 2) the window ID on the back-end X server of the window + containing that portion, + 3) the position and dimensions of the window on the back-end, in + screen coordinates, and + 4) the visible area of the window on the back-end, in + window-relative coordinates (all zeros for windows that are + not visible). + Note that DMX allows multiple back-end windows to overlap in their + view of the DMX logical window. Further, a logical window does not + have to be completely covered by back-end windows -- there may be + gaps. + + As an example, consider a 500x500 window that spans the top two + 1024x768 back-end displays (A and B) of a 2048x1536 DMX display + composed of 4 1024x768 back-end displays arranged in a cube: + A B + C D + + In this case, the DMXGetWindowAttributes call would return the + following information for the 500x500 window: + + display A: 500x500 window at 1024-250,0 (relative to back end) + with 250x500 visible at 0,0 (relative to window origin) + + display B: 500x500 window at -250,0 (relative to back end) + with 250x500 visible at 250,0 (relative to window origin) + + display C: 500x500 window at 1024-250,-768 with 0x0 visible at 0,0 + + display D: 500x500 window at -250,-768 with 0x0 visible at 0,0 + + Note that if the specified window has not yet been mapped when + DMXGetWindowAttributes is called, then a subsequent XMapWindow call + might be buffered in xlib while requests directly to the back-end X + servers are processed. This race condition can be solved by calling + DMXSync before talking directly to the back-end X servers. + + + + DMXGetDesktopAttributes + ==> + width: INT16 + height: INT16 + shiftX: INT16 + shiftY: INT16 + + Errors: None + + This request was first supported in version 2.0 of this protocol. + + This request returns the size of the bounding box of the whole + screen in width and height. The shiftX and shiftY values will + always be 0. The global bounding box is computed whether or not + Xinerama is active, and may be larger than the Xinerama screen size + because of information in the configuration file. + + + + DMXChangeDesktopAttributes + valueMask: BITMASK + valueList: LISTofVALUE + ==> + status: CARD32 + + Errors: Length, Value + + This request was first supported in version 2.0 of this protocol. + + This request resizes the bounding box of the whole screen when using + the Xinerama extension. Otherwise, it has no effect on the screen + layout. The valueMask and valueList specify which attributes are to + be changed. The possible values are: + + Attriubute Type + + Width INT16 + Height INT16 + ShiftX INT16 + ShiftY INT16 + + Width and Height specify the new width and height for the bounding + box. ShiftX and ShiftY specify where the Xinerama origin will be + placed with respect to the origin of the new bounding box. This + allows the left and upper edges of the bounding box to be changed + without changing the visual position of the windows on the desktop. + If Width or Height is not specified, the current values will be + used. If ShiftX or ShiftY is not specified, 0 will be used. + + All coordinants are in the global DMX coordinant system. If + Xinerama is not active, this request is not useful. + + Non-fatal errors will be returned in status (0 otherwise): + DmxBadXinerama: Xinerama is not active + DmxBadValue: The size of the bounding box is too large + + + + DMXGetInputCount + ==> + inputCount: CARD32 + + This request was first supported in version 1.1 of this protocol. + + This request returns the number of input devices connected to the + Xdmx server. This number is the same as that returned by + XListInputDevices, but is available even when the XInput extension + is not supported. + + + + DMXGetInputAttributes + deviceId: CARD32 + ==> + inputType: CARD32 + physicalScreen: CARD32 + physicalId: CARD32 + isCore: BOOL + sendsCore: BOOL + detached: BOOL + name: STRING8 + + Errors: Value + + This request was first supported in version 1.1 of this protocol. + In version 2.0, the name of this request was changed from + DMXGetInputInformation. However, since the request itself did not + change, no changes to the underlying protocol were made. In version + 2.2, the name of detached was changed from reservation. There was + no change in underlying protocol. + + This request returns information about the specified input device + that cannot be obtained from the XListInputDeivices call. The + deviceId is the same as that used by the XListInputDevices call, and + must be in the range 0 to inputCount-1, inclusive (values outside + this range will result in a Value error). + + The value of inputType will always be valid, and will be one of the + following values: + 0 for local (and dummy) devices, + 1 for console devices, and + 2 for back-end devices. + + For local devices, all other fields returned, except isCore and + sendsCore, are invalid. + + For console devices, the physicalScreen and physicalID will be + invalid, and the name will return the name of the X server on which + the console window is displayed. + + For back-end devices, the physicalScreen will identify the back-end + display and can be used as an argument to DMXGetScreenAttributes to + obtain more information; the physicalId will be the XInput device id + on the back-end X server; and the name will be invalid (since it + does not provide any additional information that cannot be obtained + with DMXGetScreenAttributes). + + If isCore is True, then this device is active as a true core input + device and will send core events. If sendsCore is True, then this + device is an XInput extension device, but sends core events instead + of extension events. Note that this behavior is different from that + of XFree86 or Xorg, where XInput extension devices may send both + extension events and core events. + + If detached is True, then this device has been detached and is no + longer producing input events. The device may be reattached using + DMXAddInput. + + + + DMXAddInput + displayName: STRING8 + valueMask: CARD32 + valueList: LISTofVALUES + ==> + status: CARD32 + physicalId: CARD32 + + Errors: Value, Access + + This request was first supported in version 2.2 of this protocol. + + The valueMask and valueList specify the attributes to be used. The + possible values are: + + Attribute Type + + InputType CARD32 + InputPhysicalScreen CARD32 + InputSendsCore BOOL + + This request attaches an input device to the Xdmx server. The value + of inputType will be one: + 1 for console devices, and + 2 for back-end devices. + Other values of InputType will return a BadValue error. Local + devices (inputType=0 in DMXGetInputAttributes) cannot be attached or + removed. For console devices, displayName will store the name of + the display to be used. + + For back-end devices, InputPhysicalScreen will specify the screen + number. BadValue will be returned if the screen number is out of + range. BadAccess will be returned if the input has already been + attached or if the backend screen is currently detached. + + If InputSendsCore is True, the new device will be added as a true + core device. + + If a device was removed with DMXRemoveInput an attempt will be made + to reconnect the previous devices (InputSendsCore is ignored in this + case). + + + + DMXRemoveInput + physicalId: CARD32 + ==> + status: CARD32 + + Errors: Value, Access + + This request was first supported in version 2.2 of this protocol. + + This request detaches the input device with physicalId, and all + associated inputs (e.g., if the physicalId is a backend mouse, and a + keyboard is also attached to the backend, then both devices will be + detached). If the physicalId is outside the valid range (0 to one + less than the value returned by DMXInputCount), BadValue is + returned. If the physicalId has already been detached, BadAccess is + returned. The status is always 0. + + + +5. Events + + No new events are defined by this extension. + + + +6. Errors + + No new events are defined by this extension. + + + +7. Encoding + + Deprecated DMX opcodes: + DMXGetScreenInformation 2 + DMXForceWindowCreation 6 + DMXReconfigureScreen 7 + + Valid DMX opcodes: + DMXQueryVersion 0 + DMXSync 8 + DMXForceWindowCreation 9 + + DMXGetScreenCount 1 + DMXGetScreenAttributes 10 + DMXChangeScreensAttributes 11 + DMXAddScreen 12 + DMXRemoveScreen 13 + + DMXGetWindowAttributes 3 + + DMXGetDesktopAttributes 14 + DMXChangeDesktopAttributes 15 + + DMXGetInputCount 4 + DMXGetInputAttributes 5 + DMXAddInput 16 + DMXRemoveInput 17 + + DMXQueryVersion + 1 CARD8 opcode (X assigned) + 1 0 DMX opcode (X_DMXQueryVersion) + 2 1 request length + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 4 CARD32 majorVersion + 4 CARD32 minorVersion + 4 CARD32 patchVersion + 12 unused + + DMXSync + 1 CARD8 opcode (X assigned) + 1 8 DMX opcode (X_DMXSync) + 2 1 request length + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 4 CARD32 status + 20 unused + + DMXForceWindowCreation + 1 CARD8 opcode (X assigned) + 1 9 DMX opcode (X_DMXForceWindowCreation) + 2 2 request length + 4 CARD32 window + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 4 CARD32 status + 20 unused + + + DMXGetScreenCount + 1 CARD8 opcode (X assigned) + 1 1 DMX opcode (X_DMXGetScreenCount) + 2 1 request length + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 4 CARD32 screenCount + 20 unused + + DMXGetScreenAttributes + 1 CARD8 opcode (X assigned) + 1 10 DMX opcode (X_DMXGetScreenAttributes) + 2 2 request length + 4 CARD32 physicalScreen + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 1+(n+p)/4 reply length + 4 n displayNameLength + 4 CARD32 logicalScreen + 2 CARD16 screenWindowWidth + 2 CARD16 screenWindowHeight + 2 INT16 screenWindowXoffset + 2 INT16 screenWindowYoffset + 2 CARD16 rootWindowWidth + 2 CARD16 rootWindowHeight + 2 INT16 rootWindowXoffset + 2 INT16 rootWindowYoffset + 2 INT16 rootWindowXorigin + 2 INT16 rootWindowYorigin + n displayName + p pad(n) + + DMXChangeScreensAttributes + 1 CARD8 opcode (X assigned) + 1 11 DMX opcode (X_DMXChangeScreenAttributes) + 2 3+s+m+n request length + 4 s screenCount + 4 m maskCount + 4s LISTofCARD32 screens + 4m LISTofCARD32 valueMasks + 4n LISTofVALUES valueList + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 4 CARD32 status + 4 CARD32 errorScreen + 16 unused + + + DMXAddScreen + 1 CARD8 opcode (X assigned) + 1 12 DMX opcode (X_DMXAddScreen) + 2 3+m+(n+p)/4 request length + 4 n displayNameLength + 4 CARD32 physicalScreen + 4 CARD32 valueMask + 4m LISTofVALUES valueList + n displayName + p pad(n) + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 4 CARD32 status + 4 CARD32 physicalScreen + 16 unused + + DMXRemoveScreen + 1 CARD8 opcode (X assigned) + 1 13 DMX opcode (X_DMXRemoveScreen) + 2 2 request length + 4 CARD32 physicalScreen + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 4 CARD32 status + 20 unused + + DMXGetWindowAttributes + 1 CARD8 opcode (X assigned) + 1 3 DMX opcode (X_DMXGetWindowAttributes) + 2 2 request length + 4 CARD32 window + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 n*6 reply length + 4 n screenCount + 20 unused + n*4 LISTofCARD32 screens + n*4 LISTofCARD32 windows + n*8 LISTofRECTANGLE pos + n*8 LISTofRECTANGLE vis + + DMXGetDesktopAttributes + 1 CARD8 opcode (X assigned) + 1 14 DMX opcode (X_DMXGetDesktopAttributes) + 2 1 request length + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 2 INT16 width + 2 INT16 height + 2 INT16 shiftX + 2 INT16 shiftY + 16 unused + + DMXChangeDesktopAttributes + 1 CARD8 opcode (X assigned) + 1 15 DMX opcode (X_DMXChangeDesktopAttributes) + 2 2+n request length + 4 BITMASK valueMask + 4n LISTofVALUES valueList + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 4 CARD32 status + 20 unused + + DMXGetInputCount + 1 CARD8 opcode (X assigned) + 1 4 DMX opcode (X_DMXGetInputCount) + 2 1 request length + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 4 CARD32 inputCount + 20 unused + + DMXGetInputAttributes + 1 CARD8 opcode (X assigned) + 1 5 DMX opcode (X_DMXGetInputAttributes) + 2 2 request length + 4 CARD32 deviceId + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 (n+p)/4 reply length + 4 CARD32 inputType + 4 CARD32 physicalScreen + 4 CARD32 physicalId + 4 n nameLength + 1 BOOL isCore + 1 BOOL sendsCore + 1 BOOL detached + 5 unused + n name + p pad(n) + + DMXAddInput + 1 CARD8 opcode (X assigned) + 1 16 DMX opcode (X_DMXAddInput) + 2 3+m+(n+p)/4 request length + 4 n displayNameLength + 4 CARD32 valueMask + 4m LISTofVALUES valueList + n displayName + p pad(n) + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 4 CARD32 status + 4 CARD32 physicalId + 16 unused + + DMXRemoveInput + 1 CARD8 opcode (X assigned) + 1 17 DMX opcode (X_DMXRemoveInput) + 2 3 request length + 4 CARD32 physicalId + ==> + 1 1 Reply + 1 unused + 2 CARD16 sequence number + 4 0 reply length + 4 CARD32 status + 20 unused + + +8. Changes to existing requests/replies/events + + No changes to existing requests, replies, or events are necessitated + by this extension. + + + +9. Acknowledgments + + + +10. References + + [X11R6.4] Robert W. Sheifler. X Window System Protocol, X Consortium + Standard, X Version 11, Release 6.4. Available from + xc/doc/specs/XProtocol and xc/doc/hardcopy/XProtocol. |