qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [usb] display device identifier string for user with info u


From: Lonnie Mendez
Subject: [Qemu-devel] [usb] display device identifier string for user with info usb
Date: Mon, 22 May 2006 15:12:38 -0500
User-agent: Mozilla Thunderbird 1.0.7 (X11/20050923)

The attached patch provides more output to accompany info usb. A device name is provided which is obtained from product string descriptor. This is to help clear up what device is which as the only information currently provided to the user are the bus and address the device has been given from the guest.

--- qemu/hw/usb.h       2006-05-21 11:30:15.000000000 -0500
+++ qemu/hw/usb.h       2006-05-22 13:23:10.000000000 -0500
@@ -127,6 +127,7 @@
     int (*handle_data)(USBDevice *dev, int pid, uint8_t devep,
                        uint8_t *data, int len);
     uint8_t addr;
+    char devname[32];
     
     int state;
     uint8_t setup_buf[8];
--- qemu/hw/usb-hub.c   2006-05-21 11:30:15.000000000 -0500
+++ qemu/hw/usb-hub.c   2006-05-22 13:23:53.000000000 -0500
@@ -542,6 +542,8 @@
     s->dev.handle_control = usb_hub_handle_control;
     s->dev.handle_data = usb_hub_handle_data;
 
+    strcpy(s->dev.devname, "QEMU USB Hub");
+
     s->nb_ports = nb_ports;
     for(i = 0; i < s->nb_ports; i++) {
         port = &s->ports[i];
--- qemu/hw/usb-hid.c   2006-04-12 16:09:07.000000000 -0500
+++ qemu/hw/usb-hid.c   2006-05-22 13:24:57.000000000 -0500
@@ -515,6 +515,8 @@
     s->dev.handle_data = usb_mouse_handle_data;
     s->kind = USB_TABLET;
 
+    strcpy(s->dev.devname, "QEMU USB Tablet");
+
     return (USBDevice *)s;
 }
 
@@ -533,5 +535,7 @@
     s->dev.handle_data = usb_mouse_handle_data;
     s->kind = USB_MOUSE;
 
+    strcpy(s->dev.devname, "QEMU USB Mouse");
+
     return (USBDevice *)s;
 }
--- qemu/usb-linux.c    2006-03-11 12:03:38.000000000 -0600
+++ qemu/usb-linux.c    2006-05-22 15:06:28.000000000 -0500
@@ -44,6 +44,7 @@
                         int vendor_id, int product_id, 
                         const char *product_name, int speed);
 static int usb_host_find_device(int *pbus_num, int *paddr, 
+                                char *product_name, 
                                 const char *devname);
 
 //#define DEBUG
@@ -145,8 +146,9 @@
     char buf[1024];
     int descr_len, dev_descr_len, config_descr_len, nb_interfaces;
     int bus_num, addr;
+    char product_name[32];
 
-    if (usb_host_find_device(&bus_num, &addr, devname) < 0) 
+    if (usb_host_find_device(&bus_num, &addr, product_name, devname) < 0) 
         return NULL;
     
     snprintf(buf, sizeof(buf), USBDEVFS_PATH "/%03d/%03d", 
@@ -230,6 +232,12 @@
     dev->dev.handle_reset = usb_host_handle_reset;
     dev->dev.handle_control = usb_host_handle_control;
     dev->dev.handle_data = usb_host_handle_data;
+
+    if (product_name[0] == '\0')
+        snprintf(dev->dev.devname, 31, "host:%s", devname);
+    else
+        strncpy(dev->dev.devname, product_name, 31);
+
     return (USBDevice *)dev;
 }
 
@@ -337,6 +345,7 @@
     int product_id;
     int bus_num;
     int addr;
+    char product_name[32];
 } FindDeviceState;
 
 static int usb_host_find_device_scan(void *opaque, int bus_num, int addr, 
@@ -345,8 +354,11 @@
                                      const char *product_name, int speed)
 {
     FindDeviceState *s = opaque;
-    if (vendor_id == s->vendor_id &&
-        product_id == s->product_id) {
+    if ((vendor_id == s->vendor_id &&
+        product_id == s->product_id) ||
+        (bus_num == s->bus_num &&
+        addr == s->addr)) {
+        strncpy(s->product_name, product_name, 31);
         s->bus_num = bus_num;
         s->addr = addr;
         return 1;
@@ -358,7 +370,8 @@
 /* the syntax is : 
    'bus.addr' (decimal numbers) or 
    'vendor_id:product_id' (hexa numbers) */
-static int usb_host_find_device(int *pbus_num, int *paddr, 
+static int usb_host_find_device(int *pbus_num, int *paddr,
+                                char *product_name,
                                 const char *devname)
 {
     const char *p;
@@ -369,6 +382,11 @@
     if (p) {
         *pbus_num = strtoul(devname, NULL, 0);
         *paddr = strtoul(p + 1, NULL, 0);
+        fs.bus_num = *pbus_num;
+        fs.addr = *paddr;
+        ret = usb_host_scan(&fs, usb_host_find_device_scan);
+        if (ret)
+            strcpy(product_name, fs.product_name);
         return 0;
     }
     p = strchr(devname, ':');
@@ -379,6 +397,7 @@
         if (ret) {
             *pbus_num = fs.bus_num;
             *paddr = fs.addr;
+            strcpy(product_name, fs.product_name);
             return 0;
         }
     }

reply via email to

[Prev in Thread] Current Thread [Next in Thread]