459 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			459 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
 | 
						|
 | 
						|
            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,2003 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
 | 
						|
 | 
						|
    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 1 and a minorVersion of 1.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    DMXGetScreenCount
 | 
						|
        ==>
 | 
						|
        screenCount: CARD32
 | 
						|
 | 
						|
    This request returns the number of back-end screens that the Xdmx
 | 
						|
    server controls.  A back-end screen may be managed as a regular X
 | 
						|
    screen in the Xdmx server or may be joined with other back-end
 | 
						|
    screens using Xinerama.  (The information returned by this request
 | 
						|
    does not change while Xdmx is running and may be cached on the
 | 
						|
    client side.)
 | 
						|
    
 | 
						|
 | 
						|
 | 
						|
    DMXGetScreenInformation
 | 
						|
        physicalScreen: CARD32
 | 
						|
        ==>
 | 
						|
        displayName: STRING8
 | 
						|
        width: CARD16
 | 
						|
        height: CARD16
 | 
						|
        xoffset: INT16
 | 
						|
        yoffset: INT16
 | 
						|
        logicalScreen: CARD32
 | 
						|
        xorigin: INT16
 | 
						|
        yorigin: INT16
 | 
						|
 | 
						|
        Errors: Value
 | 
						|
 | 
						|
    This request returns information about individual back-end screens.
 | 
						|
    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 width,
 | 
						|
    height, xoffset, and yoffset values comprise a geometry
 | 
						|
    specification (see X(7x)) for the location of the DMX window on the
 | 
						|
    back-end screen.  This request will always return non-negative
 | 
						|
    (i.e., normalized) values for xoffset and yoffset.  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 xorigin and yorigin values specify where the physical
 | 
						|
    screen is positioned in the global Xinerama coordinate system.
 | 
						|
    Otherwise, these values are set to 0.  (The information returned by
 | 
						|
    this request does not change while Xdmx is running and may be cached
 | 
						|
    on the client side.)
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    DMXGetWindowInformation
 | 
						|
        window: CARD32
 | 
						|
        ==>
 | 
						|
        screenCount: CARD32
 | 
						|
        screens: LISTofCARD32
 | 
						|
        windows: LISTofCARD32
 | 
						|
        pos: LISTofRECTANGLE
 | 
						|
        vis: LISTofRECTANGLE
 | 
						|
 | 
						|
        Errors: Window, Alloc
 | 
						|
 | 
						|
    This request computed the return values incorrectly for version 1.0
 | 
						|
    of this protocol.  Version 1.1 of this protocol conforms to this
 | 
						|
    description.
 | 
						|
 | 
						|
    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 DMXGetScreenInformation 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 DMXGetWindowInformation 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
 | 
						|
    DMXGetWindowInformation 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.
 | 
						|
 | 
						|
 | 
						|
    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.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    DMXGetInputInformation
 | 
						|
        deviceId: CARD32
 | 
						|
        ==>
 | 
						|
        inputType: CARD32
 | 
						|
        physicalScreen: CARD32
 | 
						|
        physicalId: CARD32
 | 
						|
        isCore: BOOL
 | 
						|
        sendsCore: BOOL
 | 
						|
        name: STRING8
 | 
						|
 | 
						|
        Errors: Value
 | 
						|
 | 
						|
    This request was first supported in version 1.1 of this 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 value, 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 DMXGetScreenInformation 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 DMXGetScreenInformation).
 | 
						|
 | 
						|
    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 queried an XInput extension device, but sends core events
 | 
						|
    instead of extension events.  Note that this behavior is different
 | 
						|
    from that of XFree86, where XInput extension devices may send both
 | 
						|
    extension events and core events.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    DMXForceWindowCreation
 | 
						|
        window: CARD32
 | 
						|
        ==>
 | 
						|
 | 
						|
        Errors: Window
 | 
						|
 | 
						|
    This request was first supported in version 1.2 of this protocol.
 | 
						|
 | 
						|
    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.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    DMXReconfigureScreen
 | 
						|
        screen: CARD32
 | 
						|
        x: INT16
 | 
						|
        y: INT16
 | 
						|
        ==>
 | 
						|
        status: CARD32
 | 
						|
 | 
						|
        Errors: Value
 | 
						|
 | 
						|
    This request was first supported in version 1.3 of this protocol.
 | 
						|
 | 
						|
    This request reconfigures the screen position to coordinates (x,y)
 | 
						|
    when using the Xinerama extension.  Otherwise, it is a NOP.  Illegal
 | 
						|
    values for screen will result in a BadValue error.  Other non-fatal
 | 
						|
    errors will be returned in status.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    DMXSync
 | 
						|
        ==>
 | 
						|
 | 
						|
    This request was first supported in version 1.5 of this protocol.
 | 
						|
 | 
						|
    This request flushes all pending protocol requests between the Xdmx
 | 
						|
    server and each back-end X server.  It is used by a client that
 | 
						|
    talks directly to back-end X servers
 | 
						|
 | 
						|
    To ensure proper synchronization semantics, this request has a
 | 
						|
    reply, but the reply does not carry any information.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
