# -*- Mode: Python -*-
# vim: filetype=python
#

##
# = Remote desktop
##

{ 'include': 'common.json' }
{ 'include': 'sockets.json' }

##
# @DisplayProtocol:
#
# Display protocols which support changing password options.
#
# Since: 7.0
##
{ 'enum': 'DisplayProtocol',
  'data': [ 'vnc', 'spice' ] }

##
# @SetPasswordAction:
#
# An action to take on changing a password on a connection with active
# clients.
#
# @keep: maintain existing clients
#
# @fail: fail the command if clients are connected
#
# @disconnect: disconnect existing clients
#
# Since: 7.0
##
{ 'enum': 'SetPasswordAction',
  'data': [ 'keep', 'fail', 'disconnect' ] }

##
# @SetPasswordOptions:
#
# Options for set_password.
#
# @protocol:
#     - 'vnc' to modify the VNC server password
#     - 'spice' to modify the Spice server password
#
# @password: the new password
#
# @connected: How to handle existing clients when changing the
#     password.  If nothing is specified, defaults to 'keep'. For VNC,
#     only 'keep' is currently implemented.
#
# Since: 7.0
##
{ 'union': 'SetPasswordOptions',
  'base': { 'protocol': 'DisplayProtocol',
            'password': 'str',
            '*connected': 'SetPasswordAction' },
  'discriminator': 'protocol',
  'data': { 'vnc': 'SetPasswordOptionsVnc' } }

##
# @SetPasswordOptionsVnc:
#
# Options for set_password specific to the VNC procotol.
#
# @display: The id of the display where the password should be
#     changed.  Defaults to the first.
#
# Since: 7.0
##
{ 'struct': 'SetPasswordOptionsVnc',
  'data': { '*display': 'str' } }

##
# @set_password:
#
# Set the password of a remote display server.
#
# Returns:
#     - Nothing on success
#     - If Spice is not enabled, DeviceNotFound
#
# Since: 0.14
#
# Example:
#
# -> { "execute": "set_password", "arguments": { "protocol": "vnc",
#                                                "password": "secret" } }
# <- { "return": {} }
##
{ 'command': 'set_password', 'boxed': true, 'data': 'SetPasswordOptions' }

##
# @ExpirePasswordOptions:
#
# General options for expire_password.
#
# @protocol:
#     - 'vnc' to modify the VNC server expiration
#     - 'spice' to modify the Spice server expiration
#
# @time: when to expire the password.
#
#     - 'now' to expire the password immediately
#     - 'never' to cancel password expiration
#     - '+INT' where INT is the number of seconds from now (integer)
#     - 'INT' where INT is the absolute time in seconds
#
# Notes: Time is relative to the server and currently there is no way
#     to coordinate server time with client time.  It is not
#     recommended to use the absolute time version of the @time
#     parameter unless you're sure you are on the same machine as the
#     QEMU instance.
#
# Since: 7.0
##
{ 'union': 'ExpirePasswordOptions',
  'base': { 'protocol': 'DisplayProtocol',
            'time': 'str' },
  'discriminator': 'protocol',
  'data': { 'vnc': 'ExpirePasswordOptionsVnc' } }

##
# @ExpirePasswordOptionsVnc:
#
# Options for expire_password specific to the VNC procotol.
#
# @display: The id of the display where the expiration should be
#     changed.  Defaults to the first.
#
# Since: 7.0
##
{ 'struct': 'ExpirePasswordOptionsVnc',
  'data': { '*display': 'str' } }

##
# @expire_password:
#
# Expire the password of a remote display server.
#
# Returns:
#     - Nothing on success
#     - If @protocol is 'spice' and Spice is not active,
#       DeviceNotFound
#
# Since: 0.14
#
# Example:
#
# -> { "execute": "expire_password", "arguments": { "protocol": "vnc",
#                                                   "time": "+60" } }
# <- { "return": {} }
##
{ 'command': 'expire_password', 'boxed': true, 'data': 'ExpirePasswordOptions' }

##
# @ImageFormat:
#
# Supported image format types.
#
# @png: PNG format
#
# @ppm: PPM format
#
# Since: 7.1
##
{ 'enum': 'ImageFormat',
  'data': ['ppm', 'png'] }

##
# @screendump:
#
# Capture the contents of a screen and write it to a file.
#
# @filename: the path of a new file to store the image
#
# @device: ID of the display device that should be dumped.  If this
#     parameter is missing, the primary display will be used.  (Since
#     2.12)
#
# @head: head to use in case the device supports multiple heads.  If
#     this parameter is missing, head #0 will be used.  Also note that
#     the head can only be specified in conjunction with the device
#     ID. (Since 2.12)
#
# @format: image format for screendump.  (default: ppm) (Since 7.1)
#
# Returns: Nothing on success
#
# Since: 0.14
#
# Example:
#
# -> { "execute": "screendump",
#      "arguments": { "filename": "/tmp/image" } }
# <- { "return": {} }
##
{ 'command': 'screendump',
  'data': {'filename': 'str', '*device': 'str', '*head': 'int',
           '*format': 'ImageFormat'},
  'coroutine': true,
  'if': 'CONFIG_PIXMAN' }

##
# == Spice
##

##
# @SpiceBasicInfo:
#
# The basic information for SPICE network connection
#
# @host: IP address
#
# @port: port number
#
# @family: address family
#
# Since: 2.1
##
{ 'struct': 'SpiceBasicInfo',
  'data': { 'host': 'str',
            'port': 'str',
            'family': 'NetworkAddressFamily' },
  'if': 'CONFIG_SPICE' }

##
# @SpiceServerInfo:
#
# Information about a SPICE server
#
# @auth: authentication method
#
# Since: 2.1
##
{ 'struct': 'SpiceServerInfo',
  'base': 'SpiceBasicInfo',
  'data': { '*auth': 'str' },
  'if': 'CONFIG_SPICE' }

