xref: /qemu/ui/dbus-display1.xml (revision 3e1210e8b0d86a2190e51632985c3da3e5721336)
1<?xml version="1.0" encoding="utf-8"?>
2<node>
3  <!--
4      org.qemu.Display1.VM:
5
6      This interface is implemented on ``/org/qemu/Display1/VM``.
7  -->
8  <interface name="org.qemu.Display1.VM">
9    <!--
10        Name:
11
12        The name of the VM.
13    -->
14    <property name="Name" type="s" access="read"/>
15
16    <!--
17        UUID:
18
19        The UUID of the VM.
20    -->
21    <property name="UUID" type="s" access="read"/>
22
23    <!--
24        ConsoleIDs:
25
26        The list of consoles available on ``/org/qemu/Display1/Console_$id``.
27    -->
28    <property name="ConsoleIDs" type="au" access="read"/>
29
30    <!--
31        Interfaces:
32
33        This property lists extra interfaces provided by the
34        /org/qemu/Display1/VM object, and can be used to detect
35        the capabilities with which they are communicating.
36
37        Unlike the standard D-Bus Introspectable interface, querying this
38        property does not require parsing XML.
39
40        (earlier version of the display interface do not provide this property)
41    -->
42    <property name="Interfaces" type="as" access="read"/>
43  </interface>
44
45  <!--
46      org.qemu.Display1.Console:
47
48      This interface is implemented on ``/org/qemu/Display1/Console_$id``. You
49      may discover available consoles through introspection or with the
50      :dbus:prop:`org.qemu.Display1.VM.ConsoleIDs` property.
51
52      A console is attached to a video device head. It may be "Graphic" or
53      "Text" (see :dbus:prop:`Type` and other properties).
54
55      Interactions with a console may be done with
56      :dbus:iface:`org.qemu.Display1.Keyboard`,
57      :dbus:iface:`org.qemu.Display1.Mouse` and
58      :dbus:iface:`org.qemu.Display1.MultiTouch` interfaces when available.
59  -->
60  <interface name="org.qemu.Display1.Console">
61    <!--
62        RegisterListener:
63        @listener: a Unix socket FD, for peer-to-peer D-Bus communication.
64
65        Register a console listener, which will receive display updates, until
66        it is disconnected.
67
68        Multiple listeners may be registered simultaneously.
69
70        The listener is expected to implement the
71        :dbus:iface:`org.qemu.Display1.Listener` interface.
72    -->
73    <method name="RegisterListener">
74      <?if $(env.HOST_OS) == windows?>
75      <arg type="ay" name="listener" direction="in">
76        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
77      </arg>
78      <?else?>
79      <arg type="h" name="listener" direction="in"/>
80      <?endif?>
81    </method>
82
83    <!--
84        SetUIInfo:
85        @width_mm: the physical display width in millimeters.
86        @height_mm: the physical display height in millimeters.
87        @xoff: horizontal offset, in pixels.
88        @yoff: vertical offset, in pixels.
89        @width: console width, in pixels.
90        @height: console height, in pixels.
91
92        Modify the dimensions and display settings.
93    -->
94    <method name="SetUIInfo">
95      <arg name="width_mm" type="q" direction="in"/>
96      <arg name="height_mm" type="q" direction="in"/>
97      <arg name="xoff" type="i" direction="in"/>
98      <arg name="yoff" type="i" direction="in"/>
99      <arg name="width" type="u" direction="in"/>
100      <arg name="height" type="u" direction="in"/>
101    </method>
102
103    <!--
104        Label:
105
106        A user-friendly name for the console (for ex: "VGA").
107    -->
108    <property name="Label" type="s" access="read"/>
109
110    <!--
111        Head:
112
113        Graphical device head number.
114    -->
115    <property name="Head" type="u" access="read"/>
116
117    <!--
118        Type:
119
120        Console type ("Graphic" or "Text").
121    -->
122    <property name="Type" type="s" access="read"/>
123
124    <!--
125        Width:
126
127        Console width, in pixels.
128    -->
129    <property name="Width" type="u" access="read"/>
130
131    <!--
132        Height:
133
134        Console height, in pixels.
135    -->
136    <property name="Height" type="u" access="read"/>
137
138    <!--
139        DeviceAddress:
140
141        The device address (ex: "pci/0000/02.0").
142    -->
143    <property name="DeviceAddress" type="s" access="read"/>
144
145    <!--
146        Interfaces:
147
148        This property lists extra interfaces provided by the
149        ``/org/qemu/Display1/Console_$id`` object, and can be used to detect the
150        capabilities with which they are communicating.
151
152        Unlike the standard D-Bus Introspectable interface, querying this
153        property does not require parsing XML.
154
155        (earlier version of the display interface do not provide this property)
156    -->
157    <property name="Interfaces" type="as" access="read"/>
158  </interface>
159
160  <!--
161      org.qemu.Display1.Keyboard:
162
163      This interface is optionally implemented on
164      ``/org/qemu/Display1/Console_$id`` (see
165      :dbus:iface:`~org.qemu.Display1.Console`).
166  -->
167  <interface name="org.qemu.Display1.Keyboard">
168    <!--
169        Press:
170        @keycode: QEMU key number (xtkbd + special re-encoding of high bit)
171
172        Send a key press event.
173    -->
174    <method name="Press">
175      <arg type="u" name="keycode" direction="in"/>
176    </method>
177
178    <!--
179        Release:
180        @keycode: QEMU key number (xtkbd + special re-encoding of high bit)
181
182        Send a key release event.
183    -->
184    <method name="Release">
185      <arg type="u" name="keycode" direction="in"/>
186    </method>
187
188    <!--
189        Modifiers:
190
191        The active keyboard modifiers::
192
193          Scroll = 1 << 0
194          Num    = 1 << 1
195          Caps   = 1 << 2
196    -->
197    <property name="Modifiers" type="u" access="read"/>
198  </interface>
199
200  <!--
201      org.qemu.Display1.Mouse:
202
203      This interface is optionally implemented on
204      ``/org/qemu/Display1/Console_$id`` (see
205      :dbus:iface:`~org.qemu.Display1.Console` documentation).
206
207      .. _dbus-button-values:
208
209      **Button values**::
210
211        Left       = 0
212        Middle     = 1
213        Right      = 2
214        Wheel-up   = 3
215        Wheel-down = 4
216        Side       = 5
217        Extra      = 6
218  -->
219  <interface name="org.qemu.Display1.Mouse">
220    <!--
221        Press:
222        @button: :ref:`button value<dbus-button-values>`.
223
224        Send a mouse button press event.
225    -->
226    <method name="Press">
227      <arg type="u" name="button" direction="in"/>
228    </method>
229
230    <!--
231        Release:
232        @button: :ref:`button value<dbus-button-values>`.
233
234        Send a mouse button release event.
235    -->
236    <method name="Release">
237      <arg type="u" name="button" direction="in"/>
238    </method>
239
240    <!--
241        SetAbsPosition:
242        @x: X position, in pixels.
243        @y: Y position, in pixels.
244
245        Set the mouse pointer position.
246
247        Returns an error if not :dbus:prop:`IsAbsolute`.
248    -->
249    <method name="SetAbsPosition">
250      <arg type="u" name="x" direction="in"/>
251      <arg type="u" name="y" direction="in"/>
252    </method>
253
254    <!--
255        RelMotion:
256        @dx: X-delta, in pixels.
257        @dy: Y-delta, in pixels.
258
259        Move the mouse pointer position, relative to the current position.
260
261        Returns an error if :dbus:prop:`IsAbsolute`.
262    -->
263    <method name="RelMotion">
264      <arg type="i" name="dx" direction="in"/>
265      <arg type="i" name="dy" direction="in"/>
266    </method>
267
268    <!--
269        IsAbsolute:
270
271        Whether the mouse is using absolute movements.
272    -->
273    <property name="IsAbsolute" type="b" access="read"/>
274  </interface>
275
276  <!--
277      org.qemu.Display1.MultiTouch:
278
279      This interface in implemented on ``/org/qemu/Display1/Console_$id`` (see
280      :dbus:iface:`~org.qemu.Display1.Console` documentation).
281
282      .. _dbus-kind-values:
283
284      **Kind values**::
285
286        Begin       = 0
287        Update      = 1
288        End         = 2
289        Cancel      = 3
290  -->
291  <interface name="org.qemu.Display1.MultiTouch">
292    <!--
293        SendEvent:
294        @kind: The touch event kind
295        @num_slot: The slot number.
296        @x: The x coordinates.
297        @y: The y coordinates.
298
299        Send a touch gesture event.
300    -->
301    <method name="SendEvent">
302      <arg type="u" name="kind" direction="in"/>
303      <arg type="t" name="num_slot" direction="in"/>
304      <arg type="d" name="x" direction="in"/>
305      <arg type="d" name="y" direction="in"/>
306    </method>
307
308    <!--
309        MaxSlots:
310
311        The maximum number of slots.
312    -->
313    <property name="MaxSlots" type="i" access="read"/>
314  </interface>
315
316  <!--
317      org.qemu.Display1.Listener:
318
319      This client-side interface must be available on
320      ``/org/qemu/Display1/Listener`` when registering the peer-to-peer
321      connection with :dbus:meth:`~org.qemu.Display1.Console.Register`.
322  -->
323  <interface name="org.qemu.Display1.Listener">
324    <!--
325        Scanout:
326        @width: display width, in pixels.
327        @height: display height, in pixels.
328        @stride: data stride, in bytes.
329        @pixman_format: image format (ex: ``PIXMAN_X8R8G8B8``).
330        @data: image data.
331
332        Resize and update the display content.
333
334        The data to transfer for the display update may be large. The preferred
335        scanout method is :dbus:meth:`ScanoutDMABUF`, used whenever possible.
336    -->
337    <method name="Scanout">
338      <arg type="u" name="width" direction="in"/>
339      <arg type="u" name="height" direction="in"/>
340      <arg type="u" name="stride" direction="in"/>
341      <arg type="u" name="pixman_format" direction="in"/>
342      <arg type="ay" name="data" direction="in">
343        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
344      </arg>
345    </method>
346
347    <!--
348        Update:
349        @x: X update position, in pixels.
350        @y: Y update position, in pixels.
351        @width: update width, in pixels.
352        @height: update height, in pixels.
353        @stride: data stride, in bytes.
354        @pixman_format: image format (ex: ``PIXMAN_X8R8G8B8``).
355        @data: display image data.
356
357        Update the display content.
358
359        This method is only called after a :dbus:meth:`Scanout` call.
360    -->
361    <method name="Update">
362      <arg type="i" name="x" direction="in"/>
363      <arg type="i" name="y" direction="in"/>
364      <arg type="i" name="width" direction="in"/>
365      <arg type="i" name="height" direction="in"/>
366      <arg type="u" name="stride" direction="in"/>
367      <arg type="u" name="pixman_format" direction="in"/>
368      <arg type="ay" name="data" direction="in">
369        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
370      </arg>
371    </method>
372
373    <?if $(env.HOST_OS) != windows?>
374    <!--
375        ScanoutDMABUF:
376        @dmabuf: the DMABUF file descriptor.
377        @width: display width, in pixels.
378        @height: display height, in pixels.
379        @stride: stride, in bytes.
380        @fourcc: DMABUF fourcc.
381        @modifier: DMABUF modifier.
382        @y0_top: whether Y position 0 is the top or not.
383
384        Resize and update the display content with a DMABUF.
385    -->
386    <method name="ScanoutDMABUF">
387      <arg type="h" name="dmabuf" direction="in"/>
388      <arg type="u" name="width" direction="in"/>
389      <arg type="u" name="height" direction="in"/>
390      <arg type="u" name="stride" direction="in"/>
391      <arg type="u" name="fourcc" direction="in"/>
392      <!-- xywh? -->
393      <arg type="t" name="modifier" direction="in"/>
394      <arg type="b" name="y0_top" direction="in"/>
395    </method>
396
397    <!--
398        UpdateDMABUF:
399        @x: the X update position, in pixels.
400        @y: the Y update position, in pixels.
401        @width: the update width, in pixels.
402        @height: the update height, in pixels.
403
404        Update the display content with the current DMABUF and the given region.
405    -->
406    <method name="UpdateDMABUF">
407      <arg type="i" name="x" direction="in"/>
408      <arg type="i" name="y" direction="in"/>
409      <arg type="i" name="width" direction="in"/>
410      <arg type="i" name="height" direction="in"/>
411    </method>
412    <?endif?>
413
414    <!--
415        Disable:
416
417        Disable the display (turn it off).
418    -->
419    <method name="Disable">
420    </method>
421
422    <!--
423        MouseSet:
424        @x: X mouse position, in pixels.
425        @y: Y mouse position, in pixels.
426        @on: whether the mouse is visible or not.
427
428        Set the mouse position and visibility.
429    -->
430    <method name="MouseSet">
431      <arg type="i" name="x" direction="in"/>
432      <arg type="i" name="y" direction="in"/>
433      <arg type="i" name="on" direction="in"/>
434    </method>
435
436    <!--
437        CursorDefine:
438        @width: cursor width, in pixels.
439        @height: cursor height, in pixels.
440        @hot_x: hot-spot X position, in pixels.
441        @hot_y: hot-spot Y position, in pixels.
442        @data: the cursor data.
443
444        Set the mouse cursor shape and hot-spot. The "data" must be ARGB, 32-bit
445        per pixel.
446    -->
447    <method name="CursorDefine">
448      <arg type="i" name="width" direction="in"/>
449      <arg type="i" name="height" direction="in"/>
450      <arg type="i" name="hot_x" direction="in"/>
451      <arg type="i" name="hot_y" direction="in"/>
452      <arg type="ay" name="data" direction="in">
453        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
454      </arg>
455    </method>
456
457    <!--
458        Interfaces:
459
460        This property lists extra interfaces provided by the
461        /org/qemu/Display1/Listener object, and can be used to detect
462        the capabilities with which they are communicating.
463
464        Unlike the standard D-Bus Introspectable interface, querying this
465        property does not require parsing XML.
466
467        (earlier version of the display interface do not provide this property)
468    -->
469    <property name="Interfaces" type="as" access="read"/>
470  </interface>
471
472  <!--
473      org.qemu.Display1.Listener.Unix.Map:
474
475      This optional client-side interface can complement
476      org.qemu.Display1.Listener on ``/org/qemu/Display1/Listener`` for
477      Unix-specific shared memory scanouts.
478  -->
479  <?if $(env.HOST_OS) != windows?>
480  <interface name="org.qemu.Display1.Listener.Unix.Map">
481    <!--
482        ScanoutMap:
483        @handle: the shared map FD.
484        @offset: mapping offset, in bytes.
485        @width: display width, in pixels.
486        @height: display height, in pixels.
487        @stride: stride, in bytes.
488        @pixman_format: image format (ex: ``PIXMAN_X8R8G8B8``).
489
490        Resize and update the display content with a shared map.
491    -->
492    <method name="ScanoutMap">
493      <arg type="h" name="handle" direction="in"/>
494      <arg type="u" name="offset" direction="in"/>
495      <arg type="u" name="width" direction="in"/>
496      <arg type="u" name="height" direction="in"/>
497      <arg type="u" name="stride" direction="in"/>
498      <arg type="u" name="pixman_format" direction="in"/>
499    </method>
500
501    <!--
502        UpdateMap:
503        @x: the X update position, in pixels.
504        @y: the Y update position, in pixels.
505        @width: the update width, in pixels.
506        @height: the update height, in pixels.
507
508        Update the display content with the current shared map and the given region.
509    -->
510    <method name="UpdateMap">
511      <arg type="i" name="x" direction="in"/>
512      <arg type="i" name="y" direction="in"/>
513      <arg type="i" name="width" direction="in"/>
514      <arg type="i" name="height" direction="in"/>
515    </method>
516  </interface>
517  <?endif?>
518
519  <!--
520      org.qemu.Display1.Listener.Win32.Map:
521
522      This optional client-side interface can complement
523      org.qemu.Display1.Listener on ``/org/qemu/Display1/Listener`` for Windows
524      specific shared memory scanouts.
525  -->
526  <?if $(env.HOST_OS) == windows?>
527  <interface name="org.qemu.Display1.Listener.Win32.Map">
528    <!--
529        ScanoutMap:
530        @handle: the shared file mapping handle value (not a file handle)
531        @offset: mapping offset.
532        @width: display width, in pixels.
533        @height: display height, in pixels.
534        @stride: stride, in bytes.
535        @pixman_format: image format (ex: ``PIXMAN_X8R8G8B8``).
536
537        Resize and update the display content with a shared file mapping object.
538    -->
539    <method name="ScanoutMap">
540      <arg type="t" name="handle" direction="in"/>
541      <arg type="u" name="offset" direction="in"/>
542      <arg type="u" name="width" direction="in"/>
543      <arg type="u" name="height" direction="in"/>
544      <arg type="u" name="stride" direction="in"/>
545      <arg type="u" name="pixman_format" direction="in"/>
546    </method>
547
548    <!--
549        UpdateMap:
550        @x: the X update position, in pixels.
551        @y: the Y update position, in pixels.
552        @width: the update width, in pixels.
553        @height: the update height, in pixels.
554
555        Update the display content with the current shared map and the given region.
556    -->
557    <method name="UpdateMap">
558      <arg type="i" name="x" direction="in"/>
559      <arg type="i" name="y" direction="in"/>
560      <arg type="i" name="width" direction="in"/>
561      <arg type="i" name="height" direction="in"/>
562    </method>
563  </interface>
564  <?endif?>
565
566  <!--
567      org.qemu.Display1.Listener.Win32.D3d11:
568
569      This optional client-side interface can complement
570      org.qemu.Display1.Listener on ``/org/qemu/Display1/Listener`` for Windows
571      specific Direct3D texture sharing of the scanouts.
572  -->
573  <interface name="org.qemu.Display1.Listener.Win32.D3d11">
574    <!--
575        ScanoutTexture2d:
576        @handle: the NT handle for the shared texture (to be opened back with ID3D11Device1::OpenSharedResource1).
577        @texture_width: texture width, in pixels.
578        @texture_height: texture height, in pixels.
579        @y0_top: whether Y position 0 is the top or not.
580        @x: the X scanout position, in pixels.
581        @y: the Y scanout position, in pixels.
582        @width: the scanout width, in pixels.
583        @height: the scanout height, in pixels.
584
585        Resize and update the display content with a Direct3D 11 2D texture.
586        You must acquire and release the associated KeyedMutex 0 during rendering.
587    -->
588    <method name="ScanoutTexture2d">
589      <arg type="t" name="handle" direction="in"/>
590      <arg type="u" name="texture_width" direction="in"/>
591      <arg type="u" name="texture_height" direction="in"/>
592      <arg type="b" name="y0_top" direction="in"/>
593      <arg type="u" name="x" direction="in"/>
594      <arg type="u" name="y" direction="in"/>
595      <arg type="u" name="width" direction="in"/>
596      <arg type="u" name="height" direction="in"/>
597    </method>
598
599    <!--
600        UpdateTexture2d:
601        @x: the X update position, in pixels.
602        @y: the Y update position, in pixels.
603        @width: the update width, in pixels.
604        @height: the update height, in pixels.
605
606        Update the display content with the current Direct3D 2D texture and the given region.
607        You must acquire and release the associated KeyedMutex 0 during rendering.
608    -->
609    <method name="UpdateTexture2d">
610      <arg type="i" name="x" direction="in"/>
611      <arg type="i" name="y" direction="in"/>
612      <arg type="i" name="width" direction="in"/>
613      <arg type="i" name="height" direction="in"/>
614    </method>
615  </interface>
616
617  <!--
618      org.qemu.Display1.Listener.Unix.ScanoutDMABUF2:
619
620      This optional client-side interface can complement
621      org.qemu.Display1.Listener on ``/org/qemu/Display1/Listener`` for
622      Unix-specific DMABUF scanout setup which support multi plane.
623  -->
624  <?if $(env.HOST_OS) != windows?>
625  <interface name="org.qemu.Display1.Listener.Unix.ScanoutDMABUF2">
626    <!--
627        ScanoutDMABUF2:
628        @dmabuf: DMABUF file descriptor of each plane.
629        @x: display x offset, in pixels
630        @y: display y offset, in pixels
631        @width: display width, in pixels.
632        @height: display height, in pixels.
633        @offset: offset of each plane, in bytes.
634        @stride: stride of each plane, in bytes.
635        @num_planes: plane number.
636        @fourcc: DMABUF fourcc.
637        @backing_width: backing framebuffer width, in pixels
638        @backing_height: backing framebuffer height, in pixels
639        @modifier: DMABUF modifier.
640        @y0_top: whether Y position 0 is the top or not.
641
642        Resize and update the display content with DMABUF.
643    -->
644    <method name="ScanoutDMABUF2">
645      <arg type="ah" name="dmabuf" direction="in"/>
646      <arg type="u" name="x" direction="in"/>
647      <arg type="u" name="y" direction="in"/>
648      <arg type="u" name="width" direction="in"/>
649      <arg type="u" name="height" direction="in"/>
650      <arg type="au" name="offset" direction="in"/>
651      <arg type="au" name="stride" direction="in"/>
652      <arg type="u" name="num_planes" direction="in"/>
653      <arg type="u" name="fourcc" direction="in"/>
654      <arg type="u" name="backing_width" direction="in"/>
655      <arg type="u" name="backing_height" direction="in"/>
656      <arg type="t" name="modifier" direction="in"/>
657      <arg type="b" name="y0_top" direction="in"/>
658    </method>
659  </interface>
660  <?endif?>
661
662  <!--
663      org.qemu.Display1.Clipboard:
664
665      This interface must be implemented by both the client and the server on
666      ``/org/qemu/Display1/Clipboard`` to support clipboard sharing between
667      the client and the guest.
668
669      Once :dbus:meth:`Register`'ed, method calls may be sent and received in both
670      directions. Unregistered callers will get error replies.
671
672      .. _dbus-clipboard-selection:
673
674      **Selection values**::
675
676        Clipboard   = 0
677        Primary     = 1
678        Secondary   = 2
679
680      .. _dbus-clipboard-serial:
681
682      **Serial counter**
683
684      To solve potential clipboard races, clipboard grabs have an associated
685      serial counter. It is set to 0 on registration, and incremented by 1 for
686      each grab. The peer with the highest serial is the clipboard grab owner.
687
688      When a grab with a lower serial is received, it should be discarded.
689
690      When a grab is attempted with the same serial number as the current grab,
691      the one coming from the client should have higher priority, and the client
692      should gain clipboard grab ownership.
693  -->
694  <interface name="org.qemu.Display1.Clipboard">
695    <!--
696        Register:
697
698        Register a clipboard session and reinitialize the serial counter.
699
700        The client must register itself, and is granted an exclusive
701        access for handling the clipboard.
702
703        The server can reinitialize the session as well (to reset the counter).
704    -->
705    <method name="Register"/>
706
707    <!--
708        Unregister:
709
710        Unregister the clipboard session.
711    -->
712    <method name="Unregister"/>
713    <!--
714        Grab:
715        @selection: a :ref:`selection value<dbus-clipboard-selection>`.
716        @serial: the current grab :ref:`serial<dbus-clipboard-serial>`.
717        @mimes: the list of available content MIME types.
718
719        Grab the clipboard, claiming current clipboard content.
720    -->
721    <method name="Grab">
722      <arg type="u" name="selection"/>
723      <arg type="u" name="serial"/>
724      <arg type="as" name="mimes"/>
725    </method>
726
727    <!--
728        Release:
729        @selection: a :ref:`selection value<dbus-clipboard-selection>`.
730
731        Release the clipboard (does nothing if not the current owner).
732    -->
733    <method name="Release">
734      <arg type="u" name="selection"/>
735    </method>
736
737    <!--
738        Request:
739        @selection: a :ref:`selection value<dbus-clipboard-selection>`
740        @mimes: requested MIME types (by order of preference).
741        @reply_mime: the returned data MIME type.
742        @data: the clipboard data.
743
744        Request the clipboard content.
745
746        Return an error if the clipboard is empty, or the requested MIME types
747        are unavailable.
748    -->
749    <method name="Request">
750      <arg type="u" name="selection"/>
751      <arg type="as" name="mimes"/>
752      <arg type="s" name="reply_mime" direction="out"/>
753      <arg type="ay" name="data" direction="out">
754        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
755      </arg>
756    </method>
757
758    <!--
759        Interfaces:
760
761        This property lists extra interfaces provided by the
762        /org/qemu/Display1/Clipboard object, and can be used to detect
763        the capabilities with which they are communicating.
764
765        Unlike the standard D-Bus Introspectable interface, querying this
766        property does not require parsing XML.
767
768        (earlier version of the display interface do not provide this property)
769    -->
770    <property name="Interfaces" type="as" access="read"/>
771  </interface>
772
773  <!--
774      org.qemu.Display1.Audio:
775
776      Audio backend may be available on ``/org/qemu/Display1/Audio``.
777  -->
778  <interface name="org.qemu.Display1.Audio">
779    <!--
780        RegisterOutListener:
781        @listener: a Unix socket FD, for peer-to-peer D-Bus communication.
782
783        Register an audio backend playback handler.
784
785        Multiple listeners may be registered simultaneously.
786
787        The listener is expected to implement the
788        :dbus:iface:`org.qemu.Display1.AudioOutListener` interface.
789    -->
790    <method name="RegisterOutListener">
791      <?if $(env.HOST_OS) == windows?>
792      <arg type="ay" name="listener" direction="in">
793        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
794      </arg>
795      <?else?>
796      <arg type="h" name="listener" direction="in"/>
797      <?endif?>
798    </method>
799
800    <!--
801        RegisterInListener:
802        @listener: a Unix socket FD, for peer-to-peer D-Bus communication.
803
804        Register an audio backend record handler.
805
806        Multiple listeners may be registered simultaneously.
807
808        The listener is expected to implement the
809        :dbus:iface:`org.qemu.Display1.AudioInListener` interface.
810    -->
811    <method name="RegisterInListener">
812      <?if $(env.HOST_OS) == windows?>
813      <arg type="ay" name="listener" direction="in">
814        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
815      </arg>
816      <?else?>
817      <arg type="h" name="listener" direction="in"/>
818      <?endif?>
819    </method>
820
821    <!--
822        NSamples:
823
824        The number of samples per read/write frames. (for example the default is
825        480, or 10ms at 48kHz)
826
827        (earlier version of the display interface do not provide this property)
828    -->
829    <property name="NSamples" type="u" access="read">
830      <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="const"/>
831    </property>
832
833    <!--
834        Interfaces:
835
836        This property lists extra interfaces provided by the
837        /org/qemu/Display1/Audio object, and can be used to detect
838        the capabilities with which they are communicating.
839
840        Unlike the standard D-Bus Introspectable interface, querying this
841        property does not require parsing XML.
842
843        (earlier version of the display interface do not provide this property)
844    -->
845    <property name="Interfaces" type="as" access="read"/>
846  </interface>
847
848  <!--
849      org.qemu.Display1.AudioOutListener:
850
851      This client-side interface must be available on
852      ``/org/qemu/Display1/AudioOutListener`` when registering the peer-to-peer
853      connection with :dbus:meth:`~org.qemu.Display1.Audio.RegisterOutListener`.
854  -->
855  <interface name="org.qemu.Display1.AudioOutListener">
856    <!--
857        Init:
858        @id: the stream ID.
859        @bits: PCM bits per sample.
860        @is_signed: whether the PCM data is signed.
861        @is_float: PCM floating point format.
862        @freq: the PCM frequency in Hz.
863        @nchannels: the number of channels.
864        @bytes_per_frame: the bytes per frame.
865        @bytes_per_second: the bytes per second.
866        @be: whether using big-endian format.
867
868        Initializes a PCM playback stream.
869    -->
870    <method name="Init">
871      <arg name="id" type="t" direction="in"/>
872      <arg name="bits" type="y" direction="in"/>
873      <arg name="is_signed" type="b" direction="in"/>
874      <arg name="is_float" type="b" direction="in"/>
875      <arg name="freq" type="u" direction="in"/>
876      <arg name="nchannels" type="y" direction="in"/>
877      <arg name="bytes_per_frame" type="u" direction="in"/>
878      <arg name="bytes_per_second" type="u" direction="in"/>
879      <arg name="be" type="b" direction="in"/>
880    </method>
881
882    <!--
883        Fini:
884        @id: the stream ID.
885
886        Finish & close a playback stream.
887    -->
888    <method name="Fini">
889      <arg name="id" type="t" direction="in"/>
890    </method>
891
892    <!--
893        SetEnabled:
894        @id: the stream ID.
895
896        Resume or suspend the playback stream.
897    -->
898    <method name="SetEnabled">
899      <arg name="id" type="t" direction="in"/>
900      <arg name="enabled" type="b" direction="in"/>
901    </method>
902
903    <!--
904        SetVolume:
905        @id: the stream ID.
906        @mute: whether the stream is muted.
907        @volume: the volume per-channel.
908
909        Set the stream volume and mute state (volume without unit, 0-255).
910    -->
911    <method name="SetVolume">
912      <arg name="id" type="t" direction="in"/>
913      <arg name="mute" type="b" direction="in"/>
914      <arg name="volume" type="ay" direction="in">
915        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
916      </arg>
917    </method>
918
919    <!--
920        Write:
921        @id: the stream ID.
922        @data: the PCM data.
923
924        PCM stream to play.
925    -->
926    <method name="Write">
927      <arg name="id" type="t" direction="in"/>
928      <arg type="ay" name="data" direction="in">
929        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
930      </arg>
931    </method>
932
933    <!--
934        Interfaces:
935
936        This property lists extra interfaces provided by the
937        /org/qemu/Display1/AudioOutListener object, and can be used to detect
938        the capabilities with which they are communicating.
939
940        Unlike the standard D-Bus Introspectable interface, querying this
941        property does not require parsing XML.
942
943        (earlier version of the display interface do not provide this property)
944    -->
945    <property name="Interfaces" type="as" access="read"/>
946  </interface>
947
948  <!--
949      org.qemu.Display1.AudioInListener:
950
951      This client-side interface must be available on
952      ``/org/qemu/Display1/AudioInListener`` when registering the peer-to-peer
953      connection with :dbus:meth:`~org.qemu.Display1.Audio.RegisterInListener`.
954  -->
955  <interface name="org.qemu.Display1.AudioInListener">
956    <!--
957        Init:
958        @id: the stream ID.
959        @bits: PCM bits per sample.
960        @is_signed: whether the PCM data is signed.
961        @is_float: PCM floating point format.
962        @freq: the PCM frequency in Hz.
963        @nchannels: the number of channels.
964        @bytes_per_frame: the bytes per frame.
965        @bytes_per_second: the bytes per second.
966        @be: whether using big-endian format.
967
968        Initializes a PCM record stream.
969    -->
970    <method name="Init">
971      <arg name="id" type="t" direction="in"/>
972      <arg name="bits" type="y" direction="in"/>
973      <arg name="is_signed" type="b" direction="in"/>
974      <arg name="is_float" type="b" direction="in"/>
975      <arg name="freq" type="u" direction="in"/>
976      <arg name="nchannels" type="y" direction="in"/>
977      <arg name="bytes_per_frame" type="u" direction="in"/>
978      <arg name="bytes_per_second" type="u" direction="in"/>
979      <arg name="be" type="b" direction="in"/>
980    </method>
981
982    <!--
983        Fini:
984        @id: the stream ID.
985
986        Finish & close a record stream.
987    -->
988    <method name="Fini">
989      <arg name="id" type="t" direction="in"/>
990    </method>
991
992    <!--
993        SetEnabled:
994        @id: the stream ID.
995
996        Resume or suspend the record stream.
997    -->
998    <method name="SetEnabled">
999      <arg name="id" type="t" direction="in"/>
1000      <arg name="enabled" type="b" direction="in"/>
1001    </method>
1002
1003    <!--
1004        SetVolume:
1005        @id: the stream ID.
1006        @mute: whether the stream is muted.
1007        @volume: the volume per-channel.
1008
1009        Set the stream volume and mute state (volume without unit, 0-255).
1010    -->
1011    <method name="SetVolume">
1012      <arg name="id" type="t" direction="in"/>
1013      <arg name="mute" type="b" direction="in"/>
1014      <arg name="volume" type="ay" direction="in">
1015        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
1016      </arg>
1017    </method>
1018
1019    <!--
1020        Read:
1021        @id: the stream ID.
1022        @size: the amount to read, in bytes.
1023        @data: the recorded data (which may be less than requested).
1024
1025        Read "size" bytes from the record stream.
1026    -->
1027    <method name="Read">
1028      <arg name="id" type="t" direction="in"/>
1029      <arg name="size" type="t" direction="in"/>
1030      <arg type="ay" name="data" direction="out">
1031        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
1032      </arg>
1033    </method>
1034
1035    <!--
1036        Interfaces:
1037
1038        This property lists extra interfaces provided by the
1039        /org/qemu/Display1/AudioInListener object, and can be used to detect
1040        the capabilities with which they are communicating.
1041
1042        Unlike the standard D-Bus Introspectable interface, querying this
1043        property does not require parsing XML.
1044
1045        (earlier version of the display interface do not provide this property)
1046    -->
1047    <property name="Interfaces" type="as" access="read"/>
1048  </interface>
1049
1050  <!--
1051      org.qemu.Display1.Chardev:
1052
1053      Character devices may be available on ``/org/qemu/Display1/Chardev_$id``.
1054
1055      They may be used for different kind of streams, which are identified via
1056      their FQDN :dbus:prop:`Name`.
1057
1058      .. _dbus-chardev-fqdn:
1059
1060      Here are some known reserved kind names (the ``org.qemu`` prefix is
1061      reserved by QEMU):
1062
1063      org.qemu.console.serial.0
1064        A serial console stream.
1065
1066      org.qemu.monitor.hmp.0
1067        A QEMU HMP human monitor.
1068
1069      org.qemu.monitor.qmp.0
1070        A QEMU QMP monitor.
1071
1072      org.qemu.usbredir
1073        A usbredir stream.
1074  -->
1075  <interface name="org.qemu.Display1.Chardev">
1076    <!--
1077        Register:
1078        @stream: a Unix FD to redirect the stream to.
1079
1080        Register a file-descriptor for the stream handling.
1081
1082        The current handler, if any, will be replaced.
1083    -->
1084    <method name="Register">
1085      <?if $(env.HOST_OS) == windows?>
1086      <arg type="ay" name="listener" direction="in">
1087        <annotation name="org.gtk.GDBus.C.ForceGVariant" value="true"/>
1088      </arg>
1089      <?else?>
1090      <arg type="h" name="stream" direction="in"/>
1091      <?endif?>
1092    </method>
1093
1094    <!--
1095        SendBreak:
1096
1097        Send a break event to the character device.
1098    -->
1099    <method name="SendBreak"/>
1100
1101    <!--
1102        Name:
1103
1104        The FQDN name to identify the kind of stream. See :ref:`reserved
1105        names<dbus-chardev-fqdn>`.
1106    -->
1107    <property name="Name" type="s" access="read"/>
1108
1109    <!--
1110        FEOpened:
1111
1112        Whether the front-end side is opened.
1113    -->
1114    <property name="FEOpened" type="b" access="read"/>
1115
1116    <!--
1117        Echo:
1118
1119        Whether the input should be echo'ed (for serial streams).
1120    -->
1121    <property name="Echo" type="b" access="read"/>
1122
1123    <!--
1124        Owner:
1125
1126        The D-Bus unique name of the registered handler.
1127    -->
1128    <property name="Owner" type="s" access="read"/>
1129
1130    <!--
1131        Interfaces:
1132
1133        This property lists extra interfaces provided by the
1134        ``/org/qemu/Display1/Chardev_$i`` object, and can be used to detect
1135        the capabilities with which they are communicating.
1136
1137        Unlike the standard D-Bus Introspectable interface, querying this
1138        property does not require parsing XML.
1139
1140        (earlier version of the display interface do not provide this property)
1141    -->
1142    <property name="Interfaces" type="as" access="read"/>
1143  </interface>
1144</node>
1145