xref: /openbmc/qemu/ui/dbus-display1.xml (revision 142ca628)
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  </interface>
30
31  <!--
32      org.qemu.Display1.Console:
33
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.
37
38      A console is attached to a video device head. It may be "Graphic" or
39      "Text" (see :dbus:prop:`Type` and other properties).
40
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.
49
50        Register a console listener, which will receive display updates, until
51        it is disconnected.
52
53        Multiple listeners may be registered simultaneously.
54
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>
61
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.
70
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>
81
82    <!--
83        Label:
84
85        A user-friendly name for the console (for ex: "VGA").
86    -->
87    <property name="Label" type="s" access="read"/>
88
89    <!--
90        Head:
91
92        Graphical device head number.
93    -->
94    <property name="Head" type="u" access="read"/>
95
96    <!--
97        Type:
98
99        Console type ("Graphic" or "Text").
100    -->
101    <property name="Type" type="s" access="read"/>
102
103    <!--
104        Width:
105
106        Console width, in pixels.
107    -->
108    <property name="Width" type="u" access="read"/>
109
110    <!--
111        Height:
112
113        Console height, in pixels.
114    -->
115    <property name="Height" type="u" access="read"/>
116
117    <!--
118        DeviceAddress:
119
120        The device address (ex: "pci/0000/02.0").
121    -->
122    <property name="DeviceAddress" type="s" access="read"/>
123  </interface>
124
125  <!--
126      org.qemu.Display1.Keyboard:
127
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)
135
136        Send a key press event.
137    -->
138    <method name="Press">
139      <arg type="u" name="keycode" direction="in"/>
140    </method>
141
142    <!--
143        Release:
144        @keycode: QEMU key number (xtkbd + special re-encoding of high bit)
145
146        Send a key release event.
147    -->
148    <method name="Release">
149      <arg type="u" name="keycode" direction="in"/>
150    </method>
151
152    <!--
153        Modifiers:
154
155        The active keyboard modifiers::
156
157          Scroll = 1 << 0
158          Num    = 1 << 1
159          Caps   = 1 << 2
160    -->
161    <property name="Modifiers" type="u" access="read"/>
162  </interface>
163
164  <!--
165      org.qemu.Display1.Mouse:
166
167      This interface in implemented on ``/org/qemu/Display1/Console_$id`` (see
168      :dbus:iface:`~org.qemu.Display1.Console` documentation).
169
170      .. _dbus-button-values:
171
172      **Button values**::
173
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>`.
186
187        Send a mouse button press event.
188    -->
189    <method name="Press">
190      <arg type="u" name="button" direction="in"/>
191    </method>
192
193    <!--
194        Release:
195        @button: :ref:`button value<dbus-button-values>`.
196
197        Send a mouse button release event.
198    -->
199    <method name="Release">
200      <arg type="u" name="button" direction="in"/>
201    </method>
202
203    <!--
204        SetAbsPosition:
205        @x: X position, in pixels.
206        @y: Y position, in pixels.
207
208        Set the mouse pointer position.
209
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>
216
217    <!--
218        RelMotion:
219        @dx: X-delta, in pixels.
220        @dy: Y-delta, in pixels.
221
222        Move the mouse pointer position, relative to the current position.
223
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>
230
231    <!--
232        IsAbsolute:
233
234        Whether the mouse is using absolute movements.
235    -->
236    <property name="IsAbsolute" type="b" access="read"/>
237  </interface>
238
239  <!--
240      org.qemu.Display1.Listener:
241
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.
254
255        Resize and update the display content.
256
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>
269
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.
279
280        Update the display content.
281
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>
295
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.
305
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>
318
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.
325
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>
334
335    <!--
336        Disable:
337
338        Disable the display (turn it off).
339    -->
340    <method name="Disable">
341    </method>
342
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.
348
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>
356
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.
364
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>
378</node>
379