qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 3/3] qapi: convert sendkey


From: Amos Kong
Subject: Re: [Qemu-devel] [PATCH 3/3] qapi: convert sendkey
Date: Tue, 29 May 2012 20:17:53 +0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20120430 Thunderbird/12.0.1

On 05/29/2012 07:57 PM, Amos Kong wrote:
> On 05/25/2012 09:14 PM, Anthony Liguori wrote:
>> On 05/24/2012 10:51 PM, Eric Blake wrote:
>>> On 05/24/2012 09:32 PM, Amos Kong wrote:
>>>> Convert 'sendkey' to use. do_sendkey() depends on some variables 
>>>> in monitor.c, so reserve qmp_sendkey() to monitor.c Rename
>>>> 'string' to 'keys', rename 'hold_time' to 'hold-time'
>>>>
>>>> Signed-off-by: Amos Kong<address@hidden>
>>>
>>>> +## +# @sendkey: +# +# Send keys to VM. +# +# @keys: key
>>>> sequence +# @hold-time: time to delay key up events +# +#
>>>> Returns: Nothing on success +#          If key is unknown or
>>>> redundant, QERR_INVALID_PARAMETER +#          If key is invalid,
>>>> QERR_INVALID_PARAMETER_VALUE +# +# Notes: Send @var{keys} to the
>>>> emulator. @var{keys} could be the name of the +#        key or
>>>> the raw value in either decimal or hexadecimal format. Use +#
>>>> @code{-} to press several keys simultaneously. +# +# Since:
>>>> 0.14.0 +## +{ 'command': 'sendkey', 'data': {'keys': 'str',
>>>> '*hold-time': 'int'} }
>>>
>>> Rather than making 'keys' a free-form string where qemu then has
>>> to parse '-' to separate keys, should we instead make it a JSON
>>> array?  For example,
>>>
>>> { "execute":"sendky", "data":{ "keys":["ctrl", "alt", "del"], 
>>> "hold-time":200 } }
>>
>> Actually, we should do:


>> { 'enum': 'KeyCode', 'data': [ 'map', 'exclam', 'at', 'numbersign',
>> ...] }
>>
>> { 'command': 'sendkey', 'data': { 'keys': [ 'KeyCode' ],
>> '*hold-time': 'int' } }

^^^

It doesn't work.  "KeyCodeList" could not be defined automatically. I
try to add a type definition to make it works, is it ok?

{ 'enum': 'Keycode',
  'data': [ 'shift', 'shift_r', 'alt', 'alt_r', 'altgr', 'altgr_r',
            ......
            'lf', 'help', 'meta_l', 'meta_r', 'compose' ] }

{ 'type': 'KeyCodes',
  'data': { 'name', 'Keycode' } }

{ 'command': 'sendkey',
  'data': { 'keys': ['KeyCodes'], '*hold-time': 'int' } }


New problems: special character '<' could not be added to enum, other
characters are fine.


>>
>> That also has the benefit of making it clear what symbolic names of
>> the keycodes we support are.
> 
> 
> Talked with Anthony in IRC, paste a summary.
> 
> There is a definition of supported keys in monitor.c (key_defs[]),
> we need to add all the items to enum.
> 
> There is a macro in monitor.c (key_defs[]), just ignore it.
>  #if defined(TARGET_SPARC) && !defined(TARGET_SPARC64)
> 
> If we use enum, we don't need to check the keycodes in qmp_sendkey(),
> and key-names need to be converted to keycodes in hmp_sendkey().
> 
> The keycodes are not consecutive, enum values do not need to be the
> keysym values, use a different table to map enum names to keysym values.
> 
> 


-- 
                        Amos.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]