display device identifier string for user with info usb (Lonnie Mendez)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2029 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									3e382bc84c
								
							
						
					
					
						commit
						1f6e24e73c
					
				|  | @ -521,6 +521,8 @@ USBDevice *usb_tablet_init(void) | ||||||
|     s->dev.handle_data = usb_mouse_handle_data; |     s->dev.handle_data = usb_mouse_handle_data; | ||||||
|     s->kind = USB_TABLET; |     s->kind = USB_TABLET; | ||||||
| 
 | 
 | ||||||
|  |     pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Tablet"); | ||||||
|  | 
 | ||||||
|     return (USBDevice *)s; |     return (USBDevice *)s; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -539,5 +541,7 @@ USBDevice *usb_mouse_init(void) | ||||||
|     s->dev.handle_data = usb_mouse_handle_data; |     s->dev.handle_data = usb_mouse_handle_data; | ||||||
|     s->kind = USB_MOUSE; |     s->kind = USB_MOUSE; | ||||||
| 
 | 
 | ||||||
|  |     pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Mouse"); | ||||||
|  | 
 | ||||||
|     return (USBDevice *)s; |     return (USBDevice *)s; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -544,6 +544,8 @@ USBDevice *usb_hub_init(int nb_ports) | ||||||
|     s->dev.handle_control = usb_hub_handle_control; |     s->dev.handle_control = usb_hub_handle_control; | ||||||
|     s->dev.handle_data = usb_hub_handle_data; |     s->dev.handle_data = usb_hub_handle_data; | ||||||
| 
 | 
 | ||||||
|  |     pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Hub"); | ||||||
|  | 
 | ||||||
|     s->nb_ports = nb_ports; |     s->nb_ports = nb_ports; | ||||||
|     for(i = 0; i < s->nb_ports; i++) { |     for(i = 0; i < s->nb_ports; i++) { | ||||||
|         port = &s->ports[i]; |         port = &s->ports[i]; | ||||||
|  |  | ||||||
|  | @ -389,6 +389,9 @@ USBDevice *usb_msd_init(const char *filename) | ||||||
|     s->dev.handle_control = usb_msd_handle_control; |     s->dev.handle_control = usb_msd_handle_control; | ||||||
|     s->dev.handle_data = usb_msd_handle_data; |     s->dev.handle_data = usb_msd_handle_data; | ||||||
| 
 | 
 | ||||||
|  |     snprintf(s->dev.devname, sizeof(s->dev.devname), "QEMU USB MSD(%.16s)", | ||||||
|  |              filename); | ||||||
|  | 
 | ||||||
|     s->scsi_dev = scsi_disk_init(bdrv, usb_msd_command_complete, s); |     s->scsi_dev = scsi_disk_init(bdrv, usb_msd_command_complete, s); | ||||||
|     usb_msd_handle_reset((USBDevice *)s, 0); |     usb_msd_handle_reset((USBDevice *)s, 0); | ||||||
|     return (USBDevice *)s; |     return (USBDevice *)s; | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								hw/usb.h
								
								
								
								
							
							
						
						
									
										1
									
								
								hw/usb.h
								
								
								
								
							|  | @ -128,6 +128,7 @@ struct USBDevice { | ||||||
|     int (*handle_data)(USBDevice *dev, int pid, uint8_t devep, |     int (*handle_data)(USBDevice *dev, int pid, uint8_t devep, | ||||||
|                        uint8_t *data, int len); |                        uint8_t *data, int len); | ||||||
|     uint8_t addr; |     uint8_t addr; | ||||||
|  |     char devname[32]; | ||||||
|      |      | ||||||
|     int state; |     int state; | ||||||
|     uint8_t setup_buf[8]; |     uint8_t setup_buf[8]; | ||||||
|  |  | ||||||
							
								
								
									
										30
									
								
								usb-linux.c
								
								
								
								
							
							
						
						
									
										30
									
								
								usb-linux.c
								
								
								
								
							|  | @ -44,11 +44,13 @@ typedef int USBScanFunc(void *opaque, int bus_num, int addr, int class_id, | ||||||
|                         int vendor_id, int product_id,  |                         int vendor_id, int product_id,  | ||||||
|                         const char *product_name, int speed); |                         const char *product_name, int speed); | ||||||
| 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, int product_name_size, | ||||||
|                                 const char *devname); |                                 const char *devname); | ||||||
| 
 | 
 | ||||||
