* [Qemu-devel] [usb] display device identifier string for user with info usb @ 2006-05-22 20:12 Lonnie Mendez 2006-05-22 20:15 ` Lonnie Mendez 0 siblings, 1 reply; 3+ messages in thread From: Lonnie Mendez @ 2006-05-22 20:12 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 316 bytes --] 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. [-- Attachment #2: qemu-info-usb.diff --] [-- Type: text/plain, Size: 4031 bytes --] --- 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; } } ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [usb] display device identifier string for user with info usb 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> 0 siblings, 1 reply; 3+ messages in thread From: Lonnie Mendez @ 2006-05-22 20:15 UTC (permalink / raw) To: qemu-devel [-- Attachment #1: Type: text/plain, Size: 65 bytes --] Whoops. Wrong patch - missing 1 chunk - please see attached. [-- Attachment #2: qemu-info-usb.diff --] [-- Type: text/plain, Size: 4461 bytes --] --- 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; } } --- qemu/vl.c 2006-05-21 11:30:15.000000000 -0500 +++ qemu/vl.c 2006-05-22 14:49:58.000000000 -0500 @@ -3387,8 +3422,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); } } ^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <4490367D.605@bellard.org>]
* Re: [Qemu-devel] [usb] display device identifier string for user with info usb [not found] ` <4490367D.605@bellard.org> @ 2006-06-15 7:52 ` Lonnie Mendez 0 siblings, 0 replies; 3+ messages in thread From: Lonnie Mendez @ 2006-06-15 7:52 UTC (permalink / raw) To: qemu-devel [-- 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; } } ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2006-06-15 7:52 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 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 is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).