# -*- 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 protocol.
#
# @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.
#
# Errors:
#     - 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 protocol.
#
# @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.
#
# Errors:
#     - 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)
#
# 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:
#
# @data: a numeric key code
#
# Since: 1.3
##
{ 'struct': 'IntWrapper',
  'data': { 'data': 'int' } }

##
# @QKeyCodeWrapper:
#
# @data: An enumeration of key name
#
# Since: 1.3
##
{ 'struct': 'QKeyCodeWrapper',
  'data': { 'data': 'QKeyCode' } }

##
# @KeyValue:
#
# Represents a keyboard key.
#
# @type: key encoding
#
# 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
#
# Errors:
#     - 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:
#
# @data: Keyboard input event
#
# Since: 2.0
##
{ 'struct': 'InputKeyEventWrapper',
  'data': { 'data': 'InputKeyEvent' } }

##
# @InputBtnEventWrapper:
#
# @data: Pointer button input event
#
# Since: 2.0
##
{ 'struct': 'InputBtnEventWrapper',
  'data': { 'data': 'InputBtnEvent' } }

##
# @InputMoveEventWrapper:
#
# @data: Pointer motion input event
#
# Since: 2.0
##
{ 'struct': 'InputMoveEventWrapper',
  'data': { 'data': 'InputMoveEvent' } }

##
# @InputMultiTouchEventWrapper:
#
# @data: MultiTouch input event
#
# 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.
#
# 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.
#
# 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.
#
# 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' } }
