From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=36664 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OoMHD-0000ny-J1 for qemu-devel@nongnu.org; Wed, 25 Aug 2010 16:08:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OoM2E-0003lG-0O for qemu-devel@nongnu.org; Wed, 25 Aug 2010 15:53:23 -0400 Received: from mail-qw0-f45.google.com ([209.85.216.45]:46970) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OoM2D-0003l6-P0 for qemu-devel@nongnu.org; Wed, 25 Aug 2010 15:53:21 -0400 Received: by qwh5 with SMTP id 5so893413qwh.4 for ; Wed, 25 Aug 2010 12:53:21 -0700 (PDT) Message-ID: <4C7574B0.40203@codemonkey.ws> Date: Wed, 25 Aug 2010 14:53:20 -0500 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH v3 07/10] spice: add keyboard References: <1282745970-11506-1-git-send-email-kraxel@redhat.com> <1282745970-11506-8-git-send-email-kraxel@redhat.com> In-Reply-To: <1282745970-11506-8-git-send-email-kraxel@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann Cc: qemu-devel@nongnu.org On 08/25/2010 09:19 AM, Gerd Hoffmann wrote: > 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. > > Signed-off-by: Gerd Hoffmann > --- > Makefile.objs | 2 +- > ui/qemu-spice.h | 1 + > ui/spice-core.c | 2 + > ui/spice-input.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 86 insertions(+), 1 deletions(-) > create mode 100644 ui/spice-input.c > > diff --git a/Makefile.objs b/Makefile.objs > index 1a53027..20e6ad7 100644 > --- a/Makefile.objs > +++ b/Makefile.objs > @@ -88,7 +88,7 @@ common-obj-y += pflib.o > common-obj-$(CONFIG_BRLAPI) += baum.o > common-obj-$(CONFIG_POSIX) += migration-exec.o migration-unix.o migration-fd.o > > -common-obj-$(CONFIG_SPICE) += ui/spice-core.o > +common-obj-$(CONFIG_SPICE) += ui/spice-core.o ui/spice-input.o > > audio-obj-y = audio.o noaudio.o wavaudio.o mixeng.o > audio-obj-$(CONFIG_SDL) += sdlaudio.o > diff --git a/ui/qemu-spice.h b/ui/qemu-spice.h > index d58d74c..75e2502 100644 > --- a/ui/qemu-spice.h > +++ b/ui/qemu-spice.h > @@ -29,6 +29,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/ui/spice-core.c b/ui/spice-core.c > index 3041309..75f0fe9 100644 > --- a/ui/spice-core.c > +++ b/ui/spice-core.c > @@ -161,6 +161,8 @@ void qemu_spice_init(void) > > spice_server_init(spice_server,&core_interface); > using_spice = 1; > + > + qemu_spice_input_init(); > Why not pass spice_server to qemu_spice_input_init() and avoid the global? Regards, Anthony Liguori > } > > static void spice_register_config(void) > diff --git a/ui/spice-input.c b/ui/spice-input.c > new file mode 100644 > index 0000000..d4f44f4 > --- /dev/null > +++ b/ui/spice-input.c > @@ -0,0 +1,82 @@ > +/* > + * Copyright (C) 2010 Red Hat, Inc. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation; either version 2 or > + * (at your option) version 3 of the License. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, see. > + */ > + > +#include > +#include > +#include > + > +#include > +#include > + > +#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 const 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 = 0; > + if (ledstate& QEMU_SCROLL_LOCK_LED) > + kbd->ledstate |= SPICE_KEYBOARD_MODIFIER_FLAGS_SCROLL_LOCK; > + if (ledstate& QEMU_NUM_LOCK_LED) > + kbd->ledstate |= SPICE_KEYBOARD_MODIFIER_FLAGS_NUM_LOCK; > + if (ledstate& QEMU_CAPS_LOCK_LED) > + kbd->ledstate |= SPICE_KEYBOARD_MODIFIER_FLAGS_CAPS_LOCK; > + 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); > +} >