diff options
author | thompsa <thompsa@FreeBSD.org> | 2009-11-02 23:50:12 +0000 |
---|---|---|
committer | thompsa <thompsa@FreeBSD.org> | 2009-11-02 23:50:12 +0000 |
commit | 5e263c781eb6e64229b17c9669cb0cd5a405406e (patch) | |
tree | 4d31102a3abb58ab40a0745cffbabe4d81a25bd0 /usr.sbin | |
parent | 8bc2cf3863431c214eda6bec7dab1f676d348f0b (diff) | |
download | FreeBSD-src-5e263c781eb6e64229b17c9669cb0cd5a405406e.zip FreeBSD-src-5e263c781eb6e64229b17c9669cb0cd5a405406e.tar.gz |
Add more verbose output when dumping the configuration descriptor.
Submitted by: Hans Petter Selasky
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/usbconfig/dump.c | 69 |
1 files changed, 57 insertions, 12 deletions
diff --git a/usr.sbin/usbconfig/dump.c b/usr.sbin/usbconfig/dump.c index 6a2fd02..6dfc6ec 100644 --- a/usr.sbin/usbconfig/dump.c +++ b/usr.sbin/usbconfig/dump.c @@ -100,21 +100,66 @@ dump_field(struct libusb20_device *pdev, const char *plevel, printf("%s%s = 0x%04x ", plevel, field, value); - if ((field[0] != 'i') || (field[1] == 'd')) { - printf("\n"); - return; - } - if (value == 0) { - printf(" <no string>\n"); - return; + if (strlen(plevel) == 8) { + /* Endpoint Descriptor */ + + if (strcmp(field, "bEndpointAddress") == 0) { + if (value & 0x80) + printf(" <IN>\n"); + else + printf(" <OUT>\n"); + return; + } + + if (strcmp(field, "bmAttributes") == 0) { + switch (value & 0x03) { + case 0: + printf(" <CONTROL>\n"); + break; + case 1: + switch (value & 0x0C) { + case 0x00: + printf(" <ISOCHRONOUS>\n"); + break; + case 0x04: + printf(" <ASYNC-ISOCHRONOUS>\n"); + break; + case 0x08: + printf(" <ADAPT-ISOCHRONOUS>\n"); + break; + default: + printf(" <SYNC-ISOCHRONOUS>\n"); + break; + } + break; + case 2: + printf(" <BULK>\n"); + break; + default: + printf(" <INTERRUPT>\n"); + break; + } + return; + } } - if (libusb20_dev_req_string_simple_sync(pdev, value, - temp_string, sizeof(temp_string))) { - printf(" <retrieving string failed>\n"); + + if ((field[0] == 'i') && (field[1] != 'd')) { + /* Indirect String Descriptor */ + if (value == 0) { + printf(" <no string>\n"); + return; + } + if (libusb20_dev_req_string_simple_sync(pdev, value, + temp_string, sizeof(temp_string))) { + printf(" <retrieving string failed>\n"); + return; + } + printf(" <%s>\n", temp_string); return; } - printf(" <%s>\n", temp_string); - return; + + /* No additional information */ + printf("\n"); } static void |