[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RfC PATCH 04/11] spice: add keyboard
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [RfC PATCH 04/11] spice: add keyboard |
Date: |
Wed, 14 Apr 2010 11:55:15 +0200 |
Open keyboard channel. Now you can type into the spice client and the
keyboard events are sent to your guest. You'll need some other display
like vnc to actually see the guest responding to them though.
---
Makefile.target | 2 +-
qemu-spice.h | 1 +
spice-input.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
spice.c | 2 +
4 files changed, 61 insertions(+), 1 deletions(-)
create mode 100644 spice-input.c
diff --git a/Makefile.target b/Makefile.target
index ad3e595..4da1b27 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -194,7 +194,7 @@ obj-i386-y += cirrus_vga.o apic.o ioapic.o piix_pci.o
obj-i386-y += vmmouse.o vmport.o hpet.o
obj-i386-y += device-hotplug.o pci-hotplug.o smbios.o wdt_ib700.o
obj-i386-y += debugcon.o multiboot.o
-obj-i386-$(CONFIG_SPICE) += spice.o
+obj-i386-$(CONFIG_SPICE) += spice.o spice-input.o
# shared objects
obj-ppc-y = ppc.o
diff --git a/qemu-spice.h b/qemu-spice.h
index 5597576..ceb3db2 100644
--- a/qemu-spice.h
+++ b/qemu-spice.h
@@ -12,6 +12,7 @@ extern SpiceServer *spice_server;
extern int using_spice;
void qemu_spice_init(void);
+void qemu_spice_input_init(void);
#else /* CONFIG_SPICE */
diff --git a/spice-input.c b/spice-input.c
new file mode 100644
index 0000000..e05f300
--- /dev/null
+++ b/spice-input.c
@@ -0,0 +1,57 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <spice.h>
+
+#include "qemu-common.h"
+#include "qemu-spice.h"
+#include "console.h"
+
+/* keyboard bits */
+
+typedef struct QemuSpiceKbd {
+ SpiceKbdInstance sin;
+ int ledstate;
+} QemuSpiceKbd;
+
+static void kbd_push_key(SpiceKbdInstance *sin, uint8_t frag);
+static uint8_t kbd_get_leds(SpiceKbdInstance *sin);
+static void kbd_leds(void *opaque, int l);
+
+static SpiceKbdInterface kbd_interface = {
+ .base.type = SPICE_INTERFACE_KEYBOARD,
+ .base.description = "qemu keyboard",
+ .base.major_version = SPICE_INTERFACE_KEYBOARD_MAJOR,
+ .base.minor_version = SPICE_INTERFACE_KEYBOARD_MINOR,
+ .push_scan_freg = kbd_push_key,
+ .get_leds = kbd_get_leds,
+};
+
+static void kbd_push_key(SpiceKbdInstance *sin, uint8_t frag)
+{
+ kbd_put_keycode(frag);
+}
+
+static uint8_t kbd_get_leds(SpiceKbdInstance *sin)
+{
+ QemuSpiceKbd *kbd = container_of(sin, QemuSpiceKbd, sin);
+ return kbd->ledstate;
+}
+
+static void kbd_leds(void *opaque, int ledstate)
+{
+ QemuSpiceKbd *kbd = opaque;
+ kbd->ledstate = ledstate;
+ spice_server_kbd_leds(&kbd->sin, ledstate);
+}
+
+void qemu_spice_input_init(void)
+{
+ QemuSpiceKbd *kbd;
+
+ kbd = qemu_mallocz(sizeof(*kbd));
+ kbd->sin.base.sif = &kbd_interface.base;
+ spice_server_add_interface(spice_server, &kbd->sin.base);
+ qemu_add_led_event_handler(kbd_leds, kbd);
+}
diff --git a/spice.c b/spice.c
index 5315b18..68d8c95 100644
--- a/spice.c
+++ b/spice.c
@@ -167,4 +167,6 @@ void qemu_spice_init(void)
spice_server_init(spice_server, &core_interface);
using_spice = 1;
+
+ qemu_spice_input_init();
}
--
1.6.6.1
- [Qemu-devel] [RfC PATCH 00/11] Add spice support to qemu., Gerd Hoffmann, 2010/04/14
- [Qemu-devel] [RfC PATCH 04/11] spice: add keyboard,
Gerd Hoffmann <=
- [Qemu-devel] [RfC PATCH 02/11] add spice into the configure file, Gerd Hoffmann, 2010/04/14
- [Qemu-devel] [RfC PATCH 03/11] spice: core bits, Gerd Hoffmann, 2010/04/14
- [Qemu-devel] [RfC PATCH 05/11] spice: add mouse, Gerd Hoffmann, 2010/04/14
- [Qemu-devel] [RfC PATCH 07/11] spice: tls support, Gerd Hoffmann, 2010/04/14
- [Qemu-devel] [RfC PATCH 01/11] vgabios update to 0.6c, add bios for qxl/unstable, Gerd Hoffmann, 2010/04/14
- [Qemu-devel] [RfC PATCH 10/11] spice: add tablet support, Gerd Hoffmann, 2010/04/14
- [Qemu-devel] [RfC PATCH 11/11] spice: add audio, Gerd Hoffmann, 2010/04/14