Commit 969ca2f7 authored by Mark Cave-Ayland's avatar Mark Cave-Ayland
Browse files

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: default avatarMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Tested-by: default avatarFinn Thain <fthain@telegraphics.com.au>
Acked-by: default avatarLaurent Vivier <laurent@vivier.eu>
Message-Id: <20200623204936.24064-12-mark.cave-ayland@ilande.co.uk>
parent f3d61457
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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;
}
+9 −0
Original line number Diff line number Diff line
@@ -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;
}
+3 −0
Original line number Diff line number Diff line
@@ -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"