diff options
author | Greg Kroah-Hartman <greg@kroah.com> | 2018-11-26 16:46:04 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-26 16:46:04 +0100 |
commit | cd8dfb692713858774989f9c12697180d56c345c (patch) | |
tree | 1bb3c3916a123e846f4f400d28fe0186ca68761a | |
parent | 3b4a2bfc223c023844c5349f3cfdb79bb6065647 (diff) | |
parent | b4c4da290d38fde8f4c8779e3e9fe7deae8867cf (diff) | |
download | usbutils-cd8dfb692713858774989f9c12697180d56c345c.tar.gz |
Merge pull request #75 from dlitz/lsusb-verbose-tree
lsusb-t: Emit USB IDs and other handy info when verbosity is increased
-rw-r--r-- | lsusb-t.c | 31 | ||||
-rw-r--r-- | lsusb.c | 4 | ||||
-rw-r--r-- | lsusb.h | 1 |
3 files changed, 31 insertions, 5 deletions
@@ -80,9 +80,12 @@ struct usbbusnode { unsigned int bDeviceClass; unsigned int devnum; + unsigned int idProduct; + unsigned int idVendor; unsigned int maxchild; char speed[5 + 1]; /* '1.5','12','480','5000' + '\n' */ + char name[MY_SYSFS_FILENAME_LEN]; char driver[MY_SYSFS_FILENAME_LEN]; }; @@ -135,13 +138,23 @@ static const char *bDeviceClass_to_str(unsigned int dc) } static void print_usbbusnode(struct usbbusnode *b) { + char vendor[128], product[128]; printf("/: Bus %02u.Port %u: Dev %u, Class=%s, Driver=%s/%up, %sM\n", b->busnum, 1, b->devnum, bDeviceClass_to_str(b->bDeviceClass), b->driver, b->maxchild, b->speed); + if (verblevel >= 1) { + get_vendor_string(vendor, sizeof(vendor), b->idVendor); + get_product_string(product, sizeof(product), b->idVendor, b->idProduct); + printf(" ID %04x:%04x %s %s\n", b->idVendor, b->idProduct, vendor, product); + } + if (verblevel >= 2) { + printf(" %s/%s /dev/bus/usb/%03d/%03d\n", sys_bus_usb_devices, b->name, b->busnum, b->devnum); + } } static void print_usbdevice(struct usbdevice *d, struct usbinterface *i) { char subcls[128]; + char vendor[128], product[128]; get_class_string(subcls, sizeof(subcls), i->bInterfaceClass); @@ -151,6 +164,16 @@ static void print_usbdevice(struct usbdevice *d, struct usbinterface *i) else printf("Port %u: Dev %u, If %u, Class=%s, Driver=%s, %sM\n", d->portnum, d->devnum, i->ifnum, subcls, i->driver, d->speed); + if (verblevel >= 1) { + printf(" %*s", indent, " "); + get_vendor_string(vendor, sizeof(vendor), d->idVendor); + get_product_string(product, sizeof(product), d->idVendor, d->idProduct); + printf("ID %04x:%04x %s %s\n", d->idVendor, d->idProduct, vendor, product); + } + if (verblevel >= 2) { + printf(" %*s", indent, " "); + printf("%s/%s /dev/bus/usb/%03d/%03d\n", sys_bus_usb_devices, d->name, d->busnum, d->devnum); + } } static unsigned int read_sysfs_file_int(const char *d_name, const char *file, int base) @@ -290,7 +313,7 @@ static void add_usb_interface(const char *d_name) } e->ifnum = i; if (snprintf(e->name, MY_SYSFS_FILENAME_LEN, "%s", d_name) >= MY_SYSFS_FILENAME_LEN) - printf("warning: '%s' truncated to '%s'\n", e->name, d_name); + printf("warning: '%s' truncated to '%s'\n", d_name, e->name); SYSFS_INTu(d_name, e, bAlternateSetting); SYSFS_INTx(d_name, e, bInterfaceClass); SYSFS_INTx(d_name, e, bInterfaceNumber); @@ -339,7 +362,7 @@ static void add_usb_device(const char *d_name) d->portnum = i; } if (snprintf(d->name, MY_SYSFS_FILENAME_LEN, "%s", d_name) >= MY_SYSFS_FILENAME_LEN) - printf("warning: '%s' truncated to '%s'\n", d->name, d_name); + printf("warning: '%s' truncated to '%s'\n", d_name, d->name); SYSFS_INTu(d_name, d, bConfigurationValue); SYSFS_INTx(d_name, d, bDeviceClass); SYSFS_INTx(d_name, d, bDeviceProtocol); @@ -404,8 +427,12 @@ static void add_usb_bus(const char *d_name) if (bus) { memset(bus, 0, sizeof(struct usbbusnode)); bus->busnum = strtoul(d_name + 3, NULL, 10); + if (snprintf(bus->name, MY_SYSFS_FILENAME_LEN, "%s", d_name) >= MY_SYSFS_FILENAME_LEN) + printf("warning: '%s' truncated to '%s'\n", d_name, bus->name); SYSFS_INTu(d_name, bus, devnum); SYSFS_INTx(d_name, bus, bDeviceClass); + SYSFS_INTx(d_name, bus, idProduct); + SYSFS_INTx(d_name, bus, idVendor); SYSFS_INTu(d_name, bus, maxchild); SYSFS_STR(d_name, bus, speed); append_busnode(bus); @@ -116,7 +116,7 @@ #define WEBUSB_GET_URL 0x02 #define USB_DT_WEBUSB_URL 0x03 -static unsigned int verblevel = VERBLEVEL_DEFAULT; +unsigned int verblevel = VERBLEVEL_DEFAULT; static int do_report_desc = 1; static const char * const encryption_type[] = { "UNSECURE", @@ -3842,8 +3842,6 @@ int main(int argc, char *argv[]) status = 0; if (treemode) { - /* treemode requires at least verblevel 1 */ - verblevel += 1 - VERBLEVEL_DEFAULT; status = lsusb_t(); names_exit(); return status; @@ -4,5 +4,6 @@ #define _LSUSB_H extern int lsusb_t(void); +extern unsigned int verblevel; #endif |