Module Name: src Committed By: mlelstv Date: Sun Jun 26 07:10:24 UTC 2016
Modified Files: src/usr.sbin/usbdevs: usbdevs.8 usbdevs.c Log Message: Print release also in hex. Print device class information if -v is used twice. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/usr.sbin/usbdevs/usbdevs.8 cvs rdiff -u -r1.31 -r1.32 src/usr.sbin/usbdevs/usbdevs.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/usbdevs/usbdevs.8 diff -u src/usr.sbin/usbdevs/usbdevs.8:1.9 src/usr.sbin/usbdevs/usbdevs.8:1.10 --- src/usr.sbin/usbdevs/usbdevs.8:1.9 Mon Aug 15 14:31:24 2011 +++ src/usr.sbin/usbdevs/usbdevs.8 Sun Jun 26 07:10:24 2016 @@ -1,4 +1,4 @@ -.\" $NetBSD: usbdevs.8,v 1.9 2011/08/15 14:31:24 wiz Exp $ +.\" $NetBSD: usbdevs.8,v 1.10 2016/06/26 07:10:24 mlelstv Exp $ .\" .\" Copyright (c) 1999 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -53,7 +53,7 @@ Show the device drivers associated with .It Fl f Ar dev Only print information for the given USB controller. .It Fl v -Be verbose. +Be verbose, more information is given if used twice. .El .Sh FILES .Bl -tag -width Pa Index: src/usr.sbin/usbdevs/usbdevs.c diff -u src/usr.sbin/usbdevs/usbdevs.c:1.31 src/usr.sbin/usbdevs/usbdevs.c:1.32 --- src/usr.sbin/usbdevs/usbdevs.c:1.31 Tue Aug 12 13:40:07 2014 +++ src/usr.sbin/usbdevs/usbdevs.c Sun Jun 26 07:10:24 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: usbdevs.c,v 1.31 2014/08/12 13:40:07 skrll Exp $ */ +/* $NetBSD: usbdevs.c,v 1.32 2016/06/26 07:10:24 mlelstv Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -47,7 +47,13 @@ static int verbose = 0; static int showdevs = 0; +struct stringtable { + int row, col; + const char *string; +}; + __dead static void usage(void); +static void getstrings(const struct stringtable *, int, int, const char **, const char **); static void usbdev(int f, int a, int rec); static void usbdump(int f); static void dumpone(char *name, int f, int addr); @@ -92,6 +98,104 @@ u2t(const char *utf8str, char *termstr) strcpy(termstr, "(invalid)"); } +struct stringtable class_strings[] = { + { UICLASS_UNSPEC, -1, "Unspecified" }, + + { UICLASS_AUDIO, -1, "Audio" }, + { UICLASS_AUDIO, UISUBCLASS_AUDIOCONTROL, "Audio Control" }, + { UICLASS_AUDIO, UISUBCLASS_AUDIOSTREAM, "Audio Streaming" }, + { UICLASS_AUDIO, UISUBCLASS_MIDISTREAM, "MIDI Streaming" }, + + { UICLASS_CDC, -1, "Communications and CDC Control" }, + { UICLASS_CDC, UISUBCLASS_DIRECT_LINE_CONTROL_MODEL, "Direct Line" }, + { UICLASS_CDC, UISUBCLASS_ABSTRACT_CONTROL_MODEL, "Abstract" }, + { UICLASS_CDC, UISUBCLASS_TELEPHONE_CONTROL_MODEL, "Telephone" }, + { UICLASS_CDC, UISUBCLASS_MULTICHANNEL_CONTROL_MODEL, "Multichannel" }, + { UICLASS_CDC, UISUBCLASS_CAPI_CONTROLMODEL, "CAPI" }, + { UICLASS_CDC, UISUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL, "Ethernet Networking" }, + { UICLASS_CDC, UISUBCLASS_ATM_NETWORKING_CONTROL_MODEL, "ATM Networking" }, + + { UICLASS_HID, -1, "Human Interface Device" }, + { UICLASS_HID, UISUBCLASS_BOOT, "Boot" }, + + { UICLASS_PHYSICAL, -1, "Physical" }, + + { UICLASS_IMAGE, -1, "Image" }, + + { UICLASS_PRINTER, -1, "Printer" }, + { UICLASS_PRINTER, UISUBCLASS_PRINTER, "Printer" }, + + { UICLASS_MASS, -1, "Mass Storage" }, + { UICLASS_MASS, UISUBCLASS_RBC, "RBC" }, + { UICLASS_MASS, UISUBCLASS_SFF8020I, "SFF8020I" }, + { UICLASS_MASS, UISUBCLASS_QIC157, "QIC157" }, + { UICLASS_MASS, UISUBCLASS_UFI, "UFI" }, + { UICLASS_MASS, UISUBCLASS_SFF8070I, "SFF8070I" }, + { UICLASS_MASS, UISUBCLASS_SCSI, "SCSI" }, + { UICLASS_MASS, UISUBCLASS_SCSI, "SCSI" }, + + { UICLASS_HUB, -1, "Hub" }, + { UICLASS_HUB, UISUBCLASS_HUB, "Hub" }, + + { UICLASS_CDC_DATA, -1, "CDC-Data" }, + { UICLASS_CDC_DATA, UISUBCLASS_DATA, "Data" }, + + { UICLASS_SMARTCARD, -1, "Smart Card" }, + + { UICLASS_SECURITY, -1, "Content Security" }, + + { UICLASS_VIDEO, -1, "Video" }, + { UICLASS_VIDEO, UISUBCLASS_VIDEOCONTROL, "Video Control" }, + { UICLASS_VIDEO, UISUBCLASS_VIDEOSTREAMING, "Video Streaming" }, + { UICLASS_VIDEO, UISUBCLASS_VIDEOCOLLECTION, "Video Collection" }, + +#ifdef notyet + { UICLASS_HEALTHCARE, -1, "Personal Healthcare" }, + { UICLASS_AVDEVICE, -1, "Audio/Video Device" }, + { UICLASS_BILLBOARD, -1, "Billboard" }, +#endif + + { UICLASS_DIAGNOSTIC, -1, "Diagnostic" }, + { UICLASS_WIRELESS, -1, "Wireless" }, + { UICLASS_WIRELESS, UISUBCLASS_RF, "Radio Frequency" }, + +#ifdef notyet + { UICLASS_MISC, -1, "Miscellaneous" }, +#endif + + { UICLASS_APPL_SPEC, -1, "Application Specific" }, + { UICLASS_APPL_SPEC, UISUBCLASS_FIRMWARE_DOWNLOAD, "Firmware Download" }, + { UICLASS_APPL_SPEC, UISUBCLASS_IRDA, "Irda" }, + + { UICLASS_VENDOR, -1, "Vendor Specific" }, + + { -1, -1, NULL } +}; + +static void +getstrings(const struct stringtable *table, + int row, int col, const char **rp, const char **cp) { + static char rbuf[5], cbuf[5]; + + snprintf(rbuf, sizeof(rbuf), "0x%02x", row); + snprintf(cbuf, sizeof(cbuf), "0x%02x", col); + + *rp = rbuf; + *cp = cbuf; + + while (table->string != NULL) { + if (table->row == row) { + if (table->col == -1) + *rp = table->string; + else if (table->col == col) + *cp = table->string; + } else if (table->row > row) + break; + + ++table; + } +} + static void usbdev(int f, int a, int rec) { @@ -128,14 +232,22 @@ usbdev(int f, int a, int rec) u2t(di.udi_vendor, vendor); u2t(di.udi_serial, serial); if (verbose) { - printf("%s(0x%04x), %s(0x%04x), rev %s", + printf("%s(0x%04x), %s(0x%04x), rev %s(0x%04x)", product, di.udi_productNo, - vendor, di.udi_vendorNo, di.udi_release); + vendor, di.udi_vendorNo, + di.udi_release, di.udi_releaseNo); if (di.udi_serial[0]) printf(", serial %s", serial); } else printf("%s, %s", product, vendor); printf("\n"); + if (verbose > 1 && di.udi_class != UICLASS_UNSPEC) { + const char *cstr, *sstr; + getstrings(class_strings, di.udi_class, di.udi_subclass, &cstr, &sstr); + printf("%*s %s(0x%02x), %s(0x%02x), proto %u\n", indent, "", + cstr, di.udi_class, sstr, di.udi_subclass, + di.udi_protocol); + } if (showdevs) { for (i = 0; i < USB_MAX_DEVNAMES; i++) if (di.udi_devnames[i][0]) @@ -215,7 +327,7 @@ main(int argc, char **argv) dev = optarg; break; case 'v': - verbose = 1; + verbose++; break; case '?': default: