All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lonnie Mendez <lmendez19@austin.rr.com>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [usb] display device identifier string for user with info usb
Date: Thu, 15 Jun 2006 02:52:11 -0500	[thread overview]
Message-ID: <1150357931.5338.11.camel@localhost> (raw)
In-Reply-To: <4490367D.605@bellard.org>

[-- Attachment #1: Type: text/plain, Size: 495 bytes --]

On Wed, 2006-06-14 at 18:17 +0200, Fabrice Bellard wrote:
> OK for this patch, but the following must be changed:
> 
> 1) All instances of strcpy and strncpy must be replaced by pstrcpy.
> 
> 2) product_name_size must be passed as parameter to  usb_host_find_device().

   lo.  Attached is something I hope you will find to be more clean.  I
used a define for product name size since this is used in two places to
define an array size (in usb_host_device_open() and the FindDeviceState
struct).

[-- Attachment #2: qemu-usb-devname.diff --]
[-- Type: text/x-patch, Size: 5440 bytes --]

--- qemu/hw/usb.h	2006-05-25 18:58:51.000000000 -0500
+++ qemu/hw/usb.h	2006-06-15 00:56:38.000000000 -0500
@@ -128,6 +128,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-25 18:58:51.000000000 -0500
+++ qemu/hw/usb-hub.c	2006-06-15 01:27:09.000000000 -0500
@@ -544,6 +544,8 @@
     s->dev.handle_control = usb_hub_handle_control;
     s->dev.handle_data = usb_hub_handle_data;
 
+    pstrcpy(s->dev.devname, sizeof(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-05-25 18:58:51.000000000 -0500
+++ qemu/hw/usb-hid.c	2006-06-15 01:26:37.000000000 -0500
@@ -521,6 +521,8 @@
     s->dev.handle_data = usb_mouse_handle_data;
     s->kind = USB_TABLET;
 
+    pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Tablet");
+
     return (USBDevice *)s;
 }
 
@@ -539,5 +541,7 @@
     s->dev.handle_data = usb_mouse_handle_data;
     s->kind = USB_MOUSE;
 
+    pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Mouse");
+
     return (USBDevice *)s;
 }
--- qemu/hw/usb-msd.c	2006-05-26 16:53:41.000000000 -0500
+++ qemu/hw/usb-msd.c	2006-06-15 02:17:18.000000000 -0500
@@ -374,6 +374,7 @@
 {
     MSDState *s;
     BlockDriverState *bdrv;
+    char msd_info_str[32];
 
     s = qemu_mallocz(sizeof(MSDState));
     if (!s)
@@ -389,6 +390,10 @@
     s->dev.handle_control = usb_msd_handle_control;
     s->dev.handle_data = usb_msd_handle_data;
 
+    snprintf(msd_info_str, sizeof(msd_info_str), "QEMU USB MSD(%.17s)",
+             filename);
+    pstrcpy(s->dev.devname, sizeof(s->dev.devname), msd_info_str);
+
     s->scsi_dev = scsi_disk_init(bdrv, usb_msd_command_complete, s);
     usb_msd_handle_reset((USBDevice *)s, 0);
     return (USBDevice *)s;
--- qemu/vl.c	2006-06-14 12:32:25.000000000 -0500
+++ qemu/vl.c	2006-06-15 00:56:38.000000000 -0500
@@ -3412,8 +3447,8 @@
             speed_str = "?"; 
             break;
         }
-        term_printf("  Device %d.%d, speed %s Mb/s\n", 
-                    0, dev->addr, speed_str);
+        term_printf("  Device %d.%d, Speed %s Mb/s, Product %s\n", 
+                    0, dev->addr, speed_str, dev->devname);
     }
 }
 
--- qemu/usb-linux.c	2006-05-25 18:58:51.000000000 -0500
+++ qemu/usb-linux.c	2006-06-15 02:35:56.000000000 -0500
@@ -44,11 +44,13 @@
                         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
 
 #define USBDEVFS_PATH "/proc/bus/usb"
+#define PRODUCT_NAME_SZ 32
 
 typedef struct USBHostDevice {
     USBDevice dev;
@@ -145,8 +147,9 @@
     char buf[1024];
     int descr_len, dev_descr_len, config_descr_len, nb_interfaces;
     int bus_num, addr;
+    char product_name[PRODUCT_NAME_SZ];
 
-    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 +233,14 @@
     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, sizeof(dev->dev.devname),
+                 "host:%s", devname);
+    else
+        pstrcpy(dev->dev.devname, sizeof(dev->dev.devname),
+                product_name);
+
     return (USBDevice *)dev;
 }
 
@@ -337,6 +348,7 @@
     int product_id;
     int bus_num;
     int addr;
+    char product_name[PRODUCT_NAME_SZ];
 } FindDeviceState;
 
 static int usb_host_find_device_scan(void *opaque, int bus_num, int addr, 
@@ -345,8 +357,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)) {
+        pstrcpy(s->product_name, PRODUCT_NAME_SZ, product_name);
         s->bus_num = bus_num;
         s->addr = addr;
         return 1;
@@ -359,6 +374,7 @@
    'bus.addr' (decimal numbers) or 
    'vendor_id:product_id' (hexa numbers) */
 static int usb_host_find_device(int *pbus_num, int *paddr, 
+                                char *product_name, 
                                 const char *devname)
 {
     const char *p;
@@ -369,6 +385,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)
+            pstrcpy(product_name, PRODUCT_NAME_SZ, fs.product_name);
         return 0;
     }
     p = strchr(devname, ':');
@@ -379,6 +400,7 @@
         if (ret) {
             *pbus_num = fs.bus_num;
             *paddr = fs.addr;
+            pstrcpy(product_name, PRODUCT_NAME_SZ, fs.product_name);
             return 0;
         }
     }

      parent reply	other threads:[~2006-06-15  7:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-05-22 20:12 [Qemu-devel] [usb] display device identifier string for user with info usb Lonnie Mendez
2006-05-22 20:15 ` Lonnie Mendez
     [not found]   ` <4490367D.605@bellard.org>
2006-06-15  7:52     ` Lonnie Mendez [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1150357931.5338.11.camel@localhost \
    --to=lmendez19@austin.rr.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.