[Spice-devel] [PATCH v6 07/10] win-usbredir: Only match USB devices by VID:PID when WinUsb used
Dmitry Fleytman
dmitry at daynix.com
Thu Oct 29 08:26:42 PDT 2015
In other cases match devices by BUS:ADDR.
Signed-off-by: Dmitry Fleytman <dmitry at daynix.com>
---
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
More information about the Spice-devel
mailing list