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