[Spice-devel] [spice-gtk v2 2/8] usb-redir: move implementation of device description to USB backend

Frediano Ziglio fziglio at redhat.com
Mon Aug 5 10:01:04 UTC 2019


> 
> For local USB device the USB backend returns the same device
> description as spice-usb-manager did, for emulated devices it
> uses the description provided by device's implementation.
> 
> Signed-off-by: Yuri Benditovich <yuri.benditovich at daynix.com>
> ---
>  src/usb-backend.c        | 41 ++++++++++++++++++++++++++++++++++++++++
>  src/usb-backend.h        |  1 +
>  src/usb-device-manager.c | 29 +---------------------------
>  3 files changed, 43 insertions(+), 28 deletions(-)
> 
> diff --git a/src/usb-backend.c b/src/usb-backend.c
> index be60cf3..3a8a28e 100644
> --- a/src/usb-backend.c
> +++ b/src/usb-backend.c
> @@ -42,6 +42,7 @@
>  #include "usb-emulation.h"
>  #include "channel-usbredir-priv.h"
>  #include "spice-channel-priv.h"
> +#include "usbutil.h"
>  
>  #define LOUD_DEBUG(x, ...)
>  
> @@ -844,6 +845,46 @@
> spice_usb_backend_channel_get_guest_filter(SpiceUsbBackendChannel *ch,
>      }
>  }
>  
> +gchar * spice_usb_backend_device_get_description(SpiceUsbBackendDevice *dev,
> +                                                 const gchar *format)

Minor: space after "gchar *".

> +{
> +    guint16 bus, address, vid, pid;
> +    gchar *description, *descriptor, *manufacturer = NULL, *product = NULL;
> +
> +    g_return_val_if_fail(dev != NULL, NULL);
> +
> +    bus     = dev->device_info.bus;
> +    address = dev->device_info.address;
> +    vid     = dev->device_info.vid;
> +    pid     = dev->device_info.pid;
> +
> +    if ((vid > 0) && (pid > 0)) {
> +        descriptor = g_strdup_printf("[%04x:%04x]", vid, pid);
> +    } else {
> +        descriptor = g_strdup("");
> +    }
> +
> +    if (dev->libusb_device) {
> +        spice_usb_util_get_device_strings(bus, address, vid, pid,
> +                                          &manufacturer, &product);
> +    } else {
> +        product = device_ops(dev->edev)->get_product_description(dev->edev);
> +    }
> +
> +    if (!format) {
> +        format = _("%s %s %s at %d-%d");
> +    }
> +
> +    description = g_strdup_printf(format, manufacturer ? manufacturer : "",
> +                                  product, descriptor, bus, address);
> +
> +    g_free(manufacturer);
> +    g_free(descriptor);
> +    g_free(product);
> +
> +    return description;
> +}
> +
>  void spice_usb_backend_device_report_change(SpiceUsbBackend *be,
>                                              SpiceUsbBackendDevice *dev)
>  {
> diff --git a/src/usb-backend.h b/src/usb-backend.h
> index 63b9202..87efd51 100644
> --- a/src/usb-backend.h
> +++ b/src/usb-backend.h
> @@ -91,6 +91,7 @@ void
> spice_usb_backend_channel_get_guest_filter(SpiceUsbBackendChannel *ch,
>                                                  const struct
>                                                  usbredirfilter_rule
>                                                  **rules,
>                                                  int *count);
>  void spice_usb_backend_return_write_data(SpiceUsbBackendChannel *ch, void
>  *data);
> +gchar *spice_usb_backend_device_get_description(SpiceUsbBackendDevice *dev,
> const gchar *format);
>  
>  G_END_DECLS
>  
> diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c
> index 426a0cd..456b511 100644
> --- a/src/usb-device-manager.c
> +++ b/src/usb-device-manager.c
> @@ -32,7 +32,6 @@
>  #endif
>  
>  #include "channel-usbredir-priv.h"
> -#include "usbutil.h"
>  #endif
>  
>  #include "spice-session-priv.h"
> @@ -1439,35 +1438,9 @@
> spice_usb_device_manager_can_redirect_device(SpiceUsbDeviceManager  *self,
>  gchar *spice_usb_device_get_description(SpiceUsbDevice *device, const gchar
>  *format)
>  {
>  #ifdef USE_USBREDIR
> -    guint16 bus, address, vid, pid;
> -    gchar *description, *descriptor, *manufacturer = NULL, *product = NULL;
> -
>      g_return_val_if_fail(device != NULL, NULL);
>  
> -    bus     = spice_usb_device_get_busnum(device);
> -    address = spice_usb_device_get_devaddr(device);
> -    vid     = spice_usb_device_get_vid(device);
> -    pid     = spice_usb_device_get_pid(device);
> -
> -    if ((vid > 0) && (pid > 0)) {
> -        descriptor = g_strdup_printf("[%04x:%04x]", vid, pid);
> -    } else {
> -        descriptor = g_strdup("");
> -    }
> -
> -    spice_usb_util_get_device_strings(bus, address, vid, pid,
> -                                      &manufacturer, &product);
> -
> -    if (!format)
> -        format = _("%s %s %s at %d-%d");
> -
> -    description = g_strdup_printf(format, manufacturer, product, descriptor,
> bus, address);
> -
> -    g_free(manufacturer);
> -    g_free(descriptor);
> -    g_free(product);
> -
> -    return description;
> +    return spice_usb_backend_device_get_description(device->bdev, format);
>  #else
>      return NULL;
>  #endif

Otherwise,
  Acked-by: Frediano Ziglio <fziglio at redhat.com>

Frediano


More information about the Spice-devel mailing list