* [Qemu-devel] [PATCH] add input-send-event command
@ 2014-06-16 23:15 Marcelo Tosatti
2014-06-17 9:02 ` Gerd Hoffmann
2014-06-17 11:59 ` Eric Blake
0 siblings, 2 replies; 6+ messages in thread
From: Marcelo Tosatti @ 2014-06-16 23:15 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Luiz Capitulino
Which allows specification of absolute/relative,
up/down and console parameters.
Suggested by Gerd Hoffman.
---
qapi-schema.json | 18 ++++++++++++++++
qmp-commands.hx | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
ui/input.c | 31 ++++++++++++++++++++++++++++
3 files changed, 108 insertions(+)
Index: qemu/qapi-schema.json
===================================================================
--- qemu.orig/qapi-schema.json 2014-06-16 20:12:51.049064621 -0300
+++ qemu/qapi-schema.json 2014-06-16 20:13:42.886920723 -0300
@@ -4722,3 +4722,21 @@
'btn' : 'InputBtnEvent',
'rel' : 'InputMoveEvent',
'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.1
+#
+##
+{ 'command': 'input-send-event',
+ 'data': { 'console':'int', 'events': [ 'InputEvent' ] } }
+
Index: qemu/qmp-commands.hx
===================================================================
--- qemu.orig/qmp-commands.hx 2014-06-16 20:12:51.050064619 -0300
+++ qemu/qmp-commands.hx 2014-06-16 20:13:42.888920718 -0300
@@ -3572,3 +3572,62 @@
} } ] }
EQMP
+
+ {
+ .name = "input-send-event",
+ .args_type = "console:i,events:q",
+ .mhandler.cmd_new = qmp_marshal_input_input_send_event,
+ },
+
+SQMP
+@input-send-event
+-----------------
+
+Send input event to guest.
+
+Arguments:
+
+- "console": console index.
+- "events": list of input events.
+
+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.
+
+Example (1):
+
+Press left mouse button.
+
+-> { "execute": "input-send-event",
+ "arguments": { "console": 0,
+ "events": [ { "type": "btn",
+ "data" : { "down": true, "button": "Left" } },
+ { "type": "btn",
+ "data" : { "down": false, "button": "Left" } } ] } }
+<- { "return": {} }
+
+Example (2):
+
+Press ctrl-alt-del.
+
+-> { "execute": "input-send-event",
+ "arguments": { "console": 0, "events": [
+ { "type": "key", "data" : { "down": true,
+ "key": {"type": "qcode", "data": "ctrl" } } },
+ { "type": "key", "data" : { "down": true,
+ "key": {"type": "qcode", "data": "alt" } } },
+ { "type": "key", "data" : { "down": true,
+ "key": {"type": "qcode", "data": "delete" } } } ] } }
+<- { "return": {} }
+
+Example (3):
+
+Move mouse pointer to absolute coordinates (20000, 400).
+
+-> { "execute": "input-send-event" ,
+ "arguments": { "console": 0, "events": [
+ { "type": "abs", "data" : { "axis": "X", "value" : 20000} },
+ { "type": "abs", "data" : { "axis": "Y", "value" : 400 } } ] } }
+<- { "return": {} }
+
+EQMP
Index: qemu/ui/input.c
===================================================================
--- qemu.orig/ui/input.c 2014-06-16 20:12:51.051064616 -0300
+++ qemu/ui/input.c 2014-06-16 20:13:42.888920718 -0300
@@ -102,6 +102,37 @@
return NULL;
}
+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;
+ }
+ qemu_input_event_send(con, event);
+ }
+ qemu_input_event_sync();
+}
+
static void qemu_input_transform_abs_rotate(InputEvent *evt)
{
switch (graphic_rotate) {
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH] add input-send-event command
2014-06-16 23:15 [Qemu-devel] [PATCH] add input-send-event command Marcelo Tosatti
@ 2014-06-17 9:02 ` Gerd Hoffmann
2014-06-17 11:54 ` Eric Blake
2014-06-17 11:59 ` Eric Blake
1 sibling, 1 reply; 6+ messages in thread
From: Gerd Hoffmann @ 2014-06-17 9:02 UTC (permalink / raw)
To: Marcelo Tosatti; +Cc: qemu-devel, Luiz Capitulino
On Mo, 2014-06-16 at 20:15 -0300, Marcelo Tosatti wrote:
> Which allows specification of absolute/relative,
> up/down and console parameters.
Looks good overall, only minor nits. Will wait for acks from qmp guys
before picking into input branch.
> Suggested by Gerd Hoffman.
Huh? Signed-off missing ...
> +Press left mouse button.
> +
> +-> { "execute": "input-send-event",
> + "arguments": { "console": 0,
> + "events": [ { "type": "btn",
> + "data" : { "down": true, "button": "Left" } },
> + { "type": "btn",
> + "data" : { "down": false, "button": "Left" } } ] } }
> +<- { "return": {} }
Bad example. Down + up should go as separate commands (so you have a
sync inbetween), otherwise it might happen that the guest doesn't see
the button event at all.
cheers,
Gerd
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH] add input-send-event command
2014-06-17 9:02 ` Gerd Hoffmann
@ 2014-06-17 11:54 ` Eric Blake
2014-06-17 13:41 ` Marcelo Tosatti
0 siblings, 1 reply; 6+ messages in thread
From: Eric Blake @ 2014-06-17 11:54 UTC (permalink / raw)
To: Gerd Hoffmann, Marcelo Tosatti; +Cc: qemu-devel, Luiz Capitulino
[-- Attachment #1: Type: text/plain, Size: 1616 bytes --]
On 06/17/2014 03:02 AM, Gerd Hoffmann wrote:
> On Mo, 2014-06-16 at 20:15 -0300, Marcelo Tosatti wrote:
>> Which allows specification of absolute/relative,
>> up/down and console parameters.
>
> Looks good overall, only minor nits. Will wait for acks from qmp guys
> before picking into input branch.
>
>> Suggested by Gerd Hoffman.
>
> Huh? Signed-off missing ...
>
>> +Press left mouse button.
>> +
>> +-> { "execute": "input-send-event",
>> + "arguments": { "console": 0,
>> + "events": [ { "type": "btn",
>> + "data" : { "down": true, "button": "Left" } },
>> + { "type": "btn",
>> + "data" : { "down": false, "button": "Left" } } ] } }
>> +<- { "return": {} }
>
> Bad example. Down + up should go as separate commands (so you have a
> sync inbetween), otherwise it might happen that the guest doesn't see
> the button event at all.
Would it be worth adding a command to the union of possible events that
adds a pause? As in:
-> { "execute": "input-send-event",
"arguments": { "console": 0,
"events": [
{ "type": "btn",
"data" : { "down": true, "button": "Left" } },
{ "type": "pause", "data": { "duration": 10 } },
{ "type": "btn",
"data" : { "down": false, "button": "Left" } } ] } }
that sticks a 10 ms delay between the other two events?
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH] add input-send-event command
2014-06-16 23:15 [Qemu-devel] [PATCH] add input-send-event command Marcelo Tosatti
2014-06-17 9:02 ` Gerd Hoffmann
@ 2014-06-17 11:59 ` Eric Blake
2014-06-17 13:46 ` Marcelo Tosatti
1 sibling, 1 reply; 6+ messages in thread
From: Eric Blake @ 2014-06-17 11:59 UTC (permalink / raw)
To: Marcelo Tosatti, qemu-devel; +Cc: Gerd Hoffmann, Luiz Capitulino
[-- Attachment #1: Type: text/plain, Size: 2401 bytes --]
On 06/16/2014 05:15 PM, Marcelo Tosatti wrote:
>
> Which allows specification of absolute/relative,
> up/down and console parameters.
>
> Suggested by Gerd Hoffman.
>
> ---
Needs S-o-B.
> qapi-schema.json | 18 ++++++++++++++++
> qmp-commands.hx | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ui/input.c | 31 ++++++++++++++++++++++++++++
> 3 files changed, 108 insertions(+)
>
> Index: qemu/qapi-schema.json
> ===================================================================
> --- qemu.orig/qapi-schema.json 2014-06-16 20:12:51.049064621 -0300
> +++ qemu/qapi-schema.json 2014-06-16 20:13:42.886920723 -0300
> @@ -4722,3 +4722,21 @@
> 'btn' : 'InputBtnEvent',
> 'rel' : 'InputMoveEvent',
> 'abs' : 'InputMoveEvent' } }
> +
> +##
> +# @input-send-event
> +#
> +# Send input event(s) to guest.
> +#
> +# @console: Which console to send event(s) to.
Is it worth requiring console, or can it be optional and default to the
first available console (usually console 0)?
> +#
> +# @events: List of InputEvent union.
> +#
> +# Returns: Nothing on success.
> +#
> +# Since: 2.1
> +#
> +##
> +{ 'command': 'input-send-event',
> + 'data': { 'console':'int', 'events': [ 'InputEvent' ] } }
See my other mail about possibly extending the InputEvent union (or
creating a new subtype) to add delays into the mix.
> +Example (2):
> +
> +Press ctrl-alt-del.
> +
> +-> { "execute": "input-send-event",
> + "arguments": { "console": 0, "events": [
> + { "type": "key", "data" : { "down": true,
> + "key": {"type": "qcode", "data": "ctrl" } } },
> + { "type": "key", "data" : { "down": true,
> + "key": {"type": "qcode", "data": "alt" } } },
> + { "type": "key", "data" : { "down": true,
> + "key": {"type": "qcode", "data": "delete" } } } ] } }
> +<- { "return": {} }
Don't you also need to send the key-release events (again, possibly
after a pause), for this to work?
> + if (!qemu_input_find_handler(1 << event->kind, con)) {
> + error_setg(errp, "Input handler not found for"
> + "event type %s",
Typo: s/forevent/for event/
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH] add input-send-event command
2014-06-17 11:54 ` Eric Blake
@ 2014-06-17 13:41 ` Marcelo Tosatti
0 siblings, 0 replies; 6+ messages in thread
From: Marcelo Tosatti @ 2014-06-17 13:41 UTC (permalink / raw)
To: Eric Blake; +Cc: Luiz Capitulino, Gerd Hoffmann, qemu-devel
On Tue, Jun 17, 2014 at 05:54:35AM -0600, Eric Blake wrote:
> On 06/17/2014 03:02 AM, Gerd Hoffmann wrote:
> > On Mo, 2014-06-16 at 20:15 -0300, Marcelo Tosatti wrote:
> >> Which allows specification of absolute/relative,
> >> up/down and console parameters.
> >
> > Looks good overall, only minor nits. Will wait for acks from qmp guys
> > before picking into input branch.
> >
> >> Suggested by Gerd Hoffman.
> >
> > Huh? Signed-off missing ...
> >
> >> +Press left mouse button.
> >> +
> >> +-> { "execute": "input-send-event",
> >> + "arguments": { "console": 0,
> >> + "events": [ { "type": "btn",
> >> + "data" : { "down": true, "button": "Left" } },
> >> + { "type": "btn",
> >> + "data" : { "down": false, "button": "Left" } } ] } }
> >> +<- { "return": {} }
> >
> > Bad example. Down + up should go as separate commands (so you have a
> > sync inbetween), otherwise it might happen that the guest doesn't see
> > the button event at all.
>
> Would it be worth adding a command to the union of possible events that
> adds a pause? As in:
>
> -> { "execute": "input-send-event",
> "arguments": { "console": 0,
> "events": [
> { "type": "btn",
> "data" : { "down": true, "button": "Left" } },
> { "type": "pause", "data": { "duration": 10 } },
> { "type": "btn",
> "data" : { "down": false, "button": "Left" } } ] } }
>
> that sticks a 10 ms delay between the other two events?
Would rather have the user wait 10 ms in between QMP commands.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH] add input-send-event command
2014-06-17 11:59 ` Eric Blake
@ 2014-06-17 13:46 ` Marcelo Tosatti
0 siblings, 0 replies; 6+ messages in thread
From: Marcelo Tosatti @ 2014-06-17 13:46 UTC (permalink / raw)
To: Eric Blake; +Cc: Luiz Capitulino, qemu-devel, Gerd Hoffmann
On Tue, Jun 17, 2014 at 05:59:53AM -0600, Eric Blake wrote:
> On 06/16/2014 05:15 PM, Marcelo Tosatti wrote:
> >
> > Which allows specification of absolute/relative,
> > up/down and console parameters.
> >
> > Suggested by Gerd Hoffman.
> >
> > ---
>
> Needs S-o-B.
>
> > qapi-schema.json | 18 ++++++++++++++++
> > qmp-commands.hx | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > ui/input.c | 31 ++++++++++++++++++++++++++++
> > 3 files changed, 108 insertions(+)
> >
> > Index: qemu/qapi-schema.json
> > ===================================================================
> > --- qemu.orig/qapi-schema.json 2014-06-16 20:12:51.049064621 -0300
> > +++ qemu/qapi-schema.json 2014-06-16 20:13:42.886920723 -0300
> > @@ -4722,3 +4722,21 @@
> > 'btn' : 'InputBtnEvent',
> > 'rel' : 'InputMoveEvent',
> > 'abs' : 'InputMoveEvent' } }
> > +
> > +##
> > +# @input-send-event
> > +#
> > +# Send input event(s) to guest.
> > +#
> > +# @console: Which console to send event(s) to.
>
> Is it worth requiring console, or can it be optional and default to the
> first available console (usually console 0)?
It is required. Would rather not allow the user to send a command
to an console without knowing what console that is.
> > +#
> > +# @events: List of InputEvent union.
> > +#
> > +# Returns: Nothing on success.
> > +#
> > +# Since: 2.1
> > +#
> > +##
> > +{ 'command': 'input-send-event',
> > + 'data': { 'console':'int', 'events': [ 'InputEvent' ] } }
>
> See my other mail about possibly extending the InputEvent union (or
> creating a new subtype) to add delays into the mix.
>
>
> > +Example (2):
> > +
> > +Press ctrl-alt-del.
> > +
> > +-> { "execute": "input-send-event",
> > + "arguments": { "console": 0, "events": [
> > + { "type": "key", "data" : { "down": true,
> > + "key": {"type": "qcode", "data": "ctrl" } } },
> > + { "type": "key", "data" : { "down": true,
> > + "key": {"type": "qcode", "data": "alt" } } },
> > + { "type": "key", "data" : { "down": true,
> > + "key": {"type": "qcode", "data": "delete" } } } ] } }
> > +<- { "return": {} }
>
> Don't you also need to send the key-release events (again, possibly
> after a pause), for this to work?
No, key signals on "down".
> > + if (!qemu_input_find_handler(1 << event->kind, con)) {
> > + error_setg(errp, "Input handler not found for"
> > + "event type %s",
>
> Typo: s/forevent/for event/
Yes there is another missing space, thanks.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-06-17 13:46 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-16 23:15 [Qemu-devel] [PATCH] add input-send-event command Marcelo Tosatti
2014-06-17 9:02 ` Gerd Hoffmann
2014-06-17 11:54 ` Eric Blake
2014-06-17 13:41 ` Marcelo Tosatti
2014-06-17 11:59 ` Eric Blake
2014-06-17 13:46 ` Marcelo Tosatti
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).