diff options
| author | cvs2svn <cvs2svn@FreeBSD.org> | 2005-04-20 19:11:07 +0000 |
|---|---|---|
| committer | cvs2svn <cvs2svn@FreeBSD.org> | 2005-04-20 19:11:07 +0000 |
| commit | 79c906b55063e4f0f0d3281363970da4e619cf56 (patch) | |
| tree | 09cc3ca07e7d7250dd9d9d550c76eacaf462ca91 /usr.sbin/usbdevs | |
| parent | 7b100a2efc2b0855b788d000f7b2215fb73a5221 (diff) | |
| parent | 1e4e7f70c04a80eee7cfe0ecc6787272a43ba8bc (diff) | |
Notes
Diffstat (limited to 'usr.sbin/usbdevs')
| -rw-r--r-- | usr.sbin/usbdevs/Makefile | 9 | ||||
| -rw-r--r-- | usr.sbin/usbdevs/usbdevs.8 | 77 | ||||
| -rw-r--r-- | usr.sbin/usbdevs/usbdevs.c | 240 |
3 files changed, 326 insertions, 0 deletions
diff --git a/usr.sbin/usbdevs/Makefile b/usr.sbin/usbdevs/Makefile new file mode 100644 index 0000000000000..985bc7a61ab50 --- /dev/null +++ b/usr.sbin/usbdevs/Makefile @@ -0,0 +1,9 @@ +# $NetBSD: Makefile,v 1.2 1998/07/12 20:40:45 augustss Exp $ +# FreeBSD $FreeBSD$ + +PROG= usbdevs +MAN= usbdevs.8 + +WARNS?= 2 + +.include <bsd.prog.mk> diff --git a/usr.sbin/usbdevs/usbdevs.8 b/usr.sbin/usbdevs/usbdevs.8 new file mode 100644 index 0000000000000..3226dd5bd6589 --- /dev/null +++ b/usr.sbin/usbdevs/usbdevs.8 @@ -0,0 +1,77 @@ +.\" $NetBSD: usbdevs.8,v 1.5 2000/10/15 12:44:11 bjh21 Exp $ +.\" Copyright (c) 1999 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" Author: Lennart Augustsson +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the NetBSD +.\" Foundation, Inc. and its contributors. +.\" 4. Neither the name of The NetBSD Foundation nor the names of its +.\" contributors may be used to endorse or promote products derived +.\" from this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd May 24, 2004 +.Dt USBDEVS 8 +.Os +.Sh NAME +.Nm usbdevs +.Nd show USB devices connected to the system +.Sh SYNOPSIS +.Nm +.Op Fl a Ar addr +.Op Fl d +.Op Fl f Ar dev +.Op Fl o +.Op Fl v +.Sh DESCRIPTION +The +.Nm +utility prints a listing of all USB devices connected to the system +with some information about each device. +The indentation of each line indicates its distance from the root. +.Pp +The options are as follows: +.Bl -tag -width ".Fl a Ar addr" +.It Fl a Ar addr +only print information about the device at the given address. +.It Fl d +Show the device drivers associated with each device. +.It Fl f Ar dev +only print information for the given USB controller. +.It Fl o +One-line output (only useful in combination with +.Fl d ) . +.It Fl v +Be verbose. +.El +.Sh SEE ALSO +.Xr usb 4 +.Sh HISTORY +The +.Nm +utility appeared in +.Nx 1.4 . diff --git a/usr.sbin/usbdevs/usbdevs.c b/usr.sbin/usbdevs/usbdevs.c new file mode 100644 index 0000000000000..640dd512f7f29 --- /dev/null +++ b/usr.sbin/usbdevs/usbdevs.c @@ -0,0 +1,240 @@ +/* $NetBSD: usbdevs.c,v 1.22 2003/11/12 13:31:08 grant Exp $ */ +/* $FreeBSD$ */ + +/* + * Copyright (c) 1998 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Lennart Augustsson (augustss@NetBSD.org). + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> +#include <fcntl.h> +#include <unistd.h> +#include <err.h> +#include <errno.h> +#include <dev/usb/usb.h> +#if defined(__FreeBSD__) +#include <sys/ioctl.h> +#endif + +#define USBDEV "/dev/usb" + +int verbose = 0; +int showdevs = 0; +int oneline = 0; + +void usage(void); +void usbdev(int f, int a, int rec); +void usbdump(int f); +void dumpone(char *name, int f, int addr); +int main(int, char **); + +void +usage() +{ + fprintf(stderr, "usage: %s [-a addr] [-d] [-f dev] [-v]\n", + getprogname()); + exit(1); +} + +char done[USB_MAX_DEVICES]; +int indent; + +void +usbdev(int f, int a, int rec) +{ + struct usb_device_info di; + int e, p, i; + + di.udi_addr = a; + e = ioctl(f, USB_DEVICEINFO, &di); + if (e) { + if (errno != ENXIO) + printf("addr %d: I/O error\n", a); + return; + } + printf("addr %d: ", a); + done[a] = 1; + if (verbose) { + switch (di.udi_speed) { + case USB_SPEED_LOW: printf("low speed, "); break; + case USB_SPEED_FULL: printf("full speed, "); break; + case USB_SPEED_HIGH: printf("high speed, "); break; + default: break; + } + if (di.udi_power) + printf("power %d mA, ", di.udi_power); + else + printf("self powered, "); + if (di.udi_config) + printf("config %d, ", di.udi_config); + else + printf("unconfigured, "); + } + if (verbose) { + printf("%s(0x%04x), %s(0x%04x), rev %s", + di.udi_product, di.udi_productNo, + di.udi_vendor, di.udi_vendorNo, di.udi_release); + } else + printf("%s, %s", di.udi_product, di.udi_vendor); + if (!oneline) + printf("\n"); + if (showdevs) { + for (i = 0; i < USB_MAX_DEVNAMES; i++) { + if (di.udi_devnames[i][0]) { + if (oneline) + printf(", device %s", + di.udi_devnames[i]); + else + printf("%*s %s\n", indent, "", + di.udi_devnames[i]); + } + } + } + if (oneline) + printf("\n"); + if (!rec) + return; + for (p = 0; p < di.udi_nports; p++) { + int s = di.udi_ports[p]; + if (s >= USB_MAX_DEVICES) { + if (verbose) { + printf("%*sport %d %s\n", indent+1, "", p+1, + s == USB_PORT_ENABLED ? "enabled" : + s == USB_PORT_SUSPENDED ? "suspended" : + s == USB_PORT_POWERED ? "powered" : + s == USB_PORT_DISABLED ? "disabled" : + "???"); + + } + continue; + } + indent++; + printf("%*s", indent, ""); + if (verbose) + printf("port %d ", p+1); + if (s == 0) + printf("addr 0 should never happen!\n"); + else + usbdev(f, s, 1); + indent--; + } +} + +void +usbdump(int f) +{ + int a; + + for (a = 1; a < USB_MAX_DEVICES; a++) { + if (!done[a]) + usbdev(f, a, 1); + } +} + +void +dumpone(char *name, int f, int addr) +{ + if (verbose) + printf("Controller %s:\n", name); + indent = 0; + memset(done, 0, sizeof done); + if (addr) + usbdev(f, addr, 0); + else + usbdump(f); +} + +int +main(int argc, char **argv) +{ + int ch, i, f; + char buf[50]; + char *dev = 0; + int addr = 0; + int ncont; + + while ((ch = getopt(argc, argv, "a:df:ov?")) != -1) { + switch(ch) { + case 'a': + addr = atoi(optarg); + break; + case 'd': + showdevs++; + break; + case 'f': + dev = optarg; + break; + case 'o': + oneline++; + break; + case 'v': + verbose = 1; + break; + case '?': + default: + usage(); + } + } + argc -= optind; + argv += optind; + + if (dev == 0) { + for (ncont = 0, i = 0; i < 10; i++) { + snprintf(buf, sizeof(buf), "%s%d", USBDEV, i); + f = open(buf, O_RDONLY); + if (f >= 0) { + dumpone(buf, f, addr); + close(f); + } else { + if (errno == ENOENT || errno == ENXIO) + continue; + warn("%s", buf); + } + ncont++; + } + if (verbose && ncont == 0) + printf("%s: no USB controllers found\n", + getprogname()); + } else { + f = open(dev, O_RDONLY); + if (f >= 0) + dumpone(dev, f, addr); + else + err(1, "%s", dev); + } + exit(0); +} |