| //#define DEBUG
 | //#define DEBUG
 | ||||||
| 
 | 
 | ||||||
| #define USBDEVFS_PATH "/proc/bus/usb" | #define USBDEVFS_PATH "/proc/bus/usb" | ||||||
|  | #define PRODUCT_NAME_SZ 32 | ||||||
| 
 | 
 | ||||||
| typedef struct USBHostDevice { | typedef struct USBHostDevice { | ||||||
|     USBDevice dev; |     USBDevice dev; | ||||||
|  | @ -145,8 +147,11 @@ USBDevice *usb_host_device_open(const char *devname) | ||||||
|     char buf[1024]; |     char buf[1024]; | ||||||
|     int descr_len, dev_descr_len, config_descr_len, nb_interfaces; |     int descr_len, dev_descr_len, config_descr_len, nb_interfaces; | ||||||
|     int bus_num, addr; |     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, sizeof(product_name), | ||||||
|  |                              devname) < 0)  | ||||||
|         return NULL; |         return NULL; | ||||||
|      |      | ||||||
|     snprintf(buf, sizeof(buf), USBDEVFS_PATH "/%03d/%03d",  |     snprintf(buf, sizeof(buf), USBDEVFS_PATH "/%03d/%03d",  | ||||||
|  | @ -230,6 +235,14 @@ USBDevice *usb_host_device_open(const char *devname) | ||||||
|     dev->dev.handle_reset = usb_host_handle_reset; |     dev->dev.handle_reset = usb_host_handle_reset; | ||||||
|     dev->dev.handle_control = usb_host_handle_control; |     dev->dev.handle_control = usb_host_handle_control; | ||||||
|     dev->dev.handle_data = usb_host_handle_data; |     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; |     return (USBDevice *)dev; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -337,6 +350,7 @@ typedef struct FindDeviceState { | ||||||
|     int product_id; |     int product_id; | ||||||
|     int bus_num; |     int bus_num; | ||||||
|     int addr; |     int addr; | ||||||
|  |     char product_name[PRODUCT_NAME_SZ]; | ||||||
| } FindDeviceState; | } FindDeviceState; | ||||||
| 
 | 
 | ||||||
| static int usb_host_find_device_scan(void *opaque, int bus_num, int addr,  | static int usb_host_find_device_scan(void *opaque, int bus_num, int addr,  | ||||||
|  | @ -345,8 +359,11 @@ static int usb_host_find_device_scan(void *opaque, int bus_num, int addr, | ||||||
|                                      const char *product_name, int speed) |                                      const char *product_name, int speed) | ||||||
| { | { | ||||||
|     FindDeviceState *s = opaque; |     FindDeviceState *s = opaque; | ||||||
|     if (vendor_id == s->vendor_id && |     if ((vendor_id == s->vendor_id && | ||||||
|         product_id == s->product_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->bus_num = bus_num; | ||||||
|         s->addr = addr; |         s->addr = addr; | ||||||
|         return 1; |         return 1; | ||||||
|  | @ -359,6 +376,7 @@ static int usb_host_find_device_scan(void *opaque, int bus_num, int addr, | ||||||
|    'bus.addr' (decimal numbers) or  |    'bus.addr' (decimal numbers) or  | ||||||
|    'vendor_id:product_id' (hexa numbers) */ |    '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, int product_name_size, | ||||||
|                                 const char *devname) |                                 const char *devname) | ||||||
| { | { | ||||||
|     const char *p; |     const char *p; | ||||||
|  | @ -369,6 +387,11 @@ static int usb_host_find_device(int *pbus_num, int *paddr, | ||||||
|     if (p) { |     if (p) { | ||||||
|         *pbus_num = strtoul(devname, NULL, 0); |         *pbus_num = strtoul(devname, NULL, 0); | ||||||
|         *paddr = strtoul(p + 1, 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_size, fs.product_name); | ||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
|     p = strchr(devname, ':'); |     p = strchr(devname, ':'); | ||||||
|  | @ -379,6 +402,7 @@ static int usb_host_find_device(int *pbus_num, int *paddr, | ||||||
|         if (ret) { |         if (ret) { | ||||||
|             *pbus_num = fs.bus_num; |             *pbus_num = fs.bus_num; | ||||||
|             *paddr = fs.addr; |             *paddr = fs.addr; | ||||||
|  |             pstrcpy(product_name, product_name_size, fs.product_name); | ||||||
|             return 0; |             return 0; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 bellard
						bellard