adb: introduce new ADBDeviceHasData method to ADBDeviceClass
This is required later to allow devices to assert a service request (SRQ) signal to indicate that it has data to send, without having to consume it. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Tested-by: Finn Thain <fthain@telegraphics.com.au> Acked-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <20200623204936.24064-12-mark.cave-ayland@ilande.co.uk>
This commit is contained in:
parent
f3d61457e8
commit
969ca2f7a1
@ -300,6 +300,13 @@ static int adb_kbd_request(ADBDevice *d, uint8_t *obuf,
|
||||
return olen;
|
||||
}
|
||||
|
||||
static bool adb_kbd_has_data(ADBDevice *d)
|
||||
{
|
||||
KBDState *s = ADB_KEYBOARD(d);
|
||||
|
||||
return s->count > 0;
|
||||
}
|
||||
|
||||
/* This is where keyboard events enter this file */
|
||||
static void adb_keyboard_event(DeviceState *dev, QemuConsole *src,
|
||||
InputEvent *evt)
|
||||
@ -382,6 +389,7 @@ static void adb_kbd_class_init(ObjectClass *oc, void *data)
|
||||
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
|
||||
|
||||
adc->devreq = adb_kbd_request;
|
||||
adc->devhasdata = adb_kbd_has_data;
|
||||
dc->reset = adb_kbd_reset;
|
||||
dc->vmsd = &vmstate_adb_kbd;
|
||||
}
|
||||
|
@ -197,6 +197,14 @@ static int adb_mouse_request(ADBDevice *d, uint8_t *obuf,
|
||||
return olen;
|
||||
}
|
||||
|
||||
static bool adb_mouse_has_data(ADBDevice *d)
|
||||
{
|
||||
MouseState *s = ADB_MOUSE(d);
|
||||
|
||||
return !(s->last_buttons_state == s->buttons_state &&
|
||||
s->dx == 0 && s->dy == 0);
|
||||
}
|
||||
|
||||
static void adb_mouse_reset(DeviceState *dev)
|
||||
{
|
||||
ADBDevice *d = ADB_DEVICE(dev);
|
||||
@ -252,6 +260,7 @@ static void adb_mouse_class_init(ObjectClass *oc, void *data)
|
||||
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
|
||||
|
||||
adc->devreq = adb_mouse_request;
|
||||
adc->devhasdata = adb_mouse_has_data;
|
||||
dc->reset = adb_mouse_reset;
|
||||
dc->vmsd = &vmstate_adb_mouse;
|
||||
}
|
||||
|
@ -39,6 +39,8 @@ typedef struct ADBDevice ADBDevice;
|
||||
typedef int ADBDeviceRequest(ADBDevice *d, uint8_t *buf_out,
|
||||
const uint8_t *buf, int len);
|
||||
|
||||
typedef bool ADBDeviceHasData(ADBDevice *d);
|
||||
|
||||
#define TYPE_ADB_DEVICE "adb-device"
|
||||
#define ADB_DEVICE(obj) OBJECT_CHECK(ADBDevice, (obj), TYPE_ADB_DEVICE)
|
||||
|
||||
@ -62,6 +64,7 @@ typedef struct ADBDeviceClass {
|
||||
/*< public >*/
|
||||
|
||||
ADBDeviceRequest *devreq;
|
||||
ADBDeviceHasData *devhasdata;
|
||||
} ADBDeviceClass;
|
||||
|
||||
#define TYPE_ADB_BUS "apple-desktop-bus"
|
||||
|
Loading…
Reference in New Issue
Block a user