##
# @SpiceChannel:
#
# Information about a SPICE client channel.
#
# @connection-id: SPICE connection id number.  All channels with the
#     same id belong to the same SPICE session.
#
# @channel-type: SPICE channel type number.  "1" is the main control
#     channel, filter for this one if you want to track spice sessions
#     only
#
# @channel-id: SPICE channel ID number.  Usually "0", might be
#     different when multiple channels of the same type exist, such as
#     multiple display channels in a multihead setup
#
# @tls: true if the channel is encrypted, false otherwise.
#
# Since: 0.14
##
{ 'struct': 'SpiceChannel',
  'base': 'SpiceBasicInfo',
  'data': {'connection-id': 'int', 'channel-type': 'int', 'channel-id': 'int',
           'tls': 'bool'},
  'if': 'CONFIG_SPICE' }

##
# @SpiceQueryMouseMode:
#
# An enumeration of Spice mouse states.
#
# @client: Mouse cursor position is determined by the client.
#
# @server: Mouse cursor position is determined by the server.
#
# @unknown: No information is available about mouse mode used by the
#     spice server.
#
# Note: spice/enums.h has a SpiceMouseMode already, hence the name.
#
# Since: 1.1
##
{ 'enum': 'SpiceQueryMouseMode',
  'data': [ 'client', 'server', 'unknown' ],
  'if': 'CONFIG_SPICE' }

##
# @SpiceInfo:
#
# Information about the SPICE session.
#
# @enabled: true if the SPICE server is enabled, false otherwise
#
# @migrated: true if the last guest migration completed and spice
#     migration had completed as well.  false otherwise.  (since 1.4)
#
# @host: The hostname the SPICE server is bound to.  This depends on
#     the name resolution on the host and may be an IP address.
#
# @port: The SPICE server's port number.
#
# @compiled-version: SPICE server version.
#
# @tls-port: The SPICE server's TLS port number.
#
# @auth: the current authentication type used by the server
#
#     - 'none'  if no authentication is being used
#     - 'spice' uses SASL or direct TLS authentication, depending on
#       command line options
#
# @mouse-mode: The mode in which the mouse cursor is displayed
#     currently.  Can be determined by the client or the server, or
#     unknown if spice server doesn't provide this information.
#     (since: 1.1)
#
# @channels: a list of @SpiceChannel for each active spice channel
#
# Since: 0.14
##
{ 'struct': 'SpiceInfo',
  'data': {'enabled': 'bool', 'migrated': 'bool', '*host': 'str', '*port': 'int',
           '*tls-port': 'int', '*auth': 'str', '*compiled-version': 'str',
           'mouse-mode': 'SpiceQueryMouseMode', '*channels': ['SpiceChannel']},
  'if': 'CONFIG_SPICE' }

##
# @query-spice:
#
# Returns information about the current SPICE server
#
# Returns: @SpiceInfo
#
# Since: 0.14
#
# Example:
#
# -> { "execute": "query-spice" }
# <- { "return": {
#          "enabled": true,
#          "auth": "spice",
#          "port": 5920,
#          "migrated":false,
#          "tls-port": 5921,
#          "host": "0.0.0.0",
#          "mouse-mode":"client",
#          "channels": [
#             {
#                "port": "54924",
#                "family": "ipv4",
#                "channel-type": 1,
#                "connection-id": 1804289383,
#                "host": "127.0.0.1",
#                "channel-id": 0,
#                "tls": true
#             },
#             {
#                "port": "36710",
#                "family": "ipv4",
#                "channel-type": 4,
#                "connection-id": 1804289383,
#                "host": "127.0.0.1",
#                "channel-id": 0,
#                "tls": false
#             },
#             [ ... more channels follow ... ]
#          ]
#       }
#    }
##
{ 'command': 'query-spice', 'returns': 'SpiceInfo',
  'if': 'CONFIG_SPICE' }

##
# @SPICE_CONNECTED:
#
# Emitted when a SPICE client establishes a connection
#
# @server: server information
#
# @client: client information
#
# Since: 0.14
#
# Example:
#
# <- { "timestamp": {"seconds": 1290688046, "microseconds": 388707},
#      "event": "SPICE_CONNECTED",
#      "data": {
#        "server": { "port": "5920", "family": "ipv4", "host": "127.0.0.1"},
#        "client": {"port": "52873", "family": "ipv4", "host": "127.0.0.1"}
#    }}
##
{ 'event': 'SPICE_CONNECTED',
  'data': { 'server': 'SpiceBasicInfo',
            'client': 'SpiceBasicInfo' },
  'if': 'CONFIG_SPICE' }

##
# @SPICE_INITIALIZED:
#
# Emitted after initial handshake and authentication takes place (if
# any) and the SPICE channel is up and running
#
# @server: server information
#
# @client: client information
#
# Since: 0.14
#
# Example:
#
# <- { "timestamp": {"seconds": 1290688046, "microseconds": 417172},
#      "event": "SPICE_INITIALIZED",
#      "data": {"server": {"auth": "spice", "port": "5921",
#                          "family": "ipv4", "host": "127.0.0.1"},
#               "client": {"port": "49004", "family": "ipv4", "channel-type": 3,
#                          "connection-id": 1804289383, "host": "127.0.0.1",
#                          "channel-id": 0, "tls": true}
#    }}
##
{ 'event': 'SPICE_INITIALIZED',
  'data': { 'server': 'SpiceServerInfo',
            'client': 'SpiceChannel' },
  'if': 'CONFIG_SPICE' }

##
# @SPICE_DISCONNECTED:
#
# Emitted when the SPICE connection is closed
#
# @server: server information
#
# @client: client information
#
# Since: 0.14
#
# Example:
#
# <- { "timestamp": {"seconds": 1290688046, "microseconds": 388707},
#      "event": "SPICE_DISCONNECTED",
#      "data": {
#        "server": { "port": "5920", "family": "ipv4", "host": "127.0.0.1"},
#        "client": {"port": "52873", "family": "ipv4", "host": "127.0.0.1"}
#    }}
##
{ 'event': 'SPICE_DISCONNECTED',
  'data': { 'server': 'SpiceBasicInfo',
            'client': 'SpiceBasicInfo' },
  'if': 'CONFIG_SPICE' }

##
# @SPICE_MIGRATE_COMPLETED:
#
# Emitted when SPICE migration has completed
#
# Since: 1.3
#
# Example:
#
# <- { "timestamp": {"seconds": 1290688046, "microseconds": 417172},
#      "event": "SPICE_MIGRATE_COMPLETED" }
##
{ 'event': 'SPICE_MIGRATE_COMPLETED',
  'if': 'CONFIG_SPICE' }

##
# == VNC
##

##
# @VncBasicInfo:
#
# The basic information for vnc network connection
#
# @host: IP address
#
# @service: The service name of the vnc port.  This may depend on the
#     host system's service database so symbolic names should not be
#     relied on.
#
# @family: address family
#
# @websocket: true in case the socket is a websocket (since 2.3).
#
# Since: 2.1
##
{ 'struct': 'VncBasicInfo',
  'data': { 'host': 'str',
            'service': 'str',
            'family': 'NetworkAddressFamily',
            'websocket': 'bool' },
  'if': 'CONFIG_VNC' }

##
# @VncServerInfo:
#
# The network connection information for server
#
# @auth: authentication method used for the plain (non-websocket) VNC
#     server
#
# Since: 2.1
##
{ 'struct': 'VncServerInfo',
  'base': 'VncBasicInfo',
  'data': { '*auth': 'str' },
  'if': 'CONFIG_VNC' }

##
# @VncClientInfo:
#
# Information about a connected VNC client.
#
# @x509_dname: If x509 authentication is in use, the Distinguished
#     Name of the client.
#
# @sasl_username: If SASL authentication is in use, the SASL username
#     used for authentication.
#
# Since: 0.14
##
{ 'struct': 'VncClientInfo',
  'base': 'VncBasicInfo',
  'data': { '*x509_dname': 'str', '*sasl_username': 'str' },
  'if': 'CONFIG_VNC' }

##
# @VncInfo:
#
# Information about the VNC session.
#
# @enabled: true if the VNC server is enabled, false otherwise
#
# @host: The hostname the VNC server is bound to.  This depends on the
#     name resolution on the host and may be an IP address.
#
# @family:
#     - 'ipv6' if the host is listening for IPv6 connections
#     - 'ipv4' if the host is listening for IPv4 connections
#     - 'unix' if the host is listening on a unix domain socket
#     - 'unknown' otherwise
#
# @service: The service name of the server's port.  This may depends
#     on the host system's service database so symbolic names should
#     not be relied on.
#
# @auth: the current authentication type used by the server
#
#     - 'none' if no authentication is being used
#     - 'vnc' if VNC authentication is being used
#     - 'vencrypt+plain' if VEncrypt is used with plain text
#       authentication
#     - 'vencrypt+tls+none' if VEncrypt is used with TLS and no
#       authentication
#     - 'vencrypt+tls+vnc' if VEncrypt is used with TLS and VNC
#       authentication
#     - 'vencrypt+tls+plain' if VEncrypt is used with TLS and plain
#       text auth
#     - 'vencrypt+x509+none' if VEncrypt is used with x509 and no auth
#     - 'vencrypt+x509+vnc' if VEncrypt is used with x509 and VNC auth
#     - 'vencrypt+x509+plain' if VEncrypt is used with x509 and plain
#       text auth
#     - 'vencrypt+tls+sasl' if VEncrypt is used with TLS and SASL auth
#     - 'vencrypt+x509+sasl' if VEncrypt is used with x509 and SASL
#       auth
#
# @clients: a list of @VncClientInfo of all currently connected
#     clients
#
# Since: 0.14
##
{ 'struct': 'VncInfo',
  'data': {'enabled': 'bool', '*host': 'str',
           '*family': 'NetworkAddressFamily',
           '*service': 'str', '*auth': 'str', '*clients': ['VncClientInfo']},
  'if': 'CONFIG_VNC' }

##
# @VncPrimaryAuth:
#
# vnc primary authentication method.
#
# Since: 2.3
##
{ 'enum': 'VncPrimaryAuth',
  'data': [ 'none', 'vnc', 'ra2', 'ra2ne', 'tight', 'ultra',
            'tls', 'vencrypt', 'sasl' ],
  'if': 'CONFIG_VNC' }

##
# @VncVencryptSubAuth:
#
# vnc sub authentication method with vencrypt.
#
# Since: 2.3
##
{ 'enum': 'VncVencryptSubAuth',
  'data': [ 'plain',
            'tls-none',  'x509-none',
            'tls-vnc',   'x509-vnc',
            'tls-plain', 'x509-plain',
            'tls-sasl',  'x509-sasl' ],
  'if': 'CONFIG_VNC' }

##
# @VncServerInfo2:
#
# The network connection information for server
#
# @auth: The current authentication type used by the servers
#
# @vencrypt: The vencrypt sub authentication type used by the servers,
#     only specified in case auth == vencrypt.
#
# Since: 2.9
##
{ 'struct': 'VncServerInfo2',
  'base': 'VncBasicInfo',
  'data': { 'auth'      : 'VncPrimaryAuth',
            '*vencrypt' : 'VncVencryptSubAuth' },
  'if': 'CONFIG_VNC' }

