# -*- 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 }

##
# == 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)
#
# Since: 2.0
##
{ 'enum'  : 'InputButton',
  'data'  : [ 'left', 'middle', 'right', 'wheel-up', 'wheel-down', 'side',
  'extra', 'wheel-left', 'wheel-right' ] }

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

##
# @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' } }

##
# @InputEventKind:
#
# Since: 2.0
##
{ 'enum': 'InputEventKind',
  'data': [ 'key', 'btn', 'rel', 'abs' ] }

##
# @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' } }

##
# @InputEvent:
#
# Input event union.
#
# @type: the input type, one of:
#
#     - 'key': Input event of Keyboard
#     - 'btn': Input event of pointer buttons
#     - 'rel': Input event of relative pointer motion
#     - 'abs': Input event of absolute pointer motion
#
# Since: 2.0
##
{ 'union' : 'InputEvent',
  'base': { 'type': 'InputEventKind' },
  'discriminator': 'type',
  'data'  : { 'key'     : 'InputKeyEventWrapper',
              'btn'     : 'InputBtnEventWrapper',
              'rel'     : 'InputMoveEventWrapper',
              'abs'     : 'InputMoveEventWrapper' } }

##
# @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)
#
# Since: 7.0
##
{ 'struct': 'DisplayCocoa',
  'data': {
      '*left-command-key': 'bool',
      '*full-grab': 'bool',
      '*swap-opt-cmd': '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': { 'all': ['CONFIG_OPENGL', 'CONFIG_GBM'] } },
    { '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': { 'all': ['CONFIG_OPENGL', 'CONFIG_GBM'] } },
      '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' } }
