All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcelo Tosatti <mtosatti@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: Amos Kong <akong@redhat.com>, Gerd Hoffmann <kraxel@redhat.com>,
	qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH v3] add input-send-event command
Date: Mon, 29 Sep 2014 16:30:45 -0300	[thread overview]
Message-ID: <20140929193045.GA30934@amt.cnet> (raw)
In-Reply-To: <5429AF2C.7000001@redhat.com>

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 <mtosatti@redhat.com>
> > 
> > ---
> >  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	other threads:[~2014-09-29 19:31 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-29 18:56 [Qemu-devel] [PATCH v3] add input-send-event command Marcelo Tosatti
2014-09-29 19:12 ` Eric Blake
2014-09-29 19:30   ` Marcelo Tosatti [this message]
2014-09-30  6:51     ` Gerd Hoffmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140929193045.GA30934@amt.cnet \
    --to=mtosatti@redhat.com \
    --cc=akong@redhat.com \
    --cc=eblake@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.