##
# @VncInfo2:
#
# Information about a vnc server
#
# @id: vnc server name.
#
# @server: A list of @VncBasincInfo describing all listening sockets.
#     The list can be empty (in case the vnc server is disabled). It
#     also may have multiple entries: normal + websocket, possibly
#     also ipv4 + ipv6 in the future.
#
# @clients: A list of @VncClientInfo of all currently connected
#     clients.  The list can be empty, for obvious reasons.
#
# @auth: The current authentication type used by the non-websockets
#     servers
#
# @vencrypt: The vencrypt authentication type used by the servers,
#     only specified in case auth == vencrypt.
#
# @display: The display device the vnc server is linked to.
#
# Since: 2.3
##
{ 'struct': 'VncInfo2',
  'data': { 'id'        : 'str',
            'server'    : ['VncServerInfo2'],
            'clients'   : ['VncClientInfo'],
            'auth'      : 'VncPrimaryAuth',
            '*vencrypt' : 'VncVencryptSubAuth',
            '*display'  : 'str' },
  'if': 'CONFIG_VNC' }

##
# @query-vnc:
#
# Returns information about the current VNC server
#
# Returns: @VncInfo
#
# Since: 0.14
#
# Example:
#
# -> { "execute": "query-vnc" }
# <- { "return": {
#          "enabled":true,
#          "host":"0.0.0.0",
#          "service":"50402",
#          "auth":"vnc",
#          "family":"ipv4",
#          "clients":[
#             {
#                "host":"127.0.0.1",
#                "service":"50401",
#                "family":"ipv4",
#                "websocket":false
#             }
#          ]
#       }
#    }
##
{ 'command': 'query-vnc', 'returns': 'VncInfo',
  'if': 'CONFIG_VNC' }
##
# @query-vnc-servers:
#
# Returns a list of vnc servers.  The list can be empty.
#
# Returns: a list of @VncInfo2
#
# Since: 2.3
##
{ 'command': 'query-vnc-servers', 'returns': ['VncInfo2'],
  'if': 'CONFIG_VNC' }

##
# @change-vnc-password:
#
# Change the VNC server password.
#
# @password: the new password to use with VNC authentication
#
# Since: 1.1
#
# Notes: An empty password in this command will set the password to
#     the empty string.  Existing clients are unaffected by executing
#     this command.
##
{ 'command': 'change-vnc-password',
  'data': { 'password': 'str' },
  'if': 'CONFIG_VNC' }

##
# @VNC_CONNECTED:
#
# Emitted when a VNC client establishes a connection
#
# @server: server information
#
# @client: client information
#
# Note: This event is emitted before any authentication takes place,
#     thus the authentication ID is not provided
#
# Since: 0.13
#
# Example:
#
# <- { "event": "VNC_CONNECTED",
#      "data": {
#            "server": { "auth": "sasl", "family": "ipv4", "websocket": false,
#                        "service": "5901", "host": "0.0.0.0" },
#            "client": { "family": "ipv4", "service": "58425",
#                        "host": "127.0.0.1", "websocket": false } },
#      "timestamp": { "seconds": 1262976601, "microseconds": 975795 } }
##
{ 'event': 'VNC_CONNECTED',
  'data': { 'server': 'VncServerInfo',
            'client': 'VncBasicInfo' },
  'if': 'CONFIG_VNC' }

##
# @VNC_INITIALIZED:
#
# Emitted after authentication takes place (if any) and the VNC
# session is made active
#
# @server: server information
#
# @client: client information
#
# Since: 0.13
#
# Example:
#
# <-  { "event": "VNC_INITIALIZED",
#       "data": {
#            "server": { "auth": "sasl", "family": "ipv4", "websocket": false,
#                        "service": "5901", "host": "0.0.0.0"},
#            "client": { "family": "ipv4", "service": "46089", "websocket": false,
#                        "host": "127.0.0.1", "sasl_username": "luiz" } },
#       "timestamp": { "seconds": 1263475302, "microseconds": 150772 } }
##
{ 'event': 'VNC_INITIALIZED',
  'data': { 'server': 'VncServerInfo',
            'client': 'VncClientInfo' },
  'if': 'CONFIG_VNC' }

##
# @VNC_DISCONNECTED:
#
# Emitted when the connection is closed
#
# @server: server information
#
# @client: client information
#
# Since: 0.13
#
# Example:
#
# <- { "event": "VNC_DISCONNECTED",
#      "data": {
#            "server": { "auth": "sasl", "family": "ipv4", "websocket": false,
#                        "service": "5901", "host": "0.0.0.0" },
#            "client": { "family": "ipv4", "service": "58425", "websocket": false,
#                        "host": "127.0.0.1", "sasl_username": "luiz" } },
#      "timestamp": { "seconds": 1262976601, "microseconds": 975795 } }
##
{ 'event': 'VNC_DISCONNECTED',
  'data': { 'server': 'VncServerInfo',
            'client': 'VncClientInfo' },
  'if': 'CONFIG_VNC' }

##
# = Input
##

##
# @MouseInfo:
#
# Information about a mouse device.
#
# @name: the name of the mouse device
#
# @index: the index of the mouse device
#
# @current: true if this device is currently receiving mouse events
#
# @absolute: true if this device supports absolute coordinates as
#     input
#
# Since: 0.14
##
{ 'struct': 'MouseInfo',
  'data': {'name': 'str', 'index': 'int', 'current': 'bool',
           'absolute': 'bool'} }

##
# @query-mice:
#
# Returns information about each active mouse device
#
# Returns: a list of @MouseInfo for each device
#
# Since: 0.14
#
# Example:
#
# -> { "execute": "query-mice" }
# <- { "return": [
#          {
#             "name":"QEMU Microsoft Mouse",
#             "index":0,
#             "current":false,
#             "absolute":false
#          },
#          {
#             "name":"QEMU PS/2 Mouse",
#             "index":1,
#             "current":true,
#             "absolute":true
#          }
#       ]
#    }
##
{ 'command': 'query-mice', 'returns': ['MouseInfo'] }

