In other cases match devices by BUS:ADDR. Signed-off-by: Dmitry Fleytman <dmitry@xxxxxxxxxx> --- src/usb-device-manager.c | 78 +++++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c index 55533f9..dd55276 100644 --- a/src/usb-device-manager.c +++ b/src/usb-device-manager.c @@ -653,13 +653,15 @@ static gboolean spice_usb_device_manager_get_udev_bus_n_address( *bus = *address = 0; -#ifndef G_OS_WIN32 - bus_str = g_udev_device_get_property(udev, "BUSNUM"); - address_str = g_udev_device_get_property(udev, "DEVNUM"); -#else /* Windows -- request vid:pid instead */ - bus_str = g_udev_device_get_property(udev, "VID"); - address_str = g_udev_device_get_property(udev, "PID"); -#endif + if (manager->priv->use_usbclerk) { + /* Windows WinUsb/UsbClerk -- request vid:pid instead */ + bus_str = g_udev_device_get_property(udev, "VID"); + address_str = g_udev_device_get_property(udev, "PID"); + } else { + /* 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) @@ -798,13 +800,17 @@ static void spice_usb_device_manager_auto_connect_cb(GObject *gobject, spice_usb_device_unref(device); } -#ifndef G_OS_WIN32 /* match functions for Linux -- match by bus.addr */ static gboolean spice_usb_device_manager_device_match(SpiceUsbDeviceManager *self, SpiceUsbDevice *device, const int bus, const int address) { - return (spice_usb_device_get_busnum(device) == bus && - spice_usb_device_get_devaddr(device) == address); + if (self->priv->use_usbclerk) { + return (spice_usb_device_get_vid(device) == bus && + spice_usb_device_get_pid(device) == address); + } else { + return (spice_usb_device_get_busnum(device) == bus && + spice_usb_device_get_devaddr(device) == address); + } } #ifdef USE_GUDEV @@ -812,32 +818,21 @@ static gboolean spice_usb_device_manager_libdev_match(SpiceUsbDeviceManager *self, libusb_device *libdev, const int bus, const int address) { - return (libusb_get_bus_number(libdev) == bus && - libusb_get_device_address(libdev) == address); -} -#endif - -#else /* Win32 -- match functions for Windows -- match by vid:pid */ -static gboolean -spice_usb_device_manager_device_match(SpiceUsbDeviceManager *self, SpiceUsbDevice *device, - const int vid, const int pid) -{ - return (spice_usb_device_get_vid(device) == vid && - spice_usb_device_get_pid(device) == pid); -} + if (self->priv->use_usbclerk) { + /* WinUSB -- match functions for Windows -- match by vid:pid */ + int vid, pid; -static gboolean -spice_usb_device_manager_libdev_match(SpiceUsbDeviceManager *self, libusb_device *libdev, - const int vid, const int pid) -{ - int vid2, pid2; - - if (!spice_usb_device_manager_get_libdev_vid_pid(libdev, &vid2, &pid2)) { - return FALSE; + if (!spice_usb_device_manager_get_libdev_vid_pid(libdev, &vid, &pid)) { + return FALSE; + } + return (bus == vid && address == pid); + } else { + /* match functions for Linux/UsbDk -- match by bus.addr */ + return (libusb_get_bus_number(libdev) == bus && + libusb_get_device_address(libdev) == address); } - return (vid == vid2 && pid == pid2); } -#endif /* of Win32 -- match functions */ +#endif static SpiceUsbDevice* spice_usb_device_manager_find_device(SpiceUsbDeviceManager *self, @@ -1908,14 +1903,21 @@ spice_usb_manager_device_equal_libdev(SpiceUsbDeviceManager *manager, SpiceUsbDevice *device, libusb_device *libdev) { - int vid, pid; + int busnum, devaddr; if ((device == NULL) || (libdev == NULL)) - return FALSE; + return FALSE; + + if (manager->priv->use_usbclerk) { + busnum = spice_usb_device_get_vid(device); + devaddr = spice_usb_device_get_pid(device); + } else { + busnum = spice_usb_device_get_busnum(device); + devaddr = spice_usb_device_get_devaddr(device); + } - vid = spice_usb_device_get_vid(device); - pid = spice_usb_device_get_pid(device); - return spice_usb_device_manager_libdev_match(manager, libdev, vid, pid); + return spice_usb_device_manager_libdev_match(manager, libdev, + busnum, devaddr); } #endif -- 2.4.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel