kbd leds: infrastructure
Adds infrastructure for keyboard led status tracking to qemu. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									32bb404a6a
								
							
						
					
					
						commit
						03a23a85f4
					
				
							
								
								
									
										15
									
								
								console.h
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								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); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										31
									
								
								input.c
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								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; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Gerd Hoffmann
						Gerd Hoffmann