qemu,qmp: Convert do_sendkey() to QObject,QError
PATCH 6/6 qemu,qmp: Convert do_sendkey() to QObject,QError
Convert do_sendkey() to QObject,QError, we need to use it.(via libvirt)
It is a trivial conversion, carefully converted the error reports.
Signed-off-by Lai Jiangshan <[email protected]>
---
hmp-commands.hx +2 -1
@@ -436,7 +436,8 @@ ETEXI .args_type = "string:s,hold_time:i?", .params = "keys [hold_ms]", .help = "send keys to the VM (e.g. 'sendkey ctrl-alt-f1', default hold time=100 ms)", - .mhandler.cmd = do_sendkey, + .user_print = monitor_user_noop, + .mhandler.cmd_new = do_sendkey, }, STEXI
monitor.c +8 -7
@@ -1678,7 +1678,7 @@ static void release_keys(void *opaque) } } -static void do_sendkey (Monitor *mon,const QDict *qdict) +static int do_sendkey (Monitor *mon,const QDict *qdict,QObject **ret_data) {char keyname_buf[16 ];char *separator;
@@ -1700,18 +1700,18 @@ static void do_sendkey(Monitor *mon, const QDict *qdict)if (keyname_len >0 ) {pstrcpy (keyname_buf,sizeof (keyname_buf), string);if (keyname_len >sizeof (keyname_buf) -1 ) { -monitor_printf (mon,"invalid key: '%s...'\n" , keyname_buf); -return ; +qerror_report (QERR_INVALID_KEY , keyname_buf); +return -1 ; }if (i ==MAX_KEYCODES ) { -monitor_printf (mon,"too many keys\n" ); -return ; +qerror_report (QERR_TOO_MANY_KEYS ); +return -1 ; } keyname_buf[keyname_len] =0 ; keycode =get_keycode (keyname_buf);if (keycode <0 ) { -monitor_printf (mon,"unknown key: '%s'\n" , keyname_buf); -return ; +qerror_report (QERR_UNKNOWN_KEY , keyname_buf); +return -1 ; } keycodes[i++] = keycode; }
@@ -1730,6 +1730,7 @@ static void do_sendkey(Monitor *mon, const QDict *qdict)/* delayed key up events */ qemu_mod_timer (key_timer,qemu_get_clock (vm_clock) +muldiv64 (get_ticks_per_sec (), hold_time,1000 )); +return 0 ; }static int mouse_button_state;
qmp-commands.hx +24 -0
@@ -225,6 +225,30 @@ Example: <- { "return": {} } EQMP + { + .name = "sendkey", + .args_type = "string:s,hold_time:i?", + .params = "keys [hold_ms]", + .help = "send keys to the VM (e.g. 'sendkey ctrl-alt-f1', default hold time=100 ms)", + .user_print = monitor_user_noop, + .mhandler.cmd_new = do_sendkey, + }, + +SQMP +@item sendkey @var{keys} +@findex sendkey + +Send @var{keys} to the emulator. @var{keys} could be the name of the +key or @code{#} followed by the raw value in either decimal or hexadecimal +format. Use @code{-} to press several keys simultaneously. Example: +@example +sendkey ctrl-alt-f1 +@end example + +This command is useful to send keys that your graphical user interface +intercepts at low level, such as @code{ctrl-alt-f1} in X Window. + +EQMP { .name = "system_reset",
Quoted 4 lines · On Thu, 09 Dec 2010 14:59:40 +0800 Lai Jiangshan <[email protected]> wrote:
Convert
do_sendkey()to QObject,QError, we need to use it.(via libvirt)It is a trivial conversion, carefully converted the error reports.
Trivial conversion doesn't seem to lead to a good interface for qmp, because sendkey carries human targeted features.
Please, read the following thread for more information on the topic and some ideas for a better interface:
http://lists.gnu.org/archive/html/qemu-devel/2010-07/msg00976.html
Quoted 99 lines
Signed-off-by Lai Jiangshan <[email protected]>---
hmp-commands.hx +2
-1@@ -436,7 +436,8 @@ ETEXI .args_type = "string:s,hold_time:i?", .params = "keys [hold_ms]", .help = "send keys to the VM (e.g. 'sendkey ctrl-alt-f1', default hold time=100 ms)", - .mhandler.cmd = do_sendkey, + .user_print = monitor_user_noop, + .mhandler.cmd_new = do_sendkey, }, STEXImonitor.c +8
-7@@ -1678,7 +1678,7 @@ static void release_keys(void *opaque) } } -static void do_sendkey (Monitor *mon,const QDict *qdict) +static int do_sendkey (Monitor *mon,const QDict *qdict,QObject **ret_data) {char keyname_buf[16 ];char *separator;@@ -1700,18 +1700,18 @@ static void do_sendkey(Monitor *mon, const QDict *qdict)if (keyname_len >0 ) {pstrcpy (keyname_buf,sizeof (keyname_buf), string);if (keyname_len >sizeof (keyname_buf) -1 ) { -monitor_printf (mon,"invalid key: '%s...'\n" , keyname_buf); -return ; +qerror_report (QERR_INVALID_KEY , keyname_buf); +return -1 ; }if (i ==MAX_KEYCODES ) { -monitor_printf (mon,"too many keys\n" ); -return ; +qerror_report (QERR_TOO_MANY_KEYS ); +return -1 ; } keyname_buf[keyname_len] =0 ; keycode =get_keycode (keyname_buf);if (keycode <0 ) { -monitor_printf (mon,"unknown key: '%s'\n" , keyname_buf); -return ; +qerror_report (QERR_UNKNOWN_KEY , keyname_buf); +return -1 ; } keycodes[i++] = keycode; }@@ -1730,6 +1730,7 @@ static void do_sendkey(Monitor *mon, const QDict *qdict)/* delayed key up events */ qemu_mod_timer (key_timer,qemu_get_clock (vm_clock) +muldiv64 (get_ticks_per_sec (), hold_time,1000 )); +return 0 ; }static int mouse_button_state;qmp-commands.hx +24
-0@@ -225,6 +225,30 @@ Example: <- { "return": {} } EQMP + { + .name = "sendkey", + .args_type = "string:s,hold_time:i?", + .params = "keys [hold_ms]", + .help = "send keys to the VM (e.g. 'sendkey ctrl-alt-f1', default hold time=100 ms)", + .user_print = monitor_user_noop, + .mhandler.cmd_new = do_sendkey, + }, + +SQMP +@item sendkey @var{keys} +@findex sendkey + +Send @var{keys} to the emulator. @var{keys} could be the name of the +key or @code{#} followed by the raw value in either decimal or hexadecimal +format. Use @code{-} to press several keys simultaneously. Example: +@example +sendkey ctrl-alt-f1 +@end example + +This command is useful to send keys that your graphical user interface +intercepts at low level, such as @code{ctrl-alt-f1} in X Window. + +EQMP { .name = "system_reset",