<?xml version="1.0" encoding="utf-8"?>
<node>
  <!--
      org.qemu.Display1.VM:

      This interface is implemented on ``/org/qemu/Display1/VM``.
  -->
  <interface name="org.qemu.Display1.VM">
    <!--
        Name:

        The name of the VM.
    -->
    <property name="Name" type="s" access="read"/>

    <!--
        UUID:

        The UUID of the VM.
    -->
    <property name="UUID" type="s" access="read"/>

    <!--
        ConsoleIDs:

        The list of consoles available on ``/org/qemu/Display1/Console_$id``.
    -->
    <property name="ConsoleIDs" type="au" access="read"/>
  </interface>

  <!--
      org.qemu.Display1.Console:

      This interface is implemented on ``/org/qemu/Display1/Console_$id``. You
      may discover available consoles through introspection or with the
      :dbus:prop:`org.qemu.Display1.VM.ConsoleIDs` property.

      A console is attached to a video device head. It may be "Graphic" or
      "Text" (see :dbus:prop:`Type` and other properties).

      Interactions with a console may be done with
      :dbus:iface:`org.qemu.Display1.Keyboard` and
      :dbus:iface:`org.qemu.Display1.Mouse` interfaces when available.
  -->
  <interface name="org.qemu.Display1.Console">
    <!--
        RegisterListener:
        @listener: a Unix socket FD, for peer-to-peer D-Bus communication.

        Register a console listener, which will receive display updates, until
        it is disconnected.

        Multiple listeners may be registered simultaneously.

        The listener is expected to implement the
        :dbus:iface:`org.qemu.Display1.Listener` interface.
    -->
    <method name="RegisterListener">
      <arg type="h" name="listener" direction="in"/>
    </method>

    <!--
        SetUIInfo:
        @width_mm: the physical display width in millimeters.
        @height_mm: the physical display height in millimeters.
        @xoff: horizontal offset, in pixels.
        @yoff: vertical offset, in pixels.
        @width: console width, in pixels.
        @height: console height, in pixels.

        Modify the dimensions and display settings.
    -->
    <method name="SetUIInfo">
      <arg name="width_mm" type="q" direction="in"/>
      <arg name="height_mm" type="q" direction="in"/>
      <arg name="xoff" type="i" direction="in"/>
      <arg name="yoff" type="i" direction="in"/>
      <arg name="width" type="u" direction="in"/>
      <arg name="height" type="u" direction="in"/>
    </method>

    <!--
        Label:

        A user-friendly name for the console (for ex: "VGA").
    -->
    <property name="Label" type="s" access="read"/>

    <!--
        Head:

        Graphical device head number.
    -->
    <property name="Head" type="u" access="read"/>

    <!--
        Type:

        Console type ("Graphic" or "Text").
    -->
    <property name="Type" type="s" access="read"/>

    <!--
        Width:

        Console width, in pixels.
    -->
    <property name="Width" type="u" access="read"/>

    <!--
        Height:

        Console height, in pixels.
    -->
    <property name="Height" type="u" access="read"/>

    <!--
        DeviceAddress:

        The device address (ex: "pci/0000/02.0").
    -->
    <property name="DeviceAddress" type="s" access="read"/>
  </interface>

  <!--
      org.qemu.Display1.Keyboard:

      This interface in implemented on ``/org/qemu/Display1/Console_$id`` (see
      :dbus:iface:`~org.qemu.Display1.Console`).
  -->
  <interface name="org.qemu.Display1.Keyboard">
    <!--
        Press:
        @keycode: QEMU key number (xtkbd + special re-encoding of high bit)

        Send a key press event.
    -->
    <method name="Press">
      <arg type="u" name="keycode" direction="in"/>
    </method>

    <!--
        Release:
        @keycode: QEMU key number (xtkbd + special re-encoding of high bit)

        Send a key release event.
    -->
    <method name="Release">
      <arg type="u" name="keycode" direction="in"/>
    </method>

    <!--
        Modifiers:

        The active keyboard modifiers::

          Scroll = 1 << 0
          Num    = 1 << 1
          Caps   = 1 << 2
    -->
    <property name="Modifiers" type="u" access="read"/>
  </interface>

  <!--
      org.qemu.Display1.Mouse:

      This interface in implemented on ``/org/qemu/Display1/Console_$id`` (see
      :dbus:iface:`~org.qemu.Display1.Console` documentation).

      .. _dbus-button-values:

      **Button values**::

        Left       = 0
        Middle     = 1
        Right      = 2
        Wheel-up   = 3
        Wheel-down = 4
        Side       = 5
        Extra      = 6
  -->
  <interface name="org.qemu.Display1.Mouse">
    <!--
        Press:
        @button: :ref:`button value<dbus-button-values>`.

        Send a mouse button press event.
    -->
    <method name="Press">
      <arg type="u" name="button" direction="in"/>
    </method>

    <!--
        Release:
        @button: :ref:`button value<dbus-button-values>`.

        Send a mouse button release event.
    -->
    <method name="Release">
      <arg type="u" name="button" direction="in"/>
    </method>

    <!--
        SetAbsPosition:
        @x: X position, in pixels.
        @y: Y position, in pixels.

        Set the mouse pointer position.

        Returns an error if not :dbus:prop:`IsAbsolute`.
    -->
    <method name="SetAbsPosition">
      <arg type="u" name="x" direction="in"/>
      <arg type="u" name="y" direction="in"/>
    </method>

    <!--
        RelMotion:
        @dx: X-delta, in pixels.
        @dy: Y-delta, in pixels.

        Move the mouse pointer position, relative to the current position.

        Returns an error if :dbus:prop:`IsAbsolute`.
    -->
    <method name="RelMotion">
      <arg type="i" name="dx" direction="in"/>
      <arg type="i" name="dy" direction="in"/>
    </method>

    <!--
        IsAbsolute:

        Whether the mouse is using absolute movements.
    -->
    <property name="IsAbsolute" type="b" access="read"/>
  </interface>

  <!--
      org.qemu.Display1.Listener:

      This client-side interface must be available on
      ``/org/qemu/Display1/Listener`` when registering the peer-to-peer
      connection with :dbus:meth:`~org.qemu.Display1.Console.Register`.
  -->
  <interface name="org.qemu.Display1.Listener">
    <!--
        Scanout:
        @width: display width, in pixels.
        @height: display height, in pixels.
        @stride: data stride, in bytes.
        @pixman_format: image format (ex: ``PIXMAN_X8R8G8B8``).
        @data: image data.

        Resize and update the display content.

        The data to transfer for the display update may be large. The preferred
        scanout method is :dbus:meth:`ScanoutDMABUF`, used whenever possible.
    -->
    <method name="Scanout">
      <arg type="u" name="width" direction="in"/>
      <arg type="u" name="height" direction="in"/>
      <arg type="u" name="stride" direction="in"/>
      <arg type="u" name="pixman_format" direction="in"/>
      <arg type="ay" name="data" direction="in">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
    </method>

    <!--
        Update:
        @x: X update position, in pixels.
        @y: Y update position, in pixels.
        @width: update width, in pixels.
        @height: update height, in pixels.
        @stride: data stride, in bytes.
        @pixman_format: image format (ex: ``PIXMAN_X8R8G8B8``).
        @data: display image data.

        Update the display content.

        This method is only called after a :dbus:meth:`Scanout` call.
    -->
    <method name="Update">
      <arg type="i" name="x" direction="in"/>
      <arg type="i" name="y" direction="in"/>
      <arg type="i" name="width" direction="in"/>
      <arg type="i" name="height" direction="in"/>
      <arg type="u" name="stride" direction="in"/>
      <arg type="u" name="pixman_format" direction="in"/>
      <arg type="ay" name="data" direction="in">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
    </method>

    <!--
        ScanoutDMABUF:
        @dmabuf: the DMABUF file descriptor.
        @width: display width, in pixels.
        @height: display height, in pixels.
        @stride: stride, in bytes.
        @fourcc: DMABUF fourcc.
        @modifier: DMABUF modifier.
        @y0_top: whether Y position 0 is the top or not.

        Resize and update the display content with a DMABUF.
    -->
    <method name="ScanoutDMABUF">
      <arg type="h" name="dmabuf" direction="in"/>
      <arg type="u" name="width" direction="in"/>
      <arg type="u" name="height" direction="in"/>
      <arg type="u" name="stride" direction="in"/>
      <arg type="u" name="fourcc" direction="in"/>
      <!-- xywh? -->
      <arg type="t" name="modifier" direction="in"/>
      <arg type="b" name="y0_top" direction="in"/>
    </method>

    <!--
        UpdateDMABUF:
        @x: the X update position, in pixels.
        @y: the Y update position, in pixels.
        @width: the update width, in pixels.
        @height: the update height, in pixels.

        Update the display content with the current DMABUF and the given region.
    -->
    <method name="UpdateDMABUF">
      <arg type="i" name="x" direction="in"/>
      <arg type="i" name="y" direction="in"/>
      <arg type="i" name="width" direction="in"/>
      <arg type="i" name="height" direction="in"/>
    </method>

    <!--
        Disable:

        Disable the display (turn it off).
    -->
    <method name="Disable">
    </method>

    <!--
        MouseSet:
        @x: X mouse position, in pixels.
        @y: Y mouse position, in pixels.
        @on: whether the mouse is visible or not.

        Set the mouse position and visibility.
    -->
    <method name="MouseSet">
      <arg type="i" name="x" direction="in"/>
      <arg type="i" name="y" direction="in"/>
      <arg type="i" name="on" direction="in"/>
    </method>

    <!--
        CursorDefine:
        @width: cursor width, in pixels.
        @height: cursor height, in pixels.
        @hot_x: hot-spot X position, in pixels.
        @hot_y: hot-spot Y position, in pixels.
        @data: the cursor data.

        Set the mouse cursor shape and hot-spot. The "data" must be ARGB, 32-bit
        per pixel.
    -->
    <method name="CursorDefine">
      <arg type="i" name="width" direction="in"/>
      <arg type="i" name="height" direction="in"/>
      <arg type="i" name="hot_x" direction="in"/>
      <arg type="i" name="hot_y" direction="in"/>
      <arg type="ay" name="data" direction="in">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
    </method>
  </interface>

  <!--
      org.qemu.Display1.Clipboard:

      This interface must be implemented by both the client and the server on
      ``/org/qemu/Display1/Clipboard`` to support clipboard sharing between
      the client and the guest.

      Once :dbus:meth:`Register`'ed, method calls may be sent and received in both
      directions. Unregistered callers will get error replies.

      .. _dbus-clipboard-selection:

      **Selection values**::

        Clipboard   = 0
        Primary     = 1
        Secondary   = 2

      .. _dbus-clipboard-serial:

      **Serial counter**

      To solve potential clipboard races, clipboard grabs have an associated
      serial counter. It is set to 0 on registration, and incremented by 1 for
      each grab. The peer with the highest serial is the clipboard grab owner.

      When a grab with a lower serial is received, it should be discarded.

      When a grab is attempted with the same serial number as the current grab,
      the one coming from the client should have higher priority, and the client
      should gain clipboard grab ownership.
  -->
  <interface name="org.qemu.Display1.Clipboard">
    <!--
        Register:

        Register a clipboard session and reinitialize the serial counter.

        The client must register itself, and is granted an exclusive
        access for handling the clipboard.

        The server can reinitialize the session as well (to reset the counter).
    -->
    <method name="Register"/>

    <!--
        Unregister:

        Unregister the clipboard session.
    -->
    <method name="Unregister"/>
    <!--
        Grab:
        @selection: a :ref:`selection value<dbus-clipboard-selection>`.
        @serial: the current grab :ref:`serial<dbus-clipboard-serial>`.
        @mimes: the list of available content MIME types.

        Grab the clipboard, claiming current clipboard content.
    -->
    <method name="Grab">
      <arg type="u" name="selection"/>
      <arg type="u" name="serial"/>
      <arg type="as" name="mimes"/>
    </method>

    <!--
        Release:
        @selection: a :ref:`selection value<dbus-clipboard-selection>`.

        Release the clipboard (does nothing if not the current owner).
    -->
    <method name="Release">
      <arg type="u" name="selection"/>
    </method>

    <!--
        Request:
        @selection: a :ref:`selection value<dbus-clipboard-selection>`
        @mimes: requested MIME types (by order of preference).
        @reply_mime: the returned data MIME type.
        @data: the clipboard data.

        Request the clipboard content.

        Return an error if the clipboard is empty, or the requested MIME types
        are unavailable.
    -->
    <method name="Request">
      <arg type="u" name="selection"/>
      <arg type="as" name="mimes"/>
      <arg type="s" name="reply_mime" direction="out"/>
      <arg type="ay" name="data" direction="out">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
    </method>
  </interface>

  <!--
      org.qemu.Display1.Audio:

      Audio backend may be available on ``/org/qemu/Display1/Audio``.
  -->
  <interface name="org.qemu.Display1.Audio">
    <!--
        RegisterOutListener:
        @listener: a Unix socket FD, for peer-to-peer D-Bus communication.

        Register an audio backend playback handler.

        Multiple listeners may be registered simultaneously.

        The listener is expected to implement the
        :dbus:iface:`org.qemu.Display1.AudioOutListener` interface.
    -->
    <method name="RegisterOutListener">
      <arg type="h" name="listener" direction="in"/>
    </method>

    <!--
        RegisterInListener:
        @listener: a Unix socket FD, for peer-to-peer D-Bus communication.

        Register an audio backend record handler.

        Multiple listeners may be registered simultaneously.

        The listener is expected to implement the
        :dbus:iface:`org.qemu.Display1.AudioInListener` interface.
    -->
    <method name="RegisterInListener">
      <arg type="h" name="listener" direction="in"/>
    </method>
  </interface>

  <!--
      org.qemu.Display1.AudioOutListener:

      This client-side interface must be available on
      ``/org/qemu/Display1/AudioOutListener`` when registering the peer-to-peer
      connection with :dbus:meth:`~org.qemu.Display1.Audio.RegisterOutListener`.
  -->
  <interface name="org.qemu.Display1.AudioOutListener">
    <!--
        Init:
        @id: the stream ID.
        @bits: PCM bits per sample.
        @is_signed: whether the PCM data is signed.
        @is_float: PCM floating point format.
        @freq: the PCM frequency in Hz.
        @nchannels: the number of channels.
        @bytes_per_frame: the bytes per frame.
        @bytes_per_second: the bytes per second.
        @be: whether using big-endian format.

        Initializes a PCM playback stream.
    -->
    <method name="Init">
      <arg name="id" type="t" direction="in"/>
      <arg name="bits" type="y" direction="in"/>
      <arg name="is_signed" type="b" direction="in"/>
      <arg name="is_float" type="b" direction="in"/>
      <arg name="freq" type="u" direction="in"/>
      <arg name="nchannels" type="y" direction="in"/>
      <arg name="bytes_per_frame" type="u" direction="in"/>
      <arg name="bytes_per_second" type="u" direction="in"/>
      <arg name="be" type="b" direction="in"/>
    </method>

    <!--
        Fini:
        @id: the stream ID.

        Finish & close a playback stream.
    -->
    <method name="Fini">
      <arg name="id" type="t" direction="in"/>
    </method>

    <!--
        SetEnabled:
        @id: the stream ID.

        Resume or suspend the playback stream.
    -->
    <method name="SetEnabled">
      <arg name="id" type="t" direction="in"/>
      <arg name="enabled" type="b" direction="in"/>
    </method>

    <!--
        SetVolume:
        @id: the stream ID.
        @mute: whether the stream is muted.
        @volume: the volume per-channel.

        Set the stream volume and mute state (volume without unit, 0-255).
    -->
    <method name="SetVolume">
      <arg name="id" type="t" direction="in"/>
      <arg name="mute" type="b" direction="in"/>
      <arg name="volume" type="ay" direction="in">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
    </method>

    <!--
        Write:
        @id: the stream ID.
        @data: the PCM data.

        PCM stream to play.
    -->
    <method name="Write">
      <arg name="id" type="t" direction="in"/>
      <arg type="ay" name="data" direction="in">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
    </method>
  </interface>

  <!--
      org.qemu.Display1.AudioInListener:

      This client-side interface must be available on
      ``/org/qemu/Display1/AudioInListener`` when registering the peer-to-peer
      connection with :dbus:meth:`~org.qemu.Display1.Audio.RegisterInListener`.
  -->
  <interface name="org.qemu.Display1.AudioInListener">
    <!--
        Init:
        @id: the stream ID.
        @bits: PCM bits per sample.
        @is_signed: whether the PCM data is signed.
        @is_float: PCM floating point format.
        @freq: the PCM frequency in Hz.
        @nchannels: the number of channels.
        @bytes_per_frame: the bytes per frame.
        @bytes_per_second: the bytes per second.
        @be: whether using big-endian format.

        Initializes a PCM record stream.
    -->
    <method name="Init">
      <arg name="id" type="t" direction="in"/>
      <arg name="bits" type="y" direction="in"/>
      <arg name="is_signed" type="b" direction="in"/>
      <arg name="is_float" type="b" direction="in"/>
      <arg name="freq" type="u" direction="in"/>
      <arg name="nchannels" type="y" direction="in"/>
      <arg name="bytes_per_frame" type="u" direction="in"/>
      <arg name="bytes_per_second" type="u" direction="in"/>
      <arg name="be" type="b" direction="in"/>
    </method>

    <!--
        Fini:
        @id: the stream ID.

        Finish & close a record stream.
    -->
    <method name="Fini">
      <arg name="id" type="t" direction="in"/>
    </method>

    <!--
        SetEnabled:
        @id: the stream ID.

        Resume or suspend the record stream.
    -->
    <method name="SetEnabled">
      <arg name="id" type="t" direction="in"/>
      <arg name="enabled" type="b" direction="in"/>
    </method>

    <!--
        SetVolume:
        @id: the stream ID.
        @mute: whether the stream is muted.
        @volume: the volume per-channel.

        Set the stream volume and mute state (volume without unit, 0-255).
    -->
    <method name="SetVolume">
      <arg name="id" type="t" direction="in"/>
      <arg name="mute" type="b" direction="in"/>
      <arg name="volume" type="ay" direction="in">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
    </method>

    <!--
        Read:
        @id: the stream ID.
        @size: the amount to read, in bytes.
        @data: the recorded data (which may be less than requested).

        Read "size" bytes from the record stream.
    -->
    <method name="Read">
      <arg name="id" type="t" direction="in"/>
      <arg name="size" type="t" direction="in"/>
      <arg type="ay" name="data" direction="out">
        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
      </arg>
    </method>
  </interface>

  <!--
      org.qemu.Display1.Chardev:

      Character devices may be available on ``/org/qemu/Display1/Chardev_$id``.

      They may be used for different kind of streams, which are identified via
      their FQDN :dbus:prop:`Name`.

      .. _dbus-chardev-fqdn:

      Here are some known reserved kind names (the ``org.qemu`` prefix is
      reserved by QEMU):

      org.qemu.console.serial.0
        A serial console stream.

      org.qemu.monitor.hmp.0
        A QEMU HMP human monitor.

      org.qemu.monitor.qmp.0
        A QEMU QMP monitor.

      org.qemu.usbredir
        A usbredir stream.
  -->
  <interface name="org.qemu.Display1.Chardev">
    <!--
        Register:
        @stream: a Unix FD to redirect the stream to.

        Register a file-descriptor for the stream handling.

        The current handler, if any, will be replaced.
    -->
    <method name="Register">
      <arg type="h" name="stream" direction="in"/>
    </method>

    <!--
        SendBreak:

        Send a break event to the character device.
    -->
    <method name="SendBreak"/>

    <!--
        Name:

        The FQDN name to identify the kind of stream. See :ref:`reserved
        names<dbus-chardev-fqdn>`.
    -->
    <property name="Name" type="s" access="read"/>

    <!--
        FEOpened:

        Whether the front-end side is opened.
    -->
    <property name="FEOpened" type="b" access="read"/>

    <!--
        Echo:

        Whether the input should be echo'ed (for serial streams).
    -->
    <property name="Echo" type="b" access="read"/>

    <!--
        Owner:

        The D-Bus unique name of the registered handler.
    -->
    <property name="Owner" type="s" access="read"/>
  </interface>
</node>
