block: Factor out bdrv_drain_all_begin_nopoll()
[qemu/kevin.git] / ui / dbus-display1.xml
blobc3b2293376d757118730d95e7d7d127bd61195e6
1 <?xml version="1.0" encoding="utf-8"?>
2 <node>
3   <!--
4       org.qemu.Display1.VM:
6       This interface is implemented on ``/org/qemu/Display1/VM``.
7   -->
8   <interface name="org.qemu.Display1.VM">
9     <!--
10         Name:
12         The name of the VM.
13     -->
14     <property name="Name" type="s" access="read"/>
16     <!--
17         UUID:
19         The UUID of the VM.
20     -->
21     <property name="UUID" type="s" access="read"/>
23     <!--
24         ConsoleIDs:
26         The list of consoles available on ``/org/qemu/Display1/Console_$id``.
27     -->
28     <property name="ConsoleIDs" type="au" access="read"/>
29   </interface>
31   <!--
32       org.qemu.Display1.Console:
34       This interface is implemented on ``/org/qemu/Display1/Console_$id``. You
35       may discover available consoles through introspection or with the
36       :dbus:prop:`org.qemu.Display1.VM.ConsoleIDs` property.
38       A console is attached to a video device head. It may be "Graphic" or
39       "Text" (see :dbus:prop:`Type` and other properties).
41       Interactions with a console may be done with
42       :dbus:iface:`org.qemu.Display1.Keyboard` and
43       :dbus:iface:`org.qemu.Display1.Mouse` interfaces when available.
44   -->
45   <interface name="org.qemu.Display1.Console">
46     <!--
47         RegisterListener:
48         @listener: a Unix socket FD, for peer-to-peer D-Bus communication.
50         Register a console listener, which will receive display updates, until
51         it is disconnected.
53         Multiple listeners may be registered simultaneously.
55         The listener is expected to implement the
56         :dbus:iface:`org.qemu.Display1.Listener` interface.
57     -->
58     <method name="RegisterListener">
59       <arg type="h" name="listener" direction="in"/>
60     </method>
62     <!--
63         SetUIInfo:
64         @width_mm: the physical display width in millimeters.
65         @height_mm: the physical display height in millimeters.
66         @xoff: horizontal offset, in pixels.
67         @yoff: vertical offset, in pixels.
68         @width: console width, in pixels.
69         @height: console height, in pixels.
71         Modify the dimensions and display settings.
72     -->
73     <method name="SetUIInfo">
74       <arg name="width_mm" type="q" direction="in"/>
75       <arg name="height_mm" type="q" direction="in"/>
76       <arg name="xoff" type="i" direction="in"/>
77       <arg name="yoff" type="i" direction="in"/>
78       <arg name="width" type="u" direction="in"/>
79       <arg name="height" type="u" direction="in"/>
80     </method>
82     <!--
83         Label:
85         A user-friendly name for the console (for ex: "VGA").
86     -->
87     <property name="Label" type="s" access="read"/>
89     <!--
90         Head:
92         Graphical device head number.
93     -->
94     <property name="Head" type="u" access="read"/>
96     <!--
97         Type:
99         Console type ("Graphic" or "Text").
100     -->
101     <property name="Type" type="s" access="read"/>
103     <!--
104         Width:
106         Console width, in pixels.
107     -->
108     <property name="Width" type="u" access="read"/>
110     <!--
111         Height:
113         Console height, in pixels.
114     -->
115     <property name="Height" type="u" access="read"/>
117     <!--
118         DeviceAddress:
120         The device address (ex: "pci/0000/02.0").
121     -->
122     <property name="DeviceAddress" type="s" access="read"/>
123   </interface>
125   <!--
126       org.qemu.Display1.Keyboard:
128       This interface in implemented on ``/org/qemu/Display1/Console_$id`` (see
129       :dbus:iface:`~org.qemu.Display1.Console`).
130   -->
131   <interface name="org.qemu.Display1.Keyboard">
132     <!--
133         Press:
134         @keycode: QEMU key number (xtkbd + special re-encoding of high bit)
136         Send a key press event.
137     -->
138     <method name="Press">
139       <arg type="u" name="keycode" direction="in"/>
140     </method>
142     <!--
143         Release:
144         @keycode: QEMU key number (xtkbd + special re-encoding of high bit)
146         Send a key release event.
147     -->
148     <method name="Release">
149       <arg type="u" name="keycode" direction="in"/>
150     </method>
152     <!--
153         Modifiers:
155         The active keyboard modifiers::
157           Scroll = 1 << 0
158           Num    = 1 << 1
159           Caps   = 1 << 2
160     -->
161     <property name="Modifiers" type="u" access="read"/>
162   </interface>
164   <!--
165       org.qemu.Display1.Mouse:
167       This interface in implemented on ``/org/qemu/Display1/Console_$id`` (see
168       :dbus:iface:`~org.qemu.Display1.Console` documentation).
170       .. _dbus-button-values:
172       **Button values**::
174         Left       = 0
175         Middle     = 1
176         Right      = 2
177         Wheel-up   = 3
178         Wheel-down = 4
179         Side       = 5
180         Extra      = 6
181   -->
182   <interface name="org.qemu.Display1.Mouse">
183     <!--
184         Press:
185         @button: :ref:`button value<dbus-button-values>`.
187         Send a mouse button press event.
188     -->
189     <method name="Press">
190       <arg type="u" name="button" direction="in"/>
191     </method>
193     <!--
194         Release:
195         @button: :ref:`button value<dbus-button-values>`.
197         Send a mouse button release event.
198     -->
199     <method name="Release">
200       <arg type="u" name="button" direction="in"/>
201     </method>
203     <!--
204         SetAbsPosition:
205         @x: X position, in pixels.
206         @y: Y position, in pixels.
208         Set the mouse pointer position.
210         Returns an error if not :dbus:prop:`IsAbsolute`.
211     -->
212     <method name="SetAbsPosition">
213       <arg type="u" name="x" direction="in"/>
214       <arg type="u" name="y" direction="in"/>
215     </method>
217     <!--
218         RelMotion:
219         @dx: X-delta, in pixels.
220         @dy: Y-delta, in pixels.
222         Move the mouse pointer position, relative to the current position.
224         Returns an error if :dbus:prop:`IsAbsolute`.
225     -->
226     <method name="RelMotion">
227       <arg type="i" name="dx" direction="in"/>
228       <arg type="i" name="dy" direction="in"/>
229     </method>
231     <!--
232         IsAbsolute:
234         Whether the mouse is using absolute movements.
235     -->
236     <property name="IsAbsolute" type="b" access="read"/>
237   </interface>
239   <!--
240       org.qemu.Display1.Listener:
242       This client-side interface must be available on
243       ``/org/qemu/Display1/Listener`` when registering the peer-to-peer
244       connection with :dbus:meth:`~org.qemu.Display1.Console.Register`.
245   -->
246   <interface name="org.qemu.Display1.Listener">
247     <!--
248         Scanout:
249         @width: display width, in pixels.
250         @height: display height, in pixels.
251         @stride: data stride, in bytes.
252         @pixman_format: image format (ex: ``PIXMAN_X8R8G8B8``).
253         @data: image data.
255         Resize and update the display content.
257         The data to transfer for the display update may be large. The preferred
258         scanout method is :dbus:meth:`ScanoutDMABUF`, used whenever possible.
259     -->
260     <method name="Scanout">
261       <arg type="u" name="width" direction="in"/>
262       <arg type="u" name="height" direction="in"/>
263       <arg type="u" name="stride" direction="in"/>
264       <arg type="u" name="pixman_format" direction="in"/>
265       <arg type="ay" name="data" direction="in">
266         <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
267       </arg>
268     </method>
270     <!--
271         Update:
272         @x: X update position, in pixels.
273         @y: Y update position, in pixels.
274         @width: update width, in pixels.
275         @height: update height, in pixels.
276         @stride: data stride, in bytes.
277         @pixman_format: image format (ex: ``PIXMAN_X8R8G8B8``).
278         @data: display image data.
280         Update the display content.
282         This method is only called after a :dbus:meth:`Scanout` call.
283     -->
284     <method name="Update">
285       <arg type="i" name="x" direction="in"/>
286       <arg type="i" name="y" direction="in"/>
287       <arg type="i" name="width" direction="in"/>
288       <arg type="i" name="height" direction="in"/>
289       <arg type="u" name="stride" direction="in"/>
290       <arg type="u" name="pixman_format" direction="in"/>
291       <arg type="ay" name="data" direction="in">
292         <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
293       </arg>
294     </method>
296     <!--
297         ScanoutDMABUF:
298         @dmabuf: the DMABUF file descriptor.
299         @width: display width, in pixels.
300         @height: display height, in pixels.
301         @stride: stride, in bytes.
302         @fourcc: DMABUF fourcc.
303         @modifier: DMABUF modifier.
304         @y0_top: whether Y position 0 is the top or not.
306         Resize and update the display content with a DMABUF.
307     -->
308     <method name="ScanoutDMABUF">
309       <arg type="h" name="dmabuf" direction="in"/>
310       <arg type="u" name="width" direction="in"/>
311       <arg type="u" name="height" direction="in"/>
312       <arg type="u" name="stride" direction="in"/>
313       <arg type="u" name="fourcc" direction="in"/>
314       <!-- xywh? -->
315       <arg type="t" name="modifier" direction="in"/>
316       <arg type="b" name="y0_top" direction="in"/>
317     </method>
319     <!--
320         UpdateDMABUF:
321         @x: the X update position, in pixels.
322         @y: the Y update position, in pixels.
323         @width: the update width, in pixels.
324         @height: the update height, in pixels.
326         Update the display content with the current DMABUF and the given region.
327     -->
328     <method name="UpdateDMABUF">
329       <arg type="i" name="x" direction="in"/>
330       <arg type="i" name="y" direction="in"/>
331       <arg type="i" name="width" direction="in"/>
332       <arg type="i" name="height" direction="in"/>
333     </method>
335     <!--
336         Disable:
338         Disable the display (turn it off).
339     -->
340     <method name="Disable">
341     </method>
343     <!--
344         MouseSet:
345         @x: X mouse position, in pixels.
346         @y: Y mouse position, in pixels.
347         @on: whether the mouse is visible or not.
349         Set the mouse position and visibility.
350     -->
351     <method name="MouseSet">
352       <arg type="i" name="x" direction="in"/>
353       <arg type="i" name="y" direction="in"/>
354       <arg type="i" name="on" direction="in"/>
355     </method>
357     <!--
358         CursorDefine:
359         @width: cursor width, in pixels.
360         @height: cursor height, in pixels.
361         @hot_x: hot-spot X position, in pixels.
362         @hot_y: hot-spot Y position, in pixels.
363         @data: the cursor data.
365         Set the mouse cursor shape and hot-spot. The "data" must be ARGB, 32-bit
366         per pixel.
367     -->
368     <method name="CursorDefine">
369       <arg type="i" name="width" direction="in"/>
370       <arg type="i" name="height" direction="in"/>
371       <arg type="i" name="hot_x" direction="in"/>
372       <arg type="i" name="hot_y" direction="in"/>
373       <arg type="ay" name="data" direction="in">
374         <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
375       </arg>
376     </method>
377   </interface>
379   <!--
380       org.qemu.Display1.Clipboard:
382       This interface must be implemented by both the client and the server on
383       ``/org/qemu/Display1/Clipboard`` to support clipboard sharing between
384       the client and the guest.
386       Once :dbus:meth:`Register`'ed, method calls may be sent and received in both
387       directions. Unregistered callers will get error replies.
389       .. _dbus-clipboard-selection:
391       **Selection values**::
393         Clipboard   = 0
394         Primary     = 1
395         Secondary   = 2
397       .. _dbus-clipboard-serial:
399       **Serial counter**
401       To solve potential clipboard races, clipboard grabs have an associated
402       serial counter. It is set to 0 on registration, and incremented by 1 for
403       each grab. The peer with the highest serial is the clipboard grab owner.
405       When a grab with a lower serial is received, it should be discarded.
407       When a grab is attempted with the same serial number as the current grab,
408       the one coming from the client should have higher priority, and the client
409       should gain clipboard grab ownership.
410   -->
411   <interface name="org.qemu.Display1.Clipboard">
412     <!--
413         Register:
415         Register a clipboard session and reinitialize the serial counter.
417         The client must register itself, and is granted an exclusive
418         access for handling the clipboard.
420         The server can reinitialize the session as well (to reset the counter).
421     -->
422     <method name="Register"/>
424     <!--
425         Unregister:
427         Unregister the clipboard session.
428     -->
429     <method name="Unregister"/>
430     <!--
431         Grab:
432         @selection: a :ref:`selection value<dbus-clipboard-selection>`.
433         @serial: the current grab :ref:`serial<dbus-clipboard-serial>`.
434         @mimes: the list of available content MIME types.
436         Grab the clipboard, claiming current clipboard content.
437     -->
438     <method name="Grab">
439       <arg type="u" name="selection"/>
440       <arg type="u" name="serial"/>
441       <arg type="as" name="mimes"/>
442     </method>
444     <!--
445         Release:
446         @selection: a :ref:`selection value<dbus-clipboard-selection>`.
448         Release the clipboard (does nothing if not the current owner).
449     -->
450     <method name="Release">
451       <arg type="u" name="selection"/>
452     </method>
454     <!--
455         Request:
456         @selection: a :ref:`selection value<dbus-clipboard-selection>`
457         @mimes: requested MIME types (by order of preference).
458         @reply_mime: the returned data MIME type.
459         @data: the clipboard data.
461         Request the clipboard content.
463         Return an error if the clipboard is empty, or the requested MIME types
464         are unavailable.
465     -->
466     <method name="Request">
467       <arg type="u" name="selection"/>
468       <arg type="as" name="mimes"/>
469       <arg type="s" name="reply_mime" direction="out"/>
470       <arg type="ay" name="data" direction="out">
471         <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
472       </arg>
473     </method>
474   </interface>
476   <!--
477       org.qemu.Display1.Audio:
479       Audio backend may be available on ``/org/qemu/Display1/Audio``.
480   -->
481   <interface name="org.qemu.Display1.Audio">
482     <!--
483         RegisterOutListener:
484         @listener: a Unix socket FD, for peer-to-peer D-Bus communication.
486         Register an audio backend playback handler.
488         Multiple listeners may be registered simultaneously.
490         The listener is expected to implement the
491         :dbus:iface:`org.qemu.Display1.AudioOutListener` interface.
492     -->
493     <method name="RegisterOutListener">
494       <arg type="h" name="listener" direction="in"/>
495     </method>
497     <!--
498         RegisterInListener:
499         @listener: a Unix socket FD, for peer-to-peer D-Bus communication.
501         Register an audio backend record handler.
503         Multiple listeners may be registered simultaneously.
505         The listener is expected to implement the
506         :dbus:iface:`org.qemu.Display1.AudioInListener` interface.
507     -->
508     <method name="RegisterInListener">
509       <arg type="h" name="listener" direction="in"/>
510     </method>
511   </interface>
513   <!--
514       org.qemu.Display1.AudioOutListener:
516       This client-side interface must be available on
517       ``/org/qemu/Display1/AudioOutListener`` when registering the peer-to-peer
518       connection with :dbus:meth:`~org.qemu.Display1.Audio.RegisterOutListener`.
519   -->
520   <interface name="org.qemu.Display1.AudioOutListener">
521     <!--
522         Init:
523         @id: the stream ID.
524         @bits: PCM bits per sample.
525         @is_signed: whether the PCM data is signed.
526         @is_float: PCM floating point format.
527         @freq: the PCM frequency in Hz.
528         @nchannels: the number of channels.
529         @bytes_per_frame: the bytes per frame.
530         @bytes_per_second: the bytes per second.
531         @be: whether using big-endian format.
533         Initializes a PCM playback stream.
534     -->
535     <method name="Init">
536       <arg name="id" type="t" direction="in"/>
537       <arg name="bits" type="y" direction="in"/>
538       <arg name="is_signed" type="b" direction="in"/>
539       <arg name="is_float" type="b" direction="in"/>
540       <arg name="freq" type="u" direction="in"/>
541       <arg name="nchannels" type="y" direction="in"/>
542       <arg name="bytes_per_frame" type="u" direction="in"/>
543       <arg name="bytes_per_second" type="u" direction="in"/>
544       <arg name="be" type="b" direction="in"/>
545     </method>
547     <!--
548         Fini:
549         @id: the stream ID.
551         Finish & close a playback stream.
552     -->
553     <method name="Fini">
554       <arg name="id" type="t" direction="in"/>
555     </method>
557     <!--
558         SetEnabled:
559         @id: the stream ID.
561         Resume or suspend the playback stream.
562     -->
563     <method name="SetEnabled">
564       <arg name="id" type="t" direction="in"/>
565       <arg name="enabled" type="b" direction="in"/>
566     </method>
568     <!--
569         SetVolume:
570         @id: the stream ID.
571         @mute: whether the stream is muted.
572         @volume: the volume per-channel.
574         Set the stream volume and mute state (volume without unit, 0-255).
575     -->
576     <method name="SetVolume">
577       <arg name="id" type="t" direction="in"/>
578       <arg name="mute" type="b" direction="in"/>
579       <arg name="volume" type="ay" direction="in">
580         <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
581       </arg>
582     </method>
584     <!--
585         Write:
586         @id: the stream ID.
587         @data: the PCM data.
589         PCM stream to play.
590     -->
591     <method name="Write">
592       <arg name="id" type="t" direction="in"/>
593       <arg type="ay" name="data" direction="in">
594         <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
595       </arg>
596     </method>
597   </interface>
599   <!--
600       org.qemu.Display1.AudioInListener:
602       This client-side interface must be available on
603       ``/org/qemu/Display1/AudioInListener`` when registering the peer-to-peer
604       connection with :dbus:meth:`~org.qemu.Display1.Audio.RegisterInListener`.
605   -->
606   <interface name="org.qemu.Display1.AudioInListener">
607     <!--
608         Init:
609         @id: the stream ID.
610         @bits: PCM bits per sample.
611         @is_signed: whether the PCM data is signed.
612         @is_float: PCM floating point format.
613         @freq: the PCM frequency in Hz.
614         @nchannels: the number of channels.
615         @bytes_per_frame: the bytes per frame.
616         @bytes_per_second: the bytes per second.
617         @be: whether using big-endian format.
619         Initializes a PCM record stream.
620     -->
621     <method name="Init">
622       <arg name="id" type="t" direction="in"/>
623       <arg name="bits" type="y" direction="in"/>
624       <arg name="is_signed" type="b" direction="in"/>
625       <arg name="is_float" type="b" direction="in"/>
626       <arg name="freq" type="u" direction="in"/>
627       <arg name="nchannels" type="y" direction="in"/>
628       <arg name="bytes_per_frame" type="u" direction="in"/>
629       <arg name="bytes_per_second" type="u" direction="in"/>
630       <arg name="be" type="b" direction="in"/>
631     </method>
633     <!--
634         Fini:
635         @id: the stream ID.
637         Finish & close a record stream.
638     -->
639     <method name="Fini">
640       <arg name="id" type="t" direction="in"/>
641     </method>
643     <!--
644         SetEnabled:
645         @id: the stream ID.
647         Resume or suspend the record stream.
648     -->
649     <method name="SetEnabled">
650       <arg name="id" type="t" direction="in"/>
651       <arg name="enabled" type="b" direction="in"/>
652     </method>
654     <!--
655         SetVolume:
656         @id: the stream ID.
657         @mute: whether the stream is muted.
658         @volume: the volume per-channel.
660         Set the stream volume and mute state (volume without unit, 0-255).
661     -->
662     <method name="SetVolume">
663       <arg name="id" type="t" direction="in"/>
664       <arg name="mute" type="b" direction="in"/>
665       <arg name="volume" type="ay" direction="in">
666         <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
667       </arg>
668     </method>
670     <!--
671         Read:
672         @id: the stream ID.
673         @size: the amount to read, in bytes.
674         @data: the recorded data (which may be less than requested).
676         Read "size" bytes from the record stream.
677     -->
678     <method name="Read">
679       <arg name="id" type="t" direction="in"/>
680       <arg name="size" type="t" direction="in"/>
681       <arg type="ay" name="data" direction="out">
682         <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
683       </arg>
684     </method>
685   </interface>
687   <!--
688       org.qemu.Display1.Chardev:
690       Character devices may be available on ``/org/qemu/Display1/Chardev_$id``.
692       They may be used for different kind of streams, which are identified via
693       their FQDN :dbus:prop:`Name`.
695       .. _dbus-chardev-fqdn:
697       Here are some known reserved kind names (the ``org.qemu`` prefix is
698       reserved by QEMU):
700       org.qemu.console.serial.0
701         A serial console stream.
703       org.qemu.monitor.hmp.0
704         A QEMU HMP human monitor.
706       org.qemu.monitor.qmp.0
707         A QEMU QMP monitor.
709       org.qemu.usbredir
710         A usbredir stream.
711   -->
712   <interface name="org.qemu.Display1.Chardev">
713     <!--
714         Register:
715         @stream: a Unix FD to redirect the stream to.
717         Register a file-descriptor for the stream handling.
719         The current handler, if any, will be replaced.
720     -->
721     <method name="Register">
722       <arg type="h" name="stream" direction="in"/>
723     </method>
725     <!--
726         SendBreak:
728         Send a break event to the character device.
729     -->
730     <method name="SendBreak"/>
732     <!--
733         Name:
735         The FQDN name to identify the kind of stream. See :ref:`reserved
736         names<dbus-chardev-fqdn>`.
737     -->
738     <property name="Name" type="s" access="read"/>
740     <!--
741         FEOpened:
743         Whether the front-end side is opened.
744     -->
745     <property name="FEOpened" type="b" access="read"/>
747     <!--
748         Echo:
750         Whether the input should be echo'ed (for serial streams).
751     -->
752     <property name="Echo" type="b" access="read"/>
754     <!--
755         Owner:
757         The D-Bus unique name of the registered handler.
758     -->
759     <property name="Owner" type="s" access="read"/>
760   </interface>
761 </node>