From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55211) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XYgNU-00050B-N4 for qemu-devel@nongnu.org; Mon, 29 Sep 2014 15:13:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XYgNP-0004o3-Oo for qemu-devel@nongnu.org; Mon, 29 Sep 2014 15:12:56 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51068) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XYgNP-0004n0-Gt for qemu-devel@nongnu.org; Mon, 29 Sep 2014 15:12:51 -0400 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s8TJCjGI014284 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Mon, 29 Sep 2014 15:12:46 -0400 Message-ID: <5429AF2C.7000001@redhat.com> Date: Mon, 29 Sep 2014 13:12:44 -0600 From: Eric Blake MIME-Version: 1.0 References: <20140929185610.GA28309@amt.cnet> In-Reply-To: <20140929185610.GA28309@amt.cnet> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="cov7U2vSmHBnr4AeLGJ8BbrihrL2ETNFD" Subject: Re: [Qemu-devel] [PATCH v3] add input-send-event command List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Marcelo Tosatti , Gerd Hoffmann Cc: Amos Kong , qemu-devel This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --cov7U2vSmHBnr4AeLGJ8BbrihrL2ETNFD Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 09/29/2014 12:56 PM, Marcelo Tosatti wrote: >=20 > Which allows specification of absolute/relative, > up/down and console parameters. >=20 > Suggested by Gerd Hoffman. >=20 > Signed-off-by: Marcelo Tosatti >=20 > --- > qapi-schema.json | 17 +++++++++++++++ > qmp-commands.hx | 63 ++++++++++++++++++++++++++++++++++++++++++++++++= +++++ > ui/input.c | 31 ++++++++++++++++++++++++++ > 3 files changed, 111 insertions(+) >=20 > 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' } } > =20 > ## > +# @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 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, s= o > +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 =3D 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 =3D events; e !=3D NULL; e =3D e->next) { > + InputEvent *event =3D 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. --=20 Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org --cov7U2vSmHBnr4AeLGJ8BbrihrL2ETNFD Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 Comment: Public key at http://people.redhat.com/eblake/eblake.gpg iQEcBAEBCAAGBQJUKa8sAAoJEKeha0olJ0NqtO8IAKJKIcUbm72GMV3goUMnMuVe FGiMT3Jjt10Op5qacN3BR3jL+oyfmz5yVCIsO8plDTLFAUVd8W8uv6gmWN+alRmc 58+M4T2LiYrqJ1yF2kf3pdzws+d9vkas8jHl7fo/VeeNE04eWlBW7iw4R7l8WilI SKrw/aMl0um7URuGWlI/At+JPTEvIzMUGcDhJVPBONhpVKBn5ucqVfCrnswEbc+C SEWfgzjnsAVLotFCOInmqsKBAERdmmi/OGGEAPsdUit+Em+K1fPrK6ZmwF3eK9zL 23tRDpHiqfVGqu13Fpqa4+EvKtvB++eloQP/AKeWBdgsdWgWLbjaD4VwUILkkLY= =lflw -----END PGP SIGNATURE----- --cov7U2vSmHBnr4AeLGJ8BbrihrL2ETNFD--