Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.sbin/usbdevs Print release also in hex.



details:   https://anonhg.NetBSD.org/src/rev/9031745190b9
branches:  trunk
changeset: 346110:9031745190b9
user:      mlelstv <mlelstv%NetBSD.org@localhost>
date:      Sun Jun 26 07:10:24 2016 +0000

description:
Print release also in hex.
Print device class information if -v is used twice.

diffstat:

 usr.sbin/usbdevs/usbdevs.8 |    4 +-
 usr.sbin/usbdevs/usbdevs.c |  120 +++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 118 insertions(+), 6 deletions(-)

diffs (180 lines):

diff -r 74717272ea1f -r 9031745190b9 usr.sbin/usbdevs/usbdevs.8
--- a/usr.sbin/usbdevs/usbdevs.8        Sun Jun 26 07:09:24 2016 +0000
+++ b/usr.sbin/usbdevs/usbdevs.8        Sun Jun 26 07:10:24 2016 +0000
@@ -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 @@
 .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
diff -r 74717272ea1f -r 9031745190b9 usr.sbin/usbdevs/usbdevs.c
--- a/usr.sbin/usbdevs/usbdevs.c        Sun Jun 26 07:09:24 2016 +0000
+++ b/usr.sbin/usbdevs/usbdevs.c        Sun Jun 26 07:10:24 2016 +0000
@@ -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 @@
        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 @@
        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 @@
                        dev = optarg;
                        break;
                case 'v':
-                       verbose = 1;
+                       verbose++;
                        break;
                case '?':
                default:



Home | Main Index | Thread Index | Old Index