##
# @QKeyCode:
#
# An enumeration of key name.
#
# This is used by the @send-key command.
#
# @unmapped: since 2.0
#
# @pause: since 2.0
#
# @ro: since 2.4
#
# @kp_comma: since 2.4
#
# @kp_equals: since 2.6
#
# @power: since 2.6
#
# @hiragana: since 2.9
#
# @henkan: since 2.9
#
# @yen: since 2.9
#
# @sleep: since 2.10
#
# @wake: since 2.10
#
# @audionext: since 2.10
#
# @audioprev: since 2.10
#
# @audiostop: since 2.10
#
# @audioplay: since 2.10
#
# @audiomute: since 2.10
#
# @volumeup: since 2.10
#
# @volumedown: since 2.10
#
# @mediaselect: since 2.10
#
# @mail: since 2.10
#
# @calculator: since 2.10
#
# @computer: since 2.10
#
# @ac_home: since 2.10
#
# @ac_back: since 2.10
#
# @ac_forward: since 2.10
#
# @ac_refresh: since 2.10
#
# @ac_bookmarks: since 2.10
#
# @muhenkan: since 2.12
#
# @katakanahiragana: since 2.12
#
# @lang1: since 6.1
#
# @lang2: since 6.1
#
# @f13: since 8.0
#
# @f14: since 8.0
#
# @f15: since 8.0
#
# @f16: since 8.0
#
# @f17: since 8.0
#
# @f18: since 8.0
#
# @f19: since 8.0
#
# @f20: since 8.0
#
# @f21: since 8.0
#
# @f22: since 8.0
#
# @f23: since 8.0
#
# @f24: since 8.0
#
# 'sysrq' was mistakenly added to hack around the fact that the ps2
# driver was not generating correct scancodes sequences when
# 'alt+print' was pressed.  This flaw is now fixed and the 'sysrq' key
# serves no further purpose.  Any further use of 'sysrq' will be
# transparently changed to 'print', so they are effectively synonyms.
#
# Since: 1.3
##
{ 'enum': 'QKeyCode',
  'data': [ 'unmapped',
            'shift', 'shift_r', 'alt', 'alt_r', 'ctrl',
            'ctrl_r', 'menu', 'esc', '1', '2', '3', '4', '5', '6', '7', '8',
            '9', '0', 'minus', 'equal', 'backspace', 'tab', 'q', 'w', 'e',
            'r', 't', 'y', 'u', 'i', 'o', 'p', 'bracket_left', 'bracket_right',
            'ret', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'semicolon',
            'apostrophe', 'grave_accent', 'backslash', 'z', 'x', 'c', 'v', 'b',
            'n', 'm', 'comma', 'dot', 'slash', 'asterisk', 'spc', 'caps_lock',
            'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10',
            'num_lock', 'scroll_lock', 'kp_divide', 'kp_multiply',
            'kp_subtract', 'kp_add', 'kp_enter', 'kp_decimal', 'sysrq', 'kp_0',
            'kp_1', 'kp_2', 'kp_3', 'kp_4', 'kp_5', 'kp_6', 'kp_7', 'kp_8',
            'kp_9', 'less', 'f11', 'f12', 'print', 'home', 'pgup', 'pgdn', 'end',
            'left', 'up', 'down', 'right', 'insert', 'delete', 'stop', 'again',
            'props', 'undo', 'front', 'copy', 'open', 'paste', 'find', 'cut',
            'lf', 'help', 'meta_l', 'meta_r', 'compose', 'pause',
            'ro', 'hiragana', 'henkan', 'yen', 'muhenkan', 'katakanahiragana',
            'kp_comma', 'kp_equals', 'power', 'sleep', 'wake',
            'audionext', 'audioprev', 'audiostop', 'audioplay', 'audiomute',
            'volumeup', 'volumedown', 'mediaselect',
            'mail', 'calculator', 'computer',
            'ac_home', 'ac_back', 'ac_forward', 'ac_refresh', 'ac_bookmarks',
            'lang1', 'lang2','f13','f14','f15','f16','f17','f18','f19','f20','f21','f22','f23','f24' ] }

##
# @KeyValueKind:
#
# Since: 1.3
##
{ 'enum': 'KeyValueKind',
  'data': [ 'number', 'qcode' ] }

##
# @IntWrapper:
#
# Since: 1.3
##
{ 'struct': 'IntWrapper',
  'data': { 'data': 'int' } }

##
# @QKeyCodeWrapper:
#
# Since: 1.3
##
{ 'struct': 'QKeyCodeWrapper',
  'data': { 'data': 'QKeyCode' } }

##
# @KeyValue:
#
# Represents a keyboard key.
#
# Since: 1.3
##
{ 'union': 'KeyValue',
  'base': { 'type': 'KeyValueKind' },
  'discriminator': 'type',
  'data': {
    'number': 'IntWrapper',
    'qcode': 'QKeyCodeWrapper' } }

##
# @send-key:
#
# Send keys to guest.
#
# @keys: An array of @KeyValue elements.  All @KeyValues in this array
#     are simultaneously sent to the guest.  A @KeyValue.number value
#     is sent directly to the guest, while @KeyValue.qcode must be a
#     valid @QKeyCode value
#
# @hold-time: time to delay key up events, milliseconds.  Defaults to
#     100
#
# Returns:
#     - Nothing on success
#     - If key is unknown or redundant, GenericError
#
# Since: 1.3
#
# Example:
#
# -> { "execute": "send-key",
#      "arguments": { "keys": [ { "type": "qcode", "data": "ctrl" },
#                               { "type": "qcode", "data": "alt" },
#                               { "type": "qcode", "data": "delete" } ] } }
# <- { "return": {} }
##
{ 'command': 'send-key',
  'data': { 'keys': ['KeyValue'], '*hold-time': 'int' } }

##
# @InputButton:
#
# Button of a pointer input device (mouse, tablet).
#
# @side: front side button of a 5-button mouse (since 2.9)
#
# @extra: rear side button of a 5-button mouse (since 2.9)
#
# @touch: screen contact on a multi-touch device (since 8.1)
#
# Since: 2.0
##
{ 'enum'  : 'InputButton',
  'data'  : [ 'left', 'middle', 'right', 'wheel-up', 'wheel-down', 'side',
  'extra', 'wheel-left', 'wheel-right', 'touch' ] }

