Commit 63066f4f13b024ac0a45486f06dafbbf944fe4c6
1 parent
caf9a12e
hid event handling
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@880 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
93 additions
and
11 deletions
hw/pckbd.c
... | ... | @@ -190,9 +190,9 @@ static void kbd_queue(KBDState *s, int b, int aux) |
190 | 190 | kbd_update_irq(s); |
191 | 191 | } |
192 | 192 | |
193 | -void kbd_put_keycode(int keycode) | |
193 | +static void pc_kbd_put_keycode(void *opaque, int keycode) | |
194 | 194 | { |
195 | - KBDState *s = &kbd_state; | |
195 | + KBDState *s = opaque; | |
196 | 196 | kbd_queue(s, keycode, 0); |
197 | 197 | } |
198 | 198 | |
... | ... | @@ -434,9 +434,10 @@ static void kbd_mouse_send_packet(KBDState *s) |
434 | 434 | s->mouse_dz -= dz1; |
435 | 435 | } |
436 | 436 | |
437 | -void kbd_mouse_event(int dx, int dy, int dz, int buttons_state) | |
437 | +static void pc_kbd_mouse_event(void *opaque, | |
438 | + int dx, int dy, int dz, int buttons_state) | |
438 | 439 | { |
439 | - KBDState *s = &kbd_state; | |
440 | + KBDState *s = opaque; | |
440 | 441 | |
441 | 442 | /* check if deltas are recorded when disabled */ |
442 | 443 | if (!(s->mouse_status & MOUSE_STATUS_ENABLED)) |
... | ... | @@ -652,4 +653,7 @@ void kbd_init(void) |
652 | 653 | register_ioport_write(0x60, 1, 1, kbd_write_data, s); |
653 | 654 | register_ioport_read(0x64, 1, 1, kbd_read_status, s); |
654 | 655 | register_ioport_write(0x64, 1, 1, kbd_write_command, s); |
656 | + | |
657 | + qemu_add_kbd_event_handler(pc_kbd_put_keycode, s); | |
658 | + qemu_add_mouse_event_handler(pc_kbd_mouse_event, s); | |
655 | 659 | } | ... | ... |
vl.c
... | ... | @@ -385,6 +385,41 @@ void hw_error(const char *fmt, ...) |
385 | 385 | } |
386 | 386 | |
387 | 387 | /***********************************************************/ |
388 | +/* keyboard/mouse */ | |
389 | + | |
390 | +static QEMUPutKBDEvent *qemu_put_kbd_event; | |
391 | +static void *qemu_put_kbd_event_opaque; | |
392 | +static QEMUPutMouseEvent *qemu_put_mouse_event; | |
393 | +static void *qemu_put_mouse_event_opaque; | |
394 | + | |
395 | +void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque) | |
396 | +{ | |
397 | + qemu_put_kbd_event_opaque = opaque; | |
398 | + qemu_put_kbd_event = func; | |
399 | +} | |
400 | + | |
401 | +void qemu_add_mouse_event_handler(QEMUPutMouseEvent *func, void *opaque) | |
402 | +{ | |
403 | + qemu_put_mouse_event_opaque = opaque; | |
404 | + qemu_put_mouse_event = func; | |
405 | +} | |
406 | + | |
407 | +void kbd_put_keycode(int keycode) | |
408 | +{ | |
409 | + if (qemu_put_kbd_event) { | |
410 | + qemu_put_kbd_event(qemu_put_kbd_event_opaque, keycode); | |
411 | + } | |
412 | +} | |
413 | + | |
414 | +void kbd_mouse_event(int dx, int dy, int dz, int buttons_state) | |
415 | +{ | |
416 | + if (qemu_put_mouse_event) { | |
417 | + qemu_put_mouse_event(qemu_put_mouse_event_opaque, | |
418 | + dx, dy, dz, buttons_state); | |
419 | + } | |
420 | +} | |
421 | + | |
422 | +/***********************************************************/ | |
388 | 423 | /* timers */ |
389 | 424 | |
390 | 425 | #if defined(__powerpc__) | ... | ... |
vl.h
... | ... | @@ -179,6 +179,21 @@ extern int rtc_utc; |
179 | 179 | #define BIOS_SIZE 0 |
180 | 180 | #endif |
181 | 181 | |
182 | +/* keyboard/mouse support */ | |
183 | + | |
184 | +#define MOUSE_EVENT_LBUTTON 0x01 | |
185 | +#define MOUSE_EVENT_RBUTTON 0x02 | |
186 | +#define MOUSE_EVENT_MBUTTON 0x04 | |
187 | + | |
188 | +typedef void QEMUPutKBDEvent(void *opaque, int keycode); | |
189 | +typedef void QEMUPutMouseEvent(void *opaque, int dx, int dy, int dz, int buttons_state); | |
190 | + | |
191 | +void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque); | |
192 | +void qemu_add_mouse_event_handler(QEMUPutMouseEvent *func, void *opaque); | |
193 | + | |
194 | +void kbd_put_keycode(int keycode); | |
195 | +void kbd_mouse_event(int dx, int dy, int dz, int buttons_state); | |
196 | + | |
182 | 197 | /* async I/O support */ |
183 | 198 | |
184 | 199 | typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size); |
... | ... | @@ -530,13 +545,6 @@ void pci_ne2000_init(NetDriverState *nd); |
530 | 545 | |
531 | 546 | /* pckbd.c */ |
532 | 547 | |
533 | -void kbd_put_keycode(int keycode); | |
534 | - | |
535 | -#define MOUSE_EVENT_LBUTTON 0x01 | |
536 | -#define MOUSE_EVENT_RBUTTON 0x02 | |
537 | -#define MOUSE_EVENT_MBUTTON 0x04 | |
538 | -void kbd_mouse_event(int dx, int dy, int dz, int buttons_state); | |
539 | - | |
540 | 548 | void kbd_init(void); |
541 | 549 | |
542 | 550 | /* mc146818rtc.c */ |
... | ... | @@ -627,6 +635,41 @@ int PPC_NVRAM_set_params (m48t59_t *nvram, uint16_t NVRAM_size, |
627 | 635 | uint32_t initrd_image, uint32_t initrd_size, |
628 | 636 | uint32_t NVRAM_image); |
629 | 637 | |
638 | +/* adb.c */ | |
639 | + | |
640 | +#define MAX_ADB_DEVICES 16 | |
641 | + | |
642 | +typedef struct ADBDevice ADBDevice; | |
643 | + | |
644 | +typedef void ADBDeviceReceivePacket(ADBDevice *d, const uint8_t *buf, int len); | |
645 | + | |
646 | +struct ADBDevice { | |
647 | + struct ADBBusState *bus; | |
648 | + int devaddr; | |
649 | + int handler; | |
650 | + ADBDeviceReceivePacket *receive_packet; | |
651 | + void *opaque; | |
652 | +}; | |
653 | + | |
654 | +typedef struct ADBBusState { | |
655 | + ADBDevice devices[MAX_ADB_DEVICES]; | |
656 | + int nb_devices; | |
657 | +} ADBBusState; | |
658 | + | |
659 | +void adb_receive_packet(ADBBusState *s, const uint8_t *buf, int len); | |
660 | +void adb_send_packet(ADBBusState *s, const uint8_t *buf, int len); | |
661 | + | |
662 | +ADBDevice *adb_register_device(ADBBusState *s, int devaddr, | |
663 | + ADBDeviceReceivePacket *receive_packet, | |
664 | + void *opaque); | |
665 | +void adb_kbd_init(ADBBusState *bus); | |
666 | +void adb_mouse_init(ADBBusState *bus); | |
667 | + | |
668 | +/* cuda.c */ | |
669 | + | |
670 | +extern ADBBusState adb_bus; | |
671 | +int cuda_init(void); | |
672 | + | |
630 | 673 | /* monitor.c */ |
631 | 674 | void monitor_init(void); |
632 | 675 | void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2))); | ... | ... |