* [Qemu-devel] [PATCH] move kbd/mouse handling to input.c
@ 2010-01-13 13:05 Paolo Bonzini
2010-01-13 23:27 ` Anthony Liguori
0 siblings, 1 reply; 2+ messages in thread
From: Paolo Bonzini @ 2010-01-13 13:05 UTC (permalink / raw)
To: qemu-devel
Move 200 lines out of vl.c already into common code that only needs to
be compiled once.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
Makefile.objs | 2 +-
input.c | 238 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
vl.c | 214 +--------------------------------------------------
3 files changed, 241 insertions(+), 213 deletions(-)
create mode 100644 input.c
diff --git a/Makefile.objs b/Makefile.objs
index e8a44d7..5802d39 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -47,7 +47,7 @@ common-obj-y += $(qobject-obj-y)
common-obj-y += readline.o console.o
common-obj-y += tcg-runtime.o host-utils.o
-common-obj-y += irq.o ioport.o
+common-obj-y += irq.o ioport.o input.o
common-obj-$(CONFIG_PTIMER) += ptimer.o
common-obj-$(CONFIG_MAX7310) += max7310.o
common-obj-$(CONFIG_WM8750) += wm8750.o
diff --git a/input.c b/input.c
new file mode 100644
index 0000000..955b9ab
--- /dev/null
+++ b/input.c
@@ -0,0 +1,238 @@
+/*
+ * QEMU System Emulator
+ *
+ * Copyright (c) 2003-2008 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "sysemu.h"
+#include "net.h"
+#include "monitor.h"
+#include "console.h"
+#include "qjson.h"
+
+
+static QEMUPutKBDEvent *qemu_put_kbd_event;
+static void *qemu_put_kbd_event_opaque;
+static QEMUPutMouseEntry *qemu_put_mouse_event_head;
+static QEMUPutMouseEntry *qemu_put_mouse_event_current;
+
+void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
+{
+ qemu_put_kbd_event_opaque = opaque;
+ qemu_put_kbd_event = func;
+}
+
+QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
+ void *opaque, int absolute,
+ const char *name)
+{
+ QEMUPutMouseEntry *s, *cursor;
+
+ s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
+
+ s->qemu_put_mouse_event = func;
+ s->qemu_put_mouse_event_opaque = opaque;
+ s->qemu_put_mouse_event_absolute = absolute;
+ s->qemu_put_mouse_event_name = qemu_strdup(name);
+ s->next = NULL;
+
+ if (!qemu_put_mouse_event_head) {
+ qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
+ return s;
+ }
+
+ cursor = qemu_put_mouse_event_head;
+ while (cursor->next != NULL)
+ cursor = cursor->next;
+
+ cursor->next = s;
+ qemu_put_mouse_event_current = s;
+
+ return s;
+}
+
+void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
+{
+ QEMUPutMouseEntry *prev = NULL, *cursor;
+
+ if (!qemu_put_mouse_event_head || entry == NULL)
+ return;
+
+ cursor = qemu_put_mouse_event_head;
+ while (cursor != NULL && cursor != entry) {
+ prev = cursor;
+ cursor = cursor->next;
+ }
+
+ if (cursor == NULL) // does not exist or list empty
+ return;
+ else if (prev == NULL) { // entry is head
+ qemu_put_mouse_event_head = cursor->next;
+ if (qemu_put_mouse_event_current == entry)
+ qemu_put_mouse_event_current = cursor->next;
+ qemu_free(entry->qemu_put_mouse_event_name);
+ qemu_free(entry);
+ return;
+ }
+
+ prev->next = entry->next;
+
+ if (qemu_put_mouse_event_current == entry)
+ qemu_put_mouse_event_current = prev;
+
+ qemu_free(entry->qemu_put_mouse_event_name);
+ qemu_free(entry);
+}
+
+void kbd_put_keycode(int keycode)
+{
+ if (qemu_put_kbd_event) {
+ qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
+ }
+}
+
+void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
+{
+ QEMUPutMouseEvent *mouse_event;
+ void *mouse_event_opaque;
+ int width;
+
+ if (!qemu_put_mouse_event_current) {
+ return;
+ }
+
+ mouse_event =
+ qemu_put_mouse_event_current->qemu_put_mouse_event;
+ mouse_event_opaque =
+ qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
+
+ if (mouse_event) {
+ if (graphic_rotate) {
+ if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
+ width = 0x7fff;
+ else
+ width = graphic_width - 1;
+ mouse_event(mouse_event_opaque,
+ width - dy, dx, dz, buttons_state);
+ } else
+ mouse_event(mouse_event_opaque,
+ dx, dy, dz, buttons_state);
+ }
+}
+
+int kbd_mouse_is_absolute(void)
+{
+ if (!qemu_put_mouse_event_current)
+ return 0;
+
+ return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
+}
+
+static void info_mice_iter(QObject *data, void *opaque)
+{
+ QDict *mouse;
+ Monitor *mon = opaque;
+
+ mouse = qobject_to_qdict(data);
+ monitor_printf(mon, "%c Mouse #%" PRId64 ": %s\n",
+ (qdict_get_bool(mouse, "current") ? '*' : ' '),
+ qdict_get_int(mouse, "index"), qdict_get_str(mouse, "name"));
+}
+
+void do_info_mice_print(Monitor *mon, const QObject *data)
+{
+ QList *mice_list;
+
+ mice_list = qobject_to_qlist(data);
+ if (qlist_empty(mice_list)) {
+ monitor_printf(mon, "No mouse devices connected\n");
+ return;
+ }
+
+ qlist_iter(mice_list, info_mice_iter, mon);
+}
+
+/**
+ * do_info_mice(): Show VM mice information
+ *
+ * Each mouse is represented by a QDict, the returned QObject is a QList of
+ * all mice.
+ *
+ * The mouse QDict contains the following:
+ *
+ * - "name": mouse's name
+ * - "index": mouse's index
+ * - "current": true if this mouse is receiving events, false otherwise
+ *
+ * Example:
+ *
+ * [ { "name": "QEMU Microsoft Mouse", "index": 0, "current": false },
+ * { "name": "QEMU PS/2 Mouse", "index": 1, "current": true } ]
+ */
+void do_info_mice(Monitor *mon, QObject **ret_data)
+{
+ QEMUPutMouseEntry *cursor;
+ QList *mice_list;
+ int index = 0;
+
+ mice_list = qlist_new();
+
+ if (!qemu_put_mouse_event_head) {
+ goto out;
+ }
+
+ cursor = qemu_put_mouse_event_head;
+ while (cursor != NULL) {
+ QObject *obj;
+ obj = qobject_from_jsonf("{ 'name': %s, 'index': %d, 'current': %i }",
+ cursor->qemu_put_mouse_event_name,
+ index, cursor == qemu_put_mouse_event_current);
+ qlist_append_obj(mice_list, obj);
+ index++;
+ cursor = cursor->next;
+ }
+
+out:
+ *ret_data = QOBJECT(mice_list);
+}
+
+void do_mouse_set(Monitor *mon, const QDict *qdict)
+{
+ QEMUPutMouseEntry *cursor;
+ int i = 0;
+ int index = qdict_get_int(qdict, "index");
+
+ if (!qemu_put_mouse_event_head) {
+ monitor_printf(mon, "No mouse devices connected\n");
+ return;
+ }
+
+ cursor = qemu_put_mouse_event_head;
+ while (cursor != NULL && index != i) {
+ i++;
+ cursor = cursor->next;
+ }
+
+ if (cursor != NULL)
+ qemu_put_mouse_event_current = cursor;
+ else
+ monitor_printf(mon, "Mouse at given index not found\n");
+}
diff --git a/vl.c b/vl.c
index b048e89..df2a278 100644
--- a/vl.c
+++ b/vl.c
@@ -375,216 +375,9 @@ ram_addr_t qemu_balloon_status(void)
return 0;
}
-/***********************************************************/
-/* keyboard/mouse */
-
-static QEMUPutKBDEvent *qemu_put_kbd_event;
-static void *qemu_put_kbd_event_opaque;
-static QEMUPutMouseEntry *qemu_put_mouse_event_head;
-static QEMUPutMouseEntry *qemu_put_mouse_event_current;
-
-void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
-{
- qemu_put_kbd_event_opaque = opaque;
- qemu_put_kbd_event = func;
-}
-
-QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
- void *opaque, int absolute,
- const char *name)
-{
- QEMUPutMouseEntry *s, *cursor;
-
- s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
-
- s->qemu_put_mouse_event = func;
- s->qemu_put_mouse_event_opaque = opaque;
- s->qemu_put_mouse_event_absolute = absolute;
- s->qemu_put_mouse_event_name = qemu_strdup(name);
- s->next = NULL;
-
- if (!qemu_put_mouse_event_head) {
- qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
- return s;
- }
-
- cursor = qemu_put_mouse_event_head;
- while (cursor->next != NULL)
- cursor = cursor->next;
-
- cursor->next = s;
- qemu_put_mouse_event_current = s;
-
- return s;
-}
-
-void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
-{
- QEMUPutMouseEntry *prev = NULL, *cursor;
-
- if (!qemu_put_mouse_event_head || entry == NULL)
- return;
-
- cursor = qemu_put_mouse_event_head;
- while (cursor != NULL && cursor != entry) {
- prev = cursor;
- cursor = cursor->next;
- }
-
- if (cursor == NULL) // does not exist or list empty
- return;
- else if (prev == NULL) { // entry is head
- qemu_put_mouse_event_head = cursor->next;
- if (qemu_put_mouse_event_current == entry)
- qemu_put_mouse_event_current = cursor->next;
- qemu_free(entry->qemu_put_mouse_event_name);
- qemu_free(entry);
- return;
- }
-
- prev->next = entry->next;
-
- if (qemu_put_mouse_event_current == entry)
- qemu_put_mouse_event_current = prev;
-
- qemu_free(entry->qemu_put_mouse_event_name);
- qemu_free(entry);
-}
-
-void kbd_put_keycode(int keycode)
-{
- if (qemu_put_kbd_event) {
- qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
- }
-}
-
-void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
-{
- QEMUPutMouseEvent *mouse_event;
- void *mouse_event_opaque;
- int width;
-
- if (!qemu_put_mouse_event_current) {
- return;
- }
-
- mouse_event =
- qemu_put_mouse_event_current->qemu_put_mouse_event;
- mouse_event_opaque =
- qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
-
- if (mouse_event) {
- if (graphic_rotate) {
- if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
- width = 0x7fff;
- else
- width = graphic_width - 1;
- mouse_event(mouse_event_opaque,
- width - dy, dx, dz, buttons_state);
- } else
- mouse_event(mouse_event_opaque,
- dx, dy, dz, buttons_state);
- }
-}
-
-int kbd_mouse_is_absolute(void)
-{
- if (!qemu_put_mouse_event_current)
- return 0;
-
- return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
-}
-
-static void info_mice_iter(QObject *data, void *opaque)
-{
- QDict *mouse;
- Monitor *mon = opaque;
-
- mouse = qobject_to_qdict(data);
- monitor_printf(mon, "%c Mouse #%" PRId64 ": %s\n",
- (qdict_get_bool(mouse, "current") ? '*' : ' '),
- qdict_get_int(mouse, "index"), qdict_get_str(mouse, "name"));
-}
-
-void do_info_mice_print(Monitor *mon, const QObject *data)
-{
- QList *mice_list;
-
- mice_list = qobject_to_qlist(data);
- if (qlist_empty(mice_list)) {
- monitor_printf(mon, "No mouse devices connected\n");
- return;
- }
-
- qlist_iter(mice_list, info_mice_iter, mon);
-}
-
-/**
- * do_info_mice(): Show VM mice information
- *
- * Each mouse is represented by a QDict, the returned QObject is a QList of
- * all mice.
- *
- * The mouse QDict contains the following:
- *
- * - "name": mouse's name
- * - "index": mouse's index
- * - "current": true if this mouse is receiving events, false otherwise
- *
- * Example:
- *
- * [ { "name": "QEMU Microsoft Mouse", "index": 0, "current": false },
- * { "name": "QEMU PS/2 Mouse", "index": 1, "current": true } ]
- */
-void do_info_mice(Monitor *mon, QObject **ret_data)
-{
- QEMUPutMouseEntry *cursor;
- QList *mice_list;
- int index = 0;
-
- mice_list = qlist_new();
-
- if (!qemu_put_mouse_event_head) {
- goto out;
- }
-
- cursor = qemu_put_mouse_event_head;
- while (cursor != NULL) {
- QObject *obj;
- obj = qobject_from_jsonf("{ 'name': %s, 'index': %d, 'current': %i }",
- cursor->qemu_put_mouse_event_name,
- index, cursor == qemu_put_mouse_event_current);
- qlist_append_obj(mice_list, obj);
- index++;
- cursor = cursor->next;
- }
-
-out:
- *ret_data = QOBJECT(mice_list);
-}
-
-void do_mouse_set(Monitor *mon, const QDict *qdict)
-{
- QEMUPutMouseEntry *cursor;
- int i = 0;
- int index = qdict_get_int(qdict, "index");
-
- if (!qemu_put_mouse_event_head) {
- monitor_printf(mon, "No mouse devices connected\n");
- return;
- }
-
- cursor = qemu_put_mouse_event_head;
- while (cursor != NULL && index != i) {
- i++;
- cursor = cursor->next;
- }
- if (cursor != NULL)
- qemu_put_mouse_event_current = cursor;
- else
- monitor_printf(mon, "Mouse at given index not found\n");
-}
+/***********************************************************/
+/* real time host monotonic timer */
/* compute with 96 bit intermediate result: (a*b)/c */
uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
@@ -610,9 +403,6 @@ uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
return res.ll;
}
-/***********************************************************/
-/* real time host monotonic timer */
-
static int64_t get_clock_realtime(void)
{
struct timeval tv;
--
1.6.5.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Qemu-devel] [PATCH] move kbd/mouse handling to input.c
2010-01-13 13:05 [Qemu-devel] [PATCH] move kbd/mouse handling to input.c Paolo Bonzini
@ 2010-01-13 23:27 ` Anthony Liguori
0 siblings, 0 replies; 2+ messages in thread
From: Anthony Liguori @ 2010-01-13 23:27 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: qemu-devel
On 01/13/2010 07:05 AM, Paolo Bonzini wrote:
> Move 200 lines out of vl.c already into common code that only needs to
> be compiled once.
>
> Signed-off-by: Paolo Bonzini<pbonzini@redhat.com>
>
Applied. Thanks.
Regards,
Anthony Liguori
> ---
> Makefile.objs | 2 +-
> input.c | 238 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> vl.c | 214 +--------------------------------------------------
> 3 files changed, 241 insertions(+), 213 deletions(-)
> create mode 100644 input.c
>
> diff --git a/Makefile.objs b/Makefile.objs
> index e8a44d7..5802d39 100644
> --- a/Makefile.objs
> +++ b/Makefile.objs
> @@ -47,7 +47,7 @@ common-obj-y += $(qobject-obj-y)
> common-obj-y += readline.o console.o
>
> common-obj-y += tcg-runtime.o host-utils.o
> -common-obj-y += irq.o ioport.o
> +common-obj-y += irq.o ioport.o input.o
> common-obj-$(CONFIG_PTIMER) += ptimer.o
> common-obj-$(CONFIG_MAX7310) += max7310.o
> common-obj-$(CONFIG_WM8750) += wm8750.o
> diff --git a/input.c b/input.c
> new file mode 100644
> index 0000000..955b9ab
> --- /dev/null
> +++ b/input.c
> @@ -0,0 +1,238 @@
> +/*
> + * QEMU System Emulator
> + *
> + * Copyright (c) 2003-2008 Fabrice Bellard
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a copy
> + * of this software and associated documentation files (the "Software"), to deal
> + * in the Software without restriction, including without limitation the rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> + * THE SOFTWARE.
> + */
> +
> +#include "sysemu.h"
> +#include "net.h"
> +#include "monitor.h"
> +#include "console.h"
> +#include "qjson.h"
> +
> +
> +static QEMUPutKBDEvent *qemu_put_kbd_event;
> +static void *qemu_put_kbd_event_opaque;
> +static QEMUPutMouseEntry *qemu_put_mouse_event_head;
> +static QEMUPutMouseEntry *qemu_put_mouse_event_current;
> +
> +void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
> +{
> + qemu_put_kbd_event_opaque = opaque;
> + qemu_put_kbd_event = func;
> +}
> +
> +QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
> + void *opaque, int absolute,
> + const char *name)
> +{
> + QEMUPutMouseEntry *s, *cursor;
> +
> + s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
> +
> + s->qemu_put_mouse_event = func;
> + s->qemu_put_mouse_event_opaque = opaque;
> + s->qemu_put_mouse_event_absolute = absolute;
> + s->qemu_put_mouse_event_name = qemu_strdup(name);
> + s->next = NULL;
> +
> + if (!qemu_put_mouse_event_head) {
> + qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
> + return s;
> + }
> +
> + cursor = qemu_put_mouse_event_head;
> + while (cursor->next != NULL)
> + cursor = cursor->next;
> +
> + cursor->next = s;
> + qemu_put_mouse_event_current = s;
> +
> + return s;
> +}
> +
> +void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
> +{
> + QEMUPutMouseEntry *prev = NULL, *cursor;
> +
> + if (!qemu_put_mouse_event_head || entry == NULL)
> + return;
> +
> + cursor = qemu_put_mouse_event_head;
> + while (cursor != NULL&& cursor != entry) {
> + prev = cursor;
> + cursor = cursor->next;
> + }
> +
> + if (cursor == NULL) // does not exist or list empty
> + return;
> + else if (prev == NULL) { // entry is head
> + qemu_put_mouse_event_head = cursor->next;
> + if (qemu_put_mouse_event_current == entry)
> + qemu_put_mouse_event_current = cursor->next;
> + qemu_free(entry->qemu_put_mouse_event_name);
> + qemu_free(entry);
> + return;
> + }
> +
> + prev->next = entry->next;
> +
> + if (qemu_put_mouse_event_current == entry)
> + qemu_put_mouse_event_current = prev;
> +
> + qemu_free(entry->qemu_put_mouse_event_name);
> + qemu_free(entry);
> +}
> +
> +void kbd_put_keycode(int keycode)
> +{
> + if (qemu_put_kbd_event) {
> + qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
> + }
> +}
> +
> +void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
> +{
> + QEMUPutMouseEvent *mouse_event;
> + void *mouse_event_opaque;
> + int width;
> +
> + if (!qemu_put_mouse_event_current) {
> + return;
> + }
> +
> + mouse_event =
> + qemu_put_mouse_event_current->qemu_put_mouse_event;
> + mouse_event_opaque =
> + qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
> +
> + if (mouse_event) {
> + if (graphic_rotate) {
> + if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
> + width = 0x7fff;
> + else
> + width = graphic_width - 1;
> + mouse_event(mouse_event_opaque,
> + width - dy, dx, dz, buttons_state);
> + } else
> + mouse_event(mouse_event_opaque,
> + dx, dy, dz, buttons_state);
> + }
> +}
> +
> +int kbd_mouse_is_absolute(void)
> +{
> + if (!qemu_put_mouse_event_current)
> + return 0;
> +
> + return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
> +}
> +
> +static void info_mice_iter(QObject *data, void *opaque)
> +{
> + QDict *mouse;
> + Monitor *mon = opaque;
> +
> + mouse = qobject_to_qdict(data);
> + monitor_printf(mon, "%c Mouse #%" PRId64 ": %s\n",
> + (qdict_get_bool(mouse, "current") ? '*' : ' '),
> + qdict_get_int(mouse, "index"), qdict_get_str(mouse, "name"));
> +}
> +
> +void do_info_mice_print(Monitor *mon, const QObject *data)
> +{
> + QList *mice_list;
> +
> + mice_list = qobject_to_qlist(data);
> + if (qlist_empty(mice_list)) {
> + monitor_printf(mon, "No mouse devices connected\n");
> + return;
> + }
> +
> + qlist_iter(mice_list, info_mice_iter, mon);
> +}
> +
> +/**
> + * do_info_mice(): Show VM mice information
> + *
> + * Each mouse is represented by a QDict, the returned QObject is a QList of
> + * all mice.
> + *
> + * The mouse QDict contains the following:
> + *
> + * - "name": mouse's name
> + * - "index": mouse's index
> + * - "current": true if this mouse is receiving events, false otherwise
> + *
> + * Example:
> + *
> + * [ { "name": "QEMU Microsoft Mouse", "index": 0, "current": false },
> + * { "name": "QEMU PS/2 Mouse", "index": 1, "current": true } ]
> + */
> +void do_info_mice(Monitor *mon, QObject **ret_data)
> +{
> + QEMUPutMouseEntry *cursor;
> + QList *mice_list;
> + int index = 0;
> +
> + mice_list = qlist_new();
> +
> + if (!qemu_put_mouse_event_head) {
> + goto out;
> + }
> +
> + cursor = qemu_put_mouse_event_head;
> + while (cursor != NULL) {
> + QObject *obj;
> + obj = qobject_from_jsonf("{ 'name': %s, 'index': %d, 'current': %i }",
> + cursor->qemu_put_mouse_event_name,
> + index, cursor == qemu_put_mouse_event_current);
> + qlist_append_obj(mice_list, obj);
> + index++;
> + cursor = cursor->next;
> + }
> +
> +out:
> + *ret_data = QOBJECT(mice_list);
> +}
> +
> +void do_mouse_set(Monitor *mon, const QDict *qdict)
> +{
> + QEMUPutMouseEntry *cursor;
> + int i = 0;
> + int index = qdict_get_int(qdict, "index");
> +
> + if (!qemu_put_mouse_event_head) {
> + monitor_printf(mon, "No mouse devices connected\n");
> + return;
> + }
> +
> + cursor = qemu_put_mouse_event_head;
> + while (cursor != NULL&& index != i) {
> + i++;
> + cursor = cursor->next;
> + }
> +
> + if (cursor != NULL)
> + qemu_put_mouse_event_current = cursor;
> + else
> + monitor_printf(mon, "Mouse at given index not found\n");
> +}
> diff --git a/vl.c b/vl.c
> index b048e89..df2a278 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -375,216 +375,9 @@ ram_addr_t qemu_balloon_status(void)
> return 0;
> }
>
> -/***********************************************************/
> -/* keyboard/mouse */
> -
> -static QEMUPutKBDEvent *qemu_put_kbd_event;
> -static void *qemu_put_kbd_event_opaque;
> -static QEMUPutMouseEntry *qemu_put_mouse_event_head;
> -static QEMUPutMouseEntry *qemu_put_mouse_event_current;
> -
> -void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque)
> -{
> - qemu_put_kbd_event_opaque = opaque;
> - qemu_put_kbd_event = func;
> -}
> -
> -QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
> - void *opaque, int absolute,
> - const char *name)
> -{
> - QEMUPutMouseEntry *s, *cursor;
> -
> - s = qemu_mallocz(sizeof(QEMUPutMouseEntry));
> -
> - s->qemu_put_mouse_event = func;
> - s->qemu_put_mouse_event_opaque = opaque;
> - s->qemu_put_mouse_event_absolute = absolute;
> - s->qemu_put_mouse_event_name = qemu_strdup(name);
> - s->next = NULL;
> -
> - if (!qemu_put_mouse_event_head) {
> - qemu_put_mouse_event_head = qemu_put_mouse_event_current = s;
> - return s;
> - }
> -
> - cursor = qemu_put_mouse_event_head;
> - while (cursor->next != NULL)
> - cursor = cursor->next;
> -
> - cursor->next = s;
> - qemu_put_mouse_event_current = s;
> -
> - return s;
> -}
> -
> -void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry)
> -{
> - QEMUPutMouseEntry *prev = NULL, *cursor;
> -
> - if (!qemu_put_mouse_event_head || entry == NULL)
> - return;
> -
> - cursor = qemu_put_mouse_event_head;
> - while (cursor != NULL&& cursor != entry) {
> - prev = cursor;
> - cursor = cursor->next;
> - }
> -
> - if (cursor == NULL) // does not exist or list empty
> - return;
> - else if (prev == NULL) { // entry is head
> - qemu_put_mouse_event_head = cursor->next;
> - if (qemu_put_mouse_event_current == entry)
> - qemu_put_mouse_event_current = cursor->next;
> - qemu_free(entry->qemu_put_mouse_event_name);
> - qemu_free(entry);
> - return;
> - }
> -
> - prev->next = entry->next;
> -
> - if (qemu_put_mouse_event_current == entry)
> - qemu_put_mouse_event_current = prev;
> -
> - qemu_free(entry->qemu_put_mouse_event_name);
> - qemu_free(entry);
> -}
> -
> -void kbd_put_keycode(int keycode)
> -{
> - if (qemu_put_kbd_event) {
> - qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode);
> - }
> -}
> -
> -void kbd_mouse_event(int dx, int dy, int dz, int buttons_state)
> -{
> - QEMUPutMouseEvent *mouse_event;
> - void *mouse_event_opaque;
> - int width;
> -
> - if (!qemu_put_mouse_event_current) {
> - return;
> - }
> -
> - mouse_event =
> - qemu_put_mouse_event_current->qemu_put_mouse_event;
> - mouse_event_opaque =
> - qemu_put_mouse_event_current->qemu_put_mouse_event_opaque;
> -
> - if (mouse_event) {
> - if (graphic_rotate) {
> - if (qemu_put_mouse_event_current->qemu_put_mouse_event_absolute)
> - width = 0x7fff;
> - else
> - width = graphic_width - 1;
> - mouse_event(mouse_event_opaque,
> - width - dy, dx, dz, buttons_state);
> - } else
> - mouse_event(mouse_event_opaque,
> - dx, dy, dz, buttons_state);
> - }
> -}
> -
> -int kbd_mouse_is_absolute(void)
> -{
> - if (!qemu_put_mouse_event_current)
> - return 0;
> -
> - return qemu_put_mouse_event_current->qemu_put_mouse_event_absolute;
> -}
> -
> -static void info_mice_iter(QObject *data, void *opaque)
> -{
> - QDict *mouse;
> - Monitor *mon = opaque;
> -
> - mouse = qobject_to_qdict(data);
> - monitor_printf(mon, "%c Mouse #%" PRId64 ": %s\n",
> - (qdict_get_bool(mouse, "current") ? '*' : ' '),
> - qdict_get_int(mouse, "index"), qdict_get_str(mouse, "name"));
> -}
> -
> -void do_info_mice_print(Monitor *mon, const QObject *data)
> -{
> - QList *mice_list;
> -
> - mice_list = qobject_to_qlist(data);
> - if (qlist_empty(mice_list)) {
> - monitor_printf(mon, "No mouse devices connected\n");
> - return;
> - }
> -
> - qlist_iter(mice_list, info_mice_iter, mon);
> -}
> -
> -/**
> - * do_info_mice(): Show VM mice information
> - *
> - * Each mouse is represented by a QDict, the returned QObject is a QList of
> - * all mice.
> - *
> - * The mouse QDict contains the following:
> - *
> - * - "name": mouse's name
> - * - "index": mouse's index
> - * - "current": true if this mouse is receiving events, false otherwise
> - *
> - * Example:
> - *
> - * [ { "name": "QEMU Microsoft Mouse", "index": 0, "current": false },
> - * { "name": "QEMU PS/2 Mouse", "index": 1, "current": true } ]
> - */
> -void do_info_mice(Monitor *mon, QObject **ret_data)
> -{
> - QEMUPutMouseEntry *cursor;
> - QList *mice_list;
> - int index = 0;
> -
> - mice_list = qlist_new();
> -
> - if (!qemu_put_mouse_event_head) {
> - goto out;
> - }
> -
> - cursor = qemu_put_mouse_event_head;
> - while (cursor != NULL) {
> - QObject *obj;
> - obj = qobject_from_jsonf("{ 'name': %s, 'index': %d, 'current': %i }",
> - cursor->qemu_put_mouse_event_name,
> - index, cursor == qemu_put_mouse_event_current);
> - qlist_append_obj(mice_list, obj);
> - index++;
> - cursor = cursor->next;
> - }
> -
> -out:
> - *ret_data = QOBJECT(mice_list);
> -}
> -
> -void do_mouse_set(Monitor *mon, const QDict *qdict)
> -{
> - QEMUPutMouseEntry *cursor;
> - int i = 0;
> - int index = qdict_get_int(qdict, "index");
> -
> - if (!qemu_put_mouse_event_head) {
> - monitor_printf(mon, "No mouse devices connected\n");
> - return;
> - }
> -
> - cursor = qemu_put_mouse_event_head;
> - while (cursor != NULL&& index != i) {
> - i++;
> - cursor = cursor->next;
> - }
>
> - if (cursor != NULL)
> - qemu_put_mouse_event_current = cursor;
> - else
> - monitor_printf(mon, "Mouse at given index not found\n");
> -}
> +/***********************************************************/
> +/* real time host monotonic timer */
>
> /* compute with 96 bit intermediate result: (a*b)/c */
> uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
> @@ -610,9 +403,6 @@ uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
> return res.ll;
> }
>
> -/***********************************************************/
> -/* real time host monotonic timer */
> -
> static int64_t get_clock_realtime(void)
> {
> struct timeval tv;
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-01-13 23:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-13 13:05 [Qemu-devel] [PATCH] move kbd/mouse handling to input.c Paolo Bonzini
2010-01-13 23:27 ` Anthony Liguori
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).