5. Events
 | 
						|
 | 
						|
    No new events are defined by this extension.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
6. Errors
 | 
						|
 | 
						|
    No new events are defined by this extension.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
7. Encoding
 | 
						|
 | 
						|
    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
 | 
						|
 | 
						|
    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
 | 
						|
 | 
						|
    DMXGetScreenInformation
 | 
						|
        1           CARD8           opcode (X assigned)
 | 
						|
        1           2               DMX opcode (X_DMXGetScreenInformation)
 | 
						|
        2           2               request length
 | 
						|
        4           CARD32          physicalScreen
 | 
						|
    ==>
 | 
						|
        1           1               Reply
 | 
						|
        1                           unused
 | 
						|
        2           CARD16          sequence number
 | 
						|
        4           n/4+p           reply length
 | 
						|
        4           n               displayNameLength
 | 
						|
        2           CARD16          width
 | 
						|
        2           CARD16          height
 | 
						|
        2           INT16           xoffset
 | 
						|
        2           INT16           yoffset
 | 
						|
        4           CARD32          logicalScreen
 | 
						|
        2           INT16           xorigin
 | 
						|
        2           INT16           yorigin
 | 
						|
        4                           unused
 | 
						|
        n                           displayName
 | 
						|
        p                           pad(n)
 | 
						|
 | 
						|
    DMXGetWindowInformation
 | 
						|
        1           CARD8           opcode (X assigned)
 | 
						|
        1           3               DMX opcode (X_DMXGetWindowInformation)
 | 
						|
        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
 | 
						|
 | 
						|
    DMXGetInputCount
 | 
						|
        1           CARD8           opcode (X assigned)
 | 
						|
        1                           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
 | 
						|
 | 
						|
    DMXGetInputInformation
 | 
						|
        1           CARD8           opcode (X assigned)
 | 
						|
        1           4               DMX opcode (X_DMXGetInputInformation)
 | 
						|
        2           2               request length
 | 
						|
        4           CARD32          deviceId
 | 
						|
    ==>
 | 
						|
        1           1               Reply
 | 
						|
        1                           unused
 | 
						|
        2           CARD16          sequence number
 | 
						|
        4           n/4+p           reply length
 | 
						|
        4           CARD32          inputType
 | 
						|
        4           CARD32          physicalScreen
 | 
						|
        4           CARD32          physicalId
 | 
						|
        4           n               nameLength
 | 
						|
        1           BOOL            isCore
 | 
						|
        1           BOOL            sendsCore
 | 
						|
        6                           unused
 | 
						|
        n                           name
 | 
						|
        p                           pad(n)
 | 
						|
 | 
						|
    DMXForceWindowCreation
 | 
						|
        1           CARD8           opcode (X assigned)
 | 
						|
        1           2               DMX opcode (X_DMXForceWindowCreation)
 | 
						|
        2           2               request length
 | 
						|
        4           CARD32          window
 | 
						|
    ==>
 | 
						|
 | 
						|
    DMXReconfigureScreen
 | 
						|
        1           CARD8           opcode (X assigned)
 | 
						|
        1           2               DMX opcode (X_DMXReconfigureScreen)
 | 
						|
        2           2               request length
 | 
						|
        4           CARD32          screen
 | 
						|
        2           INT16           x
 | 
						|
        2           INT16           y
 | 
						|
    ==>
 | 
						|
        1           1               Reply
 | 
						|
        1                           unused
 | 
						|
        2           CARD16          sequence number
 | 
						|
        4           0               reply length
 | 
						|
        4           CARD32          status
 | 
						|
        20                          unused
 | 
						|
 | 
						|
    DMXSync
 | 
						|
        1           CARD8           opcode (X assigned)
 | 
						|
        1           0               DMX opcode (X_DMXSync)
 | 
						|
        2           1               request length
 | 
						|
    ==>
 | 
						|
        1           1               Reply
 | 
						|
        1                           unused
 | 
						|
        2           CARD16          sequence number
 | 
						|
        4           0               reply length
 | 
						|
        24                          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.
 |