# -*- 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
#
# .. qmp-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
#
# .. note:: 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
#
# .. qmp-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
#
# .. qmp-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.
#
# 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:
#
# Return information about the current SPICE server
#
# Since: 0.14
#
# .. qmp-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
#                 },
#                 ...
#              ]
#           }
#        }
##
{ '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
#
# .. qmp-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
#
# .. qmp-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
#
# .. qmp-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
#
# .. qmp-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 `VncBasicInfo` 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:
#
# Return information about the current VNC server
#
# Since: 0.14
#
# .. qmp-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:
#
# Return a list of vnc servers.  The list can be empty.
#
# 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
#
# .. note:: 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
#
# .. qmp-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
#
# .. qmp-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
#
# .. qmp-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:
#
# Return information about each active mouse device
#
# Returns: a list of info for each device
#
# Since: 0.14
#
# .. qmp-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',
  'prefix': 'Q_KEY_CODE',
  '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
#
# .. qmp-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.
#
# @begin: A new touch event sequence has just started.
#
# @update: A touch event sequence has been updated.
#
# @end: A touch event sequence has finished.
#
# @cancel: A touch event sequence has been canceled.
#
# @data: Absolute position data.
#
# 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 to 0x7fff.
#
# Since: 2.0
##
{ 'struct'  : 'InputMoveEvent',
  'data'  : { 'axis'    : 'InputAxis',
              'value'   : 'int' } }

##
# @InputMultiTouchEvent:
#
# MultiTouch input event.
#
# @type: The type of multi-touch 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.
#
# .. qmp-example::
#    :title: 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": {} }
#
# .. qmp-example::
#    :title: 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": {} }
#
# .. qmp-example::
#    :title: Move mouse pointer to absolute coordinates
#
#     -> { "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)
#
# @keep-aspect-ratio: Keep width/height aspect ratio of guest content
#     when resizing host window.  Defaults to "on".  (Since 10.1)
#
# @scale: Set preferred scale of the display.  Defaults to 1.0.
#     (Since 10.1)
#
# Since: 2.12
##
{ 'struct'  : 'DisplayGTK',
  'data'    : { '*grab-on-hover'     : 'bool',
                '*zoom-to-fit'       : 'bool',
                '*show-tabs'         : 'bool',
                '*show-menubar'      : 'bool',
                '*keep-aspect-ratio' : 'bool',
                '*scale'             : 'number'  } }

##
# @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)
#
# @zoom-interpolation: Apply interpolation to smooth output when
#     zoom-to-fit is enabled.  Defaults to "off".  (Since 9.0)
#
# Since: 7.0
##
{ 'struct': 'DisplayCocoa',
  'data': {
      '*left-command-key': 'bool',
      '*full-grab': 'bool',
      '*swap-opt-cmd': 'bool',
      '*zoom-to-fit': 'bool',
      '*zoom-interpolation': '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:
#
# Return information about display configuration
#
# 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
#
# .. qmp-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
#
# .. qmp-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
#
# .. qmp-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' } }
