qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v3] add input-send-event command


From: Marcelo Tosatti
Subject: Re: [Qemu-devel] [PATCH v3] add input-send-event command
Date: Mon, 29 Sep 2014 16:30:45 -0300
User-agent: Mutt/1.5.21 (2010-09-15)

On Mon, Sep 29, 2014 at 01:12:44PM -0600, Eric Blake wrote:
> On 09/29/2014 12:56 PM, Marcelo Tosatti wrote:
> > 
> > Which allows specification of absolute/relative,
> > up/down and console parameters.
> > 
> > Suggested by Gerd Hoffman.
> > 
> > Signed-off-by: Marcelo Tosatti <address@hidden>
> > 
> > ---
> >  qapi-schema.json | 17 +++++++++++++++
> >  qmp-commands.hx  | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  ui/input.c       | 31 ++++++++++++++++++++++++++
> >  3 files changed, 111 insertions(+)
> > 
> > diff --git a/qapi-schema.json b/qapi-schema.json
> > index 4bfaf20..2e9e261 100644
> > --- a/qapi-schema.json
> > +++ b/qapi-schema.json
> > @@ -3233,6 +3233,23 @@
> >                'abs'     : 'InputMoveEvent' } }
> >  
> >  ##
> > +# @input-send-event
> > +#
> > +# Send input event(s) to guest.
> > +#
> > +# @console: Which console to send event(s) to.
> > +#
> > +# @events: List of InputEvent union.
> > +#
> > +# Returns: Nothing on success.
> > +#
> > +# Since: 2.2
> > +#
> > +##
> > +{ 'command': 'input-send-event',
> > +  'data': { 'console':'int', 'events': [ 'InputEvent' ] } }
> 
> 'console' is mandatory; I guess that's okay.
> 
> Are we guaranteed that either all events are sent? Or is there a need to

Events can be dropped at hardware level if the event queue is full, for 
example. Would have to modify individual drivers to return error codes, 
i suppose. Gerd?

> worry about partial success (on a list of 3 events, the first gets sent,
> then some error is encountered on the second, and the third is not
> attempted)?  Are the only errors due to something that can be detected
> up front (such as trying to send a mouse event to a console that has
> only keyboard support)?
>
> > +The consoles are visible in the qom tree, under
> > +/backend/console[$index]. They have a device link and head property, so
> > +its possible to map which console belongs to which device and display.
> 
> s/its/it's/ (or 'it is')
>
> > +void qmp_input_send_event(int64_t console, InputEventList *events,
> > +                          Error **errp)
> > +{
> > +    InputEventList *e;
> > +    QemuConsole *con;
> > +
> > +    con = qemu_console_lookup_by_index(console);
> > +    if (!con) {
> > +        error_setg(errp, "console %" PRId64 " not found", console);
> > +        return;
> > +    }
> > +
> > +    if (!runstate_is_running() && !runstate_check(RUN_STATE_SUSPENDED)) {
> > +        error_setg(errp, "VM not running");
> > +        return;
> > +    }
> > +
> > +    for (e = events; e != NULL; e = e->next) {
> > +        InputEvent *event = e->value;
> > +
> > +        if (!qemu_input_find_handler(1 << event->kind, con)) {
> > +            error_setg(errp, "Input handler not found for "
> > +                             "event type %s",
> > +                            InputEventKind_lookup[event->kind]);
> > +            return;
> 
> 
> Ouch. You can return mid-loop.  I'd be more comfortable with a two-pass
> algorithm (first pass ensures all list elements have a handler, second
> actually calls qemu_input_event_send) or with a return that gives an
> integer count of how many list items were processed.

Sure.





reply via email to

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