[Spice-devel] [PATCH spice-gtk v6 02/18] usb-redir: move implementation of device description to USB backend
Frediano Ziglio
fziglio at redhat.com
Thu Sep 5 13:42:25 UTC 2019
From: Yuri Benditovich <yuri.benditovich at daynix.com>
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>
Acked-by: Frediano Ziglio <fziglio at redhat.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 cb41f717..5b52a40d 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, ...)
@@ -852,6 +853,46 @@ spice_usb_backend_channel_get_guest_filter(SpiceUsbBackendChannel *ch,
}
}
+gchar *spice_usb_backend_device_get_description(SpiceUsbBackendDevice *dev,
+ const gchar *format)
+{
+ 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 83319dc6..46b742ed 100644
--- a/src/usb-backend.h
+++ b/src/usb-backend.h
@@ -90,5 +90,6 @@ 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 17bca099..3a9542a4 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"
@@ -1432,35 +1431,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, format);
#else
return NULL;
#endif
--
2.20.1
More information about the Spice-devel
mailing list