1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#ifndef ADB_H
27#define ADB_H
28
29#include "hw/qdev-core.h"
30#include "qom/object.h"
31
32#define MAX_ADB_DEVICES 16
33
34#define ADB_MAX_OUT_LEN 16
35
36typedef struct ADBDevice ADBDevice;
37
38
39typedef int ADBDeviceRequest(ADBDevice *d, uint8_t *buf_out,
40 const uint8_t *buf, int len);
41
42typedef bool ADBDeviceHasData(ADBDevice *d);
43
44#define TYPE_ADB_DEVICE "adb-device"
45OBJECT_DECLARE_TYPE(ADBDevice, ADBDeviceClass, ADB_DEVICE)
46
47struct ADBDevice {
48
49 DeviceState parent_obj;
50
51
52 int devaddr;
53 int handler;
54};
55
56
57struct ADBDeviceClass {
58
59 DeviceClass parent_class;
60
61
62 ADBDeviceRequest *devreq;
63 ADBDeviceHasData *devhasdata;
64};
65
66#define TYPE_ADB_BUS "apple-desktop-bus"
67OBJECT_DECLARE_SIMPLE_TYPE(ADBBusState, ADB_BUS)
68
69#define ADB_STATUS_BUSTIMEOUT 0x1
70#define ADB_STATUS_POLLREPLY 0x2
71
72struct ADBBusState {
73
74 BusState parent_obj;
75
76
77 ADBDevice *devices[MAX_ADB_DEVICES];
78 uint16_t pending;
79 int nb_devices;
80 int poll_index;
81 uint8_t status;
82
83 QEMUTimer *autopoll_timer;
84 bool autopoll_enabled;
85 bool autopoll_blocked;
86 uint8_t autopoll_rate_ms;
87 uint16_t autopoll_mask;
88 void (*autopoll_cb)(void *opaque);
89 void *autopoll_cb_opaque;
90};
91
92int adb_request(ADBBusState *s, uint8_t *buf_out,
93 const uint8_t *buf, int len);
94int adb_poll(ADBBusState *s, uint8_t *buf_out, uint16_t poll_mask);
95
96void adb_autopoll_block(ADBBusState *s);
97void adb_autopoll_unblock(ADBBusState *s);
98
99void adb_set_autopoll_enabled(ADBBusState *s, bool enabled);
100void adb_set_autopoll_rate_ms(ADBBusState *s, int rate_ms);
101void adb_set_autopoll_mask(ADBBusState *s, uint16_t mask);
102void adb_register_autopoll_callback(ADBBusState *s, void (*cb)(void *opaque),
103 void *opaque);
104
105#define TYPE_ADB_KEYBOARD "adb-keyboard"
106#define TYPE_ADB_MOUSE "adb-mouse"
107
108#endif
109