From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Np0xd-0007Vy-NT for qemu-devel@nongnu.org; Tue, 09 Mar 2010 10:03:05 -0500 Received: from [199.232.76.173] (port=54944 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Np0xd-0007V8-8y for qemu-devel@nongnu.org; Tue, 09 Mar 2010 10:03:05 -0500 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1Np0xb-0001t2-Bl for qemu-devel@nongnu.org; Tue, 09 Mar 2010 10:03:04 -0500 Received: from mail-ew0-f214.google.com ([209.85.219.214]:34496) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Np0xa-0001sn-U1 for qemu-devel@nongnu.org; Tue, 09 Mar 2010 10:03:03 -0500 Received: by ewy6 with SMTP id 6so4190347ewy.17 for ; Tue, 09 Mar 2010 07:03:02 -0800 (PST) Message-ID: <4B96631E.4020700@codemonkey.ws> Date: Tue, 09 Mar 2010 09:02:54 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH v2 1/4] kbd leds: infrastructure References: <1267201059-24145-1-git-send-email-kraxel@redhat.com> <1267201059-24145-2-git-send-email-kraxel@redhat.com> In-Reply-To: <1267201059-24145-2-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 02/26/2010 10:17 AM, Gerd Hoffmann wrote: > Adds infrastructure for keyboard led status tracking to qemu. > > Signed-off-by: Gerd Hoffmann > Applied. Thanks. Regards, Anthony Liguori > --- > console.h | 15 +++++++++++++++ > input.c | 31 +++++++++++++++++++++++++++++++ > 2 files changed, 46 insertions(+), 0 deletions(-) > > diff --git a/console.h b/console.h > index 916859d..71e8ff2 100644 > --- a/console.h > +++ b/console.h > @@ -10,10 +10,16 @@ > #define MOUSE_EVENT_RBUTTON 0x02 > #define MOUSE_EVENT_MBUTTON 0x04 > > +/* identical to the ps/2 keyboard bits */ > +#define QEMU_SCROLL_LOCK_LED (1<< 0) > +#define QEMU_NUM_LOCK_LED (1<< 1) > +#define QEMU_CAPS_LOCK_LED (1<< 2) > + > /* in ms */ > #define GUI_REFRESH_INTERVAL 30 > > typedef void QEMUPutKBDEvent(void *opaque, int keycode); > +typedef void QEMUPutLEDEvent(void *opaque, int ledstate); > typedef void QEMUPutMouseEvent(void *opaque, int dx, int dy, int dz, int buttons_state); > > typedef struct QEMUPutMouseEntry { > @@ -26,13 +32,22 @@ typedef struct QEMUPutMouseEntry { > struct QEMUPutMouseEntry *next; > } QEMUPutMouseEntry; > > +typedef struct QEMUPutLEDEntry { > + QEMUPutLEDEvent *put_led; > + void *opaque; > + QTAILQ_ENTRY(QEMUPutLEDEntry) next; > +} QEMUPutLEDEntry; > + > void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque); > QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func, > void *opaque, int absolute, > const char *name); > void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry); > +QEMUPutLEDEntry *qemu_add_led_event_handler(QEMUPutLEDEvent *func, void *opaque); > +void qemu_remove_led_event_handler(QEMUPutLEDEntry *entry); > > void kbd_put_keycode(int keycode); > +void kbd_put_ledstate(int ledstate); > void kbd_mouse_event(int dx, int dy, int dz, int buttons_state); > int kbd_mouse_is_absolute(void); > > diff --git a/input.c b/input.c > index 955b9ab..baaa4c6 100644 > --- a/input.c > +++ b/input.c > @@ -33,6 +33,7 @@ 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; > +static QTAILQ_HEAD(, QEMUPutLEDEntry) led_handlers = QTAILQ_HEAD_INITIALIZER(led_handlers); > > void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque) > { > @@ -102,6 +103,27 @@ void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry) > qemu_free(entry); > } > > +QEMUPutLEDEntry *qemu_add_led_event_handler(QEMUPutLEDEvent *func, > + void *opaque) > +{ > + QEMUPutLEDEntry *s; > + > + s = qemu_mallocz(sizeof(QEMUPutLEDEntry)); > + > + s->put_led = func; > + s->opaque = opaque; > + QTAILQ_INSERT_TAIL(&led_handlers, s, next); > + return s; > +} > + > +void qemu_remove_led_event_handler(QEMUPutLEDEntry *entry) > +{ > + if (entry == NULL) > + return; > + QTAILQ_REMOVE(&led_handlers, entry, next); > + qemu_free(entry); > +} > + > void kbd_put_keycode(int keycode) > { > if (qemu_put_kbd_event) { > @@ -109,6 +131,15 @@ void kbd_put_keycode(int keycode) > } > } > > +void kbd_put_ledstate(int ledstate) > +{ > + QEMUPutLEDEntry *cursor; > + > + QTAILQ_FOREACH(cursor,&led_handlers, next) { > + cursor->put_led(cursor->opaque, ledstate); > + } > +} > + > void kbd_mouse_event(int dx, int dy, int dz, int buttons_state) > { > QEMUPutMouseEvent *mouse_event; >