##
# @InputAxis:
#
# Position axis of a pointer input device (mouse, tablet).
#
# Since: 2.0
##
{ 'enum'  : 'InputAxis',
  'data'  : [ 'x', 'y' ] }

##
# @InputMultiTouchType:
#
# Type of a multi-touch event.
#
# Since: 8.1
##
{ 'enum'  : 'InputMultiTouchType',
  'data'  : [ 'begin', 'update', 'end', 'cancel', 'data' ] }


##
# @InputKeyEvent:
#
# Keyboard input event.
#
# @key: Which key this event is for.
#
# @down: True for key-down and false for key-up events.
#
# Since: 2.0
##
{ 'struct'  : 'InputKeyEvent',
  'data'  : { 'key'     : 'KeyValue',
              'down'    : 'bool' } }

##
# @InputBtnEvent:
#
# Pointer button input event.
#
# @button: Which button this event is for.
#
# @down: True for key-down and false for key-up events.
#
# Since: 2.0
##
{ 'struct'  : 'InputBtnEvent',
  'data'  : { 'button'  : 'InputButton',
              'down'    : 'bool' } }

##
# @InputMoveEvent:
#
# Pointer motion input event.
#
# @axis: Which axis is referenced by @value.
#
# @value: Pointer position.  For absolute coordinates the valid range
#     is 0 -> 0x7ffff
#
# Since: 2.0
##
{ 'struct'  : 'InputMoveEvent',
  'data'  : { 'axis'    : 'InputAxis',
              'value'   : 'int' } }

##
# @InputMultiTouchEvent:
#
# MultiTouch input event.
#
# @slot: Which slot has generated the event.
#
# @tracking-id: ID to correlate this event with previously generated
#     events.
#
# @axis: Which axis is referenced by @value.
#
# @value: Contact position.
#
# Since: 8.1
##
{ 'struct'  : 'InputMultiTouchEvent',
  'data'  : { 'type'       : 'InputMultiTouchType',
              'slot'       : 'int',
              'tracking-id': 'int',
              'axis'       : 'InputAxis',
              'value'      : 'int' } }

##
# @InputEventKind:
#
# @key: a keyboard input event
#
# @btn: a pointer button input event
#
# @rel: a relative pointer motion input event
#
# @abs: an absolute pointer motion input event
#
# @mtt: a multi-touch input event
#
# Since: 2.0
##
{ 'enum': 'InputEventKind',
  'data': [ 'key', 'btn', 'rel', 'abs', 'mtt' ] }

##
# @InputKeyEventWrapper:
#
# Since: 2.0
##
{ 'struct': 'InputKeyEventWrapper',
  'data': { 'data': 'InputKeyEvent' } }

##
# @InputBtnEventWrapper:
#
# Since: 2.0
##
{ 'struct': 'InputBtnEventWrapper',
  'data': { 'data': 'InputBtnEvent' } }

##
# @InputMoveEventWrapper:
#
# Since: 2.0
##
{ 'struct': 'InputMoveEventWrapper',
  'data': { 'data': 'InputMoveEvent' } }

##
# @InputMultiTouchEventWrapper:
#
# Since: 8.1
##
{ 'struct': 'InputMultiTouchEventWrapper',
  'data': { 'data': 'InputMultiTouchEvent' } }

##
# @InputEvent:
#
# Input event union.
#
# @type: the type of input event
#
# Since: 2.0
##
{ 'union' : 'InputEvent',
  'base': { 'type': 'InputEventKind' },
  'discriminator': 'type',
  'data'  : { 'key'     : 'InputKeyEventWrapper',
              'btn'     : 'InputBtnEventWrapper',
              'rel'     : 'InputMoveEventWrapper',
              'abs'     : 'InputMoveEventWrapper',
              'mtt'     : 'InputMultiTouchEventWrapper' } }

##
# @input-send-event:
#
# Send input event(s) to guest.
#
# The @device and @head parameters can be used to send the input event
# to specific input devices in case (a) multiple input devices of the
# same kind are added to the virtual machine and (b) you have
# configured input routing (see docs/multiseat.txt) for those input
# devices.  The parameters work exactly like the device and head
# properties of input devices.  If @device is missing, only devices
# that have no input routing config are admissible.  If @device is
# specified, both input devices with and without input routing config
# are admissible, but devices with input routing config take
# precedence.
#
# @device: display device to send event(s) to.
#
# @head: head to send event(s) to, in case the display device supports
#     multiple scanouts.
#
# @events: List of InputEvent union.
#
# Returns: Nothing on success.
#
# Since: 2.6
#
# Note: The consoles are visible in the qom tree, under
#     /backend/console[$index]. They have a device link and head
#     property, so it is possible to map which console belongs to
#     which device and display.
#
# Examples:
#
# 1. Press left mouse button.
#
# -> { "execute": "input-send-event",
#     "arguments": { "device": "video0",
#                    "events": [ { "type": "btn",
#                    "data" : { "down": true, "button": "left" } } ] } }
# <- { "return": {} }
#
# -> { "execute": "input-send-event",
#     "arguments": { "device": "video0",
#                    "events": [ { "type": "btn",
#                    "data" : { "down": false, "button": "left" } } ] } }
# <- { "return": {} }
#
# 2. Press ctrl-alt-del.
#
# -> { "execute": "input-send-event",
#      "arguments": { "events": [
#         { "type": "key", "data" : { "down": true,
#           "key": {"type": "qcode", "data": "ctrl" } } },
#         { "type": "key", "data" : { "down": true,
#           "key": {"type": "qcode", "data": "alt" } } },
#         { "type": "key", "data" : { "down": true,
#           "key": {"type": "qcode", "data": "delete" } } } ] } }
# <- { "return": {} }
#
# 3. Move mouse pointer to absolute coordinates (20000, 400).
#
# -> { "execute": "input-send-event" ,
#   "arguments": { "events": [
#                { "type": "abs", "data" : { "axis": "x", "value" : 20000 } },
#                { "type": "abs", "data" : { "axis": "y", "value" : 400 } } ] } }
# <- { "return": {} }
##
{ 'command': 'input-send-event',
  'data': { '*device': 'str',
            '*head'  : 'int',
            'events' : [ 'InputEvent' ] } }

