----- Original Message ----- > On Wed, 30 May 2012 18:17:54 +0800 > Amos Kong <ak...@redhat.com> wrote: > > > On 29/05/12 21:24, Luiz Capitulino wrote: > > > On Tue, 29 May 2012 20:17:53 +0800 > > > Amos Kong<ak...@redhat.com> wrote: > > > > > >> 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<ak...@redhat.com> > > >>>>> > > >>>>>> +## +# @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? > > > > > > Looks like we don't support enum lists yet, so the right thing to > > > do is to add it. > > > I can do it if you want, or you could give it a try. > > > > I would like to try it. > > You'll have to look in scripts/qapi-types.py and maybe in > scripts/qapi-commands.py too.
Today I already started to read docs/qapi-code-gen.txt and 'hack' qapi-types.py and qapi-visit.py Currently the KeycodesList can be generated, I'm trying to make the change harmonious with 'type' functions. > Please, don't hesitate to ping me if you have questions. Ok. As you know, we live in different timezones, we almost could not touch each other in the work time :) I would send you email when I find other problem, thanks again! > > >> { '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. > > > > > > Shouldn't the enum contain only symbolic names? > > > > qapi-types.h: > > typedef enum KeyCodes > > { > > KEY_CODES_SHIFT = 0, > > KEY_CODES_SHIFT_R = 1, > > KEY_CODES_ALT = 2, > > .... > > KEY_CODES_< = .. > > > > ^^^ problem should exist here > > That's because you have something like '<' in the enum list, right? I > think > we can call it 'less-than', no? yes, it should be ok. Need to convert inputted '<' to 'less-than'. I will try tomorrow. Amos.