Re: [Spice-devel] [spice-gtk 11/13] win-usb-dev: report libusb_device via signal
Maybe "win-usb-dev: pass libusb_device in "uevent" signal" as a shortlog. On Sun, Mar 10, 2019 at 04:46:10PM +0200, Yuri Benditovich wrote: > Change the signal to report libusb_device instead of GUdevDevice > object. This simplifies the callback procedure in usb-dev-manager > and avoids additional reenumeration immediately after reenumeration > that already done by win-usb-dev. > > Signed-off-by: Yuri Benditovich > --- > src/usb-device-manager.c | 81 +++- > src/win-usb-dev.c| 48 +--- > src/win-usb-dev.h| 2 +- > 3 files changed, 8 insertions(+), 123 deletions(-) > > diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c > index c1a0c92..f4910b1 100644 > --- a/src/usb-device-manager.c > +++ b/src/usb-device-manager.c > @@ -153,11 +153,9 @@ static void channel_event(SpiceChannel *channel, > SpiceChannelEvent event, >gpointer user_data); > #ifdef G_OS_WIN32 > static void spice_usb_device_manager_uevent_cb(GUdevClient *client, > - GUdevDevice *udevice, > + libusb_device *udevice, > int add, > gpointer user_data); > -static void spice_usb_device_manager_add_udev(SpiceUsbDeviceManager *self, > - GUdevDevice*udev); > #else > static int spice_usb_device_manager_hotplug_cb(libusb_context *ctx, > libusb_device*device, > @@ -720,28 +718,6 @@ static void > spice_usb_device_manager_class_init(SpiceUsbDeviceManagerClass *klas > /* -- */ > /* gudev / libusb Helper functions*/ > > -#ifdef G_OS_WIN32 > -static gboolean spice_usb_device_manager_get_udev_bus_n_address( > -SpiceUsbDeviceManager *manager, GUdevDevice *udev, > -int *bus, int *address) > -{ > -const gchar *bus_str, *address_str; > - > -*bus = *address = 0; > - > - /* Linux or UsbDk backend on Windows*/ > -bus_str = g_udev_device_get_property(udev, "BUSNUM"); > -address_str = g_udev_device_get_property(udev, "DEVNUM"); > - > -if (bus_str) > -*bus = atoi(bus_str); > -if (address_str) > -*address = atoi(address_str); > - > -return *bus && *address; > -} > -#endif > - > static gboolean spice_usb_device_manager_get_device_descriptor( > libusb_device *libdev, > struct libusb_device_descriptor *desc) > @@ -1022,64 +998,19 @@ static void > spice_usb_device_manager_remove_dev(SpiceUsbDeviceManager *self, > } > > #ifdef G_OS_WIN32 > -static void spice_usb_device_manager_add_udev(SpiceUsbDeviceManager *self, > - GUdevDevice*udev) > -{ > -SpiceUsbDeviceManagerPrivate *priv = self->priv; > -libusb_device *libdev = NULL, **dev_list = NULL; > -const gchar *devtype; > -int i, bus, address; > - > -devtype = g_udev_device_get_property(udev, "DEVTYPE"); > -/* Check if this is a usb device (and not an interface) */ > -if (!devtype || strcmp(devtype, "usb_device")) > -return; > - > -if (!spice_usb_device_manager_get_udev_bus_n_address(self, udev, , > )) { > -g_warning("USB device without bus number or device address"); > -return; > -} > - > -libusb_get_device_list(priv->context, _list); > - > -for (i = 0; dev_list && dev_list[i]; i++) { > -if (spice_usb_device_manager_libdev_match(self, dev_list[i], bus, > address)) { > -libdev = dev_list[i]; > -break; > -} > -} > - > -if (libdev) > -spice_usb_device_manager_add_dev(self, libdev); > -else > -g_warning("Could not find USB device to add " DEV_ID_FMT, > - (guint) bus, (guint) address); > - > -libusb_free_device_list(dev_list, 1); > -} > - > -static void spice_usb_device_manager_remove_udev(SpiceUsbDeviceManager > *self, > - GUdevDevice > *udev) > -{ > -int bus, address; > - > -if (!spice_usb_device_manager_get_udev_bus_n_address(self, udev, , > )) > -return; > - > -spice_usb_device_manager_remove_dev(self, bus, address); > -} > - > static void spice_usb_device_manager_uevent_cb(GUdevClient *client, > - GUdevDevice *udevice, > + libusb_device *dev, > int add, > gpointer user_data) > { > SpiceUsbDeviceManager *self = SPICE_USB_DEVICE_MANAGER(user_data); > > if (add) > -
[Spice-devel] [spice-gtk 11/13] win-usb-dev: report libusb_device via signal
Change the signal to report libusb_device instead of GUdevDevice object. This simplifies the callback procedure in usb-dev-manager and avoids additional reenumeration immediately after reenumeration that already done by win-usb-dev. Signed-off-by: Yuri Benditovich --- src/usb-device-manager.c | 81 +++- src/win-usb-dev.c| 48 +--- src/win-usb-dev.h| 2 +- 3 files changed, 8 insertions(+), 123 deletions(-) diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c index c1a0c92..f4910b1 100644 --- a/src/usb-device-manager.c +++ b/src/usb-device-manager.c @@ -153,11 +153,9 @@ static void channel_event(SpiceChannel *channel, SpiceChannelEvent event, gpointer user_data); #ifdef G_OS_WIN32 static void spice_usb_device_manager_uevent_cb(GUdevClient *client, - GUdevDevice *udevice, + libusb_device *udevice, int add, gpointer user_data); -static void spice_usb_device_manager_add_udev(SpiceUsbDeviceManager *self, - GUdevDevice*udev); #else static int spice_usb_device_manager_hotplug_cb(libusb_context *ctx, libusb_device*device, @@ -720,28 +718,6 @@ static void spice_usb_device_manager_class_init(SpiceUsbDeviceManagerClass *klas /* -- */ /* gudev / libusb Helper functions*/ -#ifdef G_OS_WIN32 -static gboolean spice_usb_device_manager_get_udev_bus_n_address( -SpiceUsbDeviceManager *manager, GUdevDevice *udev, -int *bus, int *address) -{ -const gchar *bus_str, *address_str; - -*bus = *address = 0; - - /* Linux or UsbDk backend on Windows*/ -bus_str = g_udev_device_get_property(udev, "BUSNUM"); -address_str = g_udev_device_get_property(udev, "DEVNUM"); - -if (bus_str) -*bus = atoi(bus_str); -if (address_str) -*address = atoi(address_str); - -return *bus && *address; -} -#endif - static gboolean spice_usb_device_manager_get_device_descriptor( libusb_device *libdev, struct libusb_device_descriptor *desc) @@ -1022,64 +998,19 @@ static void spice_usb_device_manager_remove_dev(SpiceUsbDeviceManager *self, } #ifdef G_OS_WIN32 -static void spice_usb_device_manager_add_udev(SpiceUsbDeviceManager *self, - GUdevDevice*udev) -{ -SpiceUsbDeviceManagerPrivate *priv = self->priv; -libusb_device *libdev = NULL, **dev_list = NULL; -const gchar *devtype; -int i, bus, address; - -devtype = g_udev_device_get_property(udev, "DEVTYPE"); -/* Check if this is a usb device (and not an interface) */ -if (!devtype || strcmp(devtype, "usb_device")) -return; - -if (!spice_usb_device_manager_get_udev_bus_n_address(self, udev, , )) { -g_warning("USB device without bus number or device address"); -return; -} - -libusb_get_device_list(priv->context, _list); - -for (i = 0; dev_list && dev_list[i]; i++) { -if (spice_usb_device_manager_libdev_match(self, dev_list[i], bus, address)) { -libdev = dev_list[i]; -break; -} -} - -if (libdev) -spice_usb_device_manager_add_dev(self, libdev); -else -g_warning("Could not find USB device to add " DEV_ID_FMT, - (guint) bus, (guint) address); - -libusb_free_device_list(dev_list, 1); -} - -static void spice_usb_device_manager_remove_udev(SpiceUsbDeviceManager *self, - GUdevDevice*udev) -{ -int bus, address; - -if (!spice_usb_device_manager_get_udev_bus_n_address(self, udev, , )) -return; - -spice_usb_device_manager_remove_dev(self, bus, address); -} - static void spice_usb_device_manager_uevent_cb(GUdevClient *client, - GUdevDevice *udevice, + libusb_device *dev, int add, gpointer user_data) { SpiceUsbDeviceManager *self = SPICE_USB_DEVICE_MANAGER(user_data); if (add) -spice_usb_device_manager_add_udev(self, udevice); +spice_usb_device_manager_add_dev(self, dev); else -spice_usb_device_manager_remove_udev(self, udevice); +spice_usb_device_manager_remove_dev(self, +libusb_get_bus_number(dev), +libusb_get_device_address(dev)); } #else struct hotplug_idle_cb_args { diff --git