##
# @DisplayGTK:
#
# GTK display options.
#
# @grab-on-hover: Grab keyboard input on mouse hover.
#
# @zoom-to-fit: Zoom guest display to fit into the host window.  When
#     turned off the host window will be resized instead.  In case the
#     display device can notify the guest on window resizes
#     (virtio-gpu) this will default to "on", assuming the guest will
#     resize the display to match the window size then.  Otherwise it
#     defaults to "off". (Since 3.1)
#
# @show-tabs: Display the tab bar for switching between the various
#     graphical interfaces (e.g. VGA and virtual console character
#     devices) by default.  (Since 7.1)
#
# @show-menubar: Display the main window menubar.  Defaults to "on".
#     (Since 8.0)
#
# Since: 2.12
##
{ 'struct'  : 'DisplayGTK',
  'data'    : { '*grab-on-hover' : 'bool',
                '*zoom-to-fit'   : 'bool',
                '*show-tabs'     : 'bool',
                '*show-menubar'  : 'bool'  } }

##
# @DisplayEGLHeadless:
#
# EGL headless display options.
#
# @rendernode: Which DRM render node should be used.  Default is the
#     first available node on the host.
#
# Since: 3.1
##
{ 'struct'  : 'DisplayEGLHeadless',
  'data'    : { '*rendernode' : 'str' } }

##
# @DisplayDBus:
#
# DBus display options.
#
# @addr: The D-Bus bus address (default to the session bus).
#
# @rendernode: Which DRM render node should be used.  Default is the
#     first available node on the host.
#
# @p2p: Whether to use peer-to-peer connections (accepted through
#     @add_client).
#
# @audiodev: Use the specified DBus audiodev to export audio.
#
# Since: 7.0
##
{ 'struct'  : 'DisplayDBus',
  'data'    : { '*rendernode' : 'str',
                '*addr': 'str',
                '*p2p': 'bool',
                '*audiodev': 'str' } }

##
# @DisplayGLMode:
#
# Display OpenGL mode.
#
# @off: Disable OpenGL (default).
#
# @on: Use OpenGL, pick context type automatically.  Would better be
#     named 'auto' but is called 'on' for backward compatibility with
#     bool type.
#
# @core: Use OpenGL with Core (desktop) Context.
#
# @es: Use OpenGL with ES (embedded systems) Context.
#
# Since: 3.0
##
{ 'enum'    : 'DisplayGLMode',
  'data'    : [ 'off', 'on', 'core', 'es' ] }

##
# @DisplayCurses:
#
# Curses display options.
#
# @charset: Font charset used by guest (default: CP437).
#
# Since: 4.0
##
{ 'struct'  : 'DisplayCurses',
  'data'    : { '*charset'       : 'str' } }

##
# @DisplayCocoa:
#
# Cocoa display options.
#
# @left-command-key: Enable/disable forwarding of left command key to
#     guest.  Allows command-tab window switching on the host without
#     sending this key to the guest when "off". Defaults to "on"
#
# @full-grab: Capture all key presses, including system combos.  This
#     requires accessibility permissions, since it performs a global
#     grab on key events.  (default: off) See
#     https://support.apple.com/en-in/guide/mac-help/mh32356/mac
#
# @swap-opt-cmd: Swap the Option and Command keys so that their key
#     codes match their position on non-Mac keyboards and you can use
#     Meta/Super and Alt where you expect them.  (default: off)
#
# @zoom-to-fit: Zoom guest display to fit into the host window. When
#     turned off the host window will be resized instead. Defaults to
#     "off". (Since 8.2)
#
# Since: 7.0
##
{ 'struct': 'DisplayCocoa',
  'data': {
      '*left-command-key': 'bool',
      '*full-grab': 'bool',
      '*swap-opt-cmd': 'bool',
      '*zoom-to-fit': 'bool'
  } }

##
# @HotKeyMod:
#
# Set of modifier keys that need to be held for shortcut key actions.
#
# Since: 7.1
##
{ 'enum'  : 'HotKeyMod',
  'data'  : [ 'lctrl-lalt', 'lshift-lctrl-lalt', 'rctrl' ] }

##
# @DisplaySDL:
#
# SDL2 display options.
#
# @grab-mod: Modifier keys that should be pressed together with the
#     "G" key to release the mouse grab.
#
# Since: 7.1
##
{ 'struct'  : 'DisplaySDL',
  'data'    : { '*grab-mod'   : 'HotKeyMod' } }

##
# @DisplayType:
#
# Display (user interface) type.
#
# @default: The default user interface, selecting from the first
#     available of gtk, sdl, cocoa, and vnc.
#
# @none: No user interface or video output display.  The guest will
#     still see an emulated graphics card, but its output will not be
#     displayed to the QEMU user.
#
# @gtk: The GTK user interface.
#
# @sdl: The SDL user interface.
#
# @egl-headless: No user interface, offload GL operations to a local
#     DRI device.  Graphical display need to be paired with VNC or
#     Spice.  (Since 3.1)
#
# @curses: Display video output via curses.  For graphics device
#     models which support a text mode, QEMU can display this output
#     using a curses/ncurses interface.  Nothing is displayed when the
#     graphics device is in graphical mode or if the graphics device
#     does not support a text mode.  Generally only the VGA device
#     models support text mode.
#
# @cocoa: The Cocoa user interface.
#
# @spice-app: Set up a Spice server and run the default associated
#     application to connect to it.  The server will redirect the
#     serial console and QEMU monitors.  (Since 4.0)
#
# @dbus: Start a D-Bus service for the display.  (Since 7.0)
#
# Since: 2.12
##
{ 'enum'    : 'DisplayType',
  'data'    : [
    { 'name': 'default' },
    { 'name': 'none' },
    { 'name': 'gtk', 'if': 'CONFIG_GTK' },
    { 'name': 'sdl', 'if': 'CONFIG_SDL' },
    { 'name': 'egl-headless', 'if': 'CONFIG_OPENGL' },
    { 'name': 'curses', 'if': 'CONFIG_CURSES' },
    { 'name': 'cocoa', 'if': 'CONFIG_COCOA' },
    { 'name': 'spice-app', 'if': 'CONFIG_SPICE' },
    { 'name': 'dbus', 'if': 'CONFIG_DBUS_DISPLAY' }
  ]
}

