root / hw / hid.h @ a92eb87a
History | View | Annotate | Download (1.5 kB)
1 | dcfda673 | Gerd Hoffmann | #ifndef QEMU_HID_H
|
---|---|---|---|
2 | dcfda673 | Gerd Hoffmann | #define QEMU_HID_H
|
3 | dcfda673 | Gerd Hoffmann | |
4 | dcfda673 | Gerd Hoffmann | #define HID_MOUSE 1 |
5 | dcfda673 | Gerd Hoffmann | #define HID_TABLET 2 |
6 | dcfda673 | Gerd Hoffmann | #define HID_KEYBOARD 3 |
7 | dcfda673 | Gerd Hoffmann | |
8 | dcfda673 | Gerd Hoffmann | typedef struct HIDPointerEvent { |
9 | dcfda673 | Gerd Hoffmann | int32_t xdx, ydy; /* relative iff it's a mouse, otherwise absolute */
|
10 | dcfda673 | Gerd Hoffmann | int32_t dz, buttons_state; |
11 | dcfda673 | Gerd Hoffmann | } HIDPointerEvent; |
12 | dcfda673 | Gerd Hoffmann | |
13 | dcfda673 | Gerd Hoffmann | #define QUEUE_LENGTH 16 /* should be enough for a triple-click */ |
14 | dcfda673 | Gerd Hoffmann | #define QUEUE_MASK (QUEUE_LENGTH-1u) |
15 | dcfda673 | Gerd Hoffmann | #define QUEUE_INCR(v) ((v)++, (v) &= QUEUE_MASK)
|
16 | dcfda673 | Gerd Hoffmann | |
17 | dcfda673 | Gerd Hoffmann | typedef struct HIDState HIDState; |
18 | dcfda673 | Gerd Hoffmann | typedef void (*HIDEventFunc)(HIDState *s); |
19 | dcfda673 | Gerd Hoffmann | |
20 | dcfda673 | Gerd Hoffmann | typedef struct HIDMouseState { |
21 | dcfda673 | Gerd Hoffmann | HIDPointerEvent queue[QUEUE_LENGTH]; |
22 | dcfda673 | Gerd Hoffmann | int mouse_grabbed;
|
23 | dcfda673 | Gerd Hoffmann | QEMUPutMouseEntry *eh_entry; |
24 | dcfda673 | Gerd Hoffmann | } HIDMouseState; |
25 | dcfda673 | Gerd Hoffmann | |
26 | dcfda673 | Gerd Hoffmann | typedef struct HIDKeyboardState { |
27 | dcfda673 | Gerd Hoffmann | uint32_t keycodes[QUEUE_LENGTH]; |
28 | dcfda673 | Gerd Hoffmann | uint16_t modifiers; |
29 | dcfda673 | Gerd Hoffmann | uint8_t leds; |
30 | dcfda673 | Gerd Hoffmann | uint8_t key[16];
|
31 | dcfda673 | Gerd Hoffmann | int32_t keys; |
32 | dcfda673 | Gerd Hoffmann | } HIDKeyboardState; |
33 | dcfda673 | Gerd Hoffmann | |
34 | dcfda673 | Gerd Hoffmann | struct HIDState {
|
35 | dcfda673 | Gerd Hoffmann | union {
|
36 | dcfda673 | Gerd Hoffmann | HIDMouseState ptr; |
37 | dcfda673 | Gerd Hoffmann | HIDKeyboardState kbd; |
38 | dcfda673 | Gerd Hoffmann | }; |
39 | dcfda673 | Gerd Hoffmann | uint32_t head; /* index into circular queue */
|
40 | dcfda673 | Gerd Hoffmann | uint32_t n; |
41 | dcfda673 | Gerd Hoffmann | int kind;
|
42 | b069d348 | Gerd Hoffmann | int32_t protocol; |
43 | b069d348 | Gerd Hoffmann | uint8_t idle; |
44 | b069d348 | Gerd Hoffmann | int64_t next_idle_clock; |
45 | dcfda673 | Gerd Hoffmann | HIDEventFunc event; |
46 | dcfda673 | Gerd Hoffmann | }; |
47 | dcfda673 | Gerd Hoffmann | |
48 | dcfda673 | Gerd Hoffmann | void hid_init(HIDState *hs, int kind, HIDEventFunc event); |
49 | dcfda673 | Gerd Hoffmann | void hid_reset(HIDState *hs);
|
50 | dcfda673 | Gerd Hoffmann | void hid_free(HIDState *hs);
|
51 | dcfda673 | Gerd Hoffmann | |
52 | dcfda673 | Gerd Hoffmann | bool hid_has_events(HIDState *hs);
|
53 | b069d348 | Gerd Hoffmann | void hid_set_next_idle(HIDState *hs, int64_t curtime);
|
54 | 21635e12 | Gerd Hoffmann | void hid_pointer_activate(HIDState *hs);
|
55 | dcfda673 | Gerd Hoffmann | int hid_pointer_poll(HIDState *hs, uint8_t *buf, int len); |
56 | dcfda673 | Gerd Hoffmann | int hid_keyboard_poll(HIDState *hs, uint8_t *buf, int len); |
57 | dcfda673 | Gerd Hoffmann | int hid_keyboard_write(HIDState *hs, uint8_t *buf, int len); |
58 | dcfda673 | Gerd Hoffmann | |
59 | dcfda673 | Gerd Hoffmann | #endif /* QEMU_HID_H */ |