##
# @DisplayOptions:
#
# Display (user interface) options.
#
# @type: Which DisplayType qemu should use.
#
# @full-screen: Start user interface in fullscreen mode
#     (default: off).
#
# @window-close: Allow to quit qemu with window close button
#     (default: on).
#
# @show-cursor: Force showing the mouse cursor (default: off).
#     (since: 5.0)
#
# @gl: Enable OpenGL support (default: off).
#
# Since: 2.12
##
{ 'union'   : 'DisplayOptions',
  'base'    : { 'type'           : 'DisplayType',
                '*full-screen'   : 'bool',
                '*window-close'  : 'bool',
                '*show-cursor'   : 'bool',
                '*gl'            : 'DisplayGLMode' },
  'discriminator' : 'type',
  'data'    : {
      'gtk': { 'type': 'DisplayGTK', 'if': 'CONFIG_GTK' },
      'cocoa': { 'type': 'DisplayCocoa', 'if': 'CONFIG_COCOA' },
      'curses': { 'type': 'DisplayCurses', 'if': 'CONFIG_CURSES' },
      'egl-headless': { 'type': 'DisplayEGLHeadless',
                        'if': 'CONFIG_OPENGL' },
      'dbus': { 'type': 'DisplayDBus', 'if': 'CONFIG_DBUS_DISPLAY' },
      'sdl': { 'type': 'DisplaySDL', 'if': 'CONFIG_SDL' }
  }
}

##
# @query-display-options:
#
# Returns information about display configuration
#
# Returns: @DisplayOptions
#
# Since: 3.1
##
{ 'command': 'query-display-options',
  'returns': 'DisplayOptions' }

##
# @DisplayReloadType:
#
# Available DisplayReload types.
#
# @vnc: VNC display
#
# Since: 6.0
##
{ 'enum': 'DisplayReloadType',
  'data': ['vnc'] }

##
# @DisplayReloadOptionsVNC:
#
# Specify the VNC reload options.
#
# @tls-certs: reload tls certs or not.
#
# Since: 6.0
##
{ 'struct': 'DisplayReloadOptionsVNC',
  'data': { '*tls-certs': 'bool' } }

##
# @DisplayReloadOptions:
#
# Options of the display configuration reload.
#
# @type: Specify the display type.
#
# Since: 6.0
##
{ 'union': 'DisplayReloadOptions',
  'base': {'type': 'DisplayReloadType'},
  'discriminator': 'type',
  'data': { 'vnc': 'DisplayReloadOptionsVNC' } }

##
# @display-reload:
#
# Reload display configuration.
#
# Returns: Nothing on success.
#
# Since: 6.0
#
# Example:
#
# -> { "execute": "display-reload",
#      "arguments": { "type": "vnc", "tls-certs": true  } }
# <- { "return": {} }
##
{ 'command': 'display-reload',
  'data': 'DisplayReloadOptions',
  'boxed' : true }

##
# @DisplayUpdateType:
#
# Available DisplayUpdate types.
#
# @vnc: VNC display
#
# Since: 7.1
##
{ 'enum': 'DisplayUpdateType',
  'data': ['vnc'] }

##
# @DisplayUpdateOptionsVNC:
#
# Specify the VNC reload options.
#
# @addresses: If specified, change set of addresses to listen for
#     connections.  Addresses configured for websockets are not
#     touched.
#
# Since: 7.1
##
{ 'struct': 'DisplayUpdateOptionsVNC',
  'data': { '*addresses': ['SocketAddress'] } }

##
# @DisplayUpdateOptions:
#
# Options of the display configuration reload.
#
# @type: Specify the display type.
#
# Since: 7.1
##
{ 'union': 'DisplayUpdateOptions',
  'base': {'type': 'DisplayUpdateType'},
  'discriminator': 'type',
  'data': { 'vnc': 'DisplayUpdateOptionsVNC' } }

##
# @display-update:
#
# Update display configuration.
#
# Returns: Nothing on success.
#
# Since: 7.1
#
# Example:
#
# -> { "execute": "display-update",
#      "arguments": { "type": "vnc", "addresses":
#                     [ { "type": "inet", "host": "0.0.0.0",
#                         "port": "5901" } ] } }
# <- { "return": {} }
##
{ 'command': 'display-update',
  'data': 'DisplayUpdateOptions',
  'boxed' : true }

##
# @client_migrate_info:
#
# Set migration information for remote display.  This makes the server
# ask the client to automatically reconnect using the new parameters
# once migration finished successfully.  Only implemented for SPICE.
#
# @protocol: must be "spice"
#
# @hostname: migration target hostname
#
# @port: spice tcp port for plaintext channels
#
# @tls-port: spice tcp port for tls-secured channels
#
# @cert-subject: server certificate subject
#
# Since: 0.14
#
# Example:
#
# -> { "execute": "client_migrate_info",
#      "arguments": { "protocol": "spice",
#                     "hostname": "virt42.lab.kraxel.org",
#                     "port": 1234 } }
# <- { "return": {} }
##
{ 'command': 'client_migrate_info',
  'data': { 'protocol': 'str', 'hostname': 'str', '*port': 'int',
            '*tls-port': 'int', '*cert-subject': 'str' } }
