summaryrefslogtreecommitdiff
path: root/usbutils
diff options
context:
space:
mode:
Diffstat (limited to 'usbutils')
-rw-r--r--usbutils/usbutils-0.11+cvs20041108/usbutils-0.11+cvs20041108.patch7817
1 files changed, 7817 insertions, 0 deletions
diff --git a/usbutils/usbutils-0.11+cvs20041108/usbutils-0.11+cvs20041108.patch b/usbutils/usbutils-0.11+cvs20041108/usbutils-0.11+cvs20041108.patch
index e69de29bb2..1898eaef4b 100644
--- a/usbutils/usbutils-0.11+cvs20041108/usbutils-0.11+cvs20041108.patch
+++ b/usbutils/usbutils-0.11+cvs20041108/usbutils-0.11+cvs20041108.patch
@@ -0,0 +1,7817 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- usbutils-0.11/ChangeLog~usbutils-0.11+cvs20041108
++++ usbutils-0.11/ChangeLog
+@@ -1,3 +1,30 @@
++2004-10-20 David Brownell <dbrownell@users.sourceforge.net>
++ * lsusb.c: minor formatting updates; add a warning when those HID
++ descriptors aren't available.
++
++2004-10-20 Aurelien Jarno <aurelien@aurel32.net>
++ * lsusb.c: bugfixes for reading HID descriptors
++
++2004-10-15 David Brownell <dbrownell@users.sourceforge.net>
++ * lsusb.c: USB 2.0 updates for dual-speed and OTG devices, hubs.
++ Display all descriptors in the right sequence, and dump ones
++ we don't (yet) recognize. Minor cleanups.
++ * usb.ids: update to current version
++
++2004-02-20 Thomas Sailer <sailer@eldrich.ee.ethz.ch>
++ Move to CVS at linux-usb.sf.net
++ Label as version 0.12.
++
++2003-12-06 Aurelien Jarno <aurelien@aurel32.net>
++ Update Debian with libusb based version.
++
++2003-08-31 David Brownell <dbrownell@users.sourceforge.net>
++ * lsusb.c: (against 0.11) recognize CDC descriptors, USB 2.0 updates,
++ string handling updates,
++
++2003-??-?? Aurelien Jarno <aurelien@aurel32.net>
++ Convert to latest libusb, supporting BSD and Darwin.
++
+ 2000-11-06 Thomas Sailer <sailer@eldrich.ee.ethz.ch>
+
+ * names.c, lsusb.c: Fixup of Gunther Mayer's patch; do not export
+--- usbutils-0.11/Makefile.am~usbutils-0.11+cvs20041108
++++ usbutils-0.11/Makefile.am
+@@ -1,19 +1,20 @@
+-SUBDIRS = libusb
++SUBDIRS =
+
+ INCLUDES =
+
+ sbin_PROGRAMS = lsusb usbmodules
++sbin_SCRIPTS = update-usbids
+
+-noinst_HEADERS = names.h usb.h usbdevice_fs.h devtree.h list.h usbmodules.h
++noinst_HEADERS = names.h usbdevice_fs.h devtree.h list.h usbmodules.h usbmisc.h
+
+-lsusb_SOURCES = lsusb.c names.c devtree.c
++lsusb_SOURCES = lsusb.c names.c devtree.c usbmisc.c
+ lsusb_LDADD = @LIBOBJS@
+
+-usbmodules_SOURCES = usbmodules.c
++usbmodules_SOURCES = usbmodules.c usbmisc.c
+ usbmodules_LDADD = @LIBOBJS@
+
+ data_DATA = usb.ids
+
+-man_MANS = lsusb.8 usbmodules.8
++man_MANS = lsusb.8 usbmodules.8 update-usbids.8
+
+ EXTRA_DIST = $(man_MANS) $(data_DATA) usbutils.spec getopt.h getopt.c getopt1.c
+--- usbutils-0.11/NEWS~usbutils-0.11+cvs20041108
++++ usbutils-0.11/NEWS
+@@ -1 +1,2 @@
+-Created :)
++Thanks to a patch from Aurelien Jarno, usbutils now uses libusb to
++access USB devices
+--- usbutils-0.11/configure.in~usbutils-0.11+cvs20041108
++++ usbutils-0.11/configure.in
+@@ -1,40 +1,75 @@
+-AC_INIT(lsusb.c)
+-AC_CANONICAL_SYSTEM
++dnl Process this file with autoconf to produce a configure script.
+
+-AM_INIT_AUTOMAKE(usbutils, 0.11)
++# Initialization
++AC_INIT(Makefile.am)
+ AM_CONFIG_HEADER(config.h)
+
+-dnl AC_CHECK_TOOL()
++AM_INIT_AUTOMAKE(usbutils, 0.12)
+
+-AC_PROG_MAKE_SET
+-AC_ISC_POSIX
++# determine the system type
++AC_CANONICAL_HOST
++
++# build time sanity check...
++AM_SANITY_CHECK
++
++# checks for programs
+ AC_PROG_CC
+-AM_PROG_CC_STDC
+-dnl AC_PROG_RANLIB
++AC_PROG_RANLIB
++AC_PROG_LN_S
++AC_PROG_INSTALL
++
++# checks for header files
++AC_HEADER_STDC
++AC_CHECK_HEADERS(getopt.h sys/ioctl.h syslog.h errno.h)
++
++# checks for typedefs, structures, and compiler characteristics
+ AC_C_CONST
+ AC_C_INLINE
+-AC_HEADER_STDC
++AC_STRUCT_TM
+
+-AC_CHECK_PROG(RANLIB, ranlib, ranlib, :)
+-AC_CHECK_PROG(DLLTOOL, dlltool, dlltool, dlltool)
+-AC_CHECK_PROG(AS, as, as, as, as)
+-AC_CHECK_PROG(AR, ar, ar, ar, ar)
++# checks for library functions
++AC_CHECK_FUNCS([getopt_long],,[AC_LIBOBJ([getopt]) AC_LIBOBJ([getopt1])])
+
+-AC_CHECK_HEADERS(getopt.h sys/ioctl.h syslog.h errno.h linux/usb.h linux/usbdevice_fs.h)
+-AC_CHECK_FUNCS(getopt_long,,LIBOBJS="$LIBOBJS getopt.o getopt1.o")
++dnl checks for libusb-config
++AC_CHECK_PROG(LIBUSB_CONFIG, libusb-config, yes, no)
++if test "$LIBUSB_CONFIG" = "yes"; then
++ LIBUSB_LDFLAGS=`libusb-config --libs`
++ LIBUSB_CFLAGS=`libusb-config --cflags`
++ LIBUSB_VERSION=`libusb-config --version`
++else
++ AC_MSG_ERROR([libusb not found!])
++fi
++
+
+ dnl set USBIDS_FILE in config.h.
+ if test "x${datadir}" = 'x${prefix}/share'; then
+ if test "x${prefix}" = "xNONE"; then
+- AC_DEFINE_UNQUOTED(USBIDS_FILE, "${ac_default_prefix}/share/usb.ids")
++ AC_DEFINE_UNQUOTED(USBIDS_FILE, "${ac_default_prefix}/share/usb.ids", [location of usb.ids])
+ else
+- AC_DEFINE_UNQUOTED(USBIDS_FILE, "${prefix}/share/usb.ids")
++ AC_DEFINE_UNQUOTED(USBIDS_FILE, "${prefix}/share/usb.ids", [location of usb.ids])
+ fi
+ else
+- AC_DEFINE_UNQUOTED(USBIDS_FILE, "${datadir}/usb.ids")
++ AC_DEFINE_UNQUOTED(USBIDS_FILE, "${datadir}/usb.ids", [location of usb.ids])
+ fi
+
+-AC_CONFIG_SUBDIRS([libusb])
++# some extra flags
++CFLAGS="$CFLAGS -Wall $LIBUSB_CFLAGS"
++LDFLAGS="$LDFLAGS $LIBUSB_LDFLAGS"
++
++# pass flags
++AC_SUBST(CFLAGS)
++AC_SUBST(LDFLAGS)
+
+-AC_SUBST(LIBOBJS)
+ AC_OUTPUT([Makefile])
++
++AC_MSG_RESULT([
++
++usbutils-$VERSION is now configured for $canonical_host_type
++
++ Build: $build
++ Host: $host
++ Source directory: $srcdir
++ Installation prefix: $prefix
++ C compiler: $CC $CFLAGS
++
++])
+--- usbutils-0.11/lsusb.8~usbutils-0.11+cvs20041108
++++ usbutils-0.11/lsusb.8
+@@ -1,4 +1,4 @@
+-.TH lsusb 8 "14 September 1999" "usbutils-0.9" "Linux USB Utilities"
++.TH lsusb 8 "19 November 2003" "usbutils-0.11" "Linux USB Utilities"
+ .IX lsusb
+ .SH NAME
+ lsusb \- list all USB devices
+@@ -29,7 +29,7 @@
+ Tells
+ .I lsusb
+ to be very verbose and display even more information (actually everything the
+-PCI device is able to tell).
++USB device is able to tell).
+ You must be root for this to work.
+ .TP
+ \fB\-s\fP [[\fIbus\fP]\fB:\fP][\fIdevnum\fP]
+@@ -39,13 +39,9 @@
+ .I devnum.
+ Both ID's are given in hexadecimal and may be omitted.
+ .TP
+-\fB\-d\fP \fIvendor\fP\fB:\fP[\fIproduct\fP]
++\fB\-d\fP [\fIvendor\fP]\fB:\fP[\fIproduct\fP]
+ Show only devices with the specified vendor and product ID.
+-Both ID's are given in hexadecimal;
+-the product ID may be omitted, but the vendor ID must be given.
+-.TP
+-.B \-p \fIprocpath\fP
+-Use another path instead of /proc/bus/usb.
++Both ID's are given in hexadecimal.
+ .TP
+ .B \-D \fIdevice\fP
+ Do not scan the /proc/bus/usb directory,
+@@ -80,7 +76,7 @@
+
+ .SH FILES
+ .TP
+-.B /usr/share/usb.ids
++.B /usr/share/misc/usb.ids
+ A list of all known USB ID's (vendors, products, classes, subclasses and protocols).
+ .TP
+ .B /proc/bus/usb
+--- usbutils-0.11/lsusb.c~usbutils-0.11+cvs20041108
++++ usbutils-0.11/lsusb.c
+@@ -3,7 +3,8 @@
+ /*
+ * lsusb.c -- lspci like utility for the USB bus
+ *
+- * Copyright (C) 1999, 2000, 2001 Thomas Sailer (sailer@ife.ee.ethz.ch)
++ * Copyright (C) 1999, 2000, 2001, 2003
++ * Thomas Sailer (t.sailer@alumni.ethz.ch)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+@@ -24,57 +25,65 @@
+
+ /*****************************************************************************/
+
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
+ #include <sys/types.h>
+ #include <sys/stat.h>
+-#include <sys/ioctl.h>
+ #include <fcntl.h>
+-#include <dirent.h>
+ #include <string.h>
+ #include <errno.h>
+-#include <stdlib.h>
+-#include <unistd.h>
+ #include <stdio.h>
+ #include <stdarg.h>
+-
+-#include <linux/types.h>
+-#ifdef HAVE_LINUX_USBDEVICE_FS_H
+-#include <linux/usbdevice_fs.h>
+-#else
+-#include "usbdevice_fs.h"
+-#endif
+-#ifdef HAVE_LINUX_USB_H
+-#include <linux/usb.h>
+-#else
+-#include "usb.h"
+-#endif
+-
+-#ifdef HAVE_CONFIG_H
+-#include "config.h"
+-#endif
++#include <usb.h>
+
+ #include "names.h"
+ #include "devtree.h"
++#include "usbmisc.h"
+
+ #define _GNU_SOURCE
+ #include <getopt.h>
+
+-#define CTRL_RETRIES 50
+-#define CTRL_TIMEOUT 100 /* milliseconds */
+
+-#define USB_DT_CS_DEVICE 0x21
+-#define USB_DT_CS_CONFIG 0x22
+-#define USB_DT_CS_STRING 0x23
++/* from USB 2.0 spec and updates */
++#define USB_DT_DEVICE_QUALIFIER 0x06
++#define USB_DT_OTHER_SPEED_CONFIG 0x07
++#define USB_DT_OTG 0x09
++#define USB_DT_DEBUG 0x0a
++#define USB_DT_INTERFACE_ASSOCIATION 0x0b
++
++/* convention suggested by common class spec */
+ #define USB_DT_CS_INTERFACE 0x24
+ #define USB_DT_CS_ENDPOINT 0x25
+
+ #define VERBLEVEL_DEFAULT 0 /* 0 gives lspci behaviour; 1, lsusb-0.9 */
+
++#define CTRL_RETRIES 2
++#define CTRL_TIMEOUT (5*1000) /* milliseconds */
++
+ static const char *procbususb = "/proc/bus/usb";
+ static unsigned int verblevel = VERBLEVEL_DEFAULT;
+ static int do_report_desc = 1;
+-static int open_mode = O_RDONLY;
+
+-static void dump_junk2(unsigned char *, unsigned int);
++static void dump_interface(struct usb_dev_handle *dev, struct usb_interface *interface);
++static void dump_endpoint(struct usb_dev_handle *dev, struct usb_interface_descriptor *interface, struct usb_endpoint_descriptor *endpoint);
++static void dump_audiocontrol_interface(struct usb_dev_handle *dev, unsigned char *buf);
++static void dump_audiostreaming_interface(struct usb_dev_handle *dev, unsigned char *buf);
++static void dump_midistreaming_interface(struct usb_dev_handle *dev, unsigned char *buf);
++static char *dump_comm_descriptor(struct usb_dev_handle *dev, unsigned char *buf, char *indent);
++static void dump_hid_device(struct usb_dev_handle *dev, struct usb_interface_descriptor *interface, unsigned char *buf);
++static void dump_audiostreaming_endpoint(struct usb_dev_handle *dev, unsigned char *buf);
++static void dump_midistreaming_endpoint(struct usb_dev_handle *dev, unsigned char *buf);
++static void dump_hub(char *prefix, unsigned char *p, int has_tt);
++static void dump_ccid_device(unsigned char *buf);
++
++/* ---------------------------------------------------------------------- */
++
++static unsigned int convert_le_u32 (const unsigned char *buf)
++{
++ return buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24);
++}
+
+ /* ---------------------------------------------------------------------- */
+
+@@ -95,66 +104,24 @@
+
+ /* ---------------------------------------------------------------------- */
+
+-static int usb_control_msg(int fd, u_int8_t requesttype, u_int8_t request, u_int16_t value,
+- u_int16_t index, unsigned int size, void *data)
+-{
+- struct usbdevfs_ctrltransfer ctrl;
+- int result, try;
+-
+- ctrl.requesttype = requesttype;
+- ctrl.request = request;
+- ctrl.value = value;
+- ctrl.index = index;
+- ctrl.length = size;
+- ctrl.timeout = 1000;
+- ctrl.data = data;
+- ctrl.timeout = CTRL_TIMEOUT;
+- try = 0;
+- do {
+- result = ioctl(fd, USBDEVFS_CONTROL, &ctrl);
+- try++;
+- } while (try < CTRL_RETRIES && result == -1 && errno == ETIMEDOUT);
+- return result;
+-}
+-
+-/* ---------------------------------------------------------------------- */
+-
+-static int get_string(int fd, char *buf, size_t size, u_int8_t id, u_int16_t lang)
++static int get_string(struct usb_dev_handle *dev, char* buf, size_t size, u_int8_t id)
+ {
+- unsigned char b[256];
+- wchar_t w[128];
+- unsigned int i;
+ int ret;
+-
+- if (size < 1)
+- return 0;
+- *buf = 0;
+- /* string ID 0 means no string */
+- if (!id || fd == -1)
+- return 0;
+-
+- b[0] = b[1] = 0xbf;
+- ret = usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8) | id, 0, sizeof(b), b);
+- if (ret < 0) {
+- if (open_mode == O_RDWR)
+- fprintf(stderr, "cannot get string descriptor %d, error = %s(%d)\n", id, strerror(errno), errno);
+- return 0;
+- }
+- if (ret < 2 || b[0] < 2 || b[1] != USB_DT_STRING) {
+- fprintf(stderr, "string descriptor %d invalid (%02x %02x; len=%d)\n", id, b[0], b[1], ret);
++
++ if (id) {
++ ret = usb_get_string_simple(dev, id, buf, size);
++ if (ret <= 0) {
++ buf[0] = 0;
++ return 0;
++ }
++ else
++ return ret;
++
++ }
++ else {
++ buf[0] = 0;
+ return 0;
+ }
+-#if 0
+- for (i = 0; i < ((b[0] - 2) / 2); i++)
+- w[i] = b[2+2*i] | (b[3+2*i] << 8);
+- w[i] = 0;
+- return wcstombs(buf, w, size);
+-#else
+- for (i = 0; i < ((b[0] - 2) / 2); i++)
+- buf[i] = b[2+2*i];
+- buf[i] = 0;
+- return i;
+-#endif
+ }
+
+ static int get_vendor_string(char *buf, size_t size, u_int16_t vid)
+@@ -231,7 +198,7 @@
+
+ /* ---------------------------------------------------------------------- */
+
+-static void dump_junk2(unsigned char *buf, unsigned int len)
++static void dump_bytes(unsigned char *buf, unsigned int len)
+ {
+ unsigned int i;
+
+@@ -256,27 +223,20 @@
+ * General config descriptor dump
+ */
+
+-static void dump_device(int fd, unsigned char *buf, u_int16_t lang)
++static void dump_device(struct usb_dev_handle *dev, struct usb_device_descriptor *descriptor, unsigned int flags)
+ {
+- unsigned int vid, pid;
+ char vendor[128], product[128];
+ char cls[128], subcls[128], proto[128];
+ char mfg[128], prod[128], serial[128];
+
+- if (buf[1] != USB_DT_DEVICE)
+- printf(" Warning: Invalid descriptor\n");
+- else if (buf[0] < 18)
+- printf(" Warning: Descriptor too short\n");
+- vid = buf[8] | (buf[9] << 8);
+- pid = buf[10] | (buf[11] << 8);
+- get_vendor_string(vendor, sizeof(vendor), vid);
+- get_product_string(product, sizeof(product), vid, pid);
+- get_class_string(cls, sizeof(cls), buf[4]);
+- get_subclass_string(subcls, sizeof(subcls), buf[4], buf[5]);
+- get_protocol_string(proto, sizeof(proto), buf[4], buf[5], buf[6]);
+- get_string(fd, mfg, sizeof(mfg), buf[14], lang);
+- get_string(fd, prod, sizeof(prod), buf[15], lang);
+- get_string(fd, serial, sizeof(serial), buf[16], lang);
++ get_vendor_string(vendor, sizeof(vendor), descriptor->idVendor);
++ get_product_string(product, sizeof(product), descriptor->idVendor, descriptor->idProduct);
++ get_class_string(cls, sizeof(cls), descriptor->bDeviceClass);
++ get_subclass_string(subcls, sizeof(subcls), descriptor->bDeviceClass, descriptor->bDeviceSubClass);
++ get_protocol_string(proto, sizeof(proto), descriptor->bDeviceClass, descriptor->bDeviceSubClass, descriptor->bDeviceProtocol);
++ get_string(dev, mfg, sizeof(mfg), descriptor->iManufacturer);
++ get_string(dev, prod, sizeof(prod), descriptor->iProduct);
++ get_string(dev, serial, sizeof(serial), descriptor->iSerialNumber);
+ printf("Device Descriptor:\n"
+ " bLength %5u\n"
+ " bDescriptorType %5u\n"
+@@ -292,47 +252,76 @@
+ " iProduct %5u %s\n"
+ " iSerial %5u %s\n"
+ " bNumConfigurations %5u\n",
+- buf[0], buf[1], buf[3], buf[2], buf[4], cls, buf[5], subcls, buf[6], proto, buf[7],
+- vid, vendor, pid, product, buf[13], buf[12], buf[14], mfg, buf[15], prod, buf[16], serial, buf[17]);
+- dump_junk(buf, " ", 18);
++ descriptor->bLength, descriptor->bDescriptorType, descriptor->bcdUSB >> 8, descriptor->bcdUSB & 0xff,
++ descriptor->bDeviceClass, cls, descriptor->bDeviceSubClass, subcls, descriptor->bDeviceProtocol, proto,
++ descriptor->bMaxPacketSize0, descriptor->idVendor, vendor, descriptor->idProduct, product,
++ descriptor->bcdDevice >> 8, descriptor->bcdDevice & 0xff, descriptor->iManufacturer, mfg,
++ descriptor->iProduct, prod, descriptor->iSerialNumber, serial, descriptor->bNumConfigurations);
+ }
+
+-static void dump_config(int fd, unsigned char *buf)
++static void dump_config(struct usb_dev_handle *dev, struct usb_config_descriptor *config)
+ {
+- if (buf[1] != USB_DT_CONFIG)
+- printf(" Warning: Invalid descriptor\n");
+- else if (buf[0] < 9)
+- printf(" Warning: Descriptor too short\n");
++ char cfg[128];
++ int i;
++
++ get_string(dev, cfg, sizeof(cfg), config->iConfiguration);
+ printf(" Configuration Descriptor:\n"
+ " bLength %5u\n"
+ " bDescriptorType %5u\n"
+ " wTotalLength %5u\n"
+ " bNumInterfaces %5u\n"
+ " bConfigurationValue %5u\n"
+- " iConfiguration %5u\n"
++ " iConfiguration %5u %s\n"
+ " bmAttributes 0x%02x\n",
+- buf[0], buf[1], buf[2] | (buf[3] << 8), buf[4], buf[5], buf[6], buf[7]);
+- if (buf[7] & 0x40)
++ config->bLength, config->bDescriptorType, config->wTotalLength,
++ config->bNumInterfaces, config->bConfigurationValue, config->iConfiguration,
++ cfg, config->bmAttributes);
++ if (config->bmAttributes & 0x40)
+ printf(" Self Powered\n");
+- if (buf[7] & 0x20)
++ if (config->bmAttributes & 0x20)
+ printf(" Remote Wakeup\n");
+- printf(" MaxPower %5umA\n", buf[8] * 2);
+- dump_junk(buf, " ", 9);
++ printf(" MaxPower %5umA\n", config->MaxPower * 2);
++
++ /* avoid re-ordering or hiding descriptors for display */
++ if (config->extralen) {
++ int size = config->extralen;
++ unsigned char *buf = config->extra;
++
++ while (size >= 2) {
++ if (buf[0] < 2) {
++ dump_junk(" ", buf, size);
++ break;
++ }
++ switch (buf[1]) {
++ case USB_DT_OTG:
++ /* handled separately */
++ break;
++ default:
++ /* often a misplaced class descriptor */
++ printf(" UNRECOGNIZED: ");
++ dump_bytes(buf, size);
++ break;
++ }
++ size -= buf[0];
++ buf += buf[0];
++ }
++ }
++ for (i = 0 ; i < config->bNumInterfaces ; i++)
++ dump_interface(dev, &config->interface[i]);
+ }
+
+-static void dump_interface(int fd, unsigned char *buf, u_int16_t lang)
++static void dump_altsetting(struct usb_dev_handle *dev, struct usb_interface_descriptor *interface)
+ {
+ char cls[128], subcls[128], proto[128];
+ char ifstr[128];
++
++ char *buf;
++ int size, i;
+
+- if (buf[1] != USB_DT_INTERFACE)
+- printf(" Warning: Invalid descriptor\n");
+- else if (buf[0] < 9)
+- printf(" Warning: Descriptor too short\n");
+- get_class_string(cls, sizeof(cls), buf[5]);
+- get_subclass_string(subcls, sizeof(subcls), buf[5], buf[6]);
+- get_protocol_string(proto, sizeof(proto), buf[5], buf[6], buf[7]);
+- get_string(fd, ifstr, sizeof(ifstr), buf[8], lang);
++ get_class_string(cls, sizeof(cls), interface->bInterfaceClass);
++ get_subclass_string(subcls, sizeof(subcls), interface->bInterfaceClass, interface->bInterfaceSubClass);
++ get_protocol_string(proto, sizeof(proto), interface->bInterfaceClass, interface->bInterfaceSubClass, interface->bInterfaceProtocol);
++ get_string(dev, ifstr, sizeof(ifstr), interface->iInterface);
+ printf(" Interface Descriptor:\n"
+ " bLength %5u\n"
+ " bDescriptorType %5u\n"
+@@ -343,20 +332,84 @@
+ " bInterfaceSubClass %5u %s\n"
+ " bInterfaceProtocol %5u %s\n"
+ " iInterface %5u %s\n",
+- buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], cls,
+- buf[6], subcls, buf[7], proto, buf[8], ifstr);
+- dump_junk(buf, " ", 9);
++ interface->bLength, interface->bDescriptorType, interface->bInterfaceNumber,
++ interface->bAlternateSetting, interface->bNumEndpoints, interface->bInterfaceClass, cls,
++ interface->bInterfaceSubClass, subcls, interface->bInterfaceProtocol, proto,
++ interface->iInterface, ifstr);
++
++ /* avoid re-ordering or hiding descriptors for display */
++ if (interface->extralen)
++ {
++ size = interface->extralen;
++ buf = interface->extra;
++ while (size >= 2 * sizeof(u_int8_t))
++ {
++ if (buf[0] < 2) {
++ dump_junk(" ", buf, size);
++ break;
++ }
++ switch (buf[1]) {
++ case USB_DT_CS_INTERFACE:
++ switch(interface->bInterfaceClass) {
++ case USB_CLASS_AUDIO:
++ switch(interface->bInterfaceSubClass) {
++ case 1:
++ dump_audiocontrol_interface(dev, buf);
++ break;
++ case 2:
++ dump_audiostreaming_interface(dev, buf);
++ break;
++ case 3:
++ dump_midistreaming_interface(dev, buf);
++ break;
++ }
++ break;
++ case USB_CLASS_COMM:
++ dump_comm_descriptor(dev, buf,
++ " ");
++ break;
++ }
++ break;
++ case USB_DT_HID:
++ if (interface->bInterfaceClass == USB_CLASS_HID)
++ dump_hid_device(dev, interface, buf);
++ if (interface->bInterfaceClass == 0x0b)
++ dump_ccid_device(buf);
++ break;
++ case USB_DT_OTG:
++ /* handled separately */
++ break;
++ default:
++ /* often a misplaced class descriptor */
++ printf(" UNRECOGNIZED: ");
++ dump_bytes(buf, size);
++ break;
++ }
++ size -= buf[0];
++ buf += buf[0];
++ }
++ }
++ for (i = 0 ; i < interface->bNumEndpoints ; i++)
++ dump_endpoint(dev, interface, &interface->endpoint[i]);
+ }
+
+-static void dump_endpoint(int fd, unsigned char *buf)
++static void dump_interface(struct usb_dev_handle *dev, struct usb_interface *interface)
++{
++ int i;
++
++ for (i = 0; i < interface->num_altsetting; i++)
++ dump_altsetting(dev, &interface->altsetting[i]);
++}
++
++static void dump_endpoint(struct usb_dev_handle *dev, struct usb_interface_descriptor *interface, struct usb_endpoint_descriptor *endpoint)
+ {
+ static const char *typeattr[] = { "Control", "Isochronous", "Bulk", "Interrupt" };
+- static const char *syncattr[] = { "none", "Asynchronous", "Adaptive", "Synchronous" };
++ static const char *syncattr[] = { "None", "Asynchronous", "Adaptive", "Synchronous" };
++ static const char *usage[] = { "Data", "Feedback", "Implicit feedback Data", "(reserved)" };
++ static const char *hb[] = { "1x", "2x", "3x", "(?\?)" };
++ char *buf;
++ int size;
+
+- if (buf[1] != USB_DT_ENDPOINT)
+- printf(" Warning: Invalid descriptor\n");
+- else if (buf[0] < 7)
+- printf(" Warning: Descriptor too short\n");
+ printf(" Endpoint Descriptor:\n"
+ " bLength %5u\n"
+ " bDescriptorType %5u\n"
+@@ -364,19 +417,53 @@
+ " bmAttributes %5u\n"
+ " Transfer Type %s\n"
+ " Synch Type %s\n"
+- " wMaxPacketSize %5u\n"
++ " Usage Type %s\n"
++ " wMaxPacketSize 0x%04x %s %d bytes\n"
+ " bInterval %5u\n",
+- buf[0], buf[1], buf[2], buf[2] & 15, (buf[2] & 0x80) ? "IN" : "OUT",
+- buf[3], typeattr[buf[3] & 3], syncattr[(buf[3] >> 2) & 3],
+- buf[4] | (buf[5] << 8), buf[6]);
+- if (buf[0] < 9) {
+- dump_junk(buf, " ", 7);
+- return;
+- }
++ endpoint->bLength, endpoint->bDescriptorType, endpoint->bEndpointAddress, endpoint->bEndpointAddress & 0x0f,
++ (endpoint->bEndpointAddress & 0x80) ? "IN" : "OUT", endpoint->bmAttributes,
++ typeattr[endpoint->bmAttributes & 3], syncattr[(endpoint->bmAttributes >> 2) & 3],
++ usage[(endpoint->bmAttributes >> 4) & 3], endpoint->wMaxPacketSize,
++ hb[(endpoint->wMaxPacketSize >> 11) & 3],
++ endpoint->wMaxPacketSize & 0x3ff,
++ endpoint->bInterval);
++ /* only for audio endpoints */
++ if (endpoint->bLength == 9)
+ printf(" bRefresh %5u\n"
+ " bSynchAddress %5u\n",
+- buf[7], buf[8]);
+- dump_junk(buf, " ", 9);
++ endpoint->bRefresh, endpoint->bSynchAddress);
++
++ /* avoid re-ordering or hiding descriptors for display */
++ if (endpoint->extralen)
++ {
++ size = endpoint->extralen;
++ buf = endpoint->extra;
++ while (size >= 2 * sizeof(u_int8_t))
++ {
++ if (buf[0] < 2) {
++ dump_junk(" ", buf, size);
++ break;
++ }
++ switch (buf[1]) {
++ case USB_DT_CS_ENDPOINT:
++ if (interface->bInterfaceClass == 1 && interface->bInterfaceSubClass == 2)
++ dump_audiostreaming_endpoint(dev, buf);
++ else if (interface->bInterfaceClass == 1 && interface->bInterfaceSubClass == 3)
++ dump_midistreaming_endpoint(dev, buf);
++ break;
++ case USB_DT_OTG:
++ /* handled separately */
++ break;
++ default:
++ /* often a misplaced class descriptor */
++ printf(" UNRECOGNIZED: ");
++ dump_bytes(buf, size);
++ break;
++ }
++ size -= buf[0];
++ buf += buf[0];
++ }
++ }
+ }
+
+ /* ---------------------------------------------------------------------- */
+@@ -385,7 +472,7 @@
+ * Audio Class descriptor dump
+ */
+
+-static void dump_audiocontrol_interface(int fd, unsigned char *buf, u_int16_t lang)
++static void dump_audiocontrol_interface(struct usb_dev_handle *dev, unsigned char *buf)
+ {
+ static const char *chconfig[] = {
+ "Left Front (L)", "Right Front (R)", "Center Front (C)", "Low Freqency Enhancement (LFE)",
+@@ -423,8 +510,8 @@
+
+ case 0x02: /* INPUT_TERMINAL */
+ printf("(INPUT_TERMINAL)\n");
+- get_string(fd, chnames, sizeof(chnames), buf[10], lang);
+- get_string(fd, term, sizeof(term), buf[11], lang);
++ get_string(dev, chnames, sizeof(chnames), buf[10]);
++ get_string(dev, term, sizeof(term), buf[11]);
+ termt = buf[4] | (buf[5] << 8);
+ get_audioterminal_string(termts, sizeof(termts), termt);
+ if (buf[0] < 12)
+@@ -447,7 +534,7 @@
+
+ case 0x03: /* OUTPUT_TERMINAL */
+ printf("(OUTPUT_TERMINAL)\n");
+- get_string(fd, term, sizeof(term), buf[8], lang);
++ get_string(dev, term, sizeof(term), buf[8]);
+ termt = buf[4] | (buf[5] << 8);
+ get_audioterminal_string(termts, sizeof(termts), termt);
+ if (buf[0] < 9)
+@@ -471,8 +558,8 @@
+ } else {
+ N = 1+(j*k-1)/8;
+ }
+- get_string(fd, chnames, sizeof(chnames), buf[8+j], lang);
+- get_string(fd, term, sizeof(term), buf[9+j+N], lang);
++ get_string(dev, chnames, sizeof(chnames), buf[8+j]);
++ get_string(dev, term, sizeof(term), buf[9+j+N]);
+ if (buf[0] < 10+j+N)
+ printf(" Warning: Descriptor too short\n");
+ chcfg = buf[6+j] | (buf[7+j] << 8);
+@@ -499,7 +586,7 @@
+ printf("(SELECTOR_UNIT)\n");
+ if (buf[0] < 6+buf[4])
+ printf(" Warning: Descriptor too short\n");
+- get_string(fd, term, sizeof(term), buf[5+buf[4]], lang);
++ get_string(dev, term, sizeof(term), buf[5+buf[4]]);
+
+ printf(" bUnitID %5u\n"
+ " bNrInPins %5u\n",
+@@ -519,7 +606,7 @@
+ k = (buf[0] - 7) / j;
+ if (buf[0] < 7+buf[5]*k)
+ printf(" Warning: Descriptor too short\n");
+- get_string(fd, term, sizeof(term), buf[6+buf[5]*k], lang);
++ get_string(dev, term, sizeof(term), buf[6+buf[5]*k]);
+ printf(" bUnitID %5u\n"
+ " bSourceID %5u\n"
+ " bControlSize %5u\n",
+@@ -529,7 +616,7 @@
+ if (buf[5] > 1)
+ chcfg |= (buf[7+buf[5]*i] << 8);
+ for (j = 0; j < buf[5]; j++)
+- printf(" bmaControls(%2u) 0x%02x\n", j, buf[6+buf[5]*i+j]);
++ printf(" bmaControls(%2u) 0x%02x\n", i, buf[6+buf[5]*i+j]);
+ for (j = 0; j < 10; j++)
+ if ((chcfg >> j) & 1)
+ printf(" %s\n", chftrcontrols[j]);
+@@ -542,8 +629,8 @@
+ printf("(PROCESSING_UNIT)\n");
+ j = buf[6];
+ k = buf[11+j];
+- get_string(fd, chnames, sizeof(chnames), buf[10+j], lang);
+- get_string(fd, term, sizeof(term), buf[12+j+k], lang);
++ get_string(dev, chnames, sizeof(chnames), buf[10+j]);
++ get_string(dev, term, sizeof(term), buf[12+j+k]);
+ chcfg = buf[8+j] | (buf[9+j] << 8);
+ if (buf[0] < 13+j+k)
+ printf(" Warning: Descriptor too short\n");
+@@ -566,15 +653,15 @@
+ printf(" Enable Processing\n");
+ printf(" iProcessing %5u %s\n"
+ " Process-Specific ", buf[12+j+k], term);
+- dump_junk2(buf+(13+j+k), buf[0]-(13+j+k));
++ dump_bytes(buf+(13+j+k), buf[0]-(13+j+k));
+ break;
+
+ case 0x08: /* EXTENSION_UNIT */
+ printf("(EXTENSION_UNIT)\n");
+ j = buf[6];
+ k = buf[11+j];
+- get_string(fd, chnames, sizeof(chnames), buf[10+j], lang);
+- get_string(fd, term, sizeof(term), buf[12+j+k], lang);
++ get_string(dev, chnames, sizeof(chnames), buf[10+j]);
++ get_string(dev, term, sizeof(term), buf[12+j+k]);
+ chcfg = buf[8+j] | (buf[9+j] << 8);
+ if (buf[0] < 13+j+k)
+ printf(" Warning: Descriptor too short\n");
+@@ -603,12 +690,12 @@
+ default:
+ printf("(unknown)\n"
+ " Invalid desc subtype:");
+- dump_junk2(buf+3, buf[0]-3);
++ dump_bytes(buf+3, buf[0]-3);
+ break;
+ }
+ }
+
+-static void dump_audiostreaming_interface(int fd, unsigned char *buf)
++static void dump_audiostreaming_interface(struct usb_dev_handle *dev, unsigned char *buf)
+ {
+ static const char *fmtItag[] = { "TYPE_I_UNDEFINED", "PCM", "PCM8", "IEEE_FLOAT", "ALAW", "MULAW" };
+ static const char *fmtIItag[] = { "TYPE_II_UNDEFINED", "MPEG", "AC-3" };
+@@ -622,7 +709,7 @@
+ printf(" Warning: Invalid descriptor\n");
+ else if (buf[0] < 3)
+ printf(" Warning: Descriptor too short\n");
+- printf(" AudioControl Interface Descriptor:\n"
++ printf(" AudioStreaming Interface Descriptor:\n"
+ " bLength %5u\n"
+ " bDescriptorType %5u\n"
+ " bDescriptorSubtype %5u ",
+@@ -717,7 +804,7 @@
+ default:
+ printf("(unknown)\n"
+ " Invalid desc format type:");
+- dump_junk2(buf+4, buf[0]-4);
++ dump_bytes(buf+4, buf[0]-4);
+ }
+ break;
+
+@@ -833,18 +920,18 @@
+ default:
+ printf("(unknown)\n"
+ " Invalid desc format type:");
+- dump_junk2(buf+4, buf[0]-4);
++ dump_bytes(buf+4, buf[0]-4);
+ }
+ break;
+
+ default:
+ printf(" Invalid desc subtype:");
+- dump_junk2(buf+3, buf[0]-3);
++ dump_bytes(buf+3, buf[0]-3);
+ break;
+ }
+ }
+
+-static void dump_audiostreaming_endpoint(int fd, unsigned char *buf)
++static void dump_audiostreaming_endpoint(struct usb_dev_handle *dev, unsigned char *buf)
+ {
+ static const char *lockdelunits[] = { "Undefined", "Milliseconds", "Decoded PCM samples", "Reserved" };
+ unsigned int lckdelidx;
+@@ -874,7 +961,7 @@
+ dump_junk(buf, " ", 7);
+ }
+
+-static void dump_midistreaming_interface(int fd, unsigned char *buf, u_int16_t lang)
++static void dump_midistreaming_interface(struct usb_dev_handle *dev, unsigned char *buf)
+ {
+ static const char *jacktypes[] = {"Undefined", "Embedded", "External"};
+ char jackstr[128];
+@@ -906,7 +993,7 @@
+ printf("(MIDI_IN_JACK)\n");
+ if (buf[0] < 6)
+ printf(" Warning: Descriptor too short\n");
+- get_string(fd, jackstr, sizeof(jackstr), buf[5], lang);
++ get_string(dev, jackstr, sizeof(jackstr), buf[5]);
+ printf( " bJackType %5u %s\n"
+ " bJackID %5u\n"
+ " iJack %5u %s\n",
+@@ -930,7 +1017,7 @@
+ j, buf[2*j+6], j, buf[2*j+7]);
+ }
+ j = 6+buf[5]*2; /* midi10.pdf says, incorrectly: 5+2*p */
+- get_string(fd, jackstr, sizeof(jackstr), buf[j], lang);
++ get_string(dev, jackstr, sizeof(jackstr), buf[j]);
+ printf( " iJack %5u %s\n",
+ buf[j], jackstr);
+ dump_junk(buf, " ", j+1);
+@@ -985,19 +1072,19 @@
+ if (caps & 0x800)
+ printf( " DLS2 (Downloadable Sounds Level 2)\n");
+ j = 9+2*buf[4]+capssize;
+- get_string(fd, jackstr, sizeof(jackstr), buf[j], lang);
++ get_string(dev, jackstr, sizeof(jackstr), buf[j]);
+ printf( " iElement %5u %s\n", buf[j], jackstr);
+ dump_junk(buf, " ", j+1);
+ break;
+
+ default:
+ printf("\n Invalid desc subtype: ");
+- dump_junk2(buf+3, buf[0]-3);
++ dump_bytes(buf+3, buf[0]-3);
+ break;
+ }
+ }
+
+-static void dump_midistreaming_endpoint(int fd, unsigned char *buf)
++static void dump_midistreaming_endpoint(struct usb_dev_handle *dev, unsigned char *buf)
+ {
+ unsigned int j;
+
+@@ -1017,26 +1104,196 @@
+ dump_junk(buf, " ", 4+buf[3]);
+ }
+
+-
+-static void dump_hub(char *p)
++static void dump_hub(char *prefix, unsigned char *p, int has_tt)
+ {
+ unsigned int l, i, j;
++ unsigned int wHubChar = (p[4] << 8) | p[3];
+
+- printf(" Hub Descriptor:\n");
+- printf(" bLength %3u\n",p[0]);
+- printf(" bDesriptorType %3u\n",p[1]);
+- printf(" nNbrPorts %3u\n",p[2]);
+- printf(" wHubCharacteristic 0x%02x 0x%02x\n", p[3],p[4]);
+- printf(" bPwrOn2PwrGood %3u * 2 milli seconds\n",p[5]);
+- printf(" bHubContrCurrent %3u milli Ampere\n",p[6]);
++ printf("%sHub Descriptor:\n", prefix);
++ printf("%s bLength %3u\n", prefix, p[0]);
++ printf("%s bDescriptorType %3u\n", prefix, p[1]);
++ printf("%s nNbrPorts %3u\n", prefix, p[2]);
++ printf("%s wHubCharacteristic 0x%04x\n", prefix, wHubChar);
++ switch (wHubChar & 0x03) {
++ case 0:
++ printf("%s Ganged power switching\n", prefix);
++ break;
++ case 1:
++ printf("%s Per-port power switching\n", prefix);
++ break;
++ default:
++ printf("%s No power switching (usb 1.0)\n", prefix);
++ break;
++ }
++ if (wHubChar & 0x04)
++ printf("%s Compound device\n", prefix);
++ switch ((wHubChar >> 3) & 0x03) {
++ case 0:
++ printf("%s Ganged overcurrent protection\n", prefix);
++ break;
++ case 1:
++ printf("%s Per-port overcurrent protection\n", prefix);
++ break;
++ default:
++ printf("%s No overcurrent protection\n", prefix);
++ break;
++ }
++ if (has_tt) {
++ l = (wHubChar >> 5) & 0x03;
++ printf("%s TT think time %d FS bits\n", prefix, (l + 1) * 8);
++ }
++ if (wHubChar & (1<<7))
++ printf("%s Port indicators\n", prefix);
++ printf("%s bPwrOn2PwrGood %3u * 2 milli seconds\n", prefix, p[5]);
++ printf("%s bHubContrCurrent %3u milli Ampere\n", prefix, p[6]);
+ l= (p[2] >> 3) + 1; /* this determines the variable number of bytes following */
+- printf(" DeviceRemovable ");
++ printf("%s DeviceRemovable ", prefix);
+ for(i = 0; i < l; i++)
+ printf(" 0x%02x", p[7+i]);
+- printf("\n PortPwrCtrlMask ");
+- for(j = 0; j < l; j++)
+- printf(" 0x%02x ", p[7+i+j]);
+- printf("\n");
++ printf("\n%s PortPwrCtrlMask ", prefix);
++ for(j = 0; j < l; j++)
++ printf(" 0x%02x ", p[7+i+j]);
++ printf("\n");
++}
++
++static void dump_ccid_device(unsigned char *buf)
++{
++ unsigned int us;
++
++ if (buf[0] < 54) {
++ printf(" Warning: Descriptor too short\n");
++ return;
++ }
++ printf(" ChipCard Interface Descriptor:\n"
++ " bLength %5u\n"
++ " bDescriptorType %5u\n"
++ " bcdCCID %2x.%02x",
++ buf[0], buf[1], buf[3], buf[2]);
++ if (buf[3] != 1 || buf[2] != 0)
++ fputs(" (Warning: Only accurate for version 1.0)", stdout);
++ putchar('\n');
++
++ printf(" nMaxSlotIndex %5u\n"
++ " bVoltageSupport %5u %s\n",
++ buf[4],
++ buf[5], (buf[5] == 1? "5.0V" : buf[5] == 2? "3.0V"
++ : buf[5] == 3? "1.8V":"?"));
++
++ us = convert_le_u32 (buf+6);
++ printf(" dwProtocols %5u ", us);
++ if ((us & 1))
++ fputs(" T=0", stdout);
++ if ((us & 2))
++ fputs(" T=1", stdout);
++ if ((us & ~3))
++ fputs(" (Invalid values detected)", stdout);
++ putchar('\n');
++
++ us = convert_le_u32(buf+10);
++ printf(" dwDefaultClock %5u\n", us);
++ us = convert_le_u32(buf+14);
++ printf(" dwMaxiumumClock %5u\n", us);
++ printf(" bNumClockSupported %5u\n", buf[18]);
++ us = convert_le_u32(buf+19);
++ printf(" dwDataRate %7u bps\n", us);
++ us = convert_le_u32(buf+23);
++ printf(" dwMaxDataRate %7u bps\n", us);
++ printf(" bNumDataRatesSupp. %5u\n", buf[27]);
++
++ us = convert_le_u32(buf+28);
++ printf(" dwMaxIFSD %5u\n", us);
++
++ us = convert_le_u32(buf+32);
++ printf(" dwSyncProtocols %08X ", us);
++ if ((us&1))
++ fputs(" 2-wire", stdout);
++ if ((us&2))
++ fputs(" 3-wire", stdout);
++ if ((us&4))
++ fputs(" I2C", stdout);
++ putchar('\n');
++
++ us = convert_le_u32(buf+36);
++ printf(" dwMechanical %08X ", us);
++ if ((us & 1))
++ fputs(" accept", stdout);
++ if ((us & 2))
++ fputs(" eject", stdout);
++ if ((us & 4))
++ fputs(" capture", stdout);
++ if ((us & 8))
++ fputs(" lock", stdout);
++ putchar('\n');
++
++ us = convert_le_u32(buf+40);
++ printf(" dwFeatures %08X\n", us);
++ if ((us & 0x0002))
++ fputs(" Auto configuration based on ATR\n",stdout);
++ if ((us & 0x0004))
++ fputs(" Auto activation on insert\n",stdout);
++ if ((us & 0x0008))
++ fputs(" Auto voltage selection\n",stdout);
++ if ((us & 0x0010))
++ fputs(" Auto clock change\n",stdout);
++ if ((us & 0x0020))
++ fputs(" Auto baud rate change\n",stdout);
++ if ((us & 0x0040))
++ fputs(" Auto parameter negotation made by CCID\n",stdout);
++ else if ((us & 0x0080))
++ fputs(" Auto PPS made by CCID\n",stdout);
++ else if ((us & (0x0040 | 0x0080)))
++ fputs(" WARNING: conflicting negotation features\n",stdout);
++
++ if ((us & 0x0100))
++ fputs(" CCID can set ICC in clock stop mode\n",stdout);
++ if ((us & 0x0200))
++ fputs(" NAD value other than 0x00 accpeted\n",stdout);
++ if ((us & 0x0400))
++ fputs(" Auto IFSD exchange\n",stdout);
++
++ if ((us & 0x00010000))
++ fputs(" TPDU level exchange\n",stdout);
++ else if ((us & 0x00020000))
++ fputs(" Short APDU level exchange\n",stdout);
++ else if ((us & 0x00040000))
++ fputs(" Short and extended APDU level exchange\n",stdout);
++ else if ((us & 0x00070000))
++ fputs(" WARNING: conflicting exchange levels\n",stdout);
++
++ us = convert_le_u32(buf+44);
++ printf(" dwMaxCCIDMsgLen %5u\n", us);
++
++ printf(" bClassGetResponse ");
++ if (buf[48] == 0xff)
++ fputs("echo\n", stdout);
++ else
++ printf(" %02X\n", buf[48]);
++
++ printf(" bClassEnvelope ");
++ if (buf[49] == 0xff)
++ fputs("echo\n", stdout);
++ else
++ printf(" %02X\n", buf[48]);
++
++ printf(" wlcdLayout ");
++ if (!buf[50] && !buf[51])
++ fputs("none\n", stdout);
++ else
++ printf("%u cols %u lines\n", buf[50], buf[51]);
++
++ printf(" bPINSupport %5u ", buf[52]);
++ if ((buf[52] & 1))
++ fputs(" verification", stdout);
++ if ((buf[52] & 2))
++ fputs(" modification", stdout);
++ putchar('\n');
++
++ printf(" bMaxCCIDBusySlots %5u\n", buf[53]);
++
++ if (buf[0] > 54) {
++ fputs(" junk ", stdout);
++ dump_bytes(buf+54, buf[0]-54);
++ }
+ }
+
+ /* ---------------------------------------------------------------------- */
+@@ -1047,21 +1304,21 @@
+
+ static void dump_report_desc(unsigned char *b, int l)
+ {
+- unsigned int t, j, bsize, btag, btype, data, hut;
++ unsigned int t, j, bsize, btag, btype, data = 0xffff, hut = 0xffff;
+ int i;
+ char *types[4] = { "Main", "Global", "Local", "reserved" };
+ char indent[] = " ";
+
+- printf(" Report Descriptor: (length is %d)\n", l);
++ printf(" Report Descriptor: (length is %d)\n", l);
+ for(i = 0; i < l; ) {
+ t = b[i];
+- bsize= b[i] & 0x03;
++ bsize = b[i] & 0x03;
+ if (bsize == 3)
+- bsize=4;
++ bsize = 4;
+ btype = b[i] & (0x03 << 2);
+ btag = b[i] & ~0x03; /* 2 LSB bits encode length */
+ printf(" Item(%-6s): %s, data=", types[btype>>2], names_reporttag(btag));
+- if(bsize > 0) {
++ if (bsize > 0) {
+ printf(" [ ");
+ data = 0;
+ for(j = 0; j < bsize; j++) {
+@@ -1101,9 +1358,9 @@
+
+ default:
+ if(data & 0x80)
+- printf("Vendor definened\n");
++ printf("Vendor defined\n");
+ else
+- printf("Reserved for future use.\n");
++ printf("Reserved for future use.\n");
+ }
+ break;
+ case 0x80: /* Input */
+@@ -1121,19 +1378,19 @@
+ data & 0x40 ? "Null_State": "No_Null_Position",
+ data & 0x80 ? "Volatile": "Non_Volatile",
+ data &0x100 ? "Buffered Bytes": "Bitfield"
+- );
++ );
+ }
+ i += 1 + bsize;
+ }
+ }
+
+-static void dump_hid_device(int fd, unsigned char *buf,int interface_number)
++static void dump_hid_device(struct usb_dev_handle *dev, struct usb_interface_descriptor *interface, unsigned char *buf)
+ {
+ unsigned int i, len;
+ int n;
+ unsigned char dbuf[8192];
+
+- if (buf[1] != USB_DT_CS_DEVICE)
++ if (buf[1] != USB_DT_HID)
+ printf(" Warning: Invalid descriptor\n");
+ else if (buf[0] < 6+3*buf[5])
+ printf(" Warning: Descriptor too short\n");
+@@ -1141,306 +1398,340 @@
+ " bLength %5u\n"
+ " bDescriptorType %5u\n"
+ " bcdHID %2x.%02x\n"
+- " bCountryCode %5u\n"
++ " bCountryCode %5u %s\n"
+ " bNumDescriptors %5u\n",
+- buf[0], buf[1], buf[3], buf[2], buf[4], buf[5]);
++ buf[0], buf[1], buf[3], buf[2], buf[4],
++ names_countrycode(buf[4]) ? : "Unknown", buf[5]);
+ for (i = 0; i < buf[5]; i++)
+ printf(" bDescriptorType %5u %s\n"
+ " wDescriptorLength %5u\n",
+- buf[6+3*i], names_hid(buf[6+3*i]), buf[7+3*i] | (buf[8+3*i] << 8));
++ buf[6+3*i], names_hid(buf[6+3*i]),
++ buf[7+3*i] | (buf[8+3*i] << 8));
+ dump_junk(buf, " ", 6+3*buf[5]);
+ if (!do_report_desc)
+ return;
++
+ for (i = 0; i < buf[5]; i++) {
+- if (buf[6+3*i] != 0x22) /* we are just interested in report descriptors*/
++ /* we are just interested in report descriptors*/
++ if (buf[6+3*i] != USB_DT_REPORT)
+ continue;
+ len = buf[7+3*i] | (buf[8+3*i] << 8);
+ if (len > sizeof(dbuf)) {
+ printf("report descriptor too long\n");
+ continue;
+ }
+- if ((n = usb_control_msg(fd, 0x81 , 0x06, 0x22<<8, interface_number, len, dbuf)) < 0) {
+- if (open_mode == O_RDWR)
+- printf("cannot get report descriptor\n");
+- continue;
++ if (usb_claim_interface(dev, interface->bInterfaceNumber) == 0) {
++ if ((n = usb_control_msg(dev,
++ USB_ENDPOINT_IN | USB_TYPE_STANDARD
++ | USB_RECIP_INTERFACE,
++ USB_REQ_GET_DESCRIPTOR,
++ (USB_DT_REPORT << 8),
++ interface->bInterfaceNumber,
++ dbuf,
++ len,
++ CTRL_TIMEOUT)) > 0)
++ dump_report_desc(dbuf, n);
++ usb_release_interface(dev, interface->bInterfaceNumber);
++ } else {
++ /* recent Linuxes require claim() for RECIP_INTERFACE,
++ * so "rmmod hid" will often make these available.
++ */
++ printf( " Report Descriptors: \n"
++ " ** UNAVAILABLE **\n");
+ }
+- dump_report_desc(dbuf, n);
+ }
+ }
+
+-/* ---------------------------------------------------------------------- */
+-
+-static void do_config(int fd, unsigned int nr, u_int16_t lang)
++static char *
++dump_comm_descriptor(struct usb_dev_handle *dev, unsigned char *buf, char *indent)
+ {
+- unsigned char buf[1024],*p;
+- unsigned int sz,curinterface;
+- int l;
+- u_int8_t curclass = 0xff, cursubclass = 0xff;
++ int tmp;
++ char str [128];
+
+- if (usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_CONFIG << 8) | nr,
+- 0, USB_DT_CONFIG_SIZE, buf) < 0) {
+- if (open_mode == O_RDWR)
+- fprintf(stdout, "cannot get config descriptor %d, %s (%d)\n", nr, strerror(errno), errno);
+- return;
+- }
+- if (buf[0] < USB_DT_CONFIG_SIZE || buf[1] != USB_DT_CONFIG)
+- fprintf(stderr, "Warning: invalid config descriptor\n");
+- sz = buf[2] | buf[3] << 8;
+- if (sz > sizeof(buf)) {
+- fprintf(stderr, "Config %d descriptor too long, truncating\n", nr);
+- sz = sizeof(buf);
+- }
+- if (usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_CONFIG << 8) | nr,
+- 0, sz, buf) < 0) {
+- if (open_mode == O_RDWR)
+- fprintf(stdout, "cannot get config descriptor %d, %s (%d)\n", nr, strerror(errno), errno);
+- return;
++ switch (buf[2]) {
++ case 0:
++ if (buf[0] != 5)
++ goto bad;
++ printf("%sCDC Header:\n"
++ "%s bcdCDC %x.%02x\n",
++ indent,
++ indent, buf[4], buf[3]);
++ break;
++ case 0x01: /* call management functional desc */
++ if (buf [0] != 5)
++ goto bad;
++ printf("%sCDC Call Management:\n"
++ "%s bmCapabilities 0x%02x\n",
++ indent,
++ indent, buf[3]);
++ if (buf[3] & 0x01)
++ printf("%s call management\n", indent);
++ if (buf[3] & 0x02)
++ printf("%s use DataInterface\n", indent);
++ printf("%s bDataInterface %d\n", indent, buf[4]);
++ break;
++ case 0x02: /* acm functional desc */
++ if (buf [0] != 4)
++ goto bad;
++ printf("%sCDC ACM:\n"
++ "%s bmCapabilities 0x%02x\n",
++ indent,
++ indent, buf[3]);
++ if (buf[3] & 0x08)
++ printf("%s connection notifications\n", indent);
++ if (buf[3] & 0x04)
++ printf("%s sends break\n", indent);
++ if (buf[3] & 0x02)
++ printf("%s line coding and serial state\n", indent);
++ if (buf[3] & 0x01)
++ printf("%s get/set/clear comm features\n", indent);
++ break;
++ case 0x06: /* union desc */
++ if (buf [0] < 5)
++ goto bad;
++ printf("%sCDC Union:\n"
++ "%s bMasterInterface %d\n"
++ "%s bSlaveInterface ",
++ indent,
++ indent, buf [3],
++ indent);
++ for (tmp = 4; tmp < buf [0]; tmp++)
++ printf("%d ", buf [tmp]);
++ printf("\n");
++ break;
++ case 0x0f: /* ethernet functional desc */
++ if (buf [0] != 13)
++ goto bad;
++ get_string(dev, str, sizeof str, buf[3]);
++ tmp = buf [7] << 8;
++ tmp |= buf [6]; tmp <<= 8;
++ tmp |= buf [5]; tmp <<= 8;
++ tmp |= buf [4];
++ printf("%sCDC Ethernet:\n"
++ "%s iMacAddress %10d %s\n"
++ "%s bmEthernetStatistics 0x%08x\n",
++ indent,
++ indent, buf[3], (buf[3] && *str) ? str : "(?\?)",
++ indent, tmp);
++ /* FIXME dissect ALL 28 bits */
++ printf("%s wMaxSegmentSize %10d\n"
++ "%s wNumberMCFilters 0x%04x\n"
++ "%s bNumberPowerFilters %10d\n",
++ indent, (buf[9]<<8)|buf[8],
++ indent, (buf[11]<<8)|buf[10],
++ indent, buf[12]);
++ break;
++ default:
++ /* FIXME there are about a dozen more descriptor types */
++ printf("%sUNRECOGNIZED: ", indent);
++ dump_bytes(buf, buf[0]);
++ return "unrecognized comm descriptor";
+ }
+- p = buf;
+- while (sz >= 2) {
+- if (p[0] < 2)
+- break;
+- if (p[0] > sz) {
+- printf(" descriptor length past end:");
+- dump_junk2(p, sz);
+- sz = 0;
+- break;
+- }
+- switch (p[1]) {
+- case USB_DT_DEVICE:
+- dump_device(fd, p, lang);
+- curclass = p[4];
+- cursubclass = p[5];
+- break;
+-
+- case USB_DT_CONFIG:
+- dump_config(fd, p);
+- break;
+-
+- case USB_DT_INTERFACE:
+- dump_interface(fd, p, lang);
+- curclass = p[5];
+- cursubclass = p[6];
+- curinterface = p[2];
+- break;
+-
+- case USB_DT_ENDPOINT:
+- dump_endpoint(fd, p);
+- break;
++ return 0;
+
+- case USB_DT_CS_DEVICE:
+- if (curclass == 3) {
+- dump_hid_device(fd, p, curinterface);
+- break;
+- }
+- printf(" unknown descriptor type:");
+- dump_junk2(p, p[0]);
+- break;
++ bad:
++ printf("%sinvalid: ", indent);
++ dump_bytes(buf, buf[0]);
++ return "corrupt comm descriptor";
++}
+
+- case USB_DT_CS_CONFIG:
+- printf(" unknown descriptor type:");
+- dump_junk2(p, p[0]);
+- break;
++/* ---------------------------------------------------------------------- */
+
+- case USB_DT_CS_STRING:
+- printf(" unknown descriptor type:");
+- dump_junk2(p, p[0]);
+- break;
++static void do_hub(struct usb_dev_handle *fd, unsigned has_tt)
++{
++ unsigned char buf [7];
++ int ret;
++
++ ret = usb_control_msg(fd,
++ USB_ENDPOINT_IN | USB_TYPE_CLASS | USB_RECIP_DEVICE,
++ USB_REQ_GET_DESCRIPTOR,
++ 0x29 << 8, 0,
++ buf, sizeof buf, CTRL_TIMEOUT);
++ if (ret != sizeof buf) {
++ /* Linux returns this for suspended devices */
++ if (errno != EHOSTUNREACH)
++ perror ("can't get hub descriptor");
++ return;
++ }
++ dump_hub("", buf, has_tt);
++}
+
+- case USB_DT_CS_INTERFACE:
+- if (curclass == 1 && cursubclass == 1) {
+- dump_audiocontrol_interface(fd, p, lang);
+- break;
+- }
+- if (curclass == 1 && cursubclass == 2) {
+- dump_audiostreaming_interface(fd, p);
+- break;
+- }
+- if (curclass == 1 && cursubclass == 3) {
+- dump_midistreaming_interface(fd, p, lang);
+- break;
+- }
+- printf(" unknown descriptor type:");
+- dump_junk2(p, p[0]);
+- break;
++static void do_dualspeed(struct usb_dev_handle *fd)
++{
++ unsigned char buf [10];
++ char cls[128], subcls[128], proto[128];
++ int ret;
++
++ ret = usb_control_msg(fd,
++ USB_ENDPOINT_IN | USB_TYPE_STANDARD | USB_RECIP_DEVICE,
++ USB_REQ_GET_DESCRIPTOR,
++ USB_DT_DEVICE_QUALIFIER << 8, 0,
++ buf, sizeof buf, CTRL_TIMEOUT);
+
+- case USB_DT_CS_ENDPOINT:
+- if (curclass == 1 && cursubclass == 2) {
+- dump_audiostreaming_endpoint(fd, p);
+- break;
+- }
+- if (curclass == 1 && cursubclass == 3) {
+- dump_midistreaming_endpoint(fd, p);
+- break;
+- }
+- printf(" unknown descriptor type:");
+- dump_junk2(p, p[0]);
+- break;
++ /* all dual-speed devices have a qualifier */
++ if (ret != sizeof buf
++ || buf[0] != ret
++ || buf[1] != USB_DT_DEVICE_QUALIFIER)
++ return;
+
+- case USB_DT_HUB:
+- dump_hub(p);
+- break;
++ get_class_string(cls, sizeof(cls),
++ buf[4]);
++ get_subclass_string(subcls, sizeof(subcls),
++ buf[4], buf[5]);
++ get_protocol_string(proto, sizeof(proto),
++ buf[4], buf[5], buf[6]);
++ printf("Device Qualifier (for other device speed):\n"
++ " bLength %5u\n"
++ " bDescriptorType %5u\n"
++ " bcdUSB %2x.%02x\n"
++ " bDeviceClass %5u %s\n"
++ " bDeviceSubClass %5u %s\n"
++ " bDeviceProtocol %5u %s\n"
++ " bMaxPacketSize0 %5u\n"
++ " bNumConfigurations %5u\n",
++ buf[0], buf[1],
++ buf[3], buf[2],
++ buf[4], cls,
++ buf[5], subcls,
++ buf[6], proto,
++ buf[7], buf[8]);
+
+- default:
+- printf(" unknown descriptor type:");
+- dump_junk2(p, p[0]);
+- }
+- sz -= p[0];
+- p += p[0];
+- }
+- if (sz > 0) {
+- printf(" junk at config descriptor end:");
+- dump_junk2(p, sz);
+- }
++ /* FIXME also show the OTHER_SPEED_CONFIG descriptors */
+ }
+
+-/* ---------------------------------------------------------------------- */
++static unsigned char *find_otg(unsigned char *buf, int buflen)
++{
++ if (!buf)
++ return 0;
++ while (buflen >= 3) {
++ if (buf[0] == 3 && buf[1] == USB_DT_OTG)
++ return buf;
++ if (buf[0] > buflen)
++ return 0;
++ buflen -= buf[0];
++ buf += buf[0];
++ }
++ return 0;
++}
+
+-/* returns first lang ID */
+-static u_int16_t dump_langids(int fd, int quiet)
++static void do_otg(struct usb_config_descriptor *config)
+ {
+- unsigned char b[256];
+- int i, l;
+- u_int16_t lang;
++ unsigned i, j, k;
++ unsigned char *desc;
+
+- b[0] = b[1] = 0xbf;
+- l = usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR, USB_DT_STRING << 8, 0, sizeof(b), b);
++ /* each config of an otg device has an OTG descriptor */
++ desc = find_otg(config->extra, config->extralen);
++ for (i = 0; !desc && i < config->bNumInterfaces; i++) {
++ struct usb_interface *intf;
+
+- if (l < 0) {
+- if (open_mode == O_RDWR)
+- printf(" Language IDs: none (cannot get min. string descriptor; got len=%d, error=%d:%s)\n",
+- l, errno, strerror(errno));
+- return 0;
+- }
+- if (l < 4 || b[0] != l) {
+- printf(" Language IDs: none (invalid length string descriptor %02x; len=%d)\n", b[0], l);
+- return 0;
+- }
+- /* save first language ID for further get_string_descriptors */
+- lang = b[2] | (b[3] << 8);
+-#if 0
+- printf ("dump_langids: ret=%d:%d, lang=0x%x, length=%d\n", l, errno, lang, b[0]);
+- dump_junk2 (b, 32);
+-#endif
+- if(quiet)
+- return lang;
+- printf(" Language IDs: (length=%d)\n", b[0]);
+- for (i = 0; i < ((b[0] - 2) / 2); i++) {
+- l = b[2+2*i] | (b[3+2*i] << 8);
+- printf(" %04x %s(%s)\n", l, names_langid(l & 0x3ff), names_langid(l));
++ intf = &config->interface [i];
++ for (j = 0; !desc && j < intf->num_altsetting; j++) {
++ struct usb_interface_descriptor *alt;
++
++ alt = &intf->altsetting[j];
++ desc = find_otg(alt->extra, alt->extralen);
++ for (k = 0; !desc && k < alt->bNumEndpoints; k++) {
++ struct usb_endpoint_descriptor *ep;
++
++ ep = &alt->endpoint[k];
++ desc = find_otg(ep->extra, ep->extralen);
++ }
++ }
+ }
+- return lang;
+-}
++ if (!desc)
++ return;
+
+-/* ---------------------------------------------------------------------- */
++ printf("OTG Descriptor:\n"
++ " bLength %3u\n"
++ " bDescriptorType %3u\n"
++ " bmAttributes 0x%02x\n"
++ "%s%s",
++ desc[0], desc[1], desc[2],
++ (desc[2] & 0x01)
++ ? " SRP (Session Request Protocol)\n" : "",
++ (desc[2] & 0x02)
++ ? " HNP (Host Negotiation Protocol)\n" : "");
++}
+
+-static void dumpdev(unsigned char *devdesc, int fd, unsigned int flags)
++static void dumpdev(struct usb_device *dev, unsigned int flags)
+ {
+- unsigned int i, maxcfg;
+- u_int16_t lang;
++ struct usb_dev_handle *udev;
++ int i;
+
+- maxcfg = devdesc[17];
+- if (devdesc[0] < 18 || devdesc[1] != USB_DT_DEVICE)
+- maxcfg = 1;
+- lang = dump_langids(fd, 1);
+- dump_device(fd, devdesc, lang);
+- for (i = 0; i < maxcfg; i++)
+- do_config(fd, i, lang);
+- lang = dump_langids(fd, 0);
++ udev = usb_open(dev);
++ if (udev) {
++ dump_device(udev, &dev->descriptor, flags);
++ if (dev->config) {
++ for (i = 0; i < dev->descriptor.bNumConfigurations;
++ i++) {
++ dump_config(udev, &dev->config[i]);
++ }
++ do_otg(&dev->config[0]);
++ }
++ if (dev->descriptor.bDeviceClass == USB_CLASS_HUB)
++ do_hub(udev, dev->descriptor.bDeviceProtocol);
++ if (dev->descriptor.bcdUSB >= 0x0200)
++ do_dualspeed(udev);
++ usb_close(udev);
++ }
++ else
++ fprintf(stderr, "Couldn't open device\n");
+ }
+
+ /* ---------------------------------------------------------------------- */
+
+ static int dump_one_device(const char *path, unsigned int flags)
+ {
+- unsigned char buf[USB_DT_DEVICE_SIZE];
+- unsigned int vid, pid;
++ struct usb_device *dev;
+ char vendor[128], product[128];
+- int fd;
+- int status;
+-
+- status=1;
+
+- if ((fd = open(path, O_RDWR)) == -1) {
+- fprintf(stderr, "cannot open %s, %s (%d)\n", path, strerror(errno), errno);
+- return(1);
+- }
+- if (usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_DEVICE << 8), 0, USB_DT_DEVICE_SIZE, buf) < 0) {
+- if (open_mode == O_RDWR)
+- fprintf(stderr, "cannot get config descriptor, %s (%d)\n", strerror(errno), errno);
+- goto err;
++ dev = get_usb_device(path);
++ if (!dev) {
++ fprintf(stderr, "Cannot open %s\n", path);
++ return 1;
+ }
+- vid = buf[8] | (buf[9] << 8);
+- pid = buf[10] | (buf[11] << 8);
+- get_vendor_string(vendor, sizeof(vendor), vid);
+- get_product_string(product, sizeof(product), vid, pid);
+- printf("Device: ID %04x:%04x %s %s\n", vid, pid, vendor, product);
+- dumpdev(buf, fd, flags);
+- status=0;
+- err:
+- close(fd);
+- return(status);
++ get_vendor_string(vendor, sizeof(vendor), dev->descriptor.idVendor);
++ get_product_string(product, sizeof(product), dev->descriptor.idVendor, dev->descriptor.idProduct);
++ printf("Device: ID %04x:%04x %s %s\n", dev->descriptor.idVendor,
++ dev->descriptor.idProduct,
++ vendor,
++ product);
++ dumpdev(dev, flags);
++ return 0;
+ }
+
+-/* ---------------------------------------------------------------------- */
+-
+-static int list_devices(int bus, int devnum, int vendorid, int productid, unsigned int flags)
++static int list_devices(int busnum, int devnum, int vendorid, int productid, unsigned int flags)
+ {
+- DIR *d, *d2;
+- struct dirent *de, *de2;
+- unsigned char buf[256];
+- unsigned int vid, pid;
++ struct usb_bus *bus;
++ struct usb_device *dev;
+ char vendor[128], product[128];
+- int fd;
+ int status;
+
+ status=1; /* 1 device not found, 0 device found */
+-
+- d = opendir(procbususb);
+- if (!d) {
+- fprintf(stderr, "cannot open %s, %s (%d)\n", procbususb, strerror(errno), errno);
+- return(1);
+- }
+- while ((de = readdir(d))) {
+- if (de->d_name[0] < '0' || de->d_name[0] > '9')
+- continue;
+- if (bus != -1 && strtoul(de->d_name, NULL, 0) != bus)
++
++ for (bus = usb_busses; bus; bus = bus->next) {
++ if (busnum != -1 && strtoul(bus->dirname, NULL, 0) != busnum)
+ continue;
+- snprintf(buf, sizeof(buf), "%s/%s/", procbususb, de->d_name);
+- if (!(d2 = opendir(buf)))
+- continue;
+- while ((de2 = readdir(d2))) {
+- if (de2->d_name[0] == '.')
+- continue;
+- if (devnum != -1 && strtoul(de2->d_name, NULL, 0) != devnum)
++ for (dev = bus->devices; dev; dev = dev->next) {
++ if (devnum != -1 && strtoul(dev->filename, NULL, 0) != devnum)
+ continue;
+- snprintf(buf, sizeof(buf), "%s/%s/%s", procbususb, de->d_name, de2->d_name);
+- if ((fd = open(buf, open_mode)) == -1) {
+- fprintf(stderr, "cannot open %s, %s (%d)\n", buf, strerror(errno), errno);
++ if ((vendorid != -1 && vendorid != dev->descriptor.idVendor) || (productid != -1 && productid != dev->descriptor.idProduct))
+ continue;
+- }
+- if (read(fd, buf, USB_DT_DEVICE_SIZE) != USB_DT_DEVICE_SIZE) {
+- fprintf(stderr, "cannot read device descriptor %s (%d)\n", strerror(errno), errno);
+- goto err;
+- }
+- vid = buf[8] | (buf[9] << 8);
+- pid = buf[10] | (buf[11] << 8);
+- if (buf[0] >= USB_DT_DEVICE_SIZE && ((vendorid != -1 && vendorid != vid) || (productid != -1 && productid != pid)))
+- goto err;
+- status=0;
+- get_vendor_string(vendor, sizeof(vendor), vid);
+- get_product_string(product, sizeof(product), vid, pid);
++ status = 0;
++ get_vendor_string(vendor, sizeof(vendor), dev->descriptor.idVendor);
++ get_product_string(product, sizeof(product), dev->descriptor.idVendor, dev->descriptor.idProduct);
+ if (verblevel > 0)
+ printf("\n");
+- printf("Bus %s Device %s: ID %04x:%04x %s %s\n", de->d_name, de2->d_name, vid, pid, vendor, product);
++ printf("Bus %s Device %s: ID %04x:%04x %s %s\n", bus->dirname,
++ dev->filename,
++ dev->descriptor.idVendor,
++ dev->descriptor.idProduct,
++ vendor,
++ product);
+ if (verblevel > 0)
+- dumpdev(buf, fd, flags);
+- err:
+- close(fd);
+- }
+- closedir(d2);
+- }
+- closedir(d);
++ dumpdev(dev, flags);
++ }
++ }
+ return(status);
+ }
+
+@@ -1487,7 +1778,6 @@
+ { "verbose", 0, 0, 'v' },
+ { 0, 0, 0, 0 }
+ };
+- static const char usage[] = "usage: lsusb [-v] [-x] [-p <procpath>] [-s [<bus>:][<devnum>]] [-d [<vendor>]:[<device>]]\n";
+ int c, err = 0;
+ unsigned int allowctrlmsg = 0, treemode = 0;
+ int bus = -1, devnum = -1, vendor = -1, product = -1;
+@@ -1495,7 +1785,8 @@
+ char *cp;
+ int status;
+
+- while ((c = getopt_long(argc, argv, "D:vxtP:p:s:d:V", long_options, NULL)) != EOF) {
++ while ((c = getopt_long(argc, argv, "D:vxtP:p:s:d:V",
++ long_options, NULL)) != EOF) {
+ switch(c) {
+ case 'V':
+ printf("lsusb (" PACKAGE ") " VERSION "\n");
+@@ -1503,7 +1794,6 @@
+
+ case 'v':
+ verblevel++;
+- open_mode = O_RDWR;
+ break;
+
+ case 'x':
+@@ -1514,11 +1804,6 @@
+ treemode = 1;
+ break;
+
+- case 'P': /* lspci uses -P; but lsusb 0.9, -p */
+- case 'p':
+- procbususb = optarg;
+- break;
+-
+ case 's':
+ cp = strchr(optarg, ':');
+ if (cp) {
+@@ -1556,15 +1841,43 @@
+ }
+ }
+ if (err || argc > optind) {
+- fprintf(stderr, usage);
++ fprintf(stderr, "Usage: lsusb [options]...\n"
++ "List all USB devices\n"
++ "\n"
++ "OPTIONS\n"
++ " -v\n"
++ " Increase verbosity\n"
++ " -s [[bus]:][devnum]\n"
++ " Show only devices in specified bus and/or devnum\n"
++ " -d vendor:[product]\n"
++ " Show only devices with the specified vendor and product ID\n"
++ " -D device\n"
++ " Selects which device lsusb will examine\n"
++ " -t\n"
++ " Dump the physical USB device hierarchy as a tree\n"
++ " -V, --version\n"
++ " Show version of program\n"
++ "\n");
+ exit(1);
+ }
+- if ((err = names_init("./usb.ids")) != 0)
+- if(err = names_init(USBIDS_FILE)) {
+- printf("Error, cannot open USBIDS File \"%s\", %s\n", USBIDS_FILE, strerror(err));
+- exit(1);
++
++ /* by default, print names as well as numbers */
++ if ((err = names_init("./usb.ids")) != 0) {
++ if ((err = names_init(USBIDS_FILE)) != 0) {
++ fprintf(stderr, "%s: cannot open \"%s\", %s\n",
++ argv[0],
++ USBIDS_FILE,
++ strerror(err));
++ }
+ }
+ status = 0;
++
++ usb_init();
++
++ usb_find_busses();
++ usb_find_devices();
++
++
+ if (treemode) {
+ /* treemode requires at least verblevel 1 */
+ verblevel += 1 - VERBLEVEL_DEFAULT;
+--- usbutils-0.11/names.c~usbutils-0.11+cvs20041108
++++ usbutils-0.11/names.c
+@@ -116,6 +116,7 @@
+ static struct genericstrtable *physdess[HASHSZ] = { NULL, };
+ static struct genericstrtable *hutus[HASHSZ] = { NULL, };
+ static struct genericstrtable *langids[HASHSZ] = { NULL, };
++static struct genericstrtable *countrycodes[HASHSZ] = { NULL, };
+
+ /* ---------------------------------------------------------------------- */
+
+@@ -164,6 +165,11 @@
+ return names_genericstrtable(biass, b);
+ }
+
++const char *names_countrycode(unsigned int countrycode)
++{
++ return names_genericstrtable(countrycodes, countrycode);
++}
++
+ const char *names_vendor(u_int16_t vendorid)
+ {
+ struct vendor *v;
+@@ -402,6 +408,11 @@
+ return new_genericstrtable(biass, name, b);
+ }
+
++static int new_countrycode(const char *name, unsigned int countrycode)
++{
++ return new_genericstrtable(countrycodes, name, countrycode);
++}
++
+ /* ---------------------------------------------------------------------- */
+
+ #define DBG(x)
+@@ -553,6 +564,27 @@
+ DBG(printf("line %5u audio terminal type %02x %s\n", linectr, u, cp));
+ continue;
+ }
++ if (buf[0] == 'H' && buf[1] == 'C' && buf[2] == 'C' && isspace(buf[3])) {
++ /* HID Descriptor bCountryCode */
++ cp = buf+3;
++ while (isspace(*cp))
++ cp++;
++ if (!isxdigit(*cp)) {
++ fprintf(stderr, "Invalid HID country code at line %u\n", linectr);
++ continue;
++ }
++ u = strtoul(cp, &cp, 10);
++ while (isspace(*cp))
++ cp++;
++ if (!*cp) {
++ fprintf(stderr, "Invalid HID country code at line %u\n", linectr);
++ continue;
++ }
++ if (new_countrycode(cp, u))
++ fprintf(stderr, "Duplicate HID country code at line %u country %02u %s\n", linectr, u, cp);
++ DBG(printf("line %5u keyboard country code %02u %s\n", linectr, u, cp));
++ continue;
++ }
+ if (isxdigit(*cp)) {
+ /* vendor */
+ u = strtoul(cp, &cp, 16);
+--- usbutils-0.11/names.h~usbutils-0.11+cvs20041108
++++ usbutils-0.11/names.h
+@@ -44,6 +44,7 @@
+ extern const char *names_langid(u_int16_t langid);
+ extern const char *names_physdes(u_int8_t ph);
+ extern const char *names_bias(u_int8_t b);
++extern const char *names_countrycode(unsigned int countrycode);
+ extern int names_init(char *n);
+
+ /* ---------------------------------------------------------------------- */
+--- usbutils-0.11/usb.h
++++ /dev/null
+@@ -1,768 +0,0 @@
+-#ifndef __LINUX_USB_H
+-#define __LINUX_USB_H
+-
+-/* USB constants */
+-
+-/*
+- * Device and/or Interface Class codes
+- */
+-#define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */
+-#define USB_CLASS_AUDIO 1
+-#define USB_CLASS_COMM 2
+-#define USB_CLASS_HID 3
+-#define USB_CLASS_PRINTER 7
+-#define USB_CLASS_MASS_STORAGE 8
+-#define USB_CLASS_HUB 9
+-#define USB_CLASS_DATA 10
+-#define USB_CLASS_VENDOR_SPEC 0xff
+-
+-/*
+- * USB types
+- */
+-#define USB_TYPE_STANDARD (0x00 << 5)
+-#define USB_TYPE_CLASS (0x01 << 5)
+-#define USB_TYPE_VENDOR (0x02 << 5)
+-#define USB_TYPE_RESERVED (0x03 << 5)
+-
+-/*
+- * USB recipients
+- */
+-#define USB_RECIP_DEVICE 0x00
+-#define USB_RECIP_INTERFACE 0x01
+-#define USB_RECIP_ENDPOINT 0x02
+-#define USB_RECIP_OTHER 0x03
+-
+-/*
+- * USB directions
+- */
+-#define USB_DIR_OUT 0
+-#define USB_DIR_IN 0x80
+-
+-/*
+- * Descriptor types
+- */
+-#define USB_DT_DEVICE 0x01
+-#define USB_DT_CONFIG 0x02
+-#define USB_DT_STRING 0x03
+-#define USB_DT_INTERFACE 0x04
+-#define USB_DT_ENDPOINT 0x05
+-
+-#define USB_DT_HID (USB_TYPE_CLASS | 0x01)
+-#define USB_DT_REPORT (USB_TYPE_CLASS | 0x02)
+-#define USB_DT_PHYSICAL (USB_TYPE_CLASS | 0x03)
+-#define USB_DT_HUB (USB_TYPE_CLASS | 0x09)
+-
+-/*
+- * Descriptor sizes per descriptor type
+- */
+-#define USB_DT_DEVICE_SIZE 18
+-#define USB_DT_CONFIG_SIZE 9
+-#define USB_DT_INTERFACE_SIZE 9
+-#define USB_DT_ENDPOINT_SIZE 7
+-#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */
+-#define USB_DT_HUB_NONVAR_SIZE 7
+-#define USB_DT_HID_SIZE 9
+-
+-/*
+- * Endpoints
+- */
+-#define USB_ENDPOINT_NUMBER_MASK 0x0f /* in bEndpointAddress */
+-#define USB_ENDPOINT_DIR_MASK 0x80
+-
+-#define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */
+-#define USB_ENDPOINT_XFER_CONTROL 0
+-#define USB_ENDPOINT_XFER_ISOC 1
+-#define USB_ENDPOINT_XFER_BULK 2
+-#define USB_ENDPOINT_XFER_INT 3
+-
+-/*
+- * USB Packet IDs (PIDs)
+- */
+-#define USB_PID_UNDEF_0 0xf0
+-#define USB_PID_OUT 0xe1
+-#define USB_PID_ACK 0xd2
+-#define USB_PID_DATA0 0xc3
+-#define USB_PID_PING 0xb4 /* USB 2.0 */
+-#define USB_PID_SOF 0xa5
+-#define USB_PID_NYET 0x96 /* USB 2.0 */
+-#define USB_PID_DATA2 0x87 /* USB 2.0 */
+-#define USB_PID_SPLIT 0x78 /* USB 2.0 */
+-#define USB_PID_IN 0x69
+-#define USB_PID_NAK 0x5a
+-#define USB_PID_DATA1 0x4b
+-#define USB_PID_PREAMBLE 0x3c /* Token mode */
+-#define USB_PID_ERR 0x3c /* USB 2.0: handshake mode */
+-#define USB_PID_SETUP 0x2d
+-#define USB_PID_STALL 0x1e
+-#define USB_PID_MDATA 0x0f /* USB 2.0 */
+-
+-/*
+- * Standard requests
+- */
+-#define USB_REQ_GET_STATUS 0x00
+-#define USB_REQ_CLEAR_FEATURE 0x01
+-#define USB_REQ_SET_FEATURE 0x03
+-#define USB_REQ_SET_ADDRESS 0x05
+-#define USB_REQ_GET_DESCRIPTOR 0x06
+-#define USB_REQ_SET_DESCRIPTOR 0x07
+-#define USB_REQ_GET_CONFIGURATION 0x08
+-#define USB_REQ_SET_CONFIGURATION 0x09
+-#define USB_REQ_GET_INTERFACE 0x0A
+-#define USB_REQ_SET_INTERFACE 0x0B
+-#define USB_REQ_SYNCH_FRAME 0x0C
+-
+-/*
+- * HID requests
+- */
+-#define USB_REQ_GET_REPORT 0x01
+-#define USB_REQ_GET_IDLE 0x02
+-#define USB_REQ_GET_PROTOCOL 0x03
+-#define USB_REQ_SET_REPORT 0x09
+-#define USB_REQ_SET_IDLE 0x0A
+-#define USB_REQ_SET_PROTOCOL 0x0B
+-
+-
+-#ifdef __KERNEL__
+-
+-#include <linux/types.h>
+-#include <linux/ioctl.h>
+-#include <linux/version.h>
+-#include <linux/sched.h>
+-#include <linux/delay.h>
+-#include <linux/interrupt.h> /* for in_interrupt() */
+-#include <linux/config.h>
+-#include <linux/list.h>
+-
+-#define USB_MAJOR 180
+-
+-static __inline__ void wait_ms(unsigned int ms)
+-{
+- if(!in_interrupt()) {
+- current->state = TASK_UNINTERRUPTIBLE;
+- schedule_timeout(1 + ms * HZ / 1000);
+- }
+- else
+- mdelay(ms);
+-}
+-
+-typedef struct {
+- __u8 requesttype;
+- __u8 request;
+- __u16 value;
+- __u16 index;
+- __u16 length;
+-} devrequest __attribute__ ((packed));
+-
+-/*
+- * USB-status codes:
+- * USB_ST* maps to -E* and should go away in the future
+- */
+-
+-#define USB_ST_NOERROR 0
+-#define USB_ST_CRC (-EILSEQ)
+-#define USB_ST_BITSTUFF (-EPROTO)
+-#define USB_ST_NORESPONSE (-ETIMEDOUT) /* device not responding/handshaking */
+-#define USB_ST_DATAOVERRUN (-EOVERFLOW)
+-#define USB_ST_DATAUNDERRUN (-EREMOTEIO)
+-#define USB_ST_BUFFEROVERRUN (-ECOMM)
+-#define USB_ST_BUFFERUNDERRUN (-ENOSR)
+-#define USB_ST_INTERNALERROR (-EPROTO) /* unknown error */
+-#define USB_ST_SHORT_PACKET (-EREMOTEIO)
+-#define USB_ST_PARTIAL_ERROR (-EXDEV) /* ISO transfer only partially completed */
+-#define USB_ST_URB_KILLED (-ENOENT) /* URB canceled by user */
+-#define USB_ST_URB_PENDING (-EINPROGRESS)
+-#define USB_ST_REMOVED (-ENODEV) /* device not existing or removed */
+-#define USB_ST_TIMEOUT (-ETIMEDOUT) /* communication timed out, also in urb->status**/
+-#define USB_ST_NOTSUPPORTED (-ENOSYS)
+-#define USB_ST_BANDWIDTH_ERROR (-ENOSPC) /* too much bandwidth used */
+-#define USB_ST_URB_INVALID_ERROR (-EINVAL) /* invalid value/transfer type */
+-#define USB_ST_URB_REQUEST_ERROR (-ENXIO) /* invalid endpoint */
+-#define USB_ST_STALL (-EPIPE) /* pipe stalled, also in urb->status*/
+-
+-/*
+- * USB device number allocation bitmap. There's one bitmap
+- * per USB tree.
+- */
+-struct usb_devmap {
+- unsigned long devicemap[128 / (8*sizeof(unsigned long))];
+-};
+-
+-#define USB_MAXBUS 64
+-
+-struct usb_busmap {
+- unsigned long busmap[USB_MAXBUS / (8*sizeof(unsigned long))];
+-};
+-
+-/*
+- * This is a USB device descriptor.
+- *
+- * USB device information
+- */
+-
+-/* Everything but the endpoint maximums are aribtrary */
+-#define USB_MAXCONFIG 8
+-#define USB_ALTSETTINGALLOC 4
+-#define USB_MAXALTSETTING 128 /* Hard limit */
+-#define USB_MAXINTERFACES 32
+-#define USB_MAXENDPOINTS 32
+-
+-/* All standard descriptors have these 2 fields in common */
+-struct usb_descriptor_header {
+- __u8 bLength;
+- __u8 bDescriptorType;
+-} __attribute__ ((packed));
+-
+-/* Device descriptor */
+-struct usb_device_descriptor {
+- __u8 bLength;
+- __u8 bDescriptorType;
+- __u16 bcdUSB;
+- __u8 bDeviceClass;
+- __u8 bDeviceSubClass;
+- __u8 bDeviceProtocol;
+- __u8 bMaxPacketSize0;
+- __u16 idVendor;
+- __u16 idProduct;
+- __u16 bcdDevice;
+- __u8 iManufacturer;
+- __u8 iProduct;
+- __u8 iSerialNumber;
+- __u8 bNumConfigurations;
+-} __attribute__ ((packed));
+-
+-/* Endpoint descriptor */
+-struct usb_endpoint_descriptor {
+- __u8 bLength;
+- __u8 bDescriptorType;
+- __u8 bEndpointAddress;
+- __u8 bmAttributes;
+- __u16 wMaxPacketSize;
+- __u8 bInterval;
+- __u8 bRefresh;
+- __u8 bSynchAddress;
+-
+- unsigned char *extra; /* Extra descriptors */
+- int extralen;
+-} __attribute__ ((packed));
+-
+-/* Interface descriptor */
+-struct usb_interface_descriptor {
+- __u8 bLength;
+- __u8 bDescriptorType;
+- __u8 bInterfaceNumber;
+- __u8 bAlternateSetting;
+- __u8 bNumEndpoints;
+- __u8 bInterfaceClass;
+- __u8 bInterfaceSubClass;
+- __u8 bInterfaceProtocol;
+- __u8 iInterface;
+-
+- struct usb_endpoint_descriptor *endpoint;
+-
+- unsigned char *extra;
+- int extralen;
+-} __attribute__ ((packed));
+-
+-struct usb_interface {
+- struct usb_interface_descriptor *altsetting;
+-
+- int act_altsetting; /* active alternate setting */
+- int num_altsetting; /* number of alternate settings */
+- int max_altsetting; /* total memory allocated */
+-
+- struct usb_driver *driver; /* driver */
+- void *private_data;
+-};
+-
+-/* Configuration descriptor information.. */
+-struct usb_config_descriptor {
+- __u8 bLength;
+- __u8 bDescriptorType;
+- __u16 wTotalLength;
+- __u8 bNumInterfaces;
+- __u8 bConfigurationValue;
+- __u8 iConfiguration;
+- __u8 bmAttributes;
+- __u8 MaxPower;
+-
+- struct usb_interface *interface;
+-} __attribute__ ((packed));
+-
+-/* String descriptor */
+-struct usb_string_descriptor {
+- __u8 bLength;
+- __u8 bDescriptorType;
+- __u16 wData[1];
+-} __attribute__ ((packed));
+-
+-struct usb_device;
+-
+-struct usb_driver {
+- const char *name;
+-
+- void * (*probe)(struct usb_device *, unsigned int);
+- void (*disconnect)(struct usb_device *, void *);
+-
+- struct list_head driver_list;
+-
+- struct file_operations *fops;
+- int minor;
+-};
+-
+-/*
+- * Pointer to a device endpoint interrupt function -greg
+- * Parameters:
+- * int status - This needs to be defined. Right now each HCD
+- * passes different transfer status bits back. Don't use it
+- * until we come up with a common meaning.
+- * void *buffer - This is a pointer to the data used in this
+- * USB transfer.
+- * int length - This is the number of bytes transferred in or out
+- * of the buffer by this transfer. (-1 = unknown/unsupported)
+- * void *dev_id - This is a user defined pointer set when the IRQ
+- * is requested that is passed back.
+- *
+- * Special Cases:
+- * if (status == USB_ST_REMOVED), don't trust buffer or len.
+- */
+-typedef int (*usb_device_irq)(int, void *, int, void *);
+-
+-/*----------------------------------------------------------------------------*
+- * New USB Structures *
+- *----------------------------------------------------------------------------*/
+-
+-#define USB_DISABLE_SPD 0x0001
+-#define USB_ISO_ASAP 0x0002
+-#define USB_URB_EARLY_COMPLETE 0x0004
+-#define USB_ASYNC_UNLINK 0x0008
+-#define USB_QUEUE_BULK 0x0010
+-#define USB_TIMEOUT_KILLED 0x1000 // only set by HCD!
+-
+-typedef struct
+-{
+- unsigned int offset;
+- unsigned int length; // expected length
+- unsigned int actual_length;
+- unsigned int status;
+-} iso_packet_descriptor_t, *piso_packet_descriptor_t;
+-
+-struct urb;
+-typedef void (*usb_complete_t)(struct urb *);
+-
+-typedef struct urb
+-{
+- spinlock_t lock; // lock for the URB
+- void *hcpriv; // private data for host controller
+- struct list_head urb_list; // list pointer to all active urbs
+- struct urb *next; // pointer to next URB
+- struct usb_device *dev; // pointer to associated USB device
+- unsigned int pipe; // pipe information
+- int status; // returned status
+- unsigned int transfer_flags; // USB_DISABLE_SPD | USB_ISO_ASAP | USB_URB_EARLY_COMPLETE
+- void *transfer_buffer; // associated data buffer
+- int transfer_buffer_length; // data buffer length
+- int actual_length; // actual data buffer length
+- unsigned char *setup_packet; // setup packet (control only)
+- //
+- int start_frame; // start frame (iso/irq only)
+- int number_of_packets; // number of packets in this request (iso/irq only)
+- int interval; // polling interval (irq only)
+- int error_count; // number of errors in this transfer (iso only)
+- int timeout; // timeout (in jiffies)
+- //
+- void *context; // context for completion routine
+- usb_complete_t complete; // pointer to completion routine
+- //
+- iso_packet_descriptor_t iso_frame_desc[0];
+-} urb_t, *purb_t;
+-
+-#define FILL_CONTROL_URB(a,aa,b,c,d,e,f,g) \
+- do {\
+- spin_lock_init(&(a)->lock);\
+- (a)->dev=aa;\
+- (a)->pipe=b;\
+- (a)->setup_packet=c;\
+- (a)->transfer_buffer=d;\
+- (a)->transfer_buffer_length=e;\
+- (a)->complete=f;\
+- (a)->context=g;\
+- } while (0)
+-
+-#define FILL_BULK_URB(a,aa,b,c,d,e,f) \
+- do {\
+- spin_lock_init(&(a)->lock);\
+- (a)->dev=aa;\
+- (a)->pipe=b;\
+- (a)->transfer_buffer=c;\
+- (a)->transfer_buffer_length=d;\
+- (a)->complete=e;\
+- (a)->context=f;\
+- } while (0)
+-
+-#define FILL_INT_URB(a,aa,b,c,d,e,f,g) \
+- do {\
+- spin_lock_init(&(a)->lock);\
+- (a)->dev=aa;\
+- (a)->pipe=b;\
+- (a)->transfer_buffer=c;\
+- (a)->transfer_buffer_length=d;\
+- (a)->complete=e;\
+- (a)->context=f;\
+- (a)->interval=g;\
+- (a)->start_frame=-1;\
+- } while (0)
+-
+-#define FILL_CONTROL_URB_TO(a,aa,b,c,d,e,f,g,h) \
+- do {\
+- spin_lock_init(&(a)->lock);\
+- (a)->dev=aa;\
+- (a)->pipe=b;\
+- (a)->setup_packet=c;\
+- (a)->transfer_buffer=d;\
+- (a)->transfer_buffer_length=e;\
+- (a)->complete=f;\
+- (a)->context=g;\
+- (a)->timeout=h;\
+- } while (0)
+-
+-#define FILL_BULK_URB_TO(a,aa,b,c,d,e,f,g) \
+- do {\
+- spin_lock_init(&(a)->lock);\
+- (a)->dev=aa;\
+- (a)->pipe=b;\
+- (a)->transfer_buffer=c;\
+- (a)->transfer_buffer_length=d;\
+- (a)->complete=e;\
+- (a)->context=f;\
+- (a)->timeout=g;\
+- } while (0)
+-
+-purb_t usb_alloc_urb(int iso_packets);
+-void usb_free_urb (purb_t purb);
+-int usb_submit_urb(purb_t purb);
+-int usb_unlink_urb(purb_t purb);
+-int usb_internal_control_msg(struct usb_device *usb_dev, unsigned int pipe, devrequest *cmd, void *data, int len, int timeout);
+-int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout);
+-
+-/*-------------------------------------------------------------------*
+- * COMPATIBILITY STUFF *
+- *-------------------------------------------------------------------*/
+-typedef struct
+-{
+- wait_queue_head_t *wakeup;
+-
+- usb_device_irq handler;
+- void* stuff;
+- /* more to follow */
+-} api_wrapper_data;
+-
+-struct irq_wrapper_data {
+- void *context;
+- usb_device_irq handler;
+-};
+-
+-/* -------------------------------------------------------------------------- */
+-
+-struct usb_operations {
+- int (*allocate)(struct usb_device *);
+- int (*deallocate)(struct usb_device *);
+- int (*get_frame_number) (struct usb_device *usb_dev);
+- int (*submit_urb) (struct urb* purb);
+- int (*unlink_urb) (struct urb* purb);
+-};
+-
+-/*
+- * Allocated per bus we have
+- */
+-struct usb_bus {
+- int busnum; /* Bus number (in order of reg) */
+-
+- struct usb_devmap devmap; /* Device map */
+- struct usb_operations *op; /* Operations (specific to the HC) */
+- struct usb_device *root_hub; /* Root hub */
+- struct list_head bus_list;
+- void *hcpriv; /* Host Controller private data */
+-
+- unsigned int bandwidth_allocated; /* on this Host Controller; */
+- /* applies to Int. and Isoc. pipes; */
+- /* measured in microseconds/frame; */
+- /* range is 0..900, where 900 = */
+- /* 90% of a 1-millisecond frame */
+- int bandwidth_int_reqs; /* number of Interrupt requesters */
+- int bandwidth_isoc_reqs; /* number of Isoc. requesters */
+-
+- /* usbdevfs inode list */
+- struct list_head inodes;
+-};
+-
+-#define USB_MAXCHILDREN (8) /* This is arbitrary */
+-
+-struct usb_device {
+- int devnum; /* Device number on USB bus */
+- int slow; /* Slow device? */
+-
+- atomic_t refcnt; /* Reference count */
+-
+- unsigned int toggle[2]; /* one bit for each endpoint ([0] = IN, [1] = OUT) */
+- unsigned int halted[2]; /* endpoint halts; one bit per endpoint # & direction; */
+- /* [0] = IN, [1] = OUT */
+- struct usb_config_descriptor *actconfig;/* the active configuration */
+- int epmaxpacketin[16]; /* INput endpoint specific maximums */
+- int epmaxpacketout[16]; /* OUTput endpoint specific maximums */
+-
+- struct usb_device *parent;
+- struct usb_bus *bus; /* Bus we're part of */
+-
+- struct usb_device_descriptor descriptor;/* Descriptor */
+- struct usb_config_descriptor *config; /* All of the configs */
+-
+- int have_langid; /* whether string_langid is valid yet */
+- int string_langid; /* language ID for strings */
+-
+- void *hcpriv; /* Host Controller private data */
+-
+- /* usbdevfs inode list */
+- struct list_head inodes;
+- struct list_head filelist;
+-
+- /*
+- * Child devices - these can be either new devices
+- * (if this is a hub device), or different instances
+- * of this same device.
+- *
+- * Each instance needs its own set of data structures.
+- */
+-
+- int maxchild; /* Number of ports if hub */
+- struct usb_device *children[USB_MAXCHILDREN];
+-};
+-
+-extern int usb_register(struct usb_driver *);
+-extern void usb_deregister(struct usb_driver *);
+-
+-/* used these for multi-interface device registration */
+-extern void usb_driver_claim_interface(struct usb_driver *driver, struct usb_interface *iface, void* priv);
+-extern int usb_interface_claimed(struct usb_interface *iface);
+-extern void usb_driver_release_interface(struct usb_driver *driver, struct usb_interface *iface);
+-
+-extern struct usb_bus *usb_alloc_bus(struct usb_operations *);
+-extern void usb_free_bus(struct usb_bus *);
+-extern void usb_register_bus(struct usb_bus *);
+-extern void usb_deregister_bus(struct usb_bus *);
+-
+-extern struct usb_device *usb_alloc_dev(struct usb_device *parent, struct usb_bus *);
+-extern void usb_free_dev(struct usb_device *);
+-extern void usb_inc_dev_use(struct usb_device *);
+-#define usb_dec_dev_use usb_free_dev
+-extern void usb_release_bandwidth(struct usb_device *, int);
+-
+-extern int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *data, __u16 size, int timeout);
+-
+-extern void usb_init_root_hub(struct usb_device *dev);
+-extern int usb_root_hub_string(int id, int serial, char *type, __u8 *data, int len);
+-extern void usb_connect(struct usb_device *dev);
+-extern void usb_disconnect(struct usb_device **);
+-
+-extern void usb_destroy_configuration(struct usb_device *dev);
+-
+-int usb_get_current_frame_number (struct usb_device *usb_dev);
+-
+-/*
+- * Calling this entity a "pipe" is glorifying it. A USB pipe
+- * is something embarrassingly simple: it basically consists
+- * of the following information:
+- * - device number (7 bits)
+- * - endpoint number (4 bits)
+- * - current Data0/1 state (1 bit)
+- * - direction (1 bit)
+- * - speed (1 bit)
+- * - max packet size (2 bits: 8, 16, 32 or 64) [Historical; now gone.]
+- * - pipe type (2 bits: control, interrupt, bulk, isochronous)
+- *
+- * That's 18 bits. Really. Nothing more. And the USB people have
+- * documented these eighteen bits as some kind of glorious
+- * virtual data structure.
+- *
+- * Let's not fall in that trap. We'll just encode it as a simple
+- * unsigned int. The encoding is:
+- *
+- * - max size: bits 0-1 (00 = 8, 01 = 16, 10 = 32, 11 = 64) [Historical; now gone.]
+- * - direction: bit 7 (0 = Host-to-Device [Out], 1 = Device-to-Host [In])
+- * - device: bits 8-14
+- * - endpoint: bits 15-18
+- * - Data0/1: bit 19
+- * - speed: bit 26 (0 = Full, 1 = Low Speed)
+- * - pipe type: bits 30-31 (00 = isochronous, 01 = interrupt, 10 = control, 11 = bulk)
+- *
+- * Why? Because it's arbitrary, and whatever encoding we select is really
+- * up to us. This one happens to share a lot of bit positions with the UHCI
+- * specification, so that much of the uhci driver can just mask the bits
+- * appropriately.
+- */
+-
+-#define PIPE_ISOCHRONOUS 0
+-#define PIPE_INTERRUPT 1
+-#define PIPE_CONTROL 2
+-#define PIPE_BULK 3
+-
+-#define usb_maxpacket(dev, pipe, out) (out \
+- ? (dev)->epmaxpacketout[usb_pipeendpoint(pipe)] \
+- : (dev)->epmaxpacketin [usb_pipeendpoint(pipe)] )
+-#define usb_packetid(pipe) (((pipe) & USB_DIR_IN) ? USB_PID_IN : USB_PID_OUT)
+-
+-#define usb_pipeout(pipe) ((((pipe) >> 7) & 1) ^ 1)
+-#define usb_pipein(pipe) (((pipe) >> 7) & 1)
+-#define usb_pipedevice(pipe) (((pipe) >> 8) & 0x7f)
+-#define usb_pipe_endpdev(pipe) (((pipe) >> 8) & 0x7ff)
+-#define usb_pipeendpoint(pipe) (((pipe) >> 15) & 0xf)
+-#define usb_pipedata(pipe) (((pipe) >> 19) & 1)
+-#define usb_pipeslow(pipe) (((pipe) >> 26) & 1)
+-#define usb_pipetype(pipe) (((pipe) >> 30) & 3)
+-#define usb_pipeisoc(pipe) (usb_pipetype((pipe)) == PIPE_ISOCHRONOUS)
+-#define usb_pipeint(pipe) (usb_pipetype((pipe)) == PIPE_INTERRUPT)
+-#define usb_pipecontrol(pipe) (usb_pipetype((pipe)) == PIPE_CONTROL)
+-#define usb_pipebulk(pipe) (usb_pipetype((pipe)) == PIPE_BULK)
+-
+-#define PIPE_DEVEP_MASK 0x0007ff00
+-
+-/* The D0/D1 toggle bits */
+-#define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> ep) & 1)
+-#define usb_dotoggle(dev, ep, out) ((dev)->toggle[out] ^= (1 << ep))
+-#define usb_settoggle(dev, ep, out, bit) ((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << ep)) | ((bit) << ep))
+-
+-/* Endpoint halt control/status */
+-#define usb_endpoint_out(ep_dir) (((ep_dir >> 7) & 1) ^ 1)
+-#define usb_endpoint_halt(dev, ep, out) ((dev)->halted[out] |= (1 << (ep)))
+-#define usb_endpoint_running(dev, ep, out) ((dev)->halted[out] &= ~(1 << (ep)))
+-#define usb_endpoint_halted(dev, ep, out) ((dev)->halted[out] & (1 << (ep)))
+-
+-static inline unsigned int __create_pipe(struct usb_device *dev, unsigned int endpoint)
+-{
+- return (dev->devnum << 8) | (endpoint << 15) | (dev->slow << 26);
+-}
+-
+-static inline unsigned int __default_pipe(struct usb_device *dev)
+-{
+- return (dev->slow << 26);
+-}
+-
+-/* Create various pipes... */
+-#define usb_sndctrlpipe(dev,endpoint) ((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint))
+-#define usb_rcvctrlpipe(dev,endpoint) ((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
+-#define usb_sndisocpipe(dev,endpoint) ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint))
+-#define usb_rcvisocpipe(dev,endpoint) ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
+-#define usb_sndbulkpipe(dev,endpoint) ((PIPE_BULK << 30) | __create_pipe(dev,endpoint))
+-#define usb_rcvbulkpipe(dev,endpoint) ((PIPE_BULK << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
+-#define usb_sndintpipe(dev,endpoint) ((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint))
+-#define usb_rcvintpipe(dev,endpoint) ((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
+-#define usb_snddefctrl(dev) ((PIPE_CONTROL << 30) | __default_pipe(dev))
+-#define usb_rcvdefctrl(dev) ((PIPE_CONTROL << 30) | __default_pipe(dev) | USB_DIR_IN)
+-
+-/*
+- * Send and receive control messages..
+- */
+-int usb_new_device(struct usb_device *dev);
+-int usb_reset_device(struct usb_device *dev);
+-int usb_set_address(struct usb_device *dev);
+-int usb_get_descriptor(struct usb_device *dev, unsigned char desctype,
+- unsigned char descindex, void *buf, int size);
+-int usb_get_class_descriptor(struct usb_device *dev, int ifnum, unsigned char desctype,
+- unsigned char descindex, void *buf, int size);
+-int usb_get_device_descriptor(struct usb_device *dev);
+-int __usb_get_extra_descriptor(char *buffer, unsigned size, unsigned char type, void **ptr);
+-int usb_get_status(struct usb_device *dev, int type, int target, void *data);
+-int usb_get_protocol(struct usb_device *dev, int ifnum);
+-int usb_set_protocol(struct usb_device *dev, int ifnum, int protocol);
+-int usb_set_interface(struct usb_device *dev, int ifnum, int alternate);
+-int usb_set_idle(struct usb_device *dev, int ifnum, int duration, int report_id);
+-int usb_set_configuration(struct usb_device *dev, int configuration);
+-int usb_get_report(struct usb_device *dev, int ifnum, unsigned char type,
+- unsigned char id, void *buf, int size);
+-int usb_set_report(struct usb_device *dev, int ifnum, unsigned char type,
+- unsigned char id, void *buf, int size);
+-int usb_string(struct usb_device *dev, int index, char *buf, size_t size);
+-int usb_clear_halt(struct usb_device *dev, int pipe);
+-
+-#define usb_get_extra_descriptor(ifpoint,type,ptr)\
+- __usb_get_extra_descriptor((ifpoint)->extra,(ifpoint)->extralen,type,(void**)ptr)
+-
+-/*
+- * Some USB bandwidth allocation constants.
+- */
+-#define BW_HOST_DELAY 1000L /* nanoseconds */
+-#define BW_HUB_LS_SETUP 333L /* nanoseconds */
+- /* 4 full-speed bit times (est.) */
+-
+-#define FRAME_TIME_BITS 12000L /* frame = 1 millisecond */
+-#define FRAME_TIME_MAX_BITS_ALLOC (90L * FRAME_TIME_BITS / 100L)
+-#define FRAME_TIME_USECS 1000L
+-#define FRAME_TIME_MAX_USECS_ALLOC (90L * FRAME_TIME_USECS / 100L)
+-
+-#define BitTime(bytecount) (7 * 8 * bytecount / 6) /* with integer truncation */
+- /* Trying not to use worst-case bit-stuffing
+- of (7/6 * 8 * bytecount) = 9.33 * bytecount */
+- /* bytecount = data payload byte count */
+-
+-#define NS_TO_US(ns) ((ns + 500L) / 1000L)
+- /* convert & round nanoseconds to microseconds */
+-
+-/*
+- * Debugging helpers..
+- */
+-void usb_show_device_descriptor(struct usb_device_descriptor *);
+-void usb_show_config_descriptor(struct usb_config_descriptor *);
+-void usb_show_interface_descriptor(struct usb_interface_descriptor *);
+-void usb_show_endpoint_descriptor(struct usb_endpoint_descriptor *);
+-void usb_show_device(struct usb_device *);
+-void usb_show_string(struct usb_device *dev, char *id, int index);
+-
+-#ifdef DEBUG
+-#define dbg(format, arg...) printk(KERN_DEBUG __FILE__ ": " format "\n" , ## arg)
+-#else
+-#define dbg(format, arg...) do {} while (0)
+-#endif
+-#define err(format, arg...) printk(KERN_ERR __FILE__ ": " format "\n" , ## arg)
+-#define info(format, arg...) printk(KERN_INFO __FILE__ ": " format "\n" , ## arg)
+-#define warn(format, arg...) printk(KERN_WARNING __FILE__ ": " format "\n" , ## arg)
+-
+-
+-/*
+- * bus and driver list
+- */
+-
+-extern struct list_head usb_driver_list;
+-extern struct list_head usb_bus_list;
+-
+-/*
+- * USB device fs stuff
+- */
+-
+-#ifdef CONFIG_USB_DEVICEFS
+-
+-/*
+- * these are expected to be called from the USB core/hub thread
+- * with the kernel lock held
+- */
+-extern void usbdevfs_add_bus(struct usb_bus *bus);
+-extern void usbdevfs_remove_bus(struct usb_bus *bus);
+-extern void usbdevfs_add_device(struct usb_device *dev);
+-extern void usbdevfs_remove_device(struct usb_device *dev);
+-
+-extern int usbdevfs_init(void);
+-extern void usbdevfs_cleanup(void);
+-
+-#else /* CONFIG_USB_DEVICEFS */
+-
+-extern inline void usbdevfs_add_bus(struct usb_bus *bus) {}
+-extern inline void usbdevfs_remove_bus(struct usb_bus *bus) {}
+-extern inline void usbdevfs_add_device(struct usb_device *dev) {}
+-extern inline void usbdevfs_remove_device(struct usb_device *dev) {}
+-
+-extern inline int usbdevfs_init(void) { return 0; }
+-extern inline void usbdevfs_cleanup(void) { }
+-
+-#endif /* CONFIG_USB_DEVICEFS */
+-
+-#endif /* __KERNEL__ */
+-
+-#endif
+--- usbutils-0.11/usb.ids~usbutils-0.11+cvs20041108
++++ usbutils-0.11/usb.ids
+@@ -3,8 +3,10 @@
+ #
+ # Maintained by Vojtech Pavlik <vojtech@suse.cz>
+ # If you have any new entries, send them to the maintainer.
++# The latest version can be obtained from
++# http://www.linux-usb.org/usb.ids
+ #
+-# $Id$
++# $Id$
+ #
+
+ # Vendors, devices and interfaces. Please keep sorted.
+@@ -14,22 +16,26 @@
+ # device device_name <-- single tab
+ # interface interface_name <-- two tabs
+
+-0000 Virtual
+- 0000 Hub
+ 0386 LTS
+ 0001 PSX for USB Converter
+-03e8 AOX Inc.
++03e8 EndPoints, Inc.
+ 0004 SE401 WebCam
+ 0008 101 Ethernet [klsi]
+ 03e9 Thesys Microelectronics
+ 03ea Data Broadcasting Corp.
+ 03eb Atmel Corp.
+ 3301 4-port Hub
+- 7603 AT76c503a D-Link DWL-120
+-03ec Iwatsu America Inc.
++ 3312 4-port Hub
++ 7603 AT76c503a D-Link DWL-120 802.11b Adapter
++ 7605 AT76c503a 802.11b Adapter
++ 7606 AT76c505 802.11b dapter
++03ec Iwatsu America, Inc.
+ 03ed Mitel Corp.
+ 03ee Mitsumi
+ 0000 CD-R/RW Drive
++ 641f WIF-0402C Bluetooth Adapter
++ 6440 WML-C52APR Bluetooth Adapter
++ 6901 SmartDisk FDD
+ 03f0 Hewlett-Packard
+ 0004 DeskJet 895c
+ 0101 ScanJet 4100c
+@@ -39,6 +45,8 @@
+ 0107 CD-Writer Plus
+ 010c Multimedia Keyboard Hub
+ 0111 G55xi Printer/Scanner/Copier
++ 011c hn210w 802.11b Adapter
++ 0121 HP49g+ Calculator
+ 0201 ScanJet 6200c
+ 0202 PhotoSmart S20
+ 0204 DeskJet 815c
+@@ -46,30 +54,80 @@
+ 0207 CD-Writer Plus 8200e
+ 020c Multimedia Keyboard
+ 0304 DeskJet 810c/812c
++ 0305 ScanJet 4300c
+ 0311 OfficeJet G85xi
+ 0317 LaserJet 1200
+ 0401 ScanJet 5200c
+ 0404 DeskJet 830c/832c
+ 0405 ScanJet 3400cse
+ 0504 DeskJet 885c
++ 0505 ScanJet 2100c
++ 0517 LaserJet 1000
+ 0601 ScanJet 6300c
+ 0604 DeskJet 840c
+ 0605 ScanJet 2200c
+ 0701 ScanJet 5300c/5370c
++ 0704 DeskJet 825c
+ 0705 ScanJet 4400c
++ 0712 DeskJet 1180c
++ 0801 ScanJet 7400c
+ 0804 DeskJet 816c
++ 0901 ScanJet 2300c
++ 0904 DeskJet 845c
+ 1004 DeskJet 970c/970cse
+- 1104 Deskjet 959C
++ 1005 ScanJet 5400c
++ 1016 Jornada 548 Pocket PC
++ 1104 DeskJet 959c
+ 1105 ScanJet 5470c
++ 1116 Jornada 568 Pocket PC
+ 1151 750xi Printer/Scanner/Copier
+ 1204 DeskJet 930c
++ 1305 ScanJet 4570c
++ 1317 LaserJet 1005
++ 1405 Scanjet 3670
++ 1504 DeskJet 920c
++ 1604 DeskJet 940c
++ 1904 DeskJet 3820
++ 1e11 PSC-950
+ 2004 DeskJet 640c
++ 2005 ScanJet 3570c
++ 2104 DeskJet 630c
++ 2205 ScanJet 3500c
++ 2304 DeskJet 656c
++ 2305 ScanJet 3970c
++ 2811 PSC-2100
+ 3102 PhotoSmart P1100 Printer w/ Card Reader
+- 4102 PhotoSmart 618 Camera
+- 6202 PhotoSmart 215 Camera
+- 6302 PhotoSmart 318/612 Camera
+- efbe NEC Picty900
++ 3104 DeskJet 960c
++ 3304 DeskJet 990c
++ 3404 DeskJet 6122
++ 3504 DeskJet 6127c
++ 3c02 PhotoSmart 7350
++ 3f11 PSC-1315
++ 4002 PhotoSmart 720 / PhotoSmart 935 (storage)
++ 4102 PhotoSmart 618
++ 4202 PhotoSmart 812
++ 4302 PhotoSmart 850 (ptp)
++ 4402 PhotoSmart 935 (ptp)
++ 5004 DeskJet 995c
++ 6004 DeskJet 5550
++ 6104 DeskJet 5650c
++ 6202 PhotoSmart 215
++ 6204 DeskJet 5150c
++ 6302 PhotoSmart 318/612
++ 6402 PhotoSmart 715 (ptp)
++ 6502 PhotoSmart 120 (ptp)
++ 6602 PhotoSmart 320
++ 6702 PhotoSmart 720 (ptp)
++ 6802 PhotoSmart 620 (ptp)
++ 6a02 PhotoSmart 735 (ptp)
++ 7004 DeskJet 3320c
++ 7104 DeskJet 3420c
++ 7202 PhotoSmart 43x (ptp)
++ 7204 DeskJet 36xx
++ 7304 DeskJet 35xx
++ a004 DeskJet 5850c
+ bef4 NEC Picty760
++ efbe NEC Picty900
+ f0be NEC Picty920
+ f1be NEC Picty800
+ 03f1 Genoa Technology
+@@ -79,32 +137,35 @@
+ 03f5 Siemens Electromechanical
+ 03f8 Epson Imaging Technology Center
+ 03f9 KeyTronic Corp.
+-03fb OPTi Inc.
++03fb OPTi, Inc.
+ 03fc Elitegroup Computer Systems
+-03fd Xilinx Inc.
++03fd Xilinx, Inc.
+ 03fe Farallon Comunications
+-0400 National Semiconductor
+- 1000 BearPaw 1200 Scanner
+- 1001 BearPaw 2400 Scanner
+-0401 National Registry Inc.
+-0402 Acer Labs Inc.
+-0403 Future Technology Devices
++0400 National Semiconductor Corp.
++ 1000 Mustek BearPaw 1200 Scanner
++ 1001 Mustek BearPaw 2400 Scanner
++0401 National Registry, Inc.
++0402 ALi Corp.
++0403 Future Technology Devices International, Ltd
+ 0000 H4SMK 7 Port Hub
+- 8070 7 Port Hub
++ 6001 8-bit FIFO
+ 8040 4 Port Hub
++ 8070 7 Port Hub
+ 8370 7 Port Hub
+ 8371 PS/2 Keyboard And Mouse
+ 8372 FT8U100AX Serial Port
++ F208 Papenmeier Braille-Display
+ 0404 NCR Corp.
+-0405 inSilicon
++0405 Synopsys, Inc.
+ 0406 Fujitsu-ICL Computers
+ 0407 Fujitsu Personal Systems, Inc.
+-0408 Quanta Computer Inc.
+-0409 NEC Systems
++0408 Quanta Computer, Inc.
++0409 NEC Corp.
+ 0012 ATerm IT75DSU ISDN TA
+ 0014 Japanese Keyboard
+ 0027 MultiSync Monitor
+- 0058 USB2.0 Hub Controller
++ 0058 HighSpeed Hub
++ 0059 HighSpeed Hub
+ 55aa Hub
+ 55ab Hub [iMac kbd]
+ efbe P!cty 900 [HP DJ]
+@@ -122,21 +183,45 @@
+ 0131 DC-5000
+ 0132 DC-3400
+ 0140 DC-4800
++ 0160 DC4800
++ 0170 DX3900
+ 0300 EZ-200
+ 0400 MC3
++ 0500 DX3500
++ 0510 DX3600
++ 0525 DX3215
++ 0530 DX3700
++ 0535 EasyShare CX4230 Camera
++ 0540 LS420
++ 0550 DX4900
++ 0555 DX4330
++ 0560 CX4200
++ 0565 CX4210
++ 0566 CX4300
++ 0568 LS443
++ 0569 LS663
++ 0570 DX6340
++ 0571 CX6330
++ 0572 DX6440
++ 0573 CX6230
++ 0574 CX6200
++ 0575 DX6490
++ 0576 DX4530
+ 040b Weltrend Semiconductor
+-040c VTech Computers Ltd.
++040c VTech Computers, Ltd
+ 040d VIA Technologies, Inc.
+ 040e MCCI
+ 040f Echo Speech Corp.
+-0411 Melco, Inc.
++0411 MelCo., Inc.
+ 0001 LUA-TX Ethernet [pegasus]
++ 0016 WLI-USB-S11 802.11b Adapter
++ 0027 WLI-USB-KS11G 802.11b Adapter
+ 0412 Award Software International
+-0413 Leadtek Research Inc.
+-0414 Giga-Byte Technology Co., Ltd.
++0413 Leadtek Research, Inc.
++0414 Giga-Byte Technology Co., Ltd
+ 0416 Winbond Electronics Corp.
+ 0961 AVL Flash Card Reader
+- 5518 Hub
++ 5518 4-Port Hub
+ 551a PC Sync Keypad
+ 551b PC Async Keypad
+ 551c Sync Tenkey
+@@ -144,36 +229,58 @@
+ 551e Keyboard
+ 551f Keyboard w/ Sys and Media
+ 5521 Keyboard
++ 7723 SD Card Reader
+ 6481 16-bit Scanner
+ 0417 Symbios Logic
+ 0418 AST Research
+-0419 Samsung Info. Systems America Inc.
+-041a Phoenix Technologies, Ltd.
++0419 Samsung Info. Systems America, Inc.
++ 3001 Xerox P1202 Laser Printer
++ 8002 SyncMaster 757DFX HID Device
++041a Phoenix Technologies, Ltd
+ 041b d'TV
+ 041d S3, Inc.
+-041e Creative Labs
++041e Creative Technology, Ltd
+ 1002 Nomad II MP3 Player
+ 1003 Blaster GamePad Cobra
+ 1050 GamePad Cobra
++ 3020 SoundBlaster Audigy 2 NX
+ 4003 VideoBlaster WebCam Go Plus [W9967CF]
+ 4004 Nomad II MG MP3 Player
+ 400a PC-Cam 300
+ 400b PC-Cam 600
+ 400c WebCam 5 [pwc]
++ 400d WebCam PD1001
++ 4011 WebCam PRO eX
++ 4013 PC-Cam 750
++ 4015 CardCam Value
++ 4017 WebCam Mobile
++ 4018 WebCam Vista
++ 401c Creative WebCam NX [PD1110]
++ 4100 Nomad Jukebox 2 MP3 player
++ 4101 Nomad Jukebox 3 MP3 player
++ 4106 Nomad MuVo MP3 Player
++ 4108 Nomad Jukebox Zen MP3 player
++ 410b Nomad Jukebox Zen USB 2.0 MP3 player
++ 4109 Nomad Jukebox Zen NX MP3 player
++ 4110 Nomad Jukebox Zen Xtra MP3 player
++ 4111 Dell Digital Jukebox
+ 041f LCS Telegraphics
+ 0420 Chips and Technologies
+ 0421 Nokia Mobile Phones
+-0422 ADI Systems Inc.
++ 0401 6650 GSM Phone
++ 0800 Connectivity Cable DKU-5
++0422 ADI Systems, Inc.
+ 0423 Computer Access Technology Corp.
+ 000a NetMate Ethernet
+ 000c NetMate2 Ethernet
+ 000d USB Chief Analyzer
+ 1237 Andromeda Hub
+ 0424 Standard Microsystems Corp.
+-0425 Motorola Semiconductors HK, Ltd.
+-0426 Integrated Device Technology
+-0427 Motorola Electronics Taiwan Ltd.
+-0428 Advanced Gravis Computer Tech. Ltd.
++ 223a 8-in-1 Card Reader
++0425 Motorola Semiconductors HK, Ltd
++0426 Integrated Device Technology, Inc.
++0427 Motorola Electronics Taiwan, Ltd
++0428 Advanced Gravis Computer Tech, Ltd
+ 4001 GamePad Pro
+ 0429 Cirrus Logic
+ 042a Ericsson Austrian, AG
+@@ -182,29 +289,38 @@
+ 042d Micronics
+ 042e Acer, Inc.
+ 042f Molex, Inc.
+-0430 Sun Microsystems
++0430 Sun Microsystems, Inc.
+ 0005 Type 6 Keyboard
+ 0100 3-button Mouse
+ 0431 Itac Systems, Inc.
+ 0432 Unisys Corp.
+-0433 Alps Electric Inc.
++0433 Alps Electric, Inc.
+ 1101 IBM Game Controller
+-0434 Samsung Info. Systems America Inc.
++0434 Samsung Info. Systems America, Inc.
+ 0435 Hyundai Electronics America
+ 0436 Taugagreining HF
+ 0437 Framatome Connectors USA
+-0438 Advanced Micro Devices
++0438 Advanced Micro Devices, Inc.
+ 0439 Voice Technologies Group
+-043d Lexmark International Inc.
++043d Lexmark International, Inc.
+ 0002 Optra E310 Printer
+ 0009 Optra S2450 Printer
+ 000c Optra E312 Printer
+ 0017 Z32 printer
+ 0018 Z52 Printer
++ 001c Kodak Personal Picture Maker 200 Printer
++ 001f Kodak Personal Picture Maker 200 Card Reader
+ 0020 Z51 Printer
++ 0021 Z33 Printer
++ 002d X70/X73 Scan/Print/Copy
+ 003d X83 Scan/Print/Copy
+-043e LG Electronics USA Inc.
++ 0057 Z35 Printer
++ 0060 X74/X75 Scanner
++ 0061 X74 Hub
++ 0069 X74 Printer
++043e LG Electronics USA, Inc.
+ 42bd Flatron 795FT Plus Monitor
++ 4a4d Flatron 915FT Plus Monitor
+ 7001 MF-PD100 Soul Digital MP3 Player
+ 8484 LPC-U30 Webcam II
+ 8585 LPC-UC35 Webcam
+@@ -212,49 +328,69 @@
+ 0440 Eizo Nanao Corp.
+ 0441 Winbond Systems Lab.
+ 1456 Hub
+-0442 Ericsson Inc.
+-0443 Gateway 2000
+-0445 Lucent Technologies
+-0446 NMB Technologies, Inc.
++0442 Ericsson, Inc.
++0443 Gateway, Inc.
++0445 Lucent Technologies, Inc.
++0446 NMB Technologies Corp.
+ 0447 Momentum Microsystems
+-044a Shamrock Tech. Co., Ltd.
++044a Shamrock Tech. Co., Ltd
+ 044b WSI
+ 044c CCL/ITRI
+-044d Siemens Nixdorf
+-044e Alps Electric Co.
++044d Siemens Nixdorf AG
++044e Alps Electric Co., Ltd
+ 2002 MD-5500 Printer
++ 3001 UGTZ4 Bluetooth
+ 044f ThrustMaster, Inc.
++ 0400 HOTAS Cougar
+ a0a3 Fusion Digital GamePad
++ b203 360 Modena Pro Wheel
+ b300 Firestorm Dual Power
+-0450 DFI Inc.
+-0451 Texas Instruments
++ b304 Firestorm Dual Power
++0450 DFI, Inc.
++0451 Texas Instruments, Inc.
+ 1428 Hub
+ 1446 TUSB2040/2070 Hub
+ 2036 TUSB2036 Hub
+ 2046 TUSB2046 Hub
+ 2077 TUSB2077 Hub
++ 6000 AU5 ADSL Modem (pre-reenum)
++ 6001 AU5 ADSL Modem
+ e001 GraphLink
++ e004 TI-89 Titanium Calculator
++ e008 TI-84 Plus Silver Calculator
+ 0452 Mitsubishi Electronics America, Inc.
++ 0050 Diamond Pro 900u CRT Monitor
++ 0051 Integrated Hub
+ 0453 CMD Technology
+ 0454 Vobis Microcomputer AG
+ 0455 Telematics International, Inc.
+ 0456 Analog Devices, Inc.
+ 0457 Silicon Integrated Systems Corp.
+-0458 KYE Systems Corp.(Mouse Systems)
++0458 KYE Systems Corp. (Mouse Systems)
+ 0001 Mouse
+ 0002 Genius NetMouse Pro
+ 0003 Genius NetScroll+
++ 000e VideoCAM Web
++ 001a Genius WebScroll+
+ 0100 EasyPen Tablet
+ 0101 CueCat
+ 1003 Genius VideoCam
+ 1004 Flight2000 F-23 Joystick
++ 100a Aashima Technology Trust Sight Fighter Vibration Feedback Joystick
+ 2001 ColorPage-Vivid Pro Scanner
++ 2007 ColorPage-HR6 V2 Scanner
++ 2008 ColorPage-HR6 V2 Scanner
++ 2009 ColorPage-HR6A Scanner
++ 2011 ColorPage-Vivid3x Scanner
++ 2013 ColorPage-HR7 Scanner
++ 2015 ColorPage-HR7LE Scanner
++ 2016 ColorPage-HR6X Scanner
+ 0459 Adobe Systems, Inc.
+-045a Diamond Multimedia Systems
++045a SONICblue, Inc.
+ 0b4a SupraMax 2890 56K Modem [Lucent Atlas]
+ 0b68 SupraMax 56K Modem
+-045b Hitachi, Ltd.
+-045d Nortel Networks
++045b Hitachi, Ltd
++045d Nortel Networks, Ltd
+ 045e Microsoft Corp.
+ 0008 SideWinder Precision Pro
+ 0009 IntelliMouse
+@@ -264,6 +400,7 @@
+ 001b SideWinder Force Feedback 2 Joystick
+ 001d Natural Keyboard Pro
+ 001e IntelliMouse Explorer
++ 0023 Trackball Optical
+ 0024 Trackball Explorer
+ 0025 IntelliEye Mouse
+ 0026 SideWinder GamePad Pro
+@@ -271,58 +408,81 @@
+ 0028 SideWinder Dual Strike
+ 0029 IntelliMouse Optical
+ 002b Internet Keyboard Pro
+- 0034 SideWinder Force Feedback Wheel
+ 0033 Sidewinder Strategic Commander
++ 0034 SideWinder Force Feedback Wheel
+ 0038 SideWinder Precision 2
+ 0039 IntelliMouse Optical
+ 003b SideWinder Game Voice
+ 003c SideWinder Joystick
+-0460 Ace Cad Enterprise Co., Ltd.
+-0461 Primax Electronics
++ 0040 Wheel Mouse Optical
++ 0047 IntelliMouse Explorer 3.0
++ 0059 Wireless IntelliMouse Explorer
++ 006e MN510 802.11b Adapter
++ 007d Notebook Optical Mouse
++ 007e Wireless Transceiver for Bluetooth
++ 008a Wireless Keyboard and Mouse
++ 0284 Xbox DVD Playback Kit
++0460 Ace Cad Enterprise Co., Ltd
++0461 Primax Electronics, Ltd
+ 0300 G2-300 Scanner
+ 0301 G2E-300 Scanner
+ 0302 G2-300 #2 Scanner
+ 0303 G2E-300 #2 Scanner
+ 0340 Colorado 9600 Scanner
+ 0341 Colorado 600u Scanner
++ 0345 Visioneer 6200 Scanner
+ 0346 Memorex Maxx 6136u Scanner
+- 0347 Visioneer 4400 Scanner
++ 0347 Primascan Colorodao 2600u/Visioneer 4400 Scanner
+ 0360 Colorado 19200 Scanner
+ 0361 Colorado 1200u Scanner
++ 0364 LG Electronics Scanworks 600U Scanner
++ 0371 Visioneer Onetouch 8920 Scanner
++ 0377 Medion MD 5345 Scanner
++ 037b Medion MD 6190 Scanner
+ 0380 G2-600 Scanner
+ 0381 ReadyScan 636i Scanner
+ 0382 G2-600 #2 Scanner
+ 0383 G2E-600 Scanner
+ 0813 IBM UltraPort Camera
++ 0815 Micro Innovations WebCam
+ 081a Fujifilm IX-30 Camera
++ 081c Elitegroup ECS-C11 Camera
++ 081d Elitegroup ECS-C11 Storage
+ 4d01 Comfort Keyboard
+ 4d02 Mouse-in-a-Box
+ 4d03 Kensington Mouse-in-a-box
+ 4d04 Mouse
+ 0463 MGE UPS Systems
+- ffff Ellipse UPS
+-0464 AMP Incorporated
++ 0001 UPS
++ ffff UPS
++0464 AMP/Tycoelectronics Corp.
+ 0467 AT&T Paradyne
+-0468 Wieson Electronic Co., Ltd.
+-046a Cherry Mikroschalter GmbH
++0468 Wieson Technologies Co., Ltd
++046a Cherry GmbH
+ 0001 My3000 Keyboard
+ 0003 My3000 Hub
+-046b American Megatrends
++046b American Megatrends, Inc.
+ 046c Toshiba Corp., Digital Media Equipment
+-046d Logitech Inc.
++046d Logitech, Inc.
+ 0203 M2452 Keyboard
+ 0301 M4848 Mouse
+ 0401 HP PageScan
+ 0402 NEC PageScan
+- 040F Logitech/Storm PageScan
++ 040f Logitech/Storm PageScan
+ 0801 QuickCam Home
+ 0810 QuickCam Pro
+ 0840 QuickCam Express
+ 0850 QuickCam Web
+ 0870 QuickCam Express
++ 08a0 QuickCam IM
+ 08b0 QuickCam 3000 Pro [pwc]
++ 08b2 QuickCam Pro 4000
++ 08b3 QuickCam Zoom
++ 08b4 QuickCam Zoom
+ 0900 ClickSmart 310
+ 0901 ClickSmart 510
++ 0921 Labtec WebCam
++ 0950 Pocket Camera
+ c000 N43 [Pilot Mouse]
+ c001 N48/M-BB48 [FirstMouse Plus]
+ c002 M-BA47 [MouseMan Plus]
+@@ -331,6 +491,9 @@
+ c00c Optical Wheel Mouse
+ c00e Optical Mouse
+ c012 Optical Mouse
++ c016 Optical Mouse
++ c01b MX310 Optical Mouse
++ c025 MX500 Optical Mouse
+ c030 iFeel Mouse
+ c032 MouseMan iFeel
+ c202 WingMan Formula
+@@ -343,15 +506,22 @@
+ c283 WingMan Force 3D
+ c285 WingMan Strike Force 3D
+ c291 WingMan Formula Force
++ c293 WingMan Formula Force GP
+ c295 Momo Force Steering Wheel
+ c2a0 Wingman Force Feedback Mouse
++ c303 iTouch Keyboard
+ c308 Internet Navigator Keyboard
++ c309 Internet Keyboard
+ c401 TrackMan Marble Wheel
++ c402 Marble Mouse (2-button)
++ c404 TrackMan Wheel
++ c408 Marble Mouse (4-button)
+ c501 Cordless Mouse Receiver
+ c503 Cordless Mouse+Keyboard Receiver
+ c504 Cordless Mouse+Keyboard Receiver
++ c505 Cordless Mouse+Keyboard Receiver
+ d001 QuickCam Pro
+-046e Behavior Tech. Computer
++046e Behavior Tech. Computer Corp.
+ 6782 BTC 7932 mouse+keyboard
+ 046f Crystal Semiconductor
+ 0471 Philips
+@@ -364,26 +534,29 @@
+ 0304 Askey VC010 WebCam [pwc]
+ 0307 PCVC675K WebCam [pwc]
+ 0308 PCVC680K WebCam [pwc]
+- 030C PCVC690K WebCam [pwc]
++ 030c PCVC690K WebCam [pwc]
+ 0310 PCVC730K WebCam [pwc]
+ 0311 PCVC740K ToUcam Pro [pwc]
+ 0312 PCVC750K WebCam [pwc]
+ 0471 Digital Speaker System
+ 0601 OVU1020 IR Dongle (Kbd+Mouse)
+ 0701 150P1 TFT Display
++ 0811 JR24 CDRW
++ 1120 Creative Rhomba MP3 player
+ 1801 Diva MP3 player
+-0472 Chicony
++0472 Chicony Electronics Co., Ltd
+ 0065 PFU-65 Keyboard
+-0473 Sanyo Information Business Co., Ltd.
+-0474 Sanyo Electric Co. Ltd.
++0473 Sanyo Information Business Co., Ltd
++0474 Sanyo Electric Co., Ltd
++ 0701 SCP-4900 Cellphone
+ 0475 Relisys/Teco Information System
+ 0476 AESP
+-0477 Seagate Technology
++0477 Seagate Technology, Inc.
+ 0478 Connectix Corp.
+ 0001 QuickCam
+ 0002 QuickClip
+ 0479 Advanced Peripheral Laboratories
+-047a USAR Systems
++047a Semtech Corp.
+ 047b Silitek Corp.
+ 0002 Keyboard and Mouse
+ 0101 BlueTooth Keyboard and Mouse
+@@ -392,43 +565,45 @@
+ 047d Kensington
+ 1003 Orbit TrackBall
+ 1005 TurboBall
+- 5002 VideoCam CABO II
+- 5003 VideoCam
+- 4006 Gravis Eliminator AfterShock
+ 4005 Gravis Eliminator GamePad Pro
++ 4006 Gravis Eliminator AfterShock
+ 4008 Gravis Destroyer TiltPad
+-047e Agere (Lucent)
++ 5002 VideoCam CABO II
++ 5003 VideoCam
++047e Agere Systems, Inc. (Lucent)
+ 1001 USS720 Parallel Port
+ f101 Atlas Modem
+ 047f Plantronics, Inc.
+ 0480 Toshiba America Info. Systems, Inc.
+ 0481 Zenith Data Systems
+-0482 Kyocera Electronics, Inc.
++0482 Kyocera Corp.
+ 0483 SGS Thomson Microelectronics
++ 1307 Cytronix 6in1 card reader
++ 163d Cool Icam Digi-MP3
+ 7554 56k SoftModem
+ 0484 Specialix
+ 0485 Nokia Monitors
+-0486 ASUS Computers Inc.
++0486 ASUS Computers, Inc.
+ 0487 Stewart Connector
+ 0488 Cirque Corp.
+ 0489 Foxconn / Hon Hai
+ 0502 SmartMedia Card Reader Firmware Loader
+ 0503 SmartMedia Card Reader
+ 048a S-MOS Systems, Inc.
+-048c Alps Electric Ireland Ltd.
+-048d Integrated Technology Express
++048c Alps Electric Ireland, Ltd
++048d Integrated Technology Express, Inc.
+ 048f Eicon Tech.
+ 0490 United Microelectronics Corp.
+ 0491 Capetronic
+ 0492 Samsung SemiConductor, Inc.
+-0493 MAG Technology Co., Ltd.
++0493 MAG Technology Co., Ltd
+ 0495 ESS Technology, Inc.
+ 0496 Micron Electronics
+ 0497 Smile International
+ 0498 Capetronic (Kaohsiung) Corp.
+ 0499 Yamaha Corp.
+ 6001 CRW2200UX Lightspeed 2 External CD-RW Drive
+-049a Gandalf Technologies Ltd.
++049a Gandalf Technologies, Ltd
+ 049b Curtis Computer Products
+ 049c Acer Advanced Labs, Inc.
+ 0002 Keyboard (???)
+@@ -436,15 +611,18 @@
+ 049f Compaq Computer Corp.
+ 0003 iPAQ PocketPC
+ 000e Internet Keyboard
+- 0033 Evo N600c Builtin Wireless Ethernet [orinoco]
++ 0018 PA-1/PA-2 MP3 Player
++ 001a S4 100 Scanner
++ 0021 S200 Scanner
++ 0033 801.11b Adapter [orinoco]
+ 505a SA-11x0 based Linux Device, or Itsy (experimental)
+ 8511 iPAQ Networking 10/100 Ethernet [pegasus2]
+ 04a0 Digital Equipment Corp.
+ 04a1 SystemSoft Corp.
+ 04a2 FirePower Systems
+-04a3 Trident Microsystems Inc.
+-04a4 Hitachi, Ltd.
+-04a5 Acer Peripherals Inc.
++04a3 Trident Microsystems, Inc.
++04a4 Hitachi, Ltd
++04a5 Acer Peripherals Inc. (now BenQ Corp.)
+ 0001 Keyboard
+ 12a6 AcerScan C310U
+ 1a20 Prisa 310U
+@@ -457,41 +635,97 @@
+ 20be Prisa 640BT
+ 20c0 Prisa 1240UT
+ 20de S2W 4300U+
++ 20fc Benq 5000
++ 20fe SW2 5300U
++ 3003 Benq WebCam
+ 9213 Kbd Hub
+ 04a6 Nokia Display Products
+ 04a7 Visioneer
+ 0211 OneTouch 7600 Scanner
+ 0221 OneTouch 5300 Scanner
+- 0224 Microtek Scanport 3000
++ 0224 OneTouch 4800 USB/Microtek Scanport 3000
++ 0226 OneTouch 5300 USB
+ 0231 6100 Scanner
+ 0311 6200 EPP/USB Scanner
+ 0321 OneTouch 8100 EPP/USB Scanner
+ 0331 OneTouch 8600 EPP/USB Scanner
+ 04a8 Multivideo Labs, Inc.
+-04a9 Canon Inc.
++04a9 Canon, Inc.
+ 1051 BJC-3000 Color Printer
+ 1056 BJC-2110 Color Printer
++ 105b S600 Printer
+ 105d S450 Printer
+ 1062 S500 Printer
+ 1064 S300 Printer
++ 106b S520 Printer
++ 106d S750 Printer
++ 1074 S330 Printer
++ 2201 CanoScan FB320U
++ 2202 CanoScan FB620U
+ 2204 CanoScan FB630U
+ 2205 CanoScan FB1210U
+- 2206 CanoScan N650U
++ 2206 CanoScan N650U/N656U
+ 2207 CanoScan 1220U
+ 2208 CanoScan D660U
+- 220d CanoScan N670U
++ 220b CanoScan D646U
++ 220c CanoScan D1250U2
++ 220d CanoScan N670U/N676U/LiDE 20
++ 220e CanoScan N1240U/LiDE 30
++ 2213 LiDE 50
+ 3041 PowerShot S10
++ 3042 CanoScan FS4000US Film Scanner
+ 3043 PowerShot S20
++ 3044 EOS D30
+ 3045 PowerShot S100
++ 3046 IXY Digital
+ 3047 Digital IXUS
+ 3048 PowerShot G1
+ 3049 PowerShot Pro90 IS
+ 304b IXY Digital 300
++ 304c PowerShot S300
++ 304d Digital IXUS 300
+ 304e PowerShot A20
+ 304f PowerShot A10
++ 3051 PowerShot S110
++ 3052 Digital IXUS V
++ 3055 PowerShot G2
+ 3056 PowerShot S40
++ 3057 PowerShot S30
+ 3058 PowerShot A40
+-04aa DaeWoo Telecom, Ltd.
++ 3059 PowerShot A30
++ 305b ZR45MC Digital Camcorder
++ 3060 EOS D60
++ 3061 PowerShot A100
++ 3062 PowerShot A200
++ 3065 PowerShot S200
++ 3066 Digital IXUS 330
++ 3067 MV550i Digital Video Camera
++ 3069 PowerShot G3
++ 306b MVX2i Digital Video Camera
++ 306c PowerShot S45
++ 306d PowerShot S45 PtP Mode
++ 306f PowerShot G3 (ptp)
++ 3070 PowerShot S230
++ 3071 PowerShot S230 (ptp)
++ 3072 PowerShot SD100 / Digital IXUS 2 (ptp)
++ 3073 PowerShot A70 (ptp)
++ 3074 PowerShot A60 (ptp)
++ 3075 IXUS 400 Camera
++ 3076 PowerShot A300
++ 3077 PowerShot S50
++ 3078 ZR70MC Digital Camcorder
++ 307b MV630i Difital Video Camera
++ 307f Optura 20
++ 3081 Optura 10
++ 3083 EOS 10D
++ 3084 EOS 300D
++ 3085 PowerShot G5
++ 3099 EOS 300D (ptp)
++ 309a PowerShot A80
++ 309b Digital IXUS (ptp)
++ 309c PowerShot S1 IS
++ 30ba PowerShot S410 Digital Elph
++04aa DaeWoo Telecom, Ltd
+ 04ab Chromatic Research
+ 04ac Micro Audiometrics Corp.
+ 04ad Dooin Electronics
+@@ -502,10 +736,31 @@
+ 0104 Coolpix 995
+ 0106 Coolpix 775
+ 0107 Coolpix 5000
++ 0108 Coolpix 2500
++ 0109 Coolpix 2500 (ptp)
++ 010a Coolpix 4500
++ 010b Coolpix 4500 (ptp)
++ 010d Coolpix 5700 (ptp)
++ 010e Coolpix 4300 (storage)
++ 010f Coolpix 4300 (ptp)
++ 0111 Coolpix 3500 (ptp)
++ 0112 Coolpix 885 (ptp)
++ 0113 Coolpix 5000 (ptp)
++ 0114 Coolpix 3100 (storage)
++ 0115 Coolpix 3100 (ptp)
++ 0117 Coolpix 2100 (ptp)
++ 0119 Coolpix 5400 (ptp)
++ 0202 Coolpix SQ (ptp)
++ 0301 Coolpix 2000 (storage)
++ 0302 Coolpix 2000 (ptp)
++ 0402 DSC D100 (ptp)
++ 4000 Coolscan LS 40 ED
+ 04b1 Pan International
+ 04b3 IBM Corp.
+ 3004 Media Access Pro Keyboard
+ 3100 NetVista Mouse
++ 3103 ScrollPoint Pro Mouse
++ 3109 Optical ScrollPoint Pro Mouse
+ 4427 Portable CD ROM
+ 4525 Double sided CRT
+ 4550 NVRAM (128 KB)
+@@ -514,14 +769,18 @@
+ 4581 4800-2xx Hub w/ Cash Drawer
+ 4604 Keyboard w/ Card Reader
+ 4671 4820 LCD w/ MSR/KB
+-04b4 Cypress Semiconductor
++04b4 Cypress Semiconductor Corp.
+ 0000 Dacal DC-101 CD Library
+ 0001 Mouse
+ 0002 CY7C63x0x Thermometer
+ 1002 CY7C63001 R100 FM Radio
++ 5500 HID->COM RS232 Adapter
++ 6560 CY7C65640 USB-2.0 "TetraHub"
++ 6830 USB-2.0 IDE Adapter
+ 8613 CY7C68013 EZ-USB FX2 USB 2.0 Development Kit
+ d5d5 CY7C63x0x Zoltrix Z-Boxer GamePad
+-04b5 ROHM LSI Systems, Inc.
++ f000 CY30700 Licorice evaluation board
++04b5 ROHM LSI Systems USA, LLC
+ 04b6 Hint Corp.
+ 04b7 Compal Electronics, Inc.
+ 04b8 Seiko Epson Corp.
+@@ -530,28 +789,42 @@
+ 0003 ISD Smart Cable
+ 0005 Stylus Printer
+ 0101 Perfection 636
++ 0102 GT-2200
+ 0103 Perfection 610
+ 0104 Perfection 1200
++ 0105 StylusScan 2000
+ 0106 Stylus Scan 2500
+ 0107 Expression 1600U
++ 0109 Expression 1640 XL
+ 010a Perfection 1640SU
+ 010b Perfection 1240
+ 010c Perfection 640
++ 010e Perfection 1680
+ 010f Perfection 1250
+ 0110 Perfection 1650
++ 0112 Perfection 2450
++ 0114 Perfection 660
++ 011b Perfection 2400 Photo
++ 011c Perfection 3200
++ 011d Perfection 1260 Photo
++ 011e Perfection 1660 Photo
++ 011f Perfection 1670
+ 0202 Receipt Printer M129C
+ 0601 Stylus Photo 875DC Card Reader
+ 0602 Stylus Photo 895 Card Reader
++ 0801 Stylus CX5200
++ 0802 Stylus CX3200
+ 04b9 Rainbow Technologies, Inc.
+ 1000 iKey 1000 Token
+ 1001 iKey 1200 Token
+ 1200 iKey 2000 Token
+ 1202 iKey 2032 Token
+ 1300 iKey 3000 Token
+-04ba Toucan Systems Ltd.
++04ba Toucan Systems, Ltd
+ 04bb I-O Data Device, Inc.
+ 0904 ET/TX Ethernet [pegasus]
+ 0913 ET/TX-S Ethernet [pegasus2]
++ 0922 IOData AirPort WN-B11/USBS 802.11b
+ 04bd Toshiba Electronics Taiwan Corp.
+ 04be Telia Research AB
+ 04bf TDK Corp.
+@@ -561,150 +834,202 @@
+ 008f Pro ISDN TA
+ 009d HomeConnect WebCam [vicam]
+ 3021 56k Voice FaxModem Pro
+-04c2 Methode Electronics Far East PTE Ltd.
++04c2 Methode Electronics Far East PTE, Ltd
+ 04c3 Maxi Switch, Inc.
+ 04c4 Lockheed Martin Energy Research
+-04c5 Fujitsu Ltd.
++04c5 Fujitsu, Ltd
++ 1029 fi-4010c Scanner
++ 1041 fi-4120c Scanner
++ 1042 fi-4220c Scanner
+ 04c6 Toshiba America Electronic Components
+ 04c7 Micro Macro Technologies
+ 04c8 Konica Corp.
+ 0720 Digital Color Camera
+ 0721 e-miniD Camera
+ 0723 KD-200Z Camera
++ 0726 KD-310Z Camera
+ 04ca Lite-On Technology Corp.
+-04cb Fuji Photo Film Co., Ltd.
+- 0100 FinePix 1300 / 1400 / 4700 Zoom digital camrea
++04cb Fuji Photo Film Co., Ltd
++ 0100 FinePix 1300 / 1400 / 4700 Zoom digital camera
+ 0103 FinePix NX-700 printer
++ 0104 FinePix A101/2600 Zoom (PC-Cam Mode)
++ 0108 FinePix F601 Zoom (Disk mode)
++ 0109 FinePix F601 Zoom (PC-Cam mode)
++ 010a FinePix S602 Zoom (Disk mode)
++ 010b FinePix S602 Zoom (PC-Cam mode)
++ 0114 FinePix F401 Zoom (Disk mode)
++ 0115 FinePix F401 Zoom (PC-Cam mode)
++ 0116 FinePix A203 (Disk mode)
++ 0117 FinePix A203 (PC-Cam mode)
++ 011a FinePix S304/3800 (Disk mode)
++ 011b FinePix S304/3800 (PC-Cam mode)
++ 011c FinePix 2650 (Disk mode)
++ 0130 Finepix S5000 Camera (Disk mode)
++ 0131 Finepix S5000 Camera (PC-Cam mode)
+ 04cc Philips Semiconductors
+ 1122 Hub
++ 1521 USB 2.0 Hub
+ 8116 Camera
+ 04cd Tatung Co. Of America
+ 04ce ScanLogic Corp.
+ 0002 SL11R-IDE IDE Bridge
+-04cf Myson Technology Inc.
++04cf Myson Century, Inc.
+ 04d0 Digi International
+ 04d1 ITT Canon
+ 04d2 Altec Lansing Technologies
+ 0311 ADA-310 Speakers
+ ff05 ADA-305 Speakers
+ 04d3 VidUS, Inc.
+-04d4 LSI Logic Corp.
++04d4 LSI Logic, Inc.
+ 04d5 Forte Technologies, Inc.
+ 04d6 Mentor Graphics
+ 04d7 Oki Semiconductor
+-04d8 Microchip Technology Inc.
++04d8 Microchip Technology, Inc.
++ 8000 In-Circuit Debugger
+ 04d9 Holtek Semiconductor, Inc.
+ 04da Panasonic (Matsushita)
+-04db Hypertec Pty Ltd.
+-04dc Huan Hsin Co.
++04db Hypertec Pty, Ltd
++04dc Huan Hsin Holdings, Ltd
+ 04dd Sharp Corp.
+- 8004 Zaurus SL-5000D PDA
++ 7004 VE-CG40U Digital Still Camera
++ 8004 Zaurus SL-5000D/SL-5500 PDA
++ 8005 Zaurus A-300
++ 8006 Zaurus SL-B500/SL-5600 PDA
++ 8007 Zaurus C-700 PDA
++ 9014 IM-DR80 Portable NetMD Player
++ 9031 Zaurus C-750/C-760 PDA
++ 9032 Zaurus SL-6000
++ 9050 Zaurus C-860 PDA
+ 04de MindShare, Inc.
+ 04df Interlink Electronics
+-04e1 Iiyama North America Inc.
++04e1 Iiyama North America, Inc.
+ 0201 Monitor Hub
+ 04e2 Exar Corp.
+-04e3 Zilog
++04e3 Zilog, Inc.
+ 04e4 ACC Microelectronics
+ 04e5 Promise Technology
+-04e6 Shuttle Technology Inc.
++04e6 SCM Microsystems, Inc.
+ 0001 E-USB ATA Bridge
+ 0002 eUSCSI SCSI Bridge
+ 0003 eUSB SmartMedia Card Reader
+ 0005 eUSB SmartMedia/CompactFlash Card Reader
+ 0006 eUSB SmartMedia Card Reader
+ 0007 Hifd
+- 0101 E-USB ATA Bridge
++ 0101 eUSB ATA Bridge
++ 0325 eUSB ORCA Quad Reader
+ 1010 USBAT-2 CompactFlash Card Reader
+ 04e7 Elo TouchSystems
+- 0001 TouchScreen
+-04e8 Samsung Electronics Co., Ltd.
++ 0001 TouchScreen
++04e8 Samsung Electronics Co., Ltd
++ 1003 MP3 Player and Recorder
++ 300c ML-1210 Printer
+ 5a03 Yepp MP3 Player
+-04e9 PC-Tel Inc.
++ 6601 Z100 Mobile Phone
++04e9 PC-Tel, Inc.
+ 04ea Brooktree Corp.
+ 04eb Northstar Systems, Inc.
+-04ec Tokyo Electron Limited
++04ec Tokyo Electron Device, Ltd
+ 04ed Annabooks
+ 04ef Pacific Electronic International, Inc.
+-04f0 Daewoo Electronics Co., Ltd.
+-04f1 Victor Company of Japan (JVC)
++04f0 Daewoo Electronics Co., Ltd
++04f1 Victor Company of Japan, Ltd
+ 0001 GC-QX3 Digital Still Camera
+ 0004 GR-DVL815U Digital Video Camera
+-04f2 Chicony Electronics Co., Ltd.
++ 0009 GR-DX25EK Digital Video Camera
++04f2 Chicony Electronics Co., Ltd
+ 0001 KU-8933 Keyboard
+ 0002 NT68P81 Keyboard
++ 0110 KU-2971 Keyboard
+ 0112 KU-8933 Keyboard with PS/2 Mouse port
+-04f3 Elan Microelectronics Corportation
+-04f4 Harting Elektronik Inc.
++04f3 Elan Microelectronics Corp.
++04f4 Harting Elektronik, Inc.
+ 04f5 Fujitsu-ICL Systems, Inc.
+ 04f6 Norand Corp.
+ 04f7 Newnex Technology Corp.
+ 04f8 FuturePlus Systems
+-04f9 Brother Industries, Ltd.
++04f9 Brother Industries, Ltd
+ 0002 HL-1050 Laser Printer
+ 0007 HL-1250 Laser Printer
++ 0008 HL-1270 Laser Printer
++ 000d HL-1440 Laser Printer
++ 010f MFC 5100C
++ 0111 MFC 6800
++ 2004 PT-2300/2310 p-Touch Laber Printer
+ 04fa Dallas Semiconductor
+ 2490 DS1490F 2-in-1 Fob, 1-Wire adapter
+ 4201 DS4201 Audio DAC
+-04fb Biostar Microtech Int'l Corp.
+-04fc Sunplus Technology Co.
++04fb Biostar Microtech International Corp.
++04fc Sunplus Technology Co., Ltd
++ 0003 CM1092 Optical Scroller Mouse
++ 504a SPCA504a Digital Camera
++ 504b Aiptek, 1.3 mega PockerCam
+ 04fd Soliton Systems, K.K.
+-04fe PFU Limited
++04fe PFU, Ltd
+ 04ff E-CMOS Corp.
+ 0500 Siam United Hi-Tech
+-0501 DDK Electronics, Inc.
++0501 Fujikura DDK, Ltd
+ 0502 Acer, Inc.
+ d001 Divio NW801/DVC-V6+ Digital Camera
+-0503 Hitachi America Ltd.
++0503 Hitachi America, Ltd
+ 0504 Hayes Microcomputer Products
+ 0506 3Com Corp.
++ 00a0 3CREB96 Bluetooth Adapter
+ 03e8 3C19250 Ethernet [klsi]
+- 4601 3C460B USB 10/100 Ethernet Adaptor
++ 4601 3C460B 10/100 Ethernet Adapter
+ f002 3CP4218 ADSL Modem (pre-init)
+ f003 3CP4218 ADSL Modem
+ f100 3CP4218 ADSL Modem (pre-init)
+ 0507 Hosiden Corp.
+-0508 Clarion Co., Ltd.
+-0509 Aztech Systems Ltd.
++0508 Clarion Co., Ltd
++0509 Aztech Systems, Ltd
+ 050a Cinch Connectors
+ 050b Cable System International
+ 050c InnoMedia, Inc.
+ 050d Belkin Components
+ 0103 F5U103 Serial Adapter [etek]
+- 0109 F5U109 PDA Adapter
++ 0109 F5U109/F5U409 PDA Adapter
+ 0115 SCSI Adapter
+ 0121 F5D5050 100Mbps Ethernet
+- 0208 Video Adapter [nt1004]
++ 0208 USBView II Video Adapter [nt1004]
++ 0224 F5U224 USB 2.0 4-Port Hub
++ 0234 F5U234 USB 2.0 4-Port Hub
+ 0805 Nostromo N50 GamePad
+ 1203 F5U120-PC Serial Port
+ 050e Neon Technology, Inc.
+-050f KC Technology Inc.
++050f KC Technology, Inc.
+ 0003 KC82C160S Hub
+ 0180 KC-180 IrDA Dongle
+-0510 Sejin Electron Inc.
++0510 Sejin Electron, Inc.
+ 0511 N'Able (DataBook) Technologies, Inc.
+ 0512 Hualon Microelectronics Corp.
+ 0513 digital-X, Inc.
+-0514 FCI/Berg Electronics Group
++0514 FCI Electronics
+ 0515 ACTC
+ 0516 Longwell Electronics
+ 0517 Butterfly Communications
+ 0518 EzKEY Corp.
+-0519 Star Micronics Co., Ltd.
++0519 Star Micronics Co., Ltd
+ 051a WYSE Technology
+ 051b Silicon Graphics
+-051c Shuttle Inc.
++051c Shuttle, Inc.
+ 051d American Power Conversion
+- 0002 Back-UPS Pro 500
+-051e Scientific Atlanta
++ 0002 Back-UPS Pro 500/1000/1500
++051e Scientific Atlanta, Inc.
+ 051f IO Systems (Elite Electronics), Inc.
+ 0520 Taiwan Semiconductor Manufacturing Co.
+ 0521 Airborn Connectors
+-0522 Advanced Connectek USA Inc.
++0522 Advanced Connectek, Inc.
+ 0523 ATEN GmbH
+ 0524 Sola Electronics
+-0525 Netchip Technology Inc.
++0525 Netchip Technology, Inc.
+ 1080 NET1080 USB-USB Bridge
++ a4a0 Linux-USB "Gadget Zero"
++ a4a1 Linux-USB Ethernet Gadget
++ a4a2 Linux-USB Ethernet/RNDIS Gadget
++ a4a3 Linux-USB user-mode isochronous source/sink
++ a4a4 Linux-USB user-mode bulk source/sink
++ a4a5 Linux-USB File Storage Gadget
++ a4a6 Linux-USB Serial Gadget
+ 0526 Temic MHS S.A.
+ 0527 ALTRA
+ 0528 ATI Technologies, Inc.
+@@ -715,27 +1040,30 @@
+ 0313 eToken R1 v3.2.3.x
+ 031b eToken R1 v3.3.3.x
+ 0323 eToken R1 v3.4.3.x
+- 050c eToken Pro v4.1.5.x
+ 0412 eToken R2 v2.2.4.x
+ 041a eToken R2 v2.2.4.x
+ 0422 eToken R2 v2.4.4.x
+ 042a eToken R2 v2.5.4.x
++ 050c eToken Pro v4.1.5.x
++ 0514 eToken Pro v4.2.5.4
+ 052a Crescent Heart Software
+ 052b Tekom Technologies, Inc.
+-052c Canon Information System
++ 1513 Aosta CX100 WebCam
++ 1514 Aosta CX100 WebCam Storage
++052c Canon Information Systems, Inc.
+ 052d Avid Electronics Corp.
+ 052e Standard Microsystems Corp.
+ 052f Unicore Software, Inc.
+-0530 American Microsystems Inc.
++0530 American Microsystems, Inc.
+ 0531 Wacom Technology Corp.
+ 0532 Systech Corp.
+ 0533 Alcatel Mobile Phones
+-0534 Motorola
+-0535 LIH TZU Electric Co., Ltd.
+-0536 Welch Allyn Inc.
++0534 Motorola, Inc.
++0535 LIH TZU Electric Co., Ltd
++0536 Hand Held Products (Welch Allyn, Inc.)
+ 0537 Inventec Corp.
+-0538 Santa Cruz Operation
+-0539 Shyh Shiun Terminals Co. Ltd.
++0538 Caldera International, Inc. (SCO)
++0539 Shyh Shiun Terminals Co., Ltd
+ 053a Preh Werke GmbH & Co. KG
+ 053b Global Village Communication
+ 053c Institut of Microelectronic & Mechatronic Systems
+@@ -749,13 +1077,15 @@
+ 00fe G773 Monitor Hub
+ 00ff P815 Monitor Hub
+ 4153 ViewSonic G773 Control (?)
+-0544 Cristie Electronics Ltd.
++0544 Cristie Electronics, Ltd
+ 0545 Xirlink, Inc.
+ 8002 IBM NetCamera
+ 800c Veo StingRay
+ 8080 IBM C-It WebCam
++ 810a Veo Advanced Connect WebCam
+ 0546 Polaroid Corp.
+-0547 Anchor Chips Inc.
++ 1bed PDC 1320 Camera
++0547 Anchor Chips, Inc.
+ 2131 AN2131 EZUSB Microcontroller
+ 2235 AN2235 EZUSB-FX Microcontroller
+ 2720 AN2720 USB-USB Bridge
+@@ -775,24 +1105,29 @@
+ 002e Sony HandyCam MemoryStick Reader
+ 0032 MemoryStick MSC-U01 Reader
+ 0038 Clie PEG-S300/D PalmOS PDA
++ 004e DSC-xxx (ptp)
+ 0058 Clie PEG-N7x0C PalmOS PDA Mass Storage
+- 0066 Clie PEG-N7x0C PalmOS PDA Serial
++ 0066 Clie PEG-N7x0C/PEG-T425 PalmOS PDA Serial
+ 0069 Memorystick MSC-U03 Reader
++ 006d Clie PEG-T425 PDA Mass Storage
+ 0099 Clie NR70 PDA Mass Storage
+ 009a Clie NR70 PDA Serial
++ 00c8 MZ-N710 Minidisc Walkman
++ 0107 VCC-U01 Visual Communication Camera
+ 054d Try Corp.
+ 054e Proside Corp.
+ 054f WYSE Technology Taiwan
+-0550 Fuji Xerox Co., Ltd.
++0550 Fuji Xerox Co., Ltd
+ 0551 CompuTrend Systems, Inc.
+ 0552 Philips Monitors
+-0553 VLSI Vision Ltd.
++0553 STMicroelectronics Imaging Division (VLSI Vision)
+ 0002 CPiA WebCam
+ 0202 Aiptek PenCam 1
+ 0554 Dictaphone Corp.
+-0555 ANAM S&T Co., Ltd.
+-0556 Asahi Kasei Microsystems Co., Ltd.
+-0557 ATEN International Co. Ltd.
++0555 ANAM S&T Co., Ltd
++0556 Asahi Kasei Microsystems Co., Ltd
++ 0001 AK5370 I/F A/D Converter
++0557 ATEN International Co., Ltd
+ 2001 UC-1284 Printer Port
+ 2002 10Mbps Ethernet [klsi]
+ 2004 UC-100KM PS/2 Mouse and Keyboard adapter
+@@ -811,17 +1146,35 @@
+ 9000 AnyCam [pwc]
+ 9001 MPC-C30 AnyCam Premium for Notebooks [pwc]
+ 055e CTX Opto-Electronics Corp.
+-055f Mustek Systems Inc.
++055f Mustek Systems, Inc.
+ 0001 ScanExpress 1200 CU
+ 0002 ScanExpress 600 CU
+ 0003 ScanExpress 1200 USB
+ 0006 ScanExpress 1200 UB
++ 0007 ScanExpress 1200 USB Plus
+ 0008 ScanExpress 1200 CU Plus
++ 0010 BearPaw 1200F
++ 0210 ScanExpress A3 USB
+ 0218 BearPaw 2400 TA
++ 0219 BearPaw 2400 TA Plus
++ 021c BearPaw 1200 CU Plus
++ 021d BearPaw 2400 CU Plus
++ 021e BearPaw 1200 TA/CS
++ 0400 BearPaw 2400 TA Pro
++ 0401 P 3600 A3 Pro
++ 0873 ScanExpress 600 USB
++ 1000 BearPaw 4800 TA Pro
++ a350 gSmart 350
+ a800 MDC 800 Camera
+-0560 Interface Co., Ltd.
++ b500 MDC 3000 Camera
++ c200 gSmart 300
++ c220 gSmart mini
++ c420 gSmart mini 2
++ c520 gSmart mini 3
++ d001 WCam 300
++0560 Interface Corp.
+ 0561 Oasis Design, Inc.
+-0562 Telex Communications Inc.
++0562 Telex Communications, Inc.
+ 0001 Enhanced Microphone
+ 0563 Immersion Corp.
+ 0564 Chinon Industries, Inc.
+@@ -830,10 +1183,11 @@
+ 0002 Enet Ethernet [klsi]
+ 0003 @Home Networks Ethernet [klsi]
+ 0005 Enet2 Ethernet [klsi]
+-0567 Xyratex Int'l Ltd.
++0566 Monterey International Corp.
++0567 Xyratex International, Ltd
+ 0568 Quartz Ingenierie
+ 0569 SegaSoft
+-056a Wacom Co., Ltd.
++056a Wacom Co., Ltd
+ 0000 PenPartner
+ 0010 Graphire
+ 0011 Graphire 2
+@@ -844,28 +1198,47 @@
+ 0024 Intuos 12x18
+ 0031 PL500
+ 0043 Intuos 2
+-056b Decicon Incorporated
++056b Decicon, Inc.
+ 056c eTEK Labs
+ 8007 Kwik232 Serial Port
+ 8101 KwikLink USB-USB Bridge
+ 056d EIZO Corp.
+ 0000 Hub
+ 0001 Monitor
+-056e Elecom Co., Ltd.
++056e Elecom Co., Ltd
+ 0002 29UO Mouse
+ 4002 Laneed 100Mbps Ethernet LD-USB/TX [pegasus]
+-056f Korea Data Systems Co., Ltd.
++056f Korea Data Systems Co., Ltd
+ 0570 Epson America
+ 0571 Interex, Inc.
+ 0572 Conexant Systems (Rockwell), Inc.
+ 0001 Ezcam II WebCam
+ 0002 Ezcam II WebCam
++ 0040 Wondereye CP-115 WebCam
+ 1232 V.90 modem
+-0573 Nogatech Ltd.
++ cafe AccessRunner ADSL Modem
++0573 Zoran Co. Personal Media Division (Nogatech)
++ 0003 USBGear USBG-V1
++ 0400 D-Link V100
+ 2000 X10 va10a Wireless Camera
+- 4d01 Hauppauge USB TV
+- 4d02 NT1003 Frame Grabber
+- 4d11 NT1003 Frame Grabber
++ 2101 Zoran Co. PMD (Nogatech) AV-grabber Manhattan
++ 4100 USB-TV FM (NTSC)
++ 4450 PixelView PlayTv-USB PRO (PAL) FM
++ 4d00 Hauppauge WinTV-USB USA
++ 4d01 Hauppauge WinTV-USB
++ 4d02 Hauppauge WinTV-USB UK
++ 4d03 Hauppauge WinTV-USB France
++ 4d10 Hauppauge WinTV-USB with FM USA radio
++ 4d11 Hauppauge WinTV-USB (PAL) with FM radio
++ 4d12 Hauppauge WinTV-USB UK with FM Radio
++ 4d20 Hauppauge WinTV-USB II (PAL) with FM radio
++ 4d21 Hauppauge WinTV-USB II (PAL)
++ 4d22 Hauppauge WinTV-USB II (PAL) Model 566
++ 4d23 Hauppauge WinTV-USB France 4D23
++ 4d30 Hauppauge WinTV-USB with FM USA radio Model 602
++ 4d31 Hauppauge WinTV-USB III (PAL) with FM radio Model 568
++ 4d32 Hauppauge WinTV-USB III (PAL) FM Model 573
++ 4d35 Hauppauge WinTV-USB III (PAL) FM Model 597
+ 0574 City University of Hong Kong
+ 0575 Philips Creative Display Solutions
+ 0576 BAFO/Quality Computer Accessories
+@@ -875,55 +1248,66 @@
+ 057a Samsung Electronics America
+ 057b Y-E Data, Inc.
+ 0000 FlashBuster-U Floppy
++ 0001 Tri-Media Reader Floppy
++ 0006 Tri-Media Reader Card Reader
++ 0010 Memory Stick Reader Writer
++ 0020 HEXA Media Drive 6-in-1 Card Reader Writer
++ 0030 Memory Card Viewer (TV)
+ 057c AVM GmbH
+ 2800 ISDN-Connector TA
+-057d Shark Multimedia Inc.
+-057e Nintendo Co., Ltd.
+-057f QuickShot Limited
+-0580 Denron Inc.
++057d Shark Multimedia, Inc.
++057e Nintendo Co., Ltd
++057f QuickShot, Ltd
++0580 Denron, Inc.
+ 0581 Racal Data Group
+ 0582 Roland Corp.
+ 0002 MPU64 Midi Interface
+ 0003 Sound Canvas SC-8850
+-0583 Padix (Rockfire) Co. Ltd.
++ 0005 Edirol UM-2 MIDI Adapter
++ 0011 Edirol UA-5 Sound Capture
++0583 Padix Co., Ltd (Rockfire)
+ 2030 RM-203 USB Nest [mode 1]
+ 2031 RM-203 USB Nest [mode 2]
+ 2032 RM-203 USB Nest [mode 3]
+ 2033 RM-203 USB Nest [mode 4]
++ 2050 PX-205 PSX Bridge
+ 3050 QF-305u Gamepad
+- 7070 QF-707u Joystick [Bazooka]
+-0584 RATOC System Inc.
++ 688f QF-688uv Windstorm Pro Joystick
++ 7070 QF-707u Bazooka Joystick
++0584 RATOC System, Inc.
+ 0585 FlashPoint Technology, Inc.
+ 0586 ZyXEL Communications Corp.
+ 1000 Omni NET Modem / ISDN TA
+-0587 America Kotobuki Electronics Ind.
++0587 America Kotobuki Electronics Industries, Inc.
+ 0588 Sapien Design
+ 0589 Victron
+ 058a Nohau Corp.
+ 058b Infineon Technologies
+ 058c In Focus Systems
+ 058d Micrel Semiconductor
+-058e Tripath Technology Inc.
+-058f Alcor Micro, Inc.
++058e Tripath Technology, Inc.
++058f Alcor Micro Corp.
+ 2802 Monterey Keyboard
++ 5492 Hub
+ 9213 MacAlly Kbd Hub
+ 9215 AU9814 Hub
+ 9254 Hub
+- 9410 MicroConnectors/StrongMan Keyboard
+- 9472 Monterey/NEC Kbd Hub
++ 9380 USB Flash drive
++ 9410 Keyboard
++ 9472 Keyboard Hub
+ 0590 Omron Corp.
+ 0004 Cable Modem
+ 0591 Questra Consulting
+ 0592 Powerware Corp.
+ 0593 Incite
+ 0594 Princeton Graphic Systems
+-0595 Zoran Microelectronics Ltd.
+-0596 MicroTouch Systems Inc.
++0595 Zoran Microelectronics, Ltd
++0596 MicroTouch Systems, Inc.
+ 0001 Touchscreen
+ 0597 Trisignal Communications
+ 0598 Niigata Canotec Co., Inc.
+-0599 Brilliance Semiconductor Inc.
+-059a Spectrum Signal Processing Inc.
++0599 Brilliance Semiconductor, Inc.
++059a Spectrum Signal Processing, Inc.
+ 059b Iomega Corp.
+ 0001 Zip 100 (Type 1)
+ 000b Zip 100 (Type 2)
+@@ -932,135 +1316,172 @@
+ 0032 Zip 250 (Ver 2)
+ 0040 SCSI Bridge
+ 0050 Zip CD 650 Writer
++ 0053 CDRW55292EXT CD-RW External Drive
+ 006d HipZip MP3 Player
+-059c A-Trend Technology Co., Ltd.
++059c A-Trend Technology Co., Ltd
+ 059d Advanced Input Devices
+ 059e Intelligent Instrumentation
+-059f LaCie
++059f LaCie, Ltd
++ 0212 PocketDrive
+ a601 HardDrive
+ 05a0 Vetronix Corp.
+ 05a1 USC Corp.
+-05a2 Fuji Film Microdevices Co. Ltd.
+-05a3 V Automation Inc.
++05a2 Fuji Film Microdevices Co., Ltd
++05a3 ARC International
+ 05a4 Ortek Technology, Inc.
+ 9731 MCK-600W Keyboard
+ 05a5 Sampo Technology Corp.
+-05a6 Cisco Systems
++05a6 Cisco Systems, Inc.
+ 05a7 Bose Corp.
+ 05a8 Spacetec IMC Corp.
+ 05a9 OmniVision Technologies, Inc.
+ 0511 OV511 WebCam
+ 0518 OV518 WebCam
+ a511 OV511+ WebCam
+-05aa Utilux South China Ltd.
++05aa Utilux South China, Ltd
+ 05ab In-System Design
+ 0002 Parallel Port
+ 0031 ATA Bridge
+- 0060 USB 2.0 Bridge
++ 0060 USB 2.0 ATA Bridge
+ 0200 USS725 ATA Bridge
+ 0202 ATA Bridge
+ 081a ATA Bridge
+-05ac Apple Computer
++ 0cda ATA Bridge for CD-R/RW
++05ac Apple Computer, Inc.
+ 0201 iMac Keyboard [ALPS M2452]
+ 0202 Apple Keyboard [ALPS]
++ 0205 Apple Extended Keyboard [Mitsumi]
+ 0206 Apple Extended Keyboard [Mitsumi]
+ 0301 iMac Mouse [Mitsumi/Logitech]
+ 0302 Apple Optical Mouse [Fujitsu]
+ 1001 Apple Keyboard Hub [ALPS]
+ 1002 Apple Extended Keyboard Hub [Mitsumi]
+-05ad Y.C.Cable U.S.A., Inc.
++ 1101 Speakers
++ 1201 3G iPod
++05ad Y.C. Cable U.S.A., Inc.
+ 05ae Synopsys, Inc.
+-05af Jing-Mold Enterprise Co., Ltd.
++05af Jing-Mold Enterprise Co., Ltd
+ 05b0 Fountain Technologies, Inc.
+ 05b1 First International Computer, Inc.
+-05b4 LG Semicon Co., Ltd.
+-05b5 Dialogic Corp
++05b4 LG Semicon Co., Ltd
++ 4857 M-Any DAH-210
++ 6001 Digisette DUO-MP3 AR-100
++05b5 Dialogic Corp.
+ 05b6 Proxima Corp.
+ 05b7 Medianix Semiconductor, Inc.
+ 05b8 Agiler, Inc.
+ 3002 Scroll Mouse
+ 05b9 Philips Research Laboratories
+ 05ba DigitalPersona, Inc.
++05bc 3G Green Green Globe Co., Ltd
++ 0004 Trackball
+ 05bd RAFI GmbH & Co. KG
+-05be Raychem Corp.
++05be Tyco Electronics (Raychem)
+ 05bf S & S Research
+ 05c0 Keil Software
+-05c1 Kawasaki Steel
++05c1 Kawasaki Microelectronics, Inc.
+ 05c2 Media Phonics (Suisse) S.A.
+-05c5 Digi International Inc.
++05c5 Digi International, Inc.
+ 05c6 Qualcomm, Inc.
+ 3100 CDMA Wireless Modem/Phone
+ 3196 CDMA Wireless Modem
+ 3197 CDMA Wireless Modem/Phone
+-05c7 Qtronix Corp
++05c7 Qtronix Corp.
+ 1001 Lynx Mouse
+- 2011 Scorpius Keyboard
+-05c8 Cheng Uei Precision Industry Co., Ltd.
++ 2011 SCorpius Keyboard
++05c8 Cheng Uei Precision Industry Co., Ltd (Foxlink)
+ 05c9 Semtech Corp.
+-05ca Ricoh Company Ltd.
+- 0101 RDC-5300 Digital Camera
+- 2201 RDC-7 Digital Camera
+-05cb PowerVision Technologies Inc.
++05ca Ricoh Co., Ltd
++ 0101 RDC-5300 Camera
++ 2201 RDC-7 Camera
++ 2205 Caplio RR30 / Medion MD 6126 Camera
++05cb PowerVision Technologies, Inc.
+ 1483 Trust CombiScan 19200
+ 05cc ELSA AG
+ 2100 MicroLink ISDN Office
+ 2219 MicroLink ISDN
+ 2265 MicroLink 56k
++ 2267 MicroLink 56k (V.250)
+ 2280 MicroLink 56k Fun
+ 3000 Micolink USB2Ethernet [pegasus]
+-05cd Silicom Ltd.
+-05ce SICAN GmbH
+-05cf Sung Forn Co. Ltd.
+-05d0 Lunar Corp.
+-05d1 Brainboxes Limited
++ 3363 MicroLink ADSL Fun
++05cd Silicom, Ltd
++05ce sci-worx GmbH
++05cf Sung Forn Co., Ltd
++05d0 GE Medical Systems Lunar
++05d1 Brainboxes, Ltd
+ 05d2 Wave Systems Corp.
+ 05d6 Philips Semiconductors, CICT
+ 05d7 Thomas & Betts Corp.
+ 0099 10Mbps Ethernet [klsi]
+ 05d8 Ultima Electronics Corp.
+- 4002 Lifetec LT9385 Scanner
++ 4001 Artec Ultima 2000
++ 4002 Artec Ultima 2000 (GT6801 based)/Lifetec LT9385 Scanner
++ 4003 Artec E+ 48U
++ 4004 Artec E+ Pro
++ 4008 Trust Easy Webscan 19200
++ 4009 Umax Astraslim
+ 05d9 Axiohm Transaction Solutions
+-05da Microtek International Inc.
++05da Microtek International, Inc.
+ 0093 ScanMaker V6USL
+ 0094 Phantom 336CX/C3
+ 0099 ScanMaker X6/X6U
+ 009a Phantom C6
+ 00a0 Phantom 336CX/C3 (#2)
+ 00b6 ScanMaker V6UPL
++ 1011 NHJ Che-ez! Kiss Digital Camera
++ 30ce ScanMaker 3800
+ 30cf ScanMaker 4800
++ 30e6 ScanMaker i320
+ 40ca ScanMaker 3600
+ 80a3 ScanMaker V6USL (#2)
+ 80ac ScanMaker V6UL/SpicyU
++05db Sun Corp. (Suntac?)
+ 05dc Lexar Media, Inc.
+-05dd Delta Electronics Inc.
++ 0080 Jumpdrive Secure 64MB
++ b018 Multi-Card Reader
++05dd Delta Electronics, Inc.
+ 05e0 Symbol Technologies
++05e1 Syntek Semiconductor Co., Ltd
+ 05e3 Genesys Logic, Inc.
+- 000a Keyboard with PS/2 Port
+- 000b Karna Razor BoomSlang 2000 Mouse
+- 0120 Pacific Image Electronics PrimeFilm 1800u slide/negative scanner
+- 0300 GLUSB98PT Parallel Port
+- 0502 GL620USB GeneLink USB-USB Bridge
+- 0700 SIIG US2256 CompactFlash Card Reader
+-05e5 Fuji Electric Co., Ltd.
++ 000a Keyboard with PS/2 Port
++ 000b Mouse
++ 0120 Pacific Image Electronics PrimeFilm 1800u slide/negative scanner
++ 0300 GLUSB98PT Parallel Port
++ 0406 Hub
++ 0502 GL620USB GeneLink USB-USB Bridge
++ 0660 USB 2.0 Hub
++ 0700 SIIG US2256 CompactFlash Card Reader
++ 0701 USB 2.0 IDE Adapter
++ 0702 USB 2.0 IDE Adapter
++ 0703 Card Reader
++ 0760 Card Reader
++ 07A0 Pen Flash
++ 1205 Afilias Optical Mouse H3003
++05e5 Fuji Electric Co., Ltd
+ 05e6 Keithley Instruments
+ 05e9 Kawasaki LSI
+ 0008 KL5KUSB101B Ethernet [klsi]
+ 0009 Sony 10Mbps Ethernet [pegasus]
+-05eb FFC Limited
++05eb FFC, Ltd
+ 05ef AVB, Inc. [anko?]
+ 020a Top Shot Pegasus Joystick
+ 8884 Mag Turbo Force Wheel
+ 8888 Top Shot Force Feedback Racing Wheel
+-05f0 Canopus Co., Ltd.
++05f0 Canopus Co., Ltd
+ 0101 DA-Port DAC
+-05f2 Dexin Corp., Ltd.
++05f2 Dexin Corp., Ltd
+ 05f3 PI Engineering, Inc.
++ 0007 Kinesis Advantage PRO MPC/USB Keyboard
++ 0081 Kinesis Integrated Hub
+ 020b PS2 Adapter
+-05f5 Unixtar Technology Inc.
++ 0232 X-Keys Switch Interface, Programming Mode
++ 0264 X-Keys Switch Interface, Composite Mode
++05f5 Unixtar Technology, Inc.
+ 05f6 AOC International
+-05f7 RFC Distribution(s) PTE Ltd.
++05f7 RFC Distribution(s) PTE, Ltd
+ 05f9 PSC Scanning, Inc.
+-05fa Siemens Telecommunications Systems Limited
++05fa Siemens Telecommunications Systems, Ltd
+ 05fc Harman Multimedia
+ 05fd InterAct, Inc.
+ 0251 Raider Pro
+@@ -1075,47 +1496,51 @@
+ 05ff LeCroy Corp.
+ 0600 Barco Display Systems
+ 0601 Jazz Hipster Corp.
+-0602 Vista Imaging Inc.
++0602 Vista Imaging, Inc.
+ 1001 ViCam WebCam
+ 0603 Novatek Microelectronics Corp.
+ 6871 Mouse
+-0604 Jean Co, Ltd.
+-0606 Royal Information Electronics Co., Ltd.
+-0607 Bridge Information Co., Ltd.
+-0609 SMK Manufacturing Inc.
++0604 Jean Co., Ltd
++0606 Royal Information Electronics Co., Ltd
++0607 Bridge Information Co., Ltd
++0609 SMK Manufacturing, Inc.
+ 060a Worthington Data Solutions, Inc.
+ 060b Solid Year (?)
+ 0001 MacAlly Keyboard
+ 2101 Solid Year Keyboard
+ 060c EEH Datalink GmbH
+-060f Joinsoon Electronics Mfg. Co., Ltd.
+-0611 Totoku Electric Co., Ltd.
+-0613 Ithaca Peripherals
++060f Joinsoon Electronics Mfg. Co., Ltd
++0611 Totoku Electric Co., Ltd
++0613 TransAct Technologies, Inc.
+ 0614 Bio-Rad Laboratories
+-0616 Future Techno Designs PVT. Ltd.
++0616 Future Techno Designs PVT, Ltd
+ 0618 MacAlly
+ 0101 Mouse
+-0619 Seiko Instruments Inc.
+-061c Act Labs, Ltd.
++0619 Seiko Instruments, Inc.
++061c Act Labs, Ltd
+ 061d Quatech, Inc.
+ 061e Nissei Electric Co.
+ 0620 Alaris, Inc.
+ 0621 ODU-Steckverbindungssysteme GmbH & Co. KG
++0623 Littelfuse, Inc.
+ 0624 Apex, Inc.
+-0626 Nippon Systems Development Co., Ltd.
+-0629 Zida Technologies Limited
+-062b Greatlink Electronics Taiwan Ltd.
+-062d Taiwan Tai-Hao Enterprises Co. Ltd.
+-062e Mainsuper Enterprises Co., Ltd.
+-062f Sin Sheng Terminal & Machine Inc.
++0626 Nippon Systems Development Co., Ltd
++0629 Zida Technologies, Ltd
++062a Creative Labs
++ 0001 Notebook Optical Mouse
++062b Greatlink Electronics Taiwan, Ltd
++062d Taiwan Tai-Hao Enterprises Co., Ltd
++062e Mainsuper Enterprises Co., Ltd
++062f Sin Sheng Terminal & Machine, Inc.
+ 0634 Micron Technology, Inc.
+ 0636 Sierra Imaging, Inc.
+ 0638 Avision, Inc.
+ 0268 iVina 1200U Scanner
+ 026a Minolta Dimage Scan Dual II
++ 0a10 iVina FB1600/UMAX Astra 4500
+ 4004 Minolta Dimage Scan Elite II
+-063d Fong Kai Industrial Co., Ltd.
+-063f New Technology Cable Ltd.
++063d Fong Kai Industrial Co., Ltd
++063f New Technology Cable, Ltd
+ 0640 Hitex Development Tools
+ 0641 Woods Industries, Inc.
+ 0642 VIA Medical Corp.
+@@ -1123,107 +1548,165 @@
+ 0000 Floppy
+ 0645 Who? Vision Systems, Inc.
+ 0646 UMAX
++0647 Acton Research Corp.
++ 0100 ARC SpectraPro UV/VIS/IR Monochromator/Spectrograph
++ 0101 ARC AM-VM Mono Airpath/Vacuum Monochromator/Spectrograph
++ 0102 ARC Inspectrum Mono
++ 0103 ARC Filterwheel
++ 03e9 Inspectrum 128x1024 F VIS Spectrograph
++ 03ea Inspectrum 256x1024 F VIS Spectrograph
++ 03eb Inspectrum 128x1024 B VIS Spectrograph
++ 03ec Inspectrum 256x1024 B VIS Spectrograph
+ 0648 Inside Out Networks
+ 064b White Mountain DSP, Inc.
+-064c Ji-Haw Industrial Co., Ltd.
++064c Ji-Haw Industrial Co., Ltd
++064e Suyin Corp.
+ 064f WIBU-Systems AG
+ 0651 Likom Technology Sdn. Bhd.
+ 0652 Stargate Solutions, Inc.
+ 0654 Granite Microsystems, Inc.
+-0655 Space Shuttle Hi-Fi Wire & Cable Industry Co, Ltd.
+-0656 Glory Mark Electronic Ltd.
+-0657 Tekcon American Corp.
+-065a Optoelectronics Co., Ltd.
++0655 Space Shuttle Hi-Tech Co., Ltd
++0656 Glory Mark Electronic, Ltd
++0657 Tekcon Electronics Corp.
++065a Optoelectronics Co., Ltd
++ 0001 Barcode scanner
+ 065e Silicon Graphics
+-065f Good Way Industrial Co, Ltd & GWC Technology Inc.
++065f Good Way Technology Co., Ltd & GWC technology Inc.
++0660 TSAY-E (BVI) International, Inc.
+ 0661 Hamamatsu Photonics K.K.
+-0663 Topmax Electronic Co., Ltd.
+-0667 Aiwa Co., Ltd.
++0663 Topmax Electronic Co., Ltd
++ 0103 CobraPad
++0667 Aiwa Co., Ltd
+ 0fa1 TD-U8000 Tape Drive
+ 0668 WordWand
+ 0669 Oce' Printing Systems GmbH
+-066a Total Technologies, Ltd.
+-066b Linksys Inc.
++066a Total Technologies, Ltd
++066b Linksys, Inc.
+ 0105 SCM eUSB SmartMedia Card Reader
+ 010a Melco MCR-U2 SmartMedia / CompactFlash Reader
+ 2202 USB10TX Ethernet [pegasus]
+ 2203 USB100TX Ethernet [pegasus]
+ 2204 USB100TX HomePNA Ethernet [pegasus]
+ 2206 USB Ethernet [pegasus]
+- 2211 WUSB11 Wireless Ethernet
+-066d Entrega Inc.
++ 2211 WUSB11 802.11b Adapter
++ 2212 WUSB11v2.5 802.11b Adapter
++ 2213 WUSB12v1.1 802.11b Adapter
++066d Entrega, Inc.
+ 066e Acer Semiconductor America, Inc.
+ 066f SigmaTel, Inc.
++ 3400 STMP3400 D-Major MP3 Player
++ 3410 STMP3410 D-Major MP3 Player
+ 4200 STIr4200 IrDA Bridge
+-0672 Labtec Inc.
++ 8202 Jens of Sweden / I-BEAD 150M/150H MP3 player
++0672 Labtec, Inc.
+ 1041 LCS1040 Speaker System
+ 5000 SpaceBall 4000 FLX
+ 0673 HCL
+ 5000 Keyboard
++0674 Key Mouse Electronic Enterprise Co., Ltd
+ 0675 Draytech
+ 0110 Vigor 128 ISDN TA
+ 0676 Teles AG
+-0677 Aiwa Co., Ltd.
++0677 Aiwa Co., Ltd
+ 0fa1 TD-U8000 Tape Drive
+ 0678 ACard Technology Corp.
+ 067b Prolific Technology, Inc.
+ 0000 PL2301 USB-USB Bridge
+ 0001 PL2302 USB-USB Bridge
+- 2307 PL2307 USB-ATAPI4 Bridge
+ 2303 PL2303 Serial Port
++ 2305 PL2305 Parallel Port
++ 2307 PL2307 USB-ATAPI4 Bridge
++ 2315 Flash Disk Embedded Hub
++ 2316 Flash Disk Security Device
++ 2317 Mass Storage Device
++ 2501 PL2501 USB-USB Bridge (USB 2.0)
++ 2515 Flash Disk Embedded Hub
++ 2517 Flash Disk Mass Storage Device
+ 067c Efficient Networks, Inc.
+ 1001 Siemens SpeedStream 100MBps Ethernet
+- 1022 Siemens 802.11b Wireless Ethernet
++ 1022 Siemens SpeedStream 1022 802.11b Adapter
+ 4060 Alcatel Speedstream 4060 ADSL Modem
+ 067d Hohner Corp.
+ 067e Intermec
+-067f Virata Ltd.
+-0680 Avance Logic, Inc.
++067f Virata, Ltd
++0680 Realtek Semiconductor Corp., CPP Div. (Avance Logic)
++ 0002 Arowana Optical Wheel Mouse MSOP-01
+ 0681 Siemens Information and Communication Products
+ 0002 Gigaset 3075 Passive ISDN
+ 0005 Mouse with Fingerprint Reader
++ 0012 I-Gate 802.11b Adapter
+ 0684 Actiontec Electronics, Inc.
+-0686 Minolta Co., Ltd.
++0686 Minolta Co., Ltd
++ 4003 Dimage 2330 Zoom
++ 4004 Scan Elite II
+ 4006 Dimage 7 digital still camera
++ 4007 Dimage S304 digital still camera
+ 4009 Dimage X digital still camera
+-068a Pertech Inc.
++ 400a Dimage S404 digital still camera
++ 400b Dimage 7i digital still camera
++ 400d Scan Dual III
++ 4014 Dimage S414 digital still camera
++068a Pertech, Inc.
+ 068e CH Products, Inc.
++ 00e2 HFX OEM Joystick
++ 00f2 Flight Sim Pedals
++ 00ff Flight Sim Yoke
+ 0500 GameStick 3D
++ 0501 CH Pro Pedals
+ 0504 F-16 Combat Stick
+-0690 Golden Bridge Electric Co., Ltd.
+-0693 Hagiwara Sys-Com
++0690 Golden Bridge Electech, Inc.
++0693 Hagiwara Sys-Com Co., Ltd
+ 0002 FlashGate SmartMedia Card Reader
+- 0003 FlasgGate CompactFlash Card Reader
++ 0003 FlashGate CompactFlash Card Reader
+ 0005 FlashGate
+ 0694 Lego Group
+ 0001 Mindstorms Tower
+ 0698 Chuntex (CTX)
+ 1786 1300ex Monitor
+ 9999 VLxxxx Monitor+Hub
++0699 Tektronix, Inc.
+ 069a Askey Computer Corp.
+ 0001 VC010 WebCam [pwc]
+-069b Thomson Consumer Electronics
++ 0321 Dynalink WLL013 / Compex WLU11A 802.11b Adapter
++ 0821 BT Voyager 1010 802.11b Adapter
++069b Thomson, Inc.
++ 0704 DCM245 Cable Modem
++ 2220 RCA Kazoo RD1000 MP3 Player
+ 069d Hughes Network Systems (HNS)
+ 0002 Satellite Device
+ 069e Marx
+ 0005 CryptoBox v1.2
++069f Allied Data Technologies BV
++ 0010 Tornado Speakerphone FaxModem 56.0
++06a2 Topro Technology, Inc.
+ 06a3 Saitek PLC
+ 0006 Cyborg Gold Joystick
++ 0200 Xbox Adrenalin Hub
++ 0241 Xbox Adrenalin Gamepad
++ 0422 ST90 Joystick
+ 052d P750 Gamepad
+ 053f X36F Flightstick
+ 100a SP550 Pad and Joystick Combo
+ 100b SP550 Pad
++06a4 Xiamen Doowell Electron Co., Ltd
+ 06a5 Divio
++ 0000 Typhoon Webcam 100k [nw8000]
+ d001 ProLink DS3303u WebCam
+-06aa Sysgration Ltd.
+-06ac Fujitsu PC Corp.
+-06ad Greatland Electronics Taiwan Ltd.
++ d800 Chicony TwinkleCam
++06a8 Topaz Systems, Inc.
++ 0042 SignatureGem 1X5 Pad
++ 0043 SignatureGem 1X5-HID Pad
++06a9 Westell
++06aa Sysgration, Ltd
++06ac Fujitsu Laboratories of America, Inc.
++06ad Greatland Electronics Taiwan, Ltd
+ 06ae Professional Multimedia Testing Centre
+-06b8 Pixela Corproation
++06b8 Pixela Corp.
+ 06b9 Alcatel Telecom
+- 4061 Speed Touch ISDN
+-06ba Smooth Cord & Connector Co., Ltd.
+-06bb EDA Inc.
++ 4061 Speed Touch ISDN or ADSL Modem
++ a5a5 DynaMiTe Modem
++06ba Smooth Cord & Connector Co., Ltd
++06bb EDA, Inc.
+ 06bc Oki Data Corp.
+ 06bd AGFA-Gevaert NV
+ 0001 SnapScan 1212U
+@@ -1232,17 +1715,38 @@
+ 0403 ePhoto CL18 Camera
+ 0404 ePhoto CL20 Camera
+ 2061 SnapScan 1212U (?)
++ 208d Snapscan e40
+ 208f SnapScan e50
++ 2091 SnapScan e20
++ 2093 SnapScan e10
++ 2095 SnapScan e25
++ 2097 SnapScan e26
+ 20fd SnapScan e52
+-06be Asia Microelectronic Development, Inc.
++ 20ff SnapScan e42
++06be AME Optimedia Technology Co., Ltd
+ 06bf Leoco Corp.
++06c2 GLAB Chester
++ 0030 RFID Reader
++ 0038 4-Motor PhidgetServo v3.0
++ 0039 1-Motor PhidgetServo v3.0
++ 003b 8-Motor PhidgetServo
++ 0040 Interface Kit 884
++ 0041 Interface Kit 088
++ 0042 Interface Kit 32-32-0
++ 0043 Interface Kit 0-256-0
++ 0048 Receiver Ver 1.0
++ 0049 PhidgetLED Ver 1.0
++ 004b PhidgetEncoder Ver 1.0
++ 004e PhidgetPower Ver 1.01
++ 0050 PhidgetTextLCD ECMA1010 Ver 1.0
++ 0058 PhidgetGraphicLCD Ver 1.0
+ 06c4 Bizlink International Corp.
+ 06c5 Hagenuk, GmbH
+-06c6 Infowave Software Inc.
++06c6 Infowave Software, Inc.
+ 06c8 SIIG, Inc.
+-06c9 Taxan (Europe) Ltd.
++06c9 Taxan (Europe), Ltd
+ 06ca Newer Technology, Inc.
+-06cb Synaptics
++06cb Synaptics, Inc.
+ 06cc Terayon Communication Systems
+ 06cd Keyspan
+ 0101 USA-28 PDA [preenum]
+@@ -1265,20 +1769,23 @@
+ 1012 PanoCam 12/12X
+ 06d0 LapLink, Inc.
+ 0622 LapLink Gold USB-USB Bridge [net1080]
+-06d1 Daewoo Electronics Co Ltd.
++06d1 Daewoo Electronics Co., Ltd
+ 06d3 Mitsubishi Electric Corp.
+ 06d5 Toshiba
+ 4000 Japanese Keyboard
+ 06d6 Aashima Technology B.V.
+ 06d7 Network Computing Devices (NCD)
+ 06d8 Technical Marketing Research, Inc.
+-06da Phoenixtec Power Co., Ltd.
++06da Phoenixtec Power Co., Ltd
+ 06db Paradyne
+-06dc Compeye Corp.
+-06de Heisei Electronics Co. Ltd.
++06dc Foxlink Image Technology Co., Ltd
++ 0014 Prolink Winscan Pro 2448U
++06de Heisei Electronics Co., Ltd
+ 06e0 Multi-Tech Systems, Inc.
+- f101 MT5634ZBA MultiModem 56k Intl.
+- f104 MT5634ZBA MultiModem 56k
++ f101 MT5634ZBA-USB MultiModemUSB (old firmware)
++ f103 MT5634MU MultiMobileUSB
++ f104 MT5634ZBA-USB MultiModemUSB (new firmware)
++ f107 MT5634ZBA-USB-V92 MultiModemUSB
+ 06e1 ADS Technologies, Inc.
+ 0008 UBS-10BT Ethernet [klsi]
+ 06e4 Alcatel Microelectronics
+@@ -1287,22 +1794,25 @@
+ 0001 NetCom Roadster II 56k
+ 0002 Roadster II 56k
+ 06ef I.A.C. Geometrische Ingenieurs B.V.
+-06f0 T.N.C Industrial Co., Ltd.
+-06f1 Opcode Systems Inc.
+-06f2 Machkey International (USA)
+-06f6 Wintrend Technology Co., Ltd.
++06f0 T.N.C Industrial Co., Ltd
++06f1 Opcode Systems, Inc.
++06f2 Emine Technology Co.
++06f6 Wintrend Technology Co., Ltd
+ 06fa HSD S.r.L
+ 06fd Boston Acoustics
+ 06fe Gallant Computer, Inc.
+ 0701 Supercomal Wire & Cable SDN. BHD.
+-0703 Bencent Tzeng Industry Co., Ltd.
+-0707 Standard Microsystems Corp
++0703 Bvtech Industry, Inc.
++0705 NKK Corp.
++0707 Standard Microsystems Corp.
+ 0100 2202 Ethernet [klsi]
+ 0200 2202 Ethernet [pegasus]
+-0709 Silicon Systems Ltd. (SSL)
+-070a Oki Electric Industry Co., Ltd.
+-070d Comoss Electronic Co., Ltd.
+-0710 Connect Tech Inc.
++0708 Putercom Co., Ltd
++0709 Silicon Systems, Ltd (SSL)
++070a Oki Electric Industry Co., Ltd
++070d Comoss Electronic Co., Ltd
++070e Excel Cell Electronic Co., Ltd
++0710 Connect Tech, Inc.
+ 0001 WhiteHeat (fake ID)
+ 8001 WhiteHeat
+ 0711 Magic Control Technology Corp.
+@@ -1317,21 +1827,25 @@
+ 0714 NewMotion, Inc.
+ 0003 ADB to USB convertor
+ 0718 Imation Corp.
+-0719 Tremon Enterprises Co., Ltd.
++0719 Tremon Enterprises Co., Ltd
+ 071b Domain Technologies, Inc.
+ 0002 DTI-56362-USB Digital Interface Unit
+ 0101 Audio4-USB DSP Data Acquisition Unit
+ 0201 Audio4-5410 DSP Data Acquisition Unit
+ 0301 SB-USB JTAG Emulator
+ 071c Xionics Document Technologies, Inc.
+-071d Eicon Technology Corp.
++071d Eicon Networks Corp.
+ 1000 Diva ISDN TA
+ 0723 Centillium Communications Corp.
+ 0726 Vanguard International Semiconductor-America
+ 0729 Amitm
+ 1000 USC-1000 Serial Port
+-072f ACS, Ltd.
+- 0001 ACR20U SmartCard Reader
++072e Sunix Co., Ltd
++072f Advanced Card Systems, Ltd
++ 0001 AC1030-based SmartCard Reader
++ 9000 ACR38 AC1038-based Smart Card Reader
++0731 Susteen, Inc.
++0732 Goldfull Electronics & Telecommunications Corp.
+ 0733 ViewQuest Technologies, Inc.
+ 0401 CS330 WebCam
+ 0402 M-318B WebCam
+@@ -1340,46 +1854,58 @@
+ 0001 560V Modem
+ 0735 Asuscom Network
+ c541 ISDN TA 280
++0736 Lorom Industrial Co., Ltd
+ 0738 Mad Catz, Inc.
++073b Suncom Technologies
++073d Eutron S.p.a.
++ 0005 Crypto Token
+ 073e NEC, Inc.
+ 0301 Game Pad
+-073b Suncom Technologies
+-0745 Syntech Information Co., Ltd.
++0745 Syntech Information Co., Ltd
+ 0746 Onkyo Corp.
+ 0747 Labway Corp.
+-0748 Strong Man Enterprise Co., Ltd.
++0748 Strong Man Enterprise Co., Ltd
+ 0749 EVer Electronics Corp.
+-074a Ming Fortune Industry Co., Ltd.
++074a Ming Fortune Industry Co., Ltd
+ 074b Polestar Tech. Corp.
+ 074c C-C-C Group PLC
+-074d Micronas Intermetall GmbH
++074d Micronas GmbH
+ 074e Digital Stream Corp.
+ 0001 PS/2 Adapter
+ 0002 PS/2 Adapter
+ 0755 Aureal Semiconductor
++0757 Network Technologies, Inc.
+ 0763 Midiman
+ 1001 Midisport 2x2
+-0757 Network Technologies, Inc.
++ 1010 Midisport 1x1
++ 1020 Midisport 4x4
++ 1030 Midisport 8x8
+ 0764 Cyber Power System, Inc.
+-0765 X-Rite Incorporated
+-0766 Destech Solutions, Inc.
++0765 X-Rite, Inc.
++0766 Jess-Link Products Co., Ltd
+ 0768 Camtel Technology Corp.
+ 0769 Surecom Technology Corp.
+ 076a Smart Technology Enablers, Inc.
+-076b Utimaco Safeware AG
++076b OmniKey AG
++ 0596 CardMan 2020
++ 1784 CardMan 6020
++076c Partner Tech
+ 076d Denso Corp.
+-076e Kuan Tech Enterprise Co., Ltd.
+-076f Jhen Vei Enterprise Co., Ltd.
+-0774 AmTRAN Technology Co., Ltd.
++076e Kuan Tech Enterprise Co., Ltd
++076f Jhen Vei Electronic Co., Ltd
++0774 AmTRAN Technology Co., Ltd
+ 0775 Longshine Electronics Corp.
+ 0776 Inalways Corp.
+ 0777 Comda Enterprise Corp.
+ 0779 Fairchild Semiconductor
+-077a Sankyo Seiki Mfg. Co., Ltd.
++077a Sankyo Seiki Mfg. Co., Ltd
+ 077b Linksys
+-077c Forward Electronics Co., Ltd.
++ 2219 WUSB11 V2.6 802.11b Adapter
++ 2226 USB200M 100baseTX Adapter
++077c Forward Electronics Co., Ltd
+ 0005 NEC Keyboard
+ 077d Griffin Technology
++ 0410 PowerMate
+ 0223 IMic Audio In/Out
+ 077f Well Excellent & Most Corp.
+ 0781 SanDisk Corp.
+@@ -1387,27 +1913,40 @@
+ 0002 SDDR-31 ImageMate II CompactFlash Reader
+ 0005 SDDR-05b (CF II) ImageMate CompactFlash Reader
+ 0200 SDDR-09 (SSFDC) ImageMate SmartMedia Reader [eusb]
++ 0400 SecureMate SD/MMC Reader
++ 0621 SDDR-86 Imagemate 6-in-1 Reader
++ 0810 SDDR-75 ImageMate CF-SM Reader
++ 0830 ImageMate CF/MMC/SD Reader
++ 8185 SDCZ2-nnn Cruzer Mini flash-RAM drive
++ 8889 SDDR-88 Imagemate 8-in-1 Reader
+ 0782 Trackerball
+-0784 Vivitar Inc.
+- 0100 ViviCam 2655
++0784 Vivitar, Inc.
++ 0100 Vivicam 2655
+ 1310 Vivicam 3305
+- 5260 Werlisa Sport PX 100
++ 1688 Vivicam 3665
++ 2888 Polaroid DC700
++ 3330 Nytec ND-3200 Camera
++ 5260 Werlisa Sport PX 100 / JVC GC-A33 Camera
++ 5300 Pretec dc530
+ 0785 NTT-ME
+ 0001 MN128mini-V ISDN TA
+ 0003 MN128mini-J ISDN TA
++0789 Logitec Corp.
+ 078b Happ Controls, Inc.
+ 0010 Driving UGCI
+ 0020 Flying UGCI
+ 0030 Fighting UGCI
+-078e Brimax Inc.
+-0790 Pro-Image Manufacturing Co., Ltd.
++078e Brincom, Inc.
++0790 Pro-Image Manufacturing Co., Ltd
+ 0791 Copartner Wire and Cable Mfg. Corp.
+ 0792 Axis Communications AB
+-0793 Wha Yu Industrial Co., Ltd.
++0793 Wha Yu Industrial Co., Ltd
+ 0794 ABL Electronics Corp.
+-0795 RealChip Inc.
++0795 RealChip, Inc.
+ 0796 Certicom Corp.
+ 0797 Grandtech Semiconductor Corp.
++ 8001 SmartCam
++ 801c Meade Binoculars/Camera
+ 079b Sagem
+ 079d Alfadata Computer Corp.
+ 0201 GamePort Adapter
+@@ -1415,15 +1954,17 @@
+ d952 Palladio USB V.92 Modem
+ 07a2 National Technical Systems
+ 07a3 Onnto Corp.
+-07a4 Be Incorporated
+-07a6 ADMtek Incorporated
++07a4 Be, Inc.
++07a6 ADMtek, Inc.
+ 0986 AN986 Pegasus Ethernet
+ 8511 ADM8511 Pegasus II Ethernet
+-07aa Correga K.K.
++07aa Corega K.K.
+ 0001 Ether USB-T Ethernet [klsi]
+ 0004 FEther USB-TX Ethernet [pegasus]
+-07ab Freecom
++ 0012 Stick-11 802.11b Adapter
++07ab Freecom Technologies
+ fc01 IDE bridge
++ fc03 USB2-IDE IDE bridge
+ 07af Microtech
+ 0004 SCSI-DB25 SCSI Bridge [shuttle]
+ 0005 SCSI-HD50 SCSI Bridge [shuttle]
+@@ -1431,224 +1972,294 @@
+ 07b0 Trust Technologies
+ 0001 ISDN TA
+ 07b1 IMP, Inc.
+-07b2 Motorola ING
++07b2 Motorola BCS, Inc.
+ 4100 SB4100 Cable Modem
+ 07b3 Plustek, Inc.
+ 0001 OpticPro 1212U Scanner
+-07b4 Olympus Optical Co., Ltd.
++ 0010 OpticPro U12 Scanner
++ 0011 OpticPro U24 Scanner
++ 0013 OpticPro UT12 Scanner
++ 0015 OpticPro U24 Scanner
++ 0017 OpticPro UT12/16/24 Scanner
++ 0400 OpticPro 1248U Scanner
++ 0401 OpticPro 1248U Scanner #2
++ 0403 OpticPro U16B Scanner
++07b4 Olympus Optical Co., Ltd
+ 0100 Camedia C-2100/C-3000 Ultra Zoom Camera
+- 0102 Camedia E-10 Camera
+- 0105 Camedia C-700/C-3040 Zoom Camera
+-07b5 Mega World International Ltd.
++ 0102 Camedia E-10/C-220/C-50 Camera
++ 0105 Camedia C-700/C-3040/C-4000 Zoom Camera
++ 0114 C-350Z Camera
++ 0203 Digital Voice Recorder DW-90
++ 0206 Digital Voice Recorder DS-330
++ 0207 Digital Voice Recorder & Camera W-10
++07b5 Mega World International, Ltd
+ 9902 GamePad
+ 07b6 Marubun Corp.
+-07b7 TIME Interconect Ltd.
+-07b8 D-Link, Inc.
+- abc1 DU-E10 Ethernet [pegasus]
++07b7 TIME Interconnect, Ltd
++07b8 D-Link Corp.
+ 4000 DU-E10 Ethernet [klsi]
+ 4002 DU-E100 Ethernet [pegasus]
++ abc1 DU-E10 Ethernet [pegasus]
+ f101 DSB-560 Modem [atlas]
+-07bc Canon Computer Sytems, Inc.
+-07bd Webgear Inc.
++07bc Canon Computer Systems, Inc.
++07bd Webgear, Inc.
+ 07be Veridicom
+-07c4 DataFab Systems, Inc.
++07c0 Code Mercenaries Hard- und Software GmbH
++ 1500 IO-Warrior 40
++ 1501 IO-Warrior 24
++ 1502 IO-Warrior 48
++ 1503 IO-Warrior 28
++07c4 Datafab Systems, Inc.
+ a000 CompactFlash Card Reader
+ a001 CompactFlash & SmartMedia Card Reader [eusb]
+ a002 Disk Drive
+ a005 CompactFlash & SmartMedia Card Reader
+ a006 SmartMedia Card Reader
+ a109 LC1 CompactFlash & SmartMedia Card Reader
++ a200 DF-UT-06 Hama MMC/SD Reader
+ a400 CompactFlash & Microdrive Reader
++ b004 MMC/SD Reader
+ 07c5 APG Cash Drawer
+-07c6 Share Wave, Inc.
+-07c7 Powertech Industrial Co., Ltd.
++07c6 ShareWave, Inc.
++07c7 Powertech Industrial Co., Ltd
+ 07c8 B.U.G., Inc.
+ 07c9 Allied Telesyn International
+ 07ca AVerMedia Technologies, Inc.
+-07cb Kingmax Technology Inc.
+-07cc Carry Inc.
++07cb Kingmax Technology, Inc.
++07cc Carry Computer Eng., Co., Ltd
+ 0000 CF Card Reader
+ 0003 SM Card Reader
+ 0004 SM/CF/PCMCIA Card Reader
+ 0006 SM/CF/PCMCIA Card Reader
+ 000c SM/CF Card Reader
+ 000d SM/CF Card Reader
++ 0200 6-in-1 Card Reader
++ 0301 6-in-1 Card Reader
+ 07cd Elektor
+ 0001 USBuart Serial Port
+-07cf Casio Computer Co., Ltd.
+- 1001 QV-8000SX/3000EX Digicam
++07cf Casio Computer Co., Ltd
++ 1001 QV-8000SX/5700/3000EX Digicam
+ 2002 E-125 Cassiopeia Pocket PC
+ 3801 Casio WMP-1 MP3-Watch
++ 4500 LV-20 Digital Camera
++07d0 Dazzle
++ 0001 Digital Video Creator I
++ 0002 Global Village VideoFX Grabber
++ 0004 DVC-800 (PAL) Grabber
+ 07d1 D-Link System
+-07d2 Aptio Products Inc.
++07d2 Aptio Products, Inc.
+ 07d3 Cyberdata Corp.
+ 07d7 GCC Technologies, Inc.
+ 07da Arasan Chip Systems
++07df David Electronics Co., Ltd
+ 07e1 Ambient Technologies, Inc.
+ 5201 V.90 Modem
+-07e2 Elmeg GmbH & Co., Ltd.
++07e2 Elmeg GmbH & Co., Ltd
+ 07e3 Planex Communications, Inc.
+-07e4 Movado Enterprise Co., Ltd.
++07e4 Movado Enterprise Co., Ltd
+ 07e5 QPS, Inc.
+ 5c01 Que! CDRW
+ 07e6 Allied Cable Corp.
+ 07e7 Mirvo Toys, Inc.
+ 07e8 Labsystems
+-07eb Double-H Technology Co., Ltd.
+-07ec Taiyo Electrical Wire & Cable Co., Ltd.
++07ea Iwatsu Electric Co., Ltd
++07eb Double-H Technology Co., Ltd
++07ec Taiyo Electric Wire & Cable Co., Ltd
++07f6 Circuit Assembly Corp.
++07f7 Century Corp.
++07f9 Dotop Technology, Inc.
+ 07fa Draytek
+ 0778 miniVigor 128 ISDN TA
+-07f6 Circuit Assembly Corp
+-07f7 Century Corp.
+ 07fd Mark of the Unicorn
+ 0000 FastLane MIDI Interface
+ 0801 Mag-Tek
+-0802 Tritheim Technologies, Inc.
++0802 Mako Technologies, LLC
+ 0803 Zoom Telephonics, Inc.
+ 9700 2986L FaxModem
+-0809 Genicom Corp.
+-080a Evermuch Technology Co., Ltd.
+-080d Teco Image Systems Co., Ltd.
++0809 Genicom Technology, Inc.
++080a Evermuch Technology Co., Ltd
++080d Teco Image Systems Co., Ltd
++ 0102 Hercules Scan@home 48
++0810 Personal Communication Systems, Inc.
+ 0813 Mattel, Inc.
++ 0001 Intel Play QX3 Microscope
+ 081a MG Logic
+ 1000 Duo Pen Tablet
++081b Indigita Corp.
+ 081c Mipsys
+-081e Intelligent Peripheral Devices, Inc.
++081e AlphaSmart, Inc.
+ 0822 Reudo Corp.
+ 0825 GC Protronics
+ 0826 Data Transit
+ 0827 BroadLogic, Inc.
+ 0828 Sato Corp.
+-0829 Telocity, Inc.
++0829 DirecTV Broadband, Inc. (Telocity)
+ 082d Handspring
+ 0100 Visor
+-0830 Palm Computing, Inc.
++ 0300 Treo 600
++0830 Palm, Inc.
+ 0002 Palm M505
+ 0003 Palm M515
+ 0020 Palm I705
+ 0040 Palm M125
+ 0050 Palm M130
++ 0060 Palm Tungsten T
+ 0080 Palm
+ 0832 Kouwell Electronics Corp.
+ 0833 Sourcenext Corp.
+-0835 Action Star Enterprise Co., Ltd.
+-0839 Samsung Aerospace Industries Ltd.
++0835 Action Star Enterprise Co., Ltd
++0839 Samsung Techwin Co., Ltd
+ 0005 Digimax Camera
++ 0008 Digimax 230 Camera
++ 1003 Digimax 210SE
++ 1012 6500 Document Camera
++ 1542 Digimax 50 Duo
+ 083a Accton Technology Corp.
+ 1046 10/100 Ethernet [pegasus]
+ 5046 SpeedStream 10/100 Ethernet [pegasus]
+ 083f Global Village
+ b100 TelePort V.90 Fax/Modem
+-0841 Rioport.com Inc.
++0840 Argosy Research, Inc.
++0841 Rioport.com, Inc.
+ 0001 Rio 500
++0844 Welland Industrial Co., Ltd
+ 0846 NetGear, Inc.
+ 1001 EA101 Ethernet [klsi]
+ 084d Minton Optic Industry Co., Inc.
+ 0003 S-Cam F5 Digital Camera
++ 0011 Argus DC3500 Digital Camera
+ 084e KB Gear
+ 1002 Pablo Tablet
+ 084f Empeg
+ 0001 Empeg-Car Mark I/II Player
+ 0850 Fast Point Technologies, Inc.
+-0851 Macronix International Co., Ltd.
++0851 Macronix International Co., Ltd
++ 1543 Maxell WS30 Slim Digital Camera
+ 0852 CSEM
+-0854 ActiveWire Inc.
++0854 ActiveWire, Inc.
+ 0100 I/O Board
+ 0101 I/O Board, rev1
+-0858 Hitachi Maxell Ltd.
++0858 Hitachi Maxell, Ltd
+ 0859 Minolta Systems Laboratory, Inc.
+ 085a Xircom
+ 0001 Portstation Dual Serial Port
++ 0299 Colorvision, Inc. Monitor Spyder
+ 8027 PGSDB9 Serial Port
+ 0862 Teletrol Systems, Inc.
+ 0863 Filanet Corp.
+ 0864 NetGear, Inc.
+- 4100 MA101 Wireless Adapter
++ 4100 MA101 802.11b Adapter
++ 4102 MA101 802.11b Adapter
+ 086a Emagic Soft-und Hardware GmbH
+ 086c DeTeWe - Deutsche Telephonwerke AG & Co.
+ 1001 Eumex 504PC ISDN TA
+-086e System TALKS Inc.
+-086f MEC IMEX Inc/HPT
++086e System TALKS, Inc.
++086f MEC IMEX, Inc.
+ 0870 Metricom
+ 0871 SanDisk, Inc.
+ 0001 SDDR-01 Compact Flash Reader
+ 0002 SDDR-31 Compact Flash Reader
+ 0005 SDDR-05 Compact Flash Reader
+-0873 Xpeed Inc.
++0873 Xpeed, Inc.
++0874 A-Tec Subsystem, Inc.
+ 0879 Comtrol Corp.
+-087c Adesso/Kbtek America Inc.
++087c Adesso/Kbtek America, Inc.
+ 087d Jaton Corp.
+ 087e Fujitsu Computer Products of America
+ 087f Virtual IP Group, Inc.
+-0880 APT Technologies Inc.
++0880 APT Technologies, Inc.
+ 0883 Recording Industry Association of America (RIAA)
+ 0885 Boca Research, Inc.
+ 0886 XAC Automation Corp.
+ 0887 Hannstar Electronics Corp.
+ 088b MassWorks, Inc.
+ 4944 MassWorks ID-75 TouchScreen
+-0892 DioGraphy Inc.
++0892 DioGraphy, Inc.
+ 089c United Technologies Research Cntr.
+-089d Icron Systems Inc.
+-089e NST Co., Ltd.
+-08a5 e9 Inc.
++089d Icron Technologies Corp.
++089e NST Co., Ltd
++089f Primex Aerospace Co.
++08a5 e9, Inc.
+ 08a8 Andrea Electronics
++08ae Macally (Mace Group, Inc.)
++08b4 Sorenson Vision, Inc.
+ 08b8 J. Gordon Electronic Design, Inc.
+ 01f4 USBSIMM1
+-08b9 Tandy Corp./Radio Shack
+-08bb Burr-Brown Japan, Ltd.
+-08bd Citizen Watch Co., Ltd.
++08b9 RadioShack Corp. (Tandy)
++08bb Texas Instruments Japan
++08bd Citizen Watch Co., Ltd
+ 08c3 Precise Biometrics
+ 0101 Precise 100 MC FingerPrint and SmartCard Reader
+ 08c4 Proxim, Inc.
+-08c7 Key Nice Enterprise Co., Ltd.
++08c7 Key Nice Enterprise Co., Ltd
+ 08c8 2Wire, Inc.
+ 08c9 Nippon Telegraph and Telephone Corp.
+-08ca AIPTEK International Inc.
++08ca Aiptek International, Inc.
++ 0010 Tablet
+ 0020 APT-6000U Tablet
++ 0021 APT-2 Tablet
++ 0022 Tablet
++ 0023 Tablet
++ 0024 Tablet
+ 0103 Pocket DV Digital Camera
++ 0111 PenCam VGA Plus
++ 2010 Pocket CAM 3 Mega (webcam)
++ 2011 Pocket CAM 3 Mega (storage)
+ 08cd Jue Hsun Ind. Corp.
+ 08ce Long Well Electronics Corp.
+ 08cf Productivity Enhancement Products
+ 08d1 smartBridges, Inc.
+ 0001 smartNIC Ethernet [catc]
+ 08d3 Virtual Ink
+-08d4 Siemens PC Systems
++08d4 Fujitsu Siemens Computers
++ 0009 SCR SmartCard Reader
++08d9 Increment P Corp.
+ 08dd Billionton Systems, Inc.
+ 0986 USB-100N Ethernet [pegasus]
+ 0987 USBLP-100 HomePNA Ethernet [pegasus]
+ 0988 USBEL-100 Ethernet [pegasus]
+ 8511 USBE-100 Ethernet [pegasus2]
++08de ???
++ 7a01 802.11b Adapter
++08df Spyrus, Inc.
+ 08e3 Olitec, Inc.
+ 0002 USB-RS232 Bridge
++08e4 Pioneer Corp.
+ 08e5 Litronic
+-08e6 GemPlus
++08e6 Gemplus
++ 0430 GemPC430 SmartCard Reader
++ 0432 GemPC432 SmartCard Reader
++ 0435 GemPC435 SmartCard Reader
+ 08e7 Pan-International Wire & Cable
+ 08e8 Integrated Memory Logic
+ 08e9 Extended Systems, Inc.
+ 0100 XTNDAccess IrDA Dongle
+-08ea Ericsson Inc., Blue Ridge Labs
+-08ec M-Systems
++08ea Ericsson, Inc., Blue Ridge Labs
++08ec M-Systems Flash Disk Pioneers
+ 0010 DiskOnKey
++08ee CCSI/Hesso
++08f0 Corex Technologies
+ 08f1 CTI Electronics Corp.
+-08f5 SYSTEC Co., Ltd.
+-08f6 Logic 3 International Limited
+-08f8 Keen Top International Enterprise Co., Ltd.
+-08f9 EnThink, Inc.
++08f5 SysTec Co., Ltd
++08f6 Logic 3 International, Ltd
++08f8 Keen Top International Enterprise Co., Ltd
++08f9 Wipro Technologies
+ 08fa Caere
+ 08fb Socket Communications
+-08fc Sicon Cable Technology Co. Ltd.
++08fc Sicon Cable Technology Co., Ltd
+ 08fd Digianswer A/S
+ 08ff AuthenTec, Inc.
+ 0900 Pinnacle Systems, Inc.
+ 0901 VST Technologies
+ 0906 Faraday Technology Corp.
+-090a Trumpion Microelectronics Inc.
++0909 Audio-Technica Corp.
++090a Trumpion Microelectronics, Inc.
++ 1540 Digitex Container Flash Disk
+ 090b Neurosmith
+ 090c Feiya Technology Corp.
+ 090d Multiport Computer Vertriebs GmbH
+ 090e Shining Technology, Inc.
+-090f Fujitsu Devices Inc.
++090f Fujitsu Devices, Inc.
+ 0910 Alation Systems, Inc.
+ 0911 Philips Speech Processing
+ 0912 Voquette, Inc.
+@@ -1656,49 +2267,64 @@
+ 0917 SmartDisk Corp.
+ 0919 Tiger Electronics
+ 0100 Fast Flicks Digital Camera
++091e Garmin International
++ 0003 GPSmap 60C
+ 0920 Echelon Co.
+ 0921 GoHubs, Inc.
+ 0922 Dymo-CoStar Corp.
++ 0007 LabelWriter 330
++ 0009 LabelWriter 310
+ 0923 IC Media Corp.
++ 010f SIIG MobileCam
+ 0924 Xerox
+-0927 Summus, Ltd.
+-0928 Oxford Semiconductor Ltd.
+-0929 American Biometric Company
++0925 Wisegroup, Ltd
++ 8101 1-Motor PhidgetServo v2.0
++ 8104 4-Motor PhidgetServo v2.0
++ 8866 MP-8866 Dual USB Joypad
++0927 Summus, Ltd
++0928 Oxford Semiconductor, Ltd
++0929 American Biometric Co.
++092a Toshiba Information & Industrial Sys. And Services
++092b Sena Technologies, Inc.
+ 0930 Toshiba Corp.
+-0931 Harmonic Data Systems Ltd.
++0931 Harmonic Data Systems, Ltd
+ 0932 Crescentec Corp.
+ 0933 Quantum Corp.
+ 0934 Netcom Systems
+ 0939 Lumberg, Inc.
+ 093a Pixart Imaging, Inc.
+-093b Plextor
+-093e J.S.T. Mfg. Co., Ltd.
++093b Plextor Corp.
++093d InnoSync, Inc.
++093e J.S.T. Mfg. Co., Ltd
+ 093f Olympia Telecom Vertriebs GmbH
+-0940 Japan Storage Battery Co., Ltd.
++0940 Japan Storage Battery Co., Ltd
+ 0941 Photobit Corp.
+ 0942 i2Go.com, LLC
+-0943 HCL Technologies India Private Limited
++0943 HCL Technologies India Private, Ltd
+ 0944 KORG, Inc.
+ 0945 Pasco Scientific
+ 0948 Kronauer music in digital
+- 1105 USB One
+ 0301 USB Pro (24/48)
+ 0302 USB Pro (24/96 playback)
+ 0303 USB Pro (24/96 record)
+ 0304 USB Pro (16/48)
++ 1105 USB One
++094b Linkup Systems Corp.
+ 094d Cable Television Laboratories
+ 0951 Kingston Technology
+ 000a KNU101TX 100baseTX Ethernet
+ 0954 RPM Systems Corp.
+-0955 NVidia
+-0956 BlueWater Systems, Inc.
++0955 NVidia Corp.
++0956 BSquare Corp.
+ 0957 Agilent Technologies, Inc.
+ 0958 CompuLink Research, Inc.
+-0959 Cologne Chip Designs GmbH
++0959 Cologne Chip AG
+ 095a Portsmith
+ 095b Medialogic Corp.
+ 095c K-Tec Electronics
+ 095d Polycom, Inc.
++0967 Acer (??)
++ 0204 WarpLink 802.11b Adapter
+ 0968 Catalyst Enterprises, Inc.
+ 0971 Gretag-Macbeth AG
+ 0973 Schlumberger
+@@ -1707,19 +2333,21 @@
+ 0976 Adirondack Wire & Cable
+ 0977 Lightsurf Technologies
+ 0978 Beckhoff GmbH
+-0979 Teracom International Inc.
++0979 Jeilin Technology Corp., Ltd
+ 097a Minds At Work LLC
+-097b Knudsen Engineering Limited
+-097c Marunix Co., Ltd.
++097b Knudsen Engineering, Ltd
++097c Marunix Co., Ltd
+ 097d Rosun Technologies, Inc.
+-0981 Oak Technology Ltd.
++097f Barun Electronics Co., Ltd
++0981 Oak Technology, Ltd
++0984 Apricorn
+ 0985 cab Produkttechnik GmbH & Co KG
+ 00a3 A3/200 or A3/300 Label Printer
+ 098c Vitana Corp.
+ 098d INDesign
+-098e Integrated Intellectual Property Inc.
++098e Integrated Intellectual Property, Inc.
+ 098f Kenwood TMI Corp.
+-0993 Gemstar eBook Group, Ltd.
++0993 Gemstar eBook Group, Ltd
+ 0001 REB1100 eBook Reader
+ 0996 Integrated Telecom Express, Inc.
+ 09a3 PairGain Technologies
+@@ -1727,14 +2355,18 @@
+ 09a5 VCON Telecommunications
+ 09a6 Poinchips
+ 09a7 Data Transmission Network Corp.
+-09a8 Shinestar Enterprise Co., Ltd.
+-09a9 Smart Card Technologies Co., Ltd.
++09a8 Lin Shiung Enterprise Co., Ltd
++09a9 Smart Card Technologies Co., Ltd
+ 09aa Intersil Corp.
+-09b2 Franklin Electronic Publishers
+- 0001 eBookman Palm Computer
++ 3642 Prism2.x 802.11b Adapter
++09ae Tripp Lite
++09b2 Franklin Electronic Publishers, Inc.
++ 0001 eBookman Palm Computer
+ 09b3 Altius Solutions, Inc.
+ 09b4 MDS Telephone Systems
+-09b5 Celltrix Technology Co., Ltd.
++09b5 Celltrix Technology Co., Ltd
++09bc Grundig
++ 0002 MPaxx MP150 MP3 Player
+ 09be MySmart.Com
+ 0001 MySmartPad
+ 09bf Auerswald GmbH & Co. KG
+@@ -1742,129 +2374,1002 @@
+ 00db COMpact 4410/2206 ISDN ISDN
+ 00f1 COMfort System Telephones
+ 09c1 Arris Interactive LLC
+-09c3 ActivCard, INC.
++09c2 Nisca Corp.
++09c3 ActivCard, Inc.
+ 09c4 ACTiSYS Corp.
+- 0011 ACT-IR2000U IrDA Dongle
++ 0011 ACT-IR2000U IrDA Dongle
+ 09c5 Memory Corp.
+ 09cc Workbit Corp.
+-09cd Psion Dacom Home Networks Ltd.
+-09ce City Electronics Ltd.
++09cd Psion Dacom Home Networks, Ltd
++09ce City Electronics, Ltd
+ 09cf Electronics Testing Center, Taiwan
+-09d1 NeoMagic Inc.
+-09d2 Vreelin Engineering Inc.
++09d1 NeoMagic, Inc.
++09d2 Vreelin Engineering, Inc.
+ 09d3 Com One
+-09d9 KRF Tech Ltd.
+-09da A4 Tech Co., Ltd.
+-09db ComputerBoards Inc.
++ 0001 ISDN TA
++09d9 KRF Tech, Ltd
++09da A4 Tech Co., Ltd
++ 001a Wireless Mouse & RXM-15 Receiver
++09db Measurement Computing Corp.
+ 09dc Aimex Corp.
+-09dd Fellowes Manufacturing Co.
++09dd Fellowes, Inc.
+ 09df Addonics Technologies Corp.
++09e1 Intellon Corp.
+ 09e5 Jo-Dan International, Inc.
+ 09e6 Silutia, Inc.
+ 09e7 Real 3D, Inc.
+-09e8 AKAI Professional M.I. Corp.
+-09e9 Chen-Source Inc.
++09e8 AKAI Professional M.I. Corp.
++09e9 Chen-Source, Inc.
++09eb IM Networks, Inc.
++ 4331 iRhythm Tuner Remote
+ 09ef Xitel
+- 0101 MD-Port DG2 MiniDisc Interface
++ 0101 MD-Port DG2 MiniDisc Interface
+ 09f5 AresCom
+ 09f6 RocketChips, Inc.
+-09f7 Edu-Science (H.K.) Ltd.
+-09f8 SoftConnex
++09f7 Edu-Science (H.K.), Ltd
++09f8 SoftConnex Technologies, Inc.
+ 09f9 Bay Associates
+ 09fa Mtek Vision
+ 09fb Altera
+ 09ff Gain Technology Corp.
+ 0a00 Liquid Audio
+ 0a01 ViA, Inc.
+-0a11 Xentec Incorporated
+-0a12 Cambridge Silicon Radio Ltd.
+-0a13 Telebyte Inc.
+-0a14 Spacelabs Medical Inc.
++0a07 Ontrak Control Systems Inc.
++ 0064 ADU100 Data Acquisition Interface
++ 00c8 ADU200 Relay I/O Interface
++ 00d0 ADU208 Data Acquisition Interface
++0a0b Cybex Computer Products Co.
++0a11 Xentec, Inc.
++0a12 Cambridge Silicon Radio, Ltd
++ 0001 Bluetooth Dongle
++0a13 Telebyte, Inc.
++0a14 Spacelabs Medical, Inc.
+ 0a15 Scalar Corp.
+-0a16 Trek Technology (S) PTE Ltd.
++0a16 Trek Technology (S) PTE, Ltd
+ 9988 Trek2000 TD-G2
+-0a17 Asahi Optical Co., Ltd.
++0a17 Pentax Corp.
+ 0004 Pentax Optio 330
++ 0006 Pentax Optio S
+ 0a18 Heidelberger Druckmaschinen AG
+-0a19 Hua Geng Technologies Inc.
+-0a43 Boca Systems Inc.
++0a19 Hua Geng Technologies, Inc.
++0a21 Medtronic Physio Control Corp.
++0a22 Century Semiconductor USA, Inc.
++0a2c AK-Modul-Bus Computer GmbH
++ 0008 GPIO Ports
++0a39 Gilat Satellite Networks, Ltd
++0a3a PentaMedia Co., Ltd
++0a3c NTT DoCoMo, Inc.
++0a3d Varo Vision
++0a43 Boca Systems, Inc.
++0a46 Davicom Semiconductor, Inc.
++0a47 Hirose Electric
++0a48 I/O Interconnect
++ 3258 Dane Elec zMate SD Reader
++ 3259 Dane Elec zMate CF Reader
++0a4b Fujitsu Media Devices, Ltd
++0a4c Computex Co., Ltd
++0a4d Evolution Electronics, Ltd
++ 008e MK-249C MIDI Keyboard
++0a4e Steinberg Soft-und Hardware GmbH
++0a4f Litton Systems, Inc.
++0a50 Mimaki Engineering Co., Ltd
++0a51 Sony Electronics, Inc.
++0a52 Jebsee Electronics Co., Ltd
++0a53 Portable Peripheral Co., Ltd
++0a5a Electronics For Imaging, Inc.
++0a5b EAsics NV
+ 0a5c Broadcom Corp.
++ 2033 BCM2033 Bluetooth
++ 2035 BCM2035 Bluetooth
++0a5d Diatrend Corp.
+ 0a5f Zebra
+ 0009 LP2844 Printer
+-0a6b Green House
++0a62 MPMan
++ 0010 MPMan MP-F40 MP3 Player
++0a66 ClearCube Technology
++0a67 Medeli Electronics Co., Ltd
++0a68 Comaide Corp.
++0a69 Chroma ate, Inc.
++0a6b Green House Co., Ltd
+ 0001 Compact Flash R/W with MP3 player
++0a6c Integrated Circuit Systems, Inc.
++0a6d UPS Manufacturing
++0a6e Benwin
++0a6f Core Technology, Inc.
++0a70 International Game Technology
++0a72 Sanwa Denshi
++0a7d NSTL, Inc.
++0a7e Octagon Systems Corp.
++0a80 Rexon Technology Corp., Ltd
++0a81 Chesen Electronics Corp.
++ 0101 Keyboard
++ 0203 Mouse
++0a82 Syscan
++ 4600 TravelScan 460/464
++0a83 NextComm, Inc.
++0a84 Maui Innovative Peripherals
++0a85 Idexx Labs
++0a86 NITGen Co., Ltd
++0a8d Picturetel
++0a8e Japan Aviation Electronics Industry, Ltd
++0a90 Candy Technology Co., Ltd
++0a91 Globlink Technology, Inc.
++0a92 EGO SYStems, Inc.
++0a93 C Technologies AB
++0a94 Intersense
++0aa3 Lava Computer Mfg., Inc.
++0aa4 Develco Elektronik
++0aa5 First International Digital
++0aa6 Perception Digital, Ltd
++ 0101 Hercules Jukebox
++0aa7 Wincor Nixdorf GmbH & Co KG
++0aa8 TriGem Computer, Inc.
++0aa9 Baromtec Co.
++ f01b Medion MD 6242 MP3 Player
++0aaa Japan CBM Corp.
++0aab Vision Shape Europe SA
++0aac iCompression, Inc.
++0aad Rohde & Schwarz GmbH & Co. KG
++0aae NEC infrontia Corp. (Nitsuko)
++0aaf Digitalway Co., Ltd
++0ab0 Arrow Strong Electronics Co., Ltd
++0aba Ellisys
++ 8001 USB Tracker 110 Protocol Analyzer
+ 0abe Stereo-Link
+ 0101 SL1200 DAC
+-0aec Neodio
++0ac3 Sanyo Semiconductor Company Micro
++0ac4 Leco Corp.
++0ac5 I & C Corp.
++0ac6 Singing Electrons, Inc.
++0ac7 Panwest Corp.
++0ac8 Z-Star Microelectronics Corp.
++0ac9 Micro Solutions, Inc.
++ 0000 Backpack CD-ReWriter
++ 0011 Backpack 40GB Hard Drive
++0acc Koga Electronics Co.
++0acd ID Tech
++0acf Intoto, Inc.
++0ad0 Intellix Corp.
++0ad1 Remotec Technology, Ltd
++0ad2 Service & Quality Technology Co., Ltd
++0ae3 Allion Computer, Inc.
++0ae4 Taito Corp.
++0ae7 Neodym Systems, Inc.
++0ae8 System Support Co., Ltd
++0ae9 North Shore Circuit Design L.L.P.
++0aea SciEssence, LLC
++0aeb TTP Communications, Ltd
++0aec Neodio Technologies Corp.
++ 3050 ND3050 8-in-1 Card Reader
+ 5010 ND5010 Card Reader
++0af0 Option
++ 5000 UMTS Card
++0af6 Silver I Co., Ltd
++0af7 B2C2, Inc.
+ 0af9 Hama, Inc.
+ 0010 USB SightCam 100
++0afc Zaptronix Ltd
++0afd Tateno Dennou, Inc.
++0afe Cummins Engine Co.
++0aff Jump Zone Network Products, Inc.
++0b05 ASUSTek Computer, Inc.
++0b0e GN Netcom
++0b0f AVID Technology
++0b10 Pcally
++0b11 I Tech Solutions Co., Ltd
++0b1e Electronic Warfare Assoc., Inc. (EWA)
++0b1f Insyde Software Corp.
++0b20 TransDimension, Inc.
++0b21 Yokogawa Electric Corp.
++0b22 Japan System Development Co., Ltd
++0b23 Pan-Asia Electronics Co., Ltd
++0b24 Link Evolution Corp.
++0b27 Ritek Corp.
++0b28 Kenwood Corp.
++0b2c Village Center, Inc.
+ 0b30 PNY Technologies, Inc.
+ 0006 SM Media-Shuttle Card Reader
+-0b3b Tekram Technology, Co., Ltd.
+- 1612 AIR.Mate 2@net
+-0c70 MCT Elektronikladen
+- 0000 USB08 Development board
+-0c76 JMTek, LLC.
+- 0003 USBdisk
+- 0005 USBdisk
+-0bda RealTek Semiconductor Corp.
++0b33 Contour Design, Inc.
++0b37 Hitachi ULSI Systems Co., Ltd
++0b39 Omnidirectional Control Technology, Inc.
++0b3a IPaxess
++0b3b Tekram Technology Co., Ltd
++ 1601 Allnet 0193 802.11b Adapter
++ 1602 ZyXEL ZyAIR B200 802.11b Adapter
++ 1612 AIR.Mate 2@net 802.11b Adapter
++0b3c Olivetti Techcenter
++0b3e Kikusui Electronics Corp.
++0b41 Hal Corp.
++0b43 Play.com, Inc.
++ 0003 PS2 Controller Converter
++0b47 Sportbug.com, Inc.
++0b48 TechnoTrend AG
++0b49 ASCII Corp.
++0b4b Pine Corp. Ltd.
++ 0100 D'music MP3 Player
++0b4e Musical Electronics, Ltd
++0b50 Dumpries Co., Ltd
++0b52 Colorado MicroDisplay, Inc.
++0b54 Sinbon Electronics Co., Ltd
++0b56 TYI Systems, Ltd
++0b57 Beijing HanwangTechnology Co., Ltd
++0b59 Lake Communications, Ltd
++0b5a Corel Corp.
++0b5f Green Electronics Co., Ltd
++0b60 Nsine, Ltd
++0b61 NEC Viewtechnology, Ltd
++0b62 Orange Micro, Inc.
++ 0059 iBOT2 WebCam
++0b63 ADLink Technology, Inc.
++0b64 Wonderful Wire Cable Co., Ltd
++0b65 Expert Magnetics Corp.
++0b69 CacheVision
++0b6a Maxim Integrated Products
++0b6f Nagano Japan Radio Co., Ltd
++0b70 PortalPlayer, Inc.
++0b71 SHIN-EI Sangyo Co., Ltd
++0b72 Embedded Wireless Technology Co., Ltd
++0b73 Computone Corp.
++0b75 Roland DG Corp.
++0b79 Sunrise Telecom, Inc.
++0b7a Zeevo, Inc.
++0b7b Taiko Denki Co., Ltd
++0b7c ITRAN Communications, Ltd
++0b7d Astrodesign, Inc.
++0b84 Rextron Technology, Inc.
++0b85 Elkat Electronics, Sdn., Bhd.
++0b86 Exputer Systems, Inc.
++0b87 Plus-One I & T, Inc.
++0b88 Sigma Koki Co., Ltd, Technology Center
++0b89 Advanced Digital Broadcast, Ltd
++0b95 ASIX Electronics Corp.
++0b96 Sewon Telecom
++0b97 O2 Micro, Inc.
++0b98 Playmates Toys, Inc.
++0b99 Audio International, Inc.
++0b9d Softprotec Co.
++0b9f Chippo Technologies
++0baf U.S. Robotics
++ 00eb USR1120 802.11b Adapter
++ 6112 FaxModem Model 5633
++0bb0 Concord Camera Corp.
++0bb1 Infinilink Corp.
++0bb2 Ambit Microsystems Corp.
++ 6098 USB Cable Modem
++0bb3 Ofuji Technology
++0bb4 High Tech Computer Corp.
++ 00ce mmO2 XDA GSM/GPRS Pocket PC
++ 0a02 Himalaya GSM/GPRS Pocket PC
++0bb5 Murata Manufacturing Co., Ltd
++0bb6 Network Alchemy
++0bb7 Joytech Computer Co., Ltd
++0bb8 Hitachi Semiconductor and Devices Sales Co., Ltd
++0bb9 Eiger M&C Co., Ltd
++0bba ZAccess Systems
++0bbb General Meters Corp.
++0bbc Assistive Technology, Inc.
++0bbd System Connection, Inc.
++0bc0 Knilink Technology, Inc.
++0bc1 Fuw Yng Electronics Co., Ltd
++0bc2 Seagate RSS LLC
++0bc3 IPWireless, Inc.
++0bc4 Microcube Corp.
++0bc5 JCN Co., Ltd
++0bc6 ExWAY, Inc.
++0bc7 X10 Wireless Technology, Inc.
++ 0004 X10 Receiver
++0bc8 Telmax Communications
++0bc9 ECI Telecom, Ltd
++0bca Startek Engineering, Inc.
++0bcb Perfect Technic Enterprise Co., Ltd
++0bda Realtek Semiconductor Corp.
+ 8150 RTL8150 Fast Ethernet Adapter
+- 8151 RTL8151 HomePNA Adapter
++ 8151 RTL8151 Adapteon Business Mobile Networks BV
++0bdb Ericsson Business Mobile Networks BV
++0bdc Y Media Corp.
++0bdd Orange PCS
++0be2 Kanda Tsushin Kogyo Co., Ltd
++0be3 TOYO Corp.
++0be4 Elka International, Ltd
++0be5 DOME imaging systems, Inc.
++0be6 Dong Guan Humen Wonderful Wire Cable Factory
++0bee LTK Industries, Ltd
++0bef Way2Call Communications
++0bf0 Pace Micro Technology PLC
++0bf1 Intracom S.A.
++0bf2 Konexx
+ 0bf6 Addonics Technologies, Inc.
+ a002 IDE Bridge
++0bf7 Sunny Giken, Inc.
++0bf8 Fujitsu Siemens Computers
++0c04 MOTO Development Group, Inc.
++0c05 Appian Graphics
++0c06 Hasbro Games, Inc.
++0c07 Infinite Data Storage, Ltd
+ 0c08 Agate
+ 0378 Q 16MB Storage Device
+-0c0b Acomdata
+- b004 MMC/SD Reader and Writer
++0c09 Comjet Information System
++0c0a Highpoint Technologies, Inc.
++0c0b Dura Micro, Inc. (Acomdata)
++ 27cb 6-in-1 Flash Reader and Writer
+ a109 CF/SM Reader and Writer
+ a10c SD/MS Reader and Writer
++ b004 MMC/SD Reader and Writer
++0c12 Zeroplus
++ 0005 PSX Vibration Feedback Converter
++0c15 Iris Graphics
++0c16 Gyration, Inc.
++0c17 Cyberboard A/S
++0c18 SynerTek Korea, Inc.
++0c19 cyberPIXIE, Inc.
++0c1a Silicon Motion, Inc.
++0c1b MIPS Technologies
++0c1c Hang Zhou Silan Electronics Co., Ltd
++0c22 Tally Printer Corp.
++0c23 Lernout + Hauspie
++0c24 Taiyo Yuden
++0c25 Sampo Corp.
++0c35 Eagletron, Inc.
++0c36 E Ink Corp.
++0c37 e.Digital
++0c38 Der An Electric Wire & Cable Co., Ltd
++0c39 IFR
++0c3a Furui Precise Component (Kunshan) Co., Ltd
++0c3b Komatsu, Ltd
++0c3c Radius Co., Ltd
++0c3d Innocom, Inc.
++0c3e Nextcell, Inc.
++0c44 Motorola iDEN
++0c45 Microdia
++ 1060 iFlash SM-Direct Card Reader
++ 6001 Genius VideoCAM NB
++ 6029 Triplex i-mini PC Camera
++ 602a Meade ETX-105EC Camera
++0c46 WaveRider Communications, Inc.
++0c52 Sealevel Systems, Inc.
++0c53 ViewPLUS, Inc.
++0c54 Glory, Ltd
++0c55 Spectrum Digital, Inc.
++ 0510 Spectrum Digital XDS510 JTAG Debugger
++0c56 Billion Bright, Ltd
++0c57 Imaginative Design Operation Co., Ltd
++0c58 Vidar Systems Corp.
++0c59 Dong Guan Shinko Wire Co., Ltd
++0c5a TRS International Mfg., Inc.
+ 0c5e Xytronix Research & Design
++0c62 Chant Sincere Co., Ltd
++0c63 Toko, Inc.
++0c64 Signality System Engineering Co., Ltd
++0c65 Eminence Enterprise Co., Ltd
++0c66 Rexon Electronics Corp.
++0c67 Concept Telecom, Ltd
++0c70 MCT Elektronikladen
++ 0000 USB08 Development board
++0c74 Optronic Laboratories Inc.
++ 0002 OL 700-30 Goniometer
++0c76 JMTek, LLC.
++ 0003 USBdisk
++ 0005 USBdisk
++ 0006 Transcend JetFlash
++0c77 Sipix Group, Ltd
++0c78 Detto Corp.
++0c79 NuConnex Technologies Pte., Ltd
++0c7a Wing-Span Enterprise Co., Ltd
+ 0c86 NDA Technologies, Inc.
++0c88 Kyocera Wireless Corp.
++0c89 Honda Tsushin Kogyo Co., Ltd
++0c8a Pathway Connectivity, Inc.
++0c8b Wavefly Corp.
++0c8c Coactive Networks
++0c8d Tempo
++0c8e Cesscom Co., Ltd
++0c8f Applied Microsystems
++0c99 Innochips Co., Ltd
++0c9a Hanwool Robotics Corp.
++0c9b Jobin Yvon, Inc.
++0ca2 Zyfer
++0ca3 Sega Corp.
++0ca4 ST&T Instrument Corp.
++0ca5 BAE Systems Canada, Inc.
++0ca6 Castles Technology Co., Ltd
++0ca7 Information Systems Laboratories
++0cad Motorola CGISS
++0cae Ascom Business Systems, Ltd
++0caf Buslink
++ 3a00 Hard Drive
++0cb0 Flying Pig Systems
++0cb1 Innovonics, Inc.
++0cb6 Celestix Networks, Pte., Ltd
++0cb7 Singatron Enterprise Co., Ltd
++0cb8 Opticis Co., Ltd
++0cba Trust Electronic (Shanghai) Co., Ltd
++0cbb Shanghai Darong Electronics Co., Ltd
++0cbc Palmax Technology Co., Ltd
++0cbd Pentel Co., Ltd (Electronics Equipment Div.)
++0cbe Keryx Technologies, Inc.
++0cbf Union Genius Computer Co., Ltd
++0cc0 Kuon Yi Industrial Corp.
++0cc1 Given Imaging, Ltd
++0cc2 Timex Corp.
++0cc3 Rimage Corp.
++0cc4 emsys GmbH
++0cc5 Sendo
++0cc6 Intermagic Corp.
++0cc7 Kontron Medical AG
++0cc8 Technotools Corp.
++0cc9 BroadMAX Technologies, Inc.
++0cca Amphenol
++0ccb SKNet Co., Ltd
++0ccc Domex Technology Corp.
++0ccd TerraTec Electronic GmbH
++0cd4 Bang Olufsen
++ 0101 BeolinkPC2
++0cd7 NewChip S.r.l.
++0cd8 JS Digitech, Inc.
++0cd9 Hitachi Shin Din Cable, Ltd
++0cde Z-Com
++ 0002 XI-725/726 Prism2.5 802.11b Adapter
++ 0005 XI-735 Prism3 802.11b Adapter
++0cf1 e-Conn Electronic Co., Ltd
++0cf2 ENE Technology, Inc.
++0cf3 Atheros Communications, Inc.
++0cf4 Fomtex Corp.
++0cf5 Cellink Co., Ltd
++0cf6 Compucable Corp.
++0cf7 ishoni Networks
++0cf8 Clarisys, Inc.
++0cf9 Central System Research Co., Ltd
++0cfa Inviso, Inc.
++0cfc Minolta-QMS, Inc.
+ 0d06 telos EDV Systementwicklung GmbH
+-0d7d Apacer
+- 0100 HandyDrive 64MB
+-0d8e Repotec
+- 7100 Wireless 802.11b Ethernet
+-0d96 Traveler
+- 3300 SX330z Digital Camera
+-0dbf Pocketec
+-0dcd NetworkFab Corporation
++0d0b Contemporary Controls
++0d0c Astron Electronics Co., Ltd
++0d0d MKNet Corp.
++0d0e Hybrid Networks, Inc.
++0d0f Feng Shin Cable Co., Ltd
++0d10 Elastic Networks
++0d11 Maspro Denkoh Corp.
++0d12 Hansol Electronics, Inc.
++0d13 BMF Corp.
++0d14 Array Comm, Inc.
++0d15 OnStream b.v.
++0d16 Hi-Touch Imaging Technologies Co., Ltd
++0d17 NALTEC, Inc.
++0d18 coaXmedia
++0d19 Hank Connection Industrial Co., Ltd
++0d32 Leo Hui Electric Wire & Cable Co., Ltd
++0d33 AirSpeak, Inc.
++0d34 Rearden Steel Technologies
++0d35 Dah Kun Co., Ltd
++0d3c Sri Cable Technology, Ltd
++0d3d Tangtop Technology Co., Ltd
++0d3e Fitcom, inc.
++0d3f MTS Systems Corp.
++0d40 Ascor, Inc.
++0d41 Ta Yun Terminals Industrial Co., Ltd
++0d42 Full Der Co., Ltd
++0d49 Maxtor
++0d4a NF Corp.
++0d4b Grape Systems, Inc.
++0d4c Tedas AG
++0d4d Coherent, Inc.
++0d4e Agere Systems Netherland BV
++0d4f EADS Airbus France
++0d50 Cleware GmbH
++0d51 Volex (Asia) Pte., Ltd
++0d53 HMI Co., Ltd
++0d54 Holon Corp.
++0d55 ASKA Technologies, Inc.
++0d56 AVLAB Technology, Inc.
++0d57 Solomon Microtech, Ltd
++0d5c Belkin
++ a002 F5D6050 802.11b Adapter
++0d5e Myacom, Ltd
++0d5f CSI, Inc.
++0d60 IVL Technologies, Ltd
++0d61 Meilu Electronics (Shenzhen) Co., Ltd
++0d62 Darfon Electronics Corp.
++ a100 Benq Mouse
++0d63 Fritz Gegauf AG
++0d64 DXG Technology Corp.
++ 0107 Horus MT-409 Camera
++0d65 KMJP Co., Ltd
++0d66 TMT
++0d67 Advanet, Inc.
++0d68 Super Link Electronics Co., Ltd
++0d69 NSI
++0d6a Megapower International Corp.
++0d6b And-Or Logic
++0d70 Try Computer Co., Ltd
++0d71 Hirakawa Hewtech Corp.
++0d72 Winmate Communication, Inc.
++0d73 Hit's Communications, Inc.
++0d76 MFP Korea, Inc.
++0d77 Power Sentry/Newpoint
++0d78 Japan Distributor Corp.
++0d7a MARX Datentechnik GmbH
++0d7b Wellco Technology Co., Ltd
++0d7c Taiwan Line Tek Electronic Co., Ltd
++0d7d Phison Electronics Corp.
++ 0100 PS1001/1011/1006/1026 Flash Disk
++ 0110 Gigabyte FlexDrive
++ 0240 I/O Magic Drive
++ 110E NEC uPD720121/130 USB-ATA/ATAPI Bridge
++ 1240 Apacer 6-in-1 Card Reader 2.0
++ 1300 Flash Disk
++ 1320 PS2031 Flash Disk
++ 1420 PS2044 Pen Drive
++0d7e American Computer & Digital Components
++0d7f Essential Reality LLC
++0d80 H.R. Silvine Electronics, Inc.
++0d81 TechnoVision
++0d83 Think Outside, Inc.
++0d89 Oz Software
++0d8a King Jim Co., Ltd
++0d8b Ascom Telecommunications, Ltd
++0d8c C-Media Electronics, Inc.
++0d8d Promotion & Display Technology, Ltd
++0d8e Global Sun Technology, Inc.
++ 7100 802.11b Adapter
++ 7a01 PRISM25 802.11b Adapter
++0d8f Pitney Bowes
++0d90 Sure-Fire Electrical Corp.
++0d96 Skanhex Technology, Inc.
++ 3300 SX330z Camera
++ 4100 SX410z Camera
++ 4102 MD 9700 Camera
++ 5200 SX-520z Camera
++0d97 Santa Barbara Instrument Group
++ 0001 SBIG Astronomy Camera (without firmware)
++ 0101 SBIG Astronomy Camera (with firmware)
++0d98 Mars Semiconductor Corp.
++0d99 Trazer Technologies, Inc.
++0d9a RTX Telecom AS
++0d9b Tat Shing Electrical Co.
++0d9c Chee Chen Hi-Technology Co., Ltd
++0d9d Sanwa Supply, Inc.
++0d9e Avaya
++0d9f Powercom Co., Ltd
++0da0 Danger Research
++0da1 Suzhou Peter's Precise Industrial Co., Ltd
++0da2 Land Instruments International, Ltd
++0da3 Nippon Electro-Sensory Devices Corp.
++0da4 Polar Electro OY
++0da7 IOGear, Inc.
++0dab Cubig Group
++ 0100 DVR/CVR-M140 MP3 Player
++0dad Westover Scientific
++0db0 Micro Star International
++ 6982 Medion Flash XL V2.7A Card Reader
++0db1 Wen Te Electronics Co., Ltd
++0db2 Shian Hwi Plug Parts, Plastic Factory
++0db3 Tekram Technology Co., Ltd
++0db4 Chung Fu Chen Yeh Enterprise Corp.
++0dbe Jiuh Shiuh Precision Industry Co., Ltd
++0dbf Quik Tech Solutions
++0dc0 Great Notions
++0dc1 Tamagawa Seiki Co., Ltd
++0dc3 Athena Smartcard Solutions, Inc.
++0dc4 Macpower Peripherals, Ltd
++0dc5 SDK Co., Ltd
++0dc6 Precision Squared Technology Corp.
++0dc7 First Cable Line, Inc.
++0dcd NetworkFab Corp.
+ 0001 Remote Interface Adapter
+ 0002 High Bandwidth Codec
++0dd1 Contek Electronics Co., Ltd
++0dd2 Power Quotient International Co., Ltd
++0dd3 MediaQ
++0dd4 Custom Engineering SPA
++0dd5 California Micro Devices
++0dd7 Kocom Co., Ltd
++0dd9 HighSpeed Surfing
++0dda Integrated Circuit Solution, Inc.
++0ddb Tamarack, Inc.
++0ddd Datelink Technology Co., Ltd
++0dde Ubicom, Inc.
++0de0 BD Consumer Healthcare
++0ded Novasonics
++0dee Lifetime Memory Products
++0def Full Rise Electronic Co., Ltd
++0df6 Sitecom Europe B.V.
++0df7 Mobile Action Technology, Inc.
++ 0620 MA-620 USB Infrared Adapter
++0dfa Toyo Communication Equipment Co., Ltd
++0dfc GeneralTouch Technology Co., Ltd
++ 0001 Touchscreen
++0e03 Nippon Systemware Co., Ltd
++0e08 Winbest Technology Co., Ltd
+ 0e0c Gesytec
+ 0101 LonUSB LonTalk Network Adapter
++0e16 JMTek, LLC
++0e17 Walex Electronic, Ltd
+ 0e1b Crewave
++0e21 Cowon Systems, Inc.
++ 0300 iAudio CW200
++0e23 Liou Yuane Enterprise Co., Ltd
++0e25 VinChip Systems, Inc.
++0e26 J-Phone East Co., Ltd
++0e30 HeartMath LLC
++0e34 Micro Computer Control Corp.
++0e35 3Pea Technologies, Inc.
++0e36 TiePie engineering
++0e38 Stratitec, Inc.
++0e39 Smart Modular Technologies, Inc.
++0e3a Neostar Technology Co., Ltd
+ 1100 CW-1100 Wireless Network Adapter
+-0e48 Julia Corp., Ltd.
++0e3b Mansella, Ltd
++0e48 Julia Corp., Ltd
+ 0100 CardPro SmartCard Reader
++0e4a Shenzhen Bao Hing Electric Wire & Cable Mfr. Co.
++0e4c Radica Games, Ltd
++0e55 Speed Dragon Multimedia, Ltd
++0e5a Active Co., Ltd
++0e5b Union Power Information Industrial Co., Ltd
++0e5c Bitland Information Technology Co., Ltd
++0e5d Neltron Industrial Co., Ltd
+ 0e66 Hawking
+ 400c UF100 Ethernet [pegasus2]
+-0e75 TVS Electronics, Ltd.
+-0ef7 Tulip Computers International
++0e6a Megawin Technology Co., Ltd
++0e70 Tokyo Electronic Industry Co., Ltd
++0e72 Hsi-Chin Electronics Co., Ltd
++0e75 TVS Electronics, Ltd
++0e7b On-Tech Industry Co., Ltd
++0e7e Gmate Inc.
++ 0001 Yopy 3000 PDA
++0e82 Ching Tai Electric Wire & Cable Co., Ltd
++0e8c Well Force Electronic Co., Ltd
++0e90 WiebeTech, LLC
++0e91 VTech Engineering Canada, Ltd
++0e92 C's Glory Enterprise Co., Ltd
++0e93 eM Technics Co., Ltd
++0e95 Future Technology Co., Ltd
++0e96 Aplux Communications, Ltd
++0e97 Fingerworks, Inc.
++0e98 Advanced Analogic Technologies, Inc.
++0e99 Parallel Dice Co., Ltd
++0e9a TA HSING Industries, Ltd
++0e9b ADTEC Corp.
++0e9f Tamura Corp.
++0ea0 Ours Technology, Inc.
++ 2168 Transcend JetFlash 2.0
++ 6803 OTI-6803 Flash Disk
++ 6808 OTI-6808 Flash Disk
++ 6828 OTI-6828 Flash Disk
++0ea6 Nihon Computer Co., Ltd
++0ea7 MSL Enterprises Corp.
++0ea8 CenDyne, Inc.
++0ead Humax Co., Ltd
++0eb1 WIS Technologies, Inc.
++0eb2 Y-S Electronic Co., Ltd
++0eb3 Saint Technology Corp.
++0eb7 Endor AG
++0ebe VWeb Corp.
++0ebf Omega Technology of Taiwan, Inc.
++0ec0 LHI Technology (China) Co., Ltd
++0ec1 Abit Computer Corp.
++0ec2 Sweetray Industrial, Ltd
++0ec3 Axell Co., Ltd
++0ec4 Ballracing Developments, Ltd
++0ec5 GT Information System Co., Ltd
++0ec6 InnoVISION Multimedia, Ltd
++0ec7 Theta Link Corp.
++ 1008 So., Show 301 Digital Camera
++0ecd Lite-On IT Corp.
++0ece TaiSol Electronics Co., Ltd
++0ecf Phogenix Imaging, LLC
++0ed1 WinMaxGroup
++ 6660 USB Flash Disk 64M-C
++0ed2 Kyoto Micro Computer Co., Ltd
++0ed3 Wing-Tech Enterprise Co., Ltd
++0eda Noriake Itron Corp.
++0edf e-MDT Co., Ltd
++0ee0 Shima Seiki Mfg., Ltd
++0ee1 Sarotech Co., Ltd
++0ee2 AMI Semiconductor, Inc.
++0ee3 ComTrue Technology Corp.
++ 1000 Image Tank 1.5
++0ee4 Sunrich Technology, Ltd
++0eee Digital Stream Technology, Inc.
++0eef D-WAV Scientific Co., Ltd
++ 0001 eGalax TouchScreen
++0ef0 Hitachi Cable, Ltd
++0ef1 Aichi Micro Intelligent Corp.
++0ef2 I/O Magic Corp.
++0ef3 Lynn Products, Inc.
++0ef4 DSI Datotech
++0ef5 PointChips
++ 2202 Flash Disk
++0ef6 Yield Microelectronics Corp.
++0ef7 SM Tech Co., Ltd (Tulip)
++0efe Wem Technology, Inc.
++0efd Oasis Semiconductor
++0f06 Visual Frontier Enterprise Co., Ltd
++0f08 CSL Wire & Plug (Shen Zhen) Co.
++0f0c CAS Corp.
++0f0d Hori Co., Ltd
++0f0e Energy Full Corp.
++0f12 Mars Engineering Corp.
++0f13 Acetek Technology Co., Ltd
++0f19 Oracom Co., Ltd
++0f1b Onset Computer Corp.
++0f1c Funai Electric Co., Ltd
++0f1d Iwill Corp.
++0f21 IOI Technology Corp.
++0f22 Senior Industries, Inc.
++0f23 Leader Tech Manufacturer Co., Ltd
++0f24 Flex-P Industries, Snd., Bhd.
++0f2d ViPower, Inc.
++0f2e Geniality Maple Technology Co., Ltd
++0f2f Priva Design Services
++0f30 Jess Technology Co., Ltd
++0f31 Chrysalis Development
++0f32 YFC-BonEagle Electric Co., Ltd
++0f37 Kokuyo Co., Ltd
++0f38 Nien-Yi Industrial Corp.
++0f41 RDC Semiconductor Co., Ltd
++0f42 Nital Consulting Services, Inc.
++0f4b St. John Technology Co., Ltd
++0f4c WorldWide Cable Opto Corp.
++0f4d Microtune, Inc.
++0f4e Freedom Scientific
++0f52 Wing Key Electrical Co., Ltd
++0f53 Dongguan White Horse Cable Factory, Ltd
++0f54 Kawai Musical Instruments Mfg. Co., Ltd
++0f55 AmbiCom, Inc.
++0f5c Prairiecomm, Inc.
++0f5d NewAge International, LLC
++0f5f Key Technology Corp.
++0f60 NTK, Ltd
++0f61 Varian, Inc.
++0f62 Acrox Technologies Co., Ltd
++0f68 Kobe Steel, Ltd
++0f69 Dionex Corp.
++0f6a Vibren Technologies, Inc.
++0f73 DFI
++0f7c DQ Technology, Inc.
++0f7d NetBotz, Inc.
++0f7e Fluke Corp.
++0f88 VTech Holdings, Ltd
++0f8b Yazaki Corp.
++0f8c Young Generation International Corp.
++0f8d Uniwill Computer Corp.
++0f8e Kingnet Technology Co., Ltd
++0f8f Soma Networks
++0f97 CviLux Corp.
++0f98 CyberBank Corp.
++0f9e Lucent Technologies
++0fa3 Starconn Electronic Co., Ltd
++0fa4 ATL Technology
++0fa5 Sotec Co., Ltd
++0fa7 Epox Computer Co., Ltd
++0fa8 Logic Controls, Inc.
++0faf Winpoint Electronic Corp.
++0fb0 Haurtian Wire & Cable Co., Ltd
++0fb1 Inclose Design, Inc.
++0fb2 Juan-Chern Industrial Co., Ltd
++0fb8 Wistron Corp.
++0fb9 AACom Corp.
++0fba San Shing Electronics Co., Ltd
++0fbb Bitwise Systems, Inc.
++0fc1 Mitac Internatinal Corp.
++0fc2 Plug and Jack Industrial, Inc.
++0fc5 Delcom Engineering
++ 1222 I/O Development Board
++0fc6 Dataplus Supplies, Inc.
++0fca Research In Motion, Ltd.
++ 0001 Blackberry Handheld
++0fce Sony Ericsson Mobile Communications AB
++0fcf Dynastream Innovations, Inc.
++0fd0 Tulip Computers B.V.
++0fd4 Tenovis GmbH & Co., KG
++0fd5 Direct Access Technology, Inc.
++0fdc Micro Plus
++0fe4 IN-Tech Electronics, Ltd
++0fe5 Greenconn (U.S.A.), Inc.
++0fea United Computer Accessories
++0feb CRS Electronic Co., Ltd
++0fec UMC Electronics Co., Ltd
++0fed Access Co., Ltd
++0fee Xsido Corp.
++0fef MJ Research, Inc.
++0ff6 Core Valley Co., Ltd
++0ff7 CHI SHING Computer Accessories Co., Ltd
++0fff Aopen, Inc.
++1000 Speed Tech Corp.
++1001 Ritronics Components (S) Pte., Ltd
++1003 Sigma Corp.
++1004 LG Electronics, Inc.
++ 6000 VX4400/VX6000 Cellphone
++ 6800 CDMA Modem
++1005 Apacer Technology, Inc.
++ b113 Handy Steno 2.0 (256MB)
++1006 iRiver, Ltd.
++ 3002 iHP-140 mp3 player
++1009 Emuzed, Inc.
++100a AV Chaseway, Ltd
++100b Chou Chin Industrial Co., Ltd
++100d Netopia, Inc.
++1010 Fukuda Denshi Co., Ltd
++1011 Mobile Media Tech.
++1012 SDKM Fibres, Wires & Cables Berhad
++1013 TST-Touchless Sensor Technology AG
++1014 Densitron Technologies PLC
++1015 Softronics Pty., Ltd
++1016 Xiamen Hung's Enterprise Co., Ltd
++1017 Speedy Industrial Supplies, Pte., Ltd
++1022 Shinko Shoji Co., Ltd
++1025 Hyper-Paltek
++1026 Newly Corp.
++1027 Time Domain
++1028 Inovys Corp.
++1029 Atlantic Coast Telesys
++102a Ramos Technology Co., Ltd
++102b Infotronic America, Inc.
++102c Etoms Electronics Corp.
++102d Winic Corp.
++1031 Comax Technology, Inc.
++1032 C-One Technology Corp.
++1033 Nucam Corp.
++1043 iCreate Technologies Corp.
++1044 Chu Yuen Enterprise Co., Ltd
+ 1046 Winbond Electronics Corp. [hex]
+ 9967 W9967CF/W9968CF WebCam IC
+-1063 Motorola Electronics Taiwan Ltd. [hex]
++104c AMCO TEC International, Inc.
++1053 Immanuel Electronics Co., Ltd
++1054 BMS International Beheer N.V.
++1055 Complex Micro Interconnection Co., Ltd
++1056 Hsin Chen Ent Co., Ltd
++1057 ON Semiconductor
++1058 Western Digital Technologies, Inc.
++1059 Giesecke & Devrient GmbH
++105c Hong Ji Electric Wire & Cable (Dongguan) Co., Ltd
++105d Delkin Devices, Inc.
++105e Valence Semiconductor Design, Ltd
++105f Chin Shong Enterprise Co., Ltd
++1060 Easthome Industrial Co., Ltd
++1063 Motorola Electronics Taiwan, Ltd [hex]
+ 1555 MC141555 Hub
+ 1065 CCYU Technology
+ 2136 EasyDisk ED1064
++106a Loyal Legend, Ltd
++106c Curitel Communications, Inc.
++ 2101 AudioVox 8900 Cell Phone
++106d San Chieh Manufacturing, Ltd
++106e ConectL
++106f Money Controls
++1076 GCT Semiconductor, Inc.
++107d Arlec Australia, Ltd
++107e Midoriya Electric Co., Ltd
++107f KidzMouse, Inc.
++1082 Shin-Etsukaken Co., Ltd
++1083 Canon Electronics, Inc.
++1084 Pantech Co., Ltd
++108a Chloride Power Protection
++108b Grand-tek Technology Co., Ltd
++108c Robert Bosch GmbH
++1099 Surface Optics Corp.
++109a DATASOFT Systems GmbH
++109f eSOL Co., Ltd
++10a0 Hirotech, Inc.
++10a3 Mitsubishi Materials Corp.
++10a9 SK Teletech Co., Ltd
++10aa Cables To Go
++10ab USI Co., Ltd
+ 10ac Honeywell, Inc.
+-10b5 PLX
++10ae Princeton Technology Corp.
++10b5 Comodo (PLX?)
+ 9060 Test Board
++10bb TM Technology, Inc.
++10bc Dinging Technology Co., Ltd
++10bd TMT Technology, Inc.
++10c4 Cygnal Integrated Products, Inc.
++10c5 Sanei Electric, Inc.
++10c6 Intec, Inc.
++10cb Eratech
++10cc GBM Connector Co., Ltd
++10cd Kycon, Inc.
++10d1 Hottinger Baldwin Measurement
++ 0101 USB-Module for Spider8, CP32
++ 0202 CP22 - Communication Processor
++ 0301 CP42 - Communication Processor
++10d4 Man Boon Manufactory, Ltd
++10d5 Uni Class Technology Co., Ltd
++10d6 Actions Semiconductor Co., Ltd
++ 1000 MP3 Player
++10de Authenex, Inc.
++10df In-Win Development, Inc.
++10e0 Post-Op Video, Inc.
++10e1 CablePlus, Ltd
++10e2 Nada Electronics, Ltd
++10ec Vast Technologies, Inc.
++10fb Pictos Technologies, Inc.
++10fd Anubis Electronics, Ltd
++ 804d Typhoon Webshot II Webcam [zc0301]
++1a0a ...
++ badd USB OTG Compliance test device
++1100 VirTouch, Ltd
++ 0001 VTPlayer VTP-1 Braille Mouse
++1101 EasyPass Industrial Co., Ltd
++ 0001 FSK Electronics Super GSM Reader
++1108 Brightcom Technologies, Ltd
++1110 Analog Devices Canada, Ltd (Allied Telesyn)
++ 900f AT-AR215 DSL Modem
++1112 YM ELECTRIC CO., Ltd
++1113 Medion AG
++111e VSO Electric Co., Ltd
++112e Master Hill Electric Wire and Cable Co., Ltd
++112f Cellon International, Inc.
++1130 Tenx Technology, Inc.
++1131 Integrated System Solution Corp.
+ 1132 Toshiba Corp., Digital Media Equipment [hex]
+ 4331 PDR-M4/M5/M70 Digital Camera
+- 4432 PDR-M60 Digital Camera
+-1183 Compaq Computer Corp. [hex]
+- 4008 56k FaxModem
++ 4332 PDR-M60 Digital Camera
++113c Arin Tech Co., Ltd
++113d Mapower Electronics Co., Ltd
++1141 V One Multimedia, Pte., Ltd
++1142 CyberScan Technologies, Inc.
++1147 Ever Great Electric Wire and Cable Co., Ltd
++114c Tinius Olsen Testing Machine Co., Inc.
++114d Alpha Imaging Technology Corp.
++1162 Secugen Corp.
++1163 DeLorme Publishing, Inc.
++1164 YUAN High-Tech Development Co., Ltd
++1165 Telson Electronics Co., Ltd
++1166 Bantam Interactive Technologies
++1167 Salient Systems Corp.
++1168 BizConn International Corp.
++116e Gigastorage Corp.
++116f Silicon 10 Technology Corp.
++1175 Shengyih Steel Mold Co., Ltd
++117d Santa Electronic, Inc.
++117e JNC, Inc.
++1182 Venture Corp., Ltd
++1183 Compaq Computer Corp. [hex] (Digital Dream ??)
+ 19c7 ISDN TA
++ 4008 56k FaxModem
+ 504a PJB-100 Personal Jukebox
++1184 Kyocera Elco Corp.
++118f You Yang Technology Co., Ltd
+ 1190 Tripace
+-120e Hudson Soft Co., Ltd.
++1191 Loyalty Founder Enterprise Co., Ltd
++1197 Technoimagia Co., Ltd
++1198 StarShine Technology Corp.
++1199 Sierra Wireless, Inc.
++119a ZHAN QI Technology Co., Ltd
++11a3 Technovas Co., Ltd
++11aa GlobalMedia Group, LLC
++11ab Exito Electronics Co., Ltd
++11db Topfield Co., Ltd.
++ 1000 PVR
++ 1100 PVR
++1209 InterBiometrics
++ 1001 USB Hub
++ 1002 USB Relais
++ 1003 IBSecureCam-P
++ 1004 IBSecureCam-O
++ 1005 IBSecureCam-N
++120e Hudson Soft Co., Ltd
++121e Jungsoft Co., Ltd
++1241 Belkin (?)
++ 1111 Mouse
++1267 Logic3 / SpectraVideo plc
++ a001 JP260 PC Game Pad
++126e Strobe Data, Inc.
++126f TwinMOS
++ 1325 Mobile Disk
++ 2168 Mobile Disk III
++1275 Xaxero Marine Software Engineering, Ltd.
++ 0002 WeatherFax 2000 Demodulator
++ 0080 SkyEye Weather Satellite Receiver
+ 1292 Innomedia
+ 0258 Creative Labs VoIP Blaster
+ 1293 Belkin Components [hex]
+ 0002 F5U002 Parallel Port [uss720]
+ 2101 104-key keyboard
++12fd AIN Comm. Technology Co., Ltd
++ 1001 AWU2000b 802.11b Stick
++1312 ICS Electronics
+ 1342 Mobility
+ 0200 EasiDock 200 Hub
+ 0201 EasiDock 200 Keyboard and Mouse Port
+@@ -1872,18 +3377,31 @@
+ 0203 EasiDock 200 Printer Port
+ 13d2 Shark Multimedia
+ 0400 Pocket Ethernet [klsi]
++147a Formosa Industrial Computing, Inc.
+ 1484 Elsa AG [hex]
+ 1746 Ecomo 19H99 Monitor
+ 7616 Elsa Hub
++14c2 Gemlight Computer, Ltd
++1520 Bitwire Corp.
++1554 Prolink Microsystems Corp.
++1568 Sunf Pu Technology Co., Ltd
++15c6 Laboratoires MXM
+ 15e8 SohoWare
+ 9100 NUB100 Ethernet [pegasus]
++15e9 Pacific Digital Corp.
+ 1604 Tascam
+ 8000 US-428 Audio/Midi Controller (without fw)
+ 8001 US-428 Audio/Midi Controller
++ 8004 US-224 Audio/Midi Controller (without fw)
++ 8005 US-224 Audio/Midi Controller
++ 8006 US-122 Audio/Midi Interface (without fw)
++ 8007 US-122 Audio/Midi Interface
+ 1606 Umax [hex]
+ 0010 Astra 1220U
+ 0030 Astra 2000U
+ 0060 Astra 3400U
++ 0130 Astra 2100U
++ 0160 Astra 5400U
+ 0230 Astra 2200/2200SU
+ 2020 AstraCam 1000
+ 1608 Inside Out Networks [hex]
+@@ -1903,55 +3421,113 @@
+ 8093 PortGear Serial Port
+ 1668 Actiontec Electronics, Inc. [hex]
+ 0333 Modem
+- 0421 802.11b Wireless Adapter
++ 0408 Prism2.5 802.11b Adapter
++ 0421 Prism2.5 802.11b Adapter
+ 1690 Askey Computer Corp. [hex]
+ 0101 Creative Modem Blaster DE5670
+ 0103 Askey 1456 VQE-R3 Modem [conexant]
+ 0109 Askey MagicXpress V.90 Pocket Modem [conexant]
+-2001 D-Link Corp [hex]
++1696 Hitachi Video and Information System, Inc.
++1697 VTec Test, Inc.
++1733 Cellink Technology Co., Ltd
++ 0101 RF Wireless Optical Mouse OP-701
++1894 Topseed
++ 5632 Atek Tote Remote
++ 5641 TSAM-004 Presentation Remote
++1ebb NuCORE Technology, Inc.
++2001 D-Link Corp. [hex]
++ 3200 DWL-120 802.11b (Atmel RFMD503A) [usbvnetr]
++ 3700 DWL-122 802.11b
+ 4000 DSB-650C Ethernet [klsi]
+ 4001 DSB-650TX Ethernet [pegasus]
+ 4002 DSB-650TX Ethernet [pegasus]
+ 4003 DSB-650TX-PNA Ethernet [pegasus]
+ abc1 DSB-650 Ethernet [pegasus]
++2162 Creative (?)
++ 500c DE5771 Modem Blaster
+ 2222 MacAlly
+ 0004 iWebKey Keyboard
+ 22b8 Motorola PCS
+- 1005 Ti280e GSM/GPRS Phone
++ 0005 V.60c/V.60i GSM Phone
++ 1005 T280e GSM/GPRS Phone
++ 2821 T720 GSM Phone
++ 2822 V.120e GSM Phone
++ 3002 A835 GSM Phone
++ 3802 C330 GSM Phone
++22b9 eTurboTouch Technology, Inc.
++22ba Technology Innovation Holdings, Ltd
+ 2304 Pinnacle Systems, Inc. [hex]
+- 0111 Studio PCTV (PAL) Frame Grabber
+- 0112 Studio PCTV (NTSC) Frame Grabber
+- 0210 Studio PCTV (PAL) Frame Grabber
+- 0212 Studio PCTV (NTSC) Frame Grabber
+-2318 Shining Technologies Inc. [hex]
++ 0109 Pinnacle Studio PCTV USB (SECAM)
++ 0110 Pinnacle Studio PCTV USB (PAL)
++ 0111 Miro PCTV USB
++ 0112 Pinnacle Studio PCTV USB (NTSC) with FM radio
++ 0210 Pinnacle Studio PCTV USB (PAL) with FM radio
++ 0212 Pinnacle Studio PCTV USB (NTSC)
++ 0214 Pinnacle Studio PCTV USB (PAL) with FM radio
++ 0300 Pinnacle Studio Linx Video input cable (NTSC)
++ 0419 Pinnacle PCTV Bungee USB (PAL) with FM radio
++2318 Shining Technologies, Inc. [hex]
+ 0011 CitiDISK Jr. IDE Enclosure
+ 2375 Digit@lway, Inc.
+ 0001 Digital Audio Player
++2632 TwinMOS
++ 3209 7-in-1 Card Reader
++2650 Electronics For Imaging, Inc. [hex]
++2770 NHJ, Ltd
++ 9120 Che-ez! Snap / iClick Tiny VGA Digital Camera
++2899 Toptronic Industrial Co., Ltd
+ 3125 Eagletron
+ 0001 TrackerPod Camera Stand
++3176 Whanam Electronics Co., Ltd
+ 3504 Micro Star
+ f110 Security Key
++3538 Power Quotient International Co., Ltd
++ 0001 Travel Flash
++3579 DIVA
++ 6901 Media Reader
++3636 InVibro
++3838 WEM
++ 0001 5-in-1 Card Reader
++3923 National Instruments Corp.
++4102 iRiver, Ltd.
++ 1001 iFP-100 series mp3 player
++ 1003 iFP-300 series mp3 player
++ 1005 iFP-500 series mp3 player
++ 1007 iFP-700 series mp3/ogg vorbis player
++ 1008 iFP-800 series mp3/ogg vorbis player
++ 100A iFP-1000 series mp3/ogg vorbis player
++ 1101 iFP-100 series mp3 player (ums firmware)
++ 1103 iFP-300 series mp3 player (ums firmware)
++ 1105 iFP-500 series mp3 player (ums firmware)
++413c Dell Computer Corp.
++ 8100 TrueMobile 1180 802.11b Adapter
+ 4242 USB Design by Example
+ 4201 Buttons and Lights HID device
+ 4220 Echo 1 Camera
+ 544d Transmeta Corp.
+-55aa OnSpec Electronic Inc.
++5543 UC-Logic Technology Corp.
++ 0002 SuperPen WP3325U Tablet
++55aa OnSpec Electronic, Inc.
+ 1234 ATAPI Bridge
+ a103 Sandisk SDDR-55 SmartMedia Card Reader
+-5543 UC-Logic Technology, Corp.
+- 0002 SuperPen WP3325U Tablet
+ 636c CoreLogic, Inc.
+ 6666 Prototype product Vendor ID
+ 0667 Smart Joy PSX, PS-PC Smart JoyPad
+-6a75 Shanghai Jujo Electronics Co., Ltd.
++6a75 Shanghai Jujo Electronics Co., Ltd
+ 8086 Intel Corp.
+ 0110 Easy PC Camera
+ 0431 Intel Pro Video PC Camera
+ 0510 Digital Movie Creator
+ 0630 Pocket PC Camera
++ 07d3 BLOB boot loader firmware
++ 1111 PRO/Wireless 2011B 802.11b Adapter
+ 9890 82930 Test Board
+ c013 Wireless HID Station
+-c251 Keil Software
++8341 EGO Systems, Inc.
++ 2000 Flashdisk
++c251 Keil Software, Inc.
++eb1a eMPIA Technology, Inc.
++ 2801 GrabBeeX+ Video Encoder
+
+ # List of known device classes, subclasses and protocols
+
+@@ -1960,22 +3536,32 @@
+ # subclass subclass_name <-- single tab
+ # protocol protocol_name <-- two tabs
+
+-C 00 Interface
++C 00 (Defined at Interface level)
+ C 01 Audio
+ 01 Control Device
+ 02 Streaming
+- 03 Non Streaming
++ 03 MIDI Streaming
+ C 02 Communications
+ 01 Direct Line
+ 02 Abstract (modem)
+ 00 None
+- 01 AT-commands
+- ff Vendor Specific
++ 01 AT-commands (v.25ter)
++ 02 AT-commands (PCCA101)
++ 03 AT-commands (PCCA101 + wakeup)
++ 04 AT-commands (GSM)
++ 05 AT-commands (3G)
++ 06 AT-commands (CDMA)
++ fe Defined by command set descriptor
++ ff Vendor Specific (MSFT RNDIS?)
+ 03 Telephone
+ 04 Multi-Channel
+ 05 CAPI Control
+ 06 Ethernet Networking
+ 07 ATM Networking
++ 08 Wireless Handset Control
++ 09 Device Management
++ 0a Mobile Direct Line
++ 0b OBEX
+ C 03 Human Interface Devices
+ 00 No Subclass
+ 00 None
+@@ -2012,20 +3598,44 @@
+ 01 Control/Bulk
+ 50 Bulk (Zip)
+ C 09 Hub
+-C 10 Data
+- 30 I.430 ISDN BRI
+- 31 HDLC
+- 32 Transparent
+- 50 Q.921M
+- 51 Q.921
+- 52 Q.921TM
+- 90 V.42bis
+- 91 Q.932 EuroISDN
+- 92 V.120 V.24 rate ISDN
+- 93 CAPI 2.0
+- fd Host Based Driver
+- fe CDC PUF
+- ff Vendor specific
++ 00 Unused
++ 01 Single TT
++ 02 TT per port
++C 0a Data
++ 00 Unused
++ 30 I.430 ISDN BRI
++ 31 HDLC
++ 32 Transparent
++ 50 Q.921M
++ 51 Q.921
++ 52 Q.921TM
++ 90 V.42bis
++ 91 Q.932 EuroISDN
++ 92 V.120 V.24 rate ISDN
++ 93 CAPI 2.0
++ fd Host Based Driver
++ fe CDC PUF
++ ff Vendor specific
++C 0b Chip/SmartCard
++C 0d Content Security
++C 0e Video
++ 00 Undefined
++ 01 Video Control
++ 02 Video Streaming
++ 03 Video Interface Collection
++C dc Diagnostic
++ 01 Reprogrammable Diagnostics
++ 01 USB2 Compliance
++C e0 Wireless
++ 01 Radio Frequency
++ 01 Bluetooth
++C ef Miscellaneous Device
++ 02 Common Class
++ 01 Interface Association
++C fe Application Specific Interface
++ 01 Device Firmware Update
++ 02 IRDA Bridge
++ 03 Test and Measurement
+ C ff Vendor Specific Class
+ ff Vendor Specific Subclass
+ ff Vendor Specific Protocol
+@@ -2644,10 +4254,12 @@
+ 001 Button 1 (Primary)
+ 002 Button 2 (Secondary)
+ 003 Button 3 (Tertiary)
++ 004 Button 4
++ 005 Button 5
+ HUT 0a Ordinal
+ 001 Instance 1
+ 002 Instance 2
+- 002 Instance 3
++ 003 Instance 3
+ HUT 0b Telephony
+ 000 Unassigned
+ 001 Phone
+@@ -3177,14 +4789,191 @@
+ 0b0 Settings
+ 0ca On Screen Display (OSD)
+ 0d4 Stereo Mode
+-HUT 84 Power Pages
+-HUT 85 Power Pages
++HUT 84 Power Device Page
++ 000 Undefined
++ 001 iName
++ 002 Present Status
++ 003 Changed Status
++ 004 UPS
++ 005 Power Supply
++ 010 Battery System
++ 011 Battery System ID
++ 012 Battery
++ 013 Battery ID
++ 014 Charger
++ 015 Charger ID
++ 016 Power Converter
++ 017 Power Converter ID
++ 018 Outlet System
++ 019 Outlet System ID
++ 01a Input
++ 01b Input ID
++ 01c Output
++ 01d Output ID
++ 01e Flow
++ 01f Flow ID
++ 020 Outlet
++ 021 Outlet ID
++ 022 Gang
++ 023 Gang ID
++ 024 Power Summary
++ 025 Power Summary ID
++ 030 Voltage
++ 031 Current
++ 032 Frequency
++ 033 Apparent Power
++ 034 Active Power
++ 035 Percent Load
++ 036 Temperature
++ 037 Humidity
++ 038 Bad Count
++ 040 Config Voltage
++ 041 Config Current
++ 042 Config Frequency
++ 043 Config Apparent Power
++ 044 Config Active Power
++ 045 Config Percent Load
++ 046 Config Temperature
++ 047 Config Humidity
++ 050 Switch On Control
++ 051 Switch Off Control
++ 052 Toggle Control
++ 053 Low Voltage Transfer
++ 054 High Voltage Transfer
++ 055 Delay Before Reboot
++ 056 Delay Before Startup
++ 057 Delay Before Shutdown
++ 058 Test
++ 059 Module Reset
++ 05a Audible Alarm Control
++ 060 Present
++ 061 Good
++ 062 Internal Failure
++ 063 Voltage out of range
++ 064 Frequency out of range
++ 065 Overload
++ 066 Over Charged
++ 067 Over Temperature
++ 068 Shutdown Requested
++ 069 Shutdown Imminent
++ 06a Reserved
++ 06b Switch On/Off
++ 06c Switchable
++ 06d Used
++ 06e Boost
++ 06f Buck
++ 070 Initialized
++ 071 Tested
++ 072 Awaiting Power
++ 073 Communication Lost
++ 0fd iManufacturer
++ 0fe iProduct
++ 0ff iSerialNumber
++HUT 85 Battery System Page
++ 000 Undefined
++ 001 SMB Battery Mode
++ 002 SMB Battery Status
++ 003 SMB Alarm Warning
++ 004 SMB Charger Mode
++ 005 SMB Charger Status
++ 006 SMB Charger Spec Info
++ 007 SMB Selector State
++ 008 SMB Selector Presets
++ 009 SMB Selector Info
++ 010 Optional Mfg. Function 1
++ 011 Optional Mfg. Function 2
++ 012 Optional Mfg. Function 3
++ 013 Optional Mfg. Function 4
++ 014 Optional Mfg. Function 5
++ 015 Connection to SMBus
++ 016 Output Connection
++ 017 Charger Connection
++ 018 Battery Insertion
++ 019 Use Next
++ 01a OK to use
++ 01b Battery Supported
++ 01c SelectorRevision
++ 01d Charging Indicator
++ 028 Manufacturer Access
++ 029 Remaining Capacity Limit
++ 02a Remaining Time Limit
++ 02b At Rate
++ 02c Capacity Mode
++ 02d Broadcast To Charger
++ 02e Primary Battery
++ 02f Charge Controller
++ 040 Terminate Charge
++ 041 Terminate Discharge
++ 042 Below Remaining Capacity Limit
++ 043 Remaining Time Limit Expired
++ 044 Charging
++ 045 Discharging
++ 046 Fully Charged
++ 047 Fully Discharged
++ 048 Conditioning Flag
++ 049 At Rate OK
++ 04a SMB Error Code
++ 04b Need Replacement
++ 060 At Rate Time To Full
++ 061 At Rate Time To Empty
++ 062 Average Current
++ 063 Max Error
++ 064 Relative State Of Charge
++ 065 Absolute State Of Charge
++ 066 Remaining Capacity
++ 067 Full Charge Capacity
++ 068 Run Time To Empty
++ 069 Average Time To Empty
++ 06a Average Time To Full
++ 06b Cycle Count
++ 080 Batt. Pack Model Level
++ 081 Internal Charge Controller
++ 082 Primary Battery Support
++ 083 Design Capacity
++ 084 Specification Info
++ 085 Manufacturer Date
++ 086 Serial Number
++ 087 iManufacturerName
++ 088 iDeviceName
++ 089 iDeviceChemistry
++ 08a Manufacturer Data
++ 08b Rechargeable
++ 08c Warning Capacity Limit
++ 08d Capacity Granularity 1
++ 08e Capacity Granularity 2
++ 08f iOEMInformation
++ 0c0 Inhibit Charge
++ 0c1 Enable Polling
++ 0c2 Reset To Zero
++ 0d0 AC Present
++ 0d1 Battery Present
++ 0d2 Power Fail
++ 0d3 Alarm Inhibited
++ 0d4 Thermistor Under Range
++ 0d5 Thermistor Hot
++ 0d6 Thermistor Cold
++ 0d7 Thermistor Over Range
++ 0d8 Voltage Out Of Range
++ 0d9 Current Out Of Range
++ 0da Current Not Regulated
++ 0db Voltage Not Regulated
++ 0dc Master Mode
++ 0f0 Charger Selector Support
++ 0f1 Charger Spec
++ 0f2 Level 2
++ 0f3 Level 3
+ HUT 86 Power Pages
+ HUT 87 Power Pages
+ HUT 8c Bar Code Scanner Page (POS)
+ HUT 8d Scale Page (POS)
+ HUT 90 Camera Control Page
+ HUT 91 Arcade Control Page
++HUT f0 Cash Device
++ 0f1 Cash Drawer
++ 0f2 Cash Drawer Number
++ 0f3 Cash Drawer Set
++ 0f4 Cash Drawer Status
++HUT ff Vendor Specific
+
+ # List of Languages
+
+@@ -3285,8 +5074,8 @@
+ 01 Bokmal
+ 02 Nynorsk
+ L 0015 Polish
+-L 0016 Portugese
+- 01 Portugese
++L 0016 Portuguese
++ 01 Portuguese
+ 02 Brazilian
+ L 0017 forgotten
+ L 0018 Romanian
+@@ -3354,3 +5143,46 @@
+ 02 India
+ L 0061 Nepali
+ 02 India
++
++# HID Descriptor bCountryCode
++# HID Specification 1.11 (2001-06-27) page 23
++#
++# Syntax:
++# HCC country_code keymap_type
++
++HCC 00 Not supported
++HCC 01 Arabic
++HCC 02 Belgian
++HCC 03 Canadian-Bilingual
++HCC 04 Canadian-French
++HCC 05 Czech Republic
++HCC 06 Danish
++HCC 07 Finnish
++HCC 08 French
++HCC 09 German
++HCC 10 Greek
++HCC 11 Hebrew
++HCC 12 Hungary
++HCC 13 International (ISO)
++HCC 14 Italian
++HCC 15 Japan (Katakana)
++HCC 16 Korean
++HCC 17 Latin American
++HCC 18 Netherlands/Dutch
++HCC 19 Norwegian
++HCC 20 Persian (Farsi)
++HCC 21 Poland
++HCC 22 Portuguese
++HCC 23 Russia
++HCC 24 Slovakia
++HCC 25 Spanish
++HCC 26 Swedish
++HCC 27 Swiss/French
++HCC 28 Swiss/German
++HCC 29 Switzerland
++HCC 30 Taiwan
++HCC 31 Turkish-Q
++HCC 32 UK
++HCC 33 US
++HCC 34 Yugoslavia
++HCC 35 Turkish-F
+--- usbutils-0.11/usbdevice_fs.h~usbutils-0.11+cvs20041108
++++ usbutils-0.11/usbdevice_fs.h
+@@ -23,7 +23,7 @@
+ * History:
+ * 0.1 04.01.2000 Created
+ *
+- * $Id$
++ * $Id$
+ */
+
+ /*****************************************************************************/
+@@ -31,6 +31,8 @@
+ #ifndef _LINUX_USBDEVICE_FS_H
+ #define _LINUX_USBDEVICE_FS_H
+
++#include <linux/types.h>
++
+ /* --------------------------------------------------------------------- */
+
+ #define USBDEVICE_SUPER_MAGIC 0x9fa2
+@@ -64,8 +66,21 @@
+ void *context;
+ };
+
++#define USBDEVFS_MAXDRIVERNAME 255
++
++struct usbdevfs_getdriver {
++ unsigned int interface;
++ char driver[USBDEVFS_MAXDRIVERNAME + 1];
++};
++
++struct usbdevfs_connectinfo {
++ unsigned int devnum;
++ unsigned char slow;
++};
++
+ #define USBDEVFS_URB_DISABLE_SPD 1
+ #define USBDEVFS_URB_ISO_ASAP 2
++#define USBDEVFS_URB_QUEUE_BULK 0x10
+
+ #define USBDEVFS_URB_TYPE_ISO 0
+ #define USBDEVFS_URB_TYPE_INTERRUPT 1
+@@ -94,11 +109,27 @@
+ struct usbdevfs_iso_packet_desc iso_frame_desc[0];
+ };
+
++/* ioctls for talking to drivers in the usbcore module: */
++struct usbdevfs_ioctl {
++ int ifno; /* interface 0..N ; negative numbers reserved */
++ int ioctl_code; /* MUST encode size + direction of data so the
++ * macros in <asm/ioctl.h> give correct values */
++ void *data; /* param buffer (in, or out) */
++};
++
++/* You can do most things with hubs just through control messages,
++ * except find out what device connects to what port. */
++struct usbdevfs_hub_portinfo {
++ char nports; /* number of downstream ports in this hub */
++ char port [127]; /* e.g. port 3 connects to device 27 */
++};
++
+ #define USBDEVFS_CONTROL _IOWR('U', 0, struct usbdevfs_ctrltransfer)
+ #define USBDEVFS_BULK _IOWR('U', 2, struct usbdevfs_bulktransfer)
+ #define USBDEVFS_RESETEP _IOR('U', 3, unsigned int)
+ #define USBDEVFS_SETINTERFACE _IOR('U', 4, struct usbdevfs_setinterface)
+ #define USBDEVFS_SETCONFIGURATION _IOR('U', 5, unsigned int)
++#define USBDEVFS_GETDRIVER _IOW('U', 8, struct usbdevfs_getdriver)
+ #define USBDEVFS_SUBMITURB _IOR('U', 10, struct usbdevfs_urb)
+ #define USBDEVFS_DISCARDURB _IO('U', 11)
+ #define USBDEVFS_REAPURB _IOW('U', 12, void *)
+@@ -106,6 +137,11 @@
+ #define USBDEVFS_DISCSIGNAL _IOR('U', 14, struct usbdevfs_disconnectsignal)
+ #define USBDEVFS_CLAIMINTERFACE _IOR('U', 15, unsigned int)
+ #define USBDEVFS_RELEASEINTERFACE _IOR('U', 16, unsigned int)
++#define USBDEVFS_CONNECTINFO _IOW('U', 17, struct usbdevfs_connectinfo)
++#define USBDEVFS_IOCTL _IOWR('U', 18, struct usbdevfs_ioctl)
++#define USBDEVFS_HUB_PORTINFO _IOR('U', 19, struct usbdevfs_hub_portinfo)
++#define USBDEVFS_RESET _IO('U', 20)
++#define USBDEVFS_CLEAR_HALT _IOR('U', 21, unsigned int)
+
+ /* --------------------------------------------------------------------- */
+
+@@ -126,18 +162,6 @@
+
+ #define IROOT 1
+
+-/*
+- * sigh. rwsemaphores do not (yet) work from modules
+- */
+-
+-#define rw_semaphore semaphore
+-#define init_rwsem init_MUTEX
+-#define down_read down
+-#define down_write down
+-#define up_read up
+-#define up_write up
+-
+-
+ struct dev_state {
+ struct list_head list; /* state list */
+ struct rw_semaphore devsem; /* protects modifications to dev (dev == NULL indicating disconnect) */
+@@ -163,7 +187,6 @@
+ extern struct file_operations usbdevfs_bus_file_operations;
+ extern void usbdevfs_conn_disc_event(void);
+
+-
+ #endif /* __KERNEL__ */
+
+ /* --------------------------------------------------------------------- */
+--- /dev/null
++++ usbutils-0.11/usbmisc.c
+@@ -0,0 +1,141 @@
++/*****************************************************************************/
++/*
++ * usbmisc.c -- Misc USB routines
++ *
++ * Copyright (C) 2003 Aurelien Jarno (aurelien@aurel32.net)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ *
++ */
++
++/*****************************************************************************/
++
++#include <stdio.h>
++#include <string.h>
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
++#include "usbmisc.h"
++
++/* ---------------------------------------------------------------------- */
++
++static const char *procbususb = "/proc/bus/usb";
++
++/* ---------------------------------------------------------------------- */
++
++static int readlink_recursive(const char *path, char *buf, size_t bufsize)
++{
++ char temp[PATH_MAX + 1];
++ char *ptemp;
++ int ret;
++
++ ret = readlink(path, buf, bufsize);
++
++ if (ret > 0) {
++ buf[ret] = 0;
++ if (*buf != '/')
++ {
++ strncpy(temp, path, sizeof(temp));
++ ptemp = temp + strlen(temp);
++ while (*ptemp != '/' && ptemp != temp) ptemp--;
++ ptemp++;
++ strncpy(ptemp, buf, bufsize + temp - ptemp);
++ }
++ else
++ strncpy(temp, buf, sizeof(temp));
++ return readlink_recursive(temp, buf, bufsize);
++ }
++ else {
++ strncpy(buf, path, bufsize);
++ return strlen(buf);
++ }
++}
++
++static char *get_absolute_path(const char *path, char *result, size_t result_size)
++{
++ const char *ppath; /* pointer on the input string */
++ char *presult; /* pointer on the output string */
++
++ ppath = path;
++ presult = result;
++ result[0] = 0;
++
++ if (path == NULL)
++ return result;
++
++ if (*ppath != '/')
++ {
++ getcwd(result, result_size);
++ presult += strlen(result);
++ result_size -= strlen(result);
++
++ *presult++ = '/';
++ result_size--;
++ }
++
++ while (*ppath != 0 && result_size > 1) {
++ if (*ppath == '/') {
++ do ppath++; while (*ppath == '/');
++ *presult++ = '/';
++ result_size--;
++ }
++ else if (*ppath == '.' && *(ppath + 1) == '.' && *(ppath + 2) == '/' && *(presult - 1) == '/') {
++ if ((presult - 1) != result)
++ {
++ /* go one directory upper */
++ do {
++ presult--;
++ result_size++;
++ } while (*(presult - 1) != '/');
++ }
++ ppath += 3;
++ }
++ else if (*ppath == '.' && *(ppath + 1) == '/' && *(presult - 1) == '/') {
++ ppath += 2;
++ }
++ else {
++ *presult++ = *ppath++;
++ result_size--;
++ }
++ }
++ /* Don't forget to mark the end of the string! */
++ *presult = 0;
++
++ return result;
++}
++
++struct usb_device *get_usb_device(const char *path)
++{
++ struct usb_bus *bus;
++ struct usb_device *dev;
++ char device_path[PATH_MAX + 1];
++ char absolute_path[PATH_MAX + 1];
++
++ readlink_recursive(path, device_path, sizeof(device_path));
++ get_absolute_path(device_path, absolute_path, sizeof(absolute_path));
++
++ for (bus = usb_busses; bus; bus = bus->next) {
++ for (dev = bus->devices; dev; dev = dev->next) {
++ snprintf(device_path, sizeof(device_path), "%s/%s/%s", procbususb, bus->dirname, dev->filename);
++ if (!strcmp(device_path, absolute_path))
++ return dev;
++ }
++ }
++ return NULL;
++}
++
+--- /dev/null
++++ usbutils-0.11/usbmisc.h
+@@ -0,0 +1,36 @@
++/*****************************************************************************/
++/*
++ * usbmisc.h -- Misc USB routines
++ *
++ * Copyright (C) 2003 Aurelien Jarno (aurelien@aurel32.net)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ *
++ */
++
++/*****************************************************************************/
++
++#ifndef _USBMISC_H
++#define _USBMISC_H
++
++#include <usb.h>
++
++/* ---------------------------------------------------------------------- */
++
++extern struct usb_device *get_usb_device(const char *path);
++
++/* ---------------------------------------------------------------------- */
++#endif /* _USBMISC_H */
+--- usbutils-0.11/usbmodules.8~usbutils-0.11+cvs20041108
++++ usbutils-0.11/usbmodules.8
+@@ -5,7 +5,8 @@
+ in USB device
+ .SH SYNOPSIS
+ .B usbmodules
+-.RB [ "--device " /proc/bus/bus/NNN/NNN ]
++.RB [ "--device " /proc/bus/bus/NNN/NNN
++.RB | " --product " xx/xx/xx " --type " dd/dd/dd " --interface " dd/dd/dd ]
+ .RB [ "--check " modulename ]
+ .RB [ --help ]
+ .RB [ "--mapfile " pathname ]
+@@ -27,11 +28,21 @@
+ .IP
+ done
+ .PP
++or
++.IP
++ for module in $(usbmodules --product $PRODUCT --type $TYPE --interface $INTERFACE) ; do
++.IP
++ modprobe -s -k "$module"
++.IP
++ done
++.PP
+ The DEVICE environment variable is passed from the kernel to /sbin/hotplug
+ during USB hotplugging if the kernel was configured using
+ .I usbdevfs.
++The environment variables PRODUCT, TYPE and INTERFACE are set when
++/sbin/hotplug is called during hotplugging.
+ .B usbmodules
+-currently requires usbdevfs to operate.
++can operate with both configurations.
+ .PP
+ When a USB device is removed from the system, the Linux kernel will
+ decrement a usage count on USB driver module. If this count drops
+@@ -52,7 +63,20 @@
+ .BI "--device " /proc/bus/usb/MMM/NNN
+ Selects which device
+ .B usbmodules
+-will examine. The argument is currently mandatory.
++will examine. The argument is mandatory unless
++.B --procuct
++,
++.B --type
++and
++.B --interface
++are used together.
++.TP
++.BI "--product " xx/xx/xx " --type " dd/dd/dd " --interface " dd/dd/dd
++Alternative way to select the device
++.B usbmodules
++will examine. These arguments are mandatory unless
++.B --device
++is given.
+ .TP
+ .B --help, -h
+ Print a help message
+--- usbutils-0.11/usbmodules.c~usbutils-0.11+cvs20041108
++++ usbutils-0.11/usbmodules.c
+@@ -11,7 +11,7 @@
+ *
+ * The code in usbmodules not derived from elsewhere was written by
+ * Adam J. Richter. David Brownell added the --mapfile and --version
+- * options.
++ * options. Aurelien Jarno modified the code to use libusb.
+ *
+ * Copyright (C) 2000, 2001 Yggdrasil Computing, Inc.
+ * Copyright (C) 1999 Thomas Sailer (sailer@ife.ee.ethz.ch)
+@@ -38,8 +38,6 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/ioctl.h>
+-#include <fcntl.h>
+-#include <dirent.h>
+ #include <string.h>
+ #include <errno.h>
+ #include <stdlib.h>
+@@ -48,36 +46,27 @@
+ #include <stdarg.h>
+ #include <sys/param.h>
+ #include <sys/utsname.h>
+-
+-#include <linux/types.h>
+-#ifdef HAVE_LINUX_USBDEVICE_FS_H
+-#include <linux/usbdevice_fs.h>
+-#else
+-#include "usbdevice_fs.h"
+-#endif
+-#ifdef HAVE_LINUX_USB_H
+-#include <linux/usb.h>
+-#else
+-#include "usb.h"
+-#endif
++#include <usb.h>
+
+ #ifdef HAVE_CONFIG_H
+ #include "config.h"
+ #endif
+
+ #include "usbmodules.h"
+-#include "names.h"
+-#include "devtree.h"
++#include "usbmisc.h"
+
+ #define _GNU_SOURCE
+ #include <getopt.h>
+
+-#define OPT_STRING "c:d:hm:v"
++#define OPT_STRING "c:d:hi:m:p:t:v"
+ static struct option long_options[] = {
+ {"check", required_argument, NULL, 'c'},
+ {"device", required_argument, NULL, 'd'},
+ {"help", no_argument, NULL, 'h'},
++ {"interface", required_argument, NULL, 'i'},
+ {"mapfile", required_argument, NULL, 'm'},
++ {"product", required_argument, NULL, 'p'},
++ {"type", required_argument, NULL, 't'},
+ {"version", no_argument, NULL, 'v'},
+ { 0, 0, NULL, 0}
+ };
+@@ -87,23 +76,7 @@
+
+ #define LINELENGTH 8000
+
+-#define CTRL_RETRIES 50
+-#define CTRL_TIMEOUT 100 /* milliseconds */
+-
+-#define USB_DT_CS_DEVICE 0x21
+-#define USB_DT_CS_CONFIG 0x22
+-#define USB_DT_CS_STRING 0x23
+-#define USB_DT_CS_INTERFACE 0x24
+-#define USB_DT_CS_ENDPOINT 0x25
+-
+ static char *checkname = NULL;
+-
+-static int idVendor;
+-static int idProduct;
+-static int bcdDevice;
+-static int bDeviceClass;
+-static int bDeviceSubClass;
+-static int bDeviceProtocol;
+ struct usbmap_entry *usbmap_list;
+
+ static void *
+@@ -218,6 +191,9 @@
+ if (line[0] == '#')
+ continue;
+
++ if (line[0] == '\n')
++ continue;
++
+ entry = xmalloc(sizeof(struct usbmap_entry));
+
+ if (!scan_with_flags(line, entry, name) &&
+@@ -257,52 +233,51 @@
+ */
+
+ static void
+-match_modules(int bInterfaceClass,
+- int bInterfaceSubClass,
+- int bInterfaceProtocol)
++match_modules(struct usb_device_descriptor *device_descriptor,
++ struct usb_interface_descriptor *interface_descriptor)
+ {
+ struct usbmap_entry *mod;
+
+ for (mod = usbmap_list; mod != NULL; mod = mod->next) {
+
+ if ((mod->match_flags & USB_MATCH_VENDOR) &&
+- mod->idVendor != idVendor)
++ mod->idVendor != device_descriptor->idVendor)
+ continue;
+
+ if ((mod->match_flags & USB_MATCH_PRODUCT) &&
+- mod->idProduct != idProduct)
++ mod->idProduct != device_descriptor->idProduct)
+ continue;
+
+ if ((mod->match_flags & USB_MATCH_DEV_LO) &&
+- mod->bcdDevice_lo > bcdDevice)
++ mod->bcdDevice_lo > device_descriptor->bcdDevice)
+ continue;
+
+ if ((mod->match_flags & USB_MATCH_DEV_HI) &&
+- mod->bcdDevice_hi < bcdDevice)
++ mod->bcdDevice_hi < device_descriptor->bcdDevice)
+ continue;
+
+ if ((mod->match_flags & USB_MATCH_DEV_CLASS) &&
+- mod->bDeviceClass != bDeviceClass)
++ mod->bDeviceClass != device_descriptor->bDeviceClass)
+ continue;
+
+ if ((mod->match_flags & USB_MATCH_DEV_SUBCLASS) &&
+- mod->bDeviceSubClass != bDeviceSubClass)
++ mod->bDeviceSubClass != device_descriptor->bDeviceSubClass)
+ continue;
+
+ if ((mod->match_flags & USB_MATCH_DEV_PROTOCOL) &&
+- mod->bDeviceProtocol != bDeviceProtocol)
++ mod->bDeviceProtocol != device_descriptor->bDeviceProtocol)
+ continue;
+
+ if ((mod->match_flags & USB_MATCH_INT_CLASS) &&
+- mod->bInterfaceClass != bInterfaceClass)
++ mod->bInterfaceClass != interface_descriptor->bInterfaceClass)
+ continue;
+
+ if ((mod->match_flags & USB_MATCH_INT_SUBCLASS) &&
+- mod->bInterfaceSubClass != bInterfaceSubClass)
++ mod->bInterfaceSubClass != interface_descriptor->bInterfaceSubClass)
+ continue;
+
+ if ((mod->match_flags & USB_MATCH_INT_PROTOCOL) &&
+- mod->bInterfaceProtocol != bInterfaceProtocol)
++ mod->bInterfaceProtocol != interface_descriptor->bInterfaceProtocol)
+ continue;
+
+ if (checkname != NULL) {
+@@ -315,161 +290,154 @@
+ }
+ }
+
+-static int usb_control_msg(int fd,
+- u_int8_t requesttype,
+- u_int8_t request,
+- u_int16_t value,
+- u_int16_t index,
+- unsigned int size,
+- void *data)
++static void process_device(const char *path)
+ {
+- int result;
+- int try;
+-
+- struct usbdevfs_ctrltransfer ctrl;
+-
+- ctrl.requesttype = requesttype;
+- ctrl.request = request;
+- ctrl.value = value;
+- ctrl.index = index;
+- ctrl.length = size;
+- ctrl.data = data;
+- ctrl.timeout = CTRL_TIMEOUT;
+-
+- /* At least on UHCI controllers, this ioctl gets a lot of
+- ETIMEDOUT errors which can often be retried with success
+- one is persistent enough. So, we try 100 times, which work
+- on one machine, but not on my notebook computer.
+- --Adam J. Richter (adam@yggdrasil.com) 2000 November 03. */
+-
+- try = 0;
+- do {
+- result = ioctl(fd, USBDEVFS_CONTROL, &ctrl);
+- try++;
+- } while (try < CTRL_RETRIES && result == -1 && errno == ETIMEDOUT);
+- return result;
+-}
++ struct usb_device *dev;
++ struct usb_dev_handle *udev;
++ int i, j, k;
+
++ dev = get_usb_device(path);
+
+-static void do_config(int fd, unsigned int nr)
+-{
+- unsigned char buf[1024], *p;
+- unsigned int sz;
++ if (!dev) {
++ fprintf(stderr, "Cannot open %s\n", path);
++ return;
++ }
++
++
++ udev = usb_open(dev);
++
++ for (i = 0 ; i < dev->descriptor.bNumConfigurations ; i++)
++ for (j = 0 ; j < dev->config[i].bNumInterfaces ; j++)
++ for (k = 0 ; k < dev->config[i].interface[j].num_altsetting ; k++)
++ match_modules(&dev->descriptor,
++ &dev->config[i].interface[j].altsetting[k]);
+
+- if (usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR,
+- (USB_DT_CONFIG << 8) | nr,
+- 0, USB_DT_CONFIG_SIZE, buf) < 0) {
+- fprintf(stderr ,"cannot get config descriptor %d, %s (%d)\n",
+- nr, strerror(errno), errno);
+- return;
+- }
+- if (buf[0] < USB_DT_CONFIG_SIZE || buf[1] != USB_DT_CONFIG)
+- fprintf(stderr, "Warning: invalid config descriptor\n");
+- sz = buf[2] | buf[3] << 8;
+- if (sz > sizeof(buf)) {
+- fprintf(stderr,
+- "Config %d descriptor too long, truncating\n", nr);
+- sz = sizeof(buf);
+- }
+- if (usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR,
+- (USB_DT_CONFIG << 8) | nr, 0, sz, buf) < 0) {
+- fprintf(stderr, "cannot get config descriptor %d, %s (%d)\n",
+- nr, strerror(errno), errno);
+- return;
+- }
+- p = buf;
+- while (sz >= 2 && p[0] >= 2 && p[0] < sz) {
+- if (p[1] == USB_DT_INTERFACE) {
+- const int intClass = p[5];
+- const int intSubClass = p[6];
+- const int intProto = p[7];
+- match_modules(intClass, intSubClass, intProto);
+- }
+- sz -= p[0];
+- p += p[0];
+- }
++ usb_close(udev);
+ }
+
+-static void process_device(const char *path)
++static void process_args(char *product,
++ char *type,
++ char *interface)
+ {
+- unsigned char buf[USB_DT_DEVICE_SIZE];
+- int fd;
+- unsigned int i, maxcfg;
+-
+- if ((fd = open(path, O_RDWR)) == -1) {
+- fprintf(stderr, "cannot open %s, %s (%d)\n",
+- path, strerror(errno), errno);
+- return;
+- }
+- if (usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR,
+- (USB_DT_DEVICE << 8), 0, USB_DT_DEVICE_SIZE, buf)
+- < 0) {
+- perror("cannot get config descriptor");
+- goto err;
+- }
+- bDeviceClass = buf[4];
+- bDeviceSubClass = buf[5];
+- bDeviceProtocol = buf[6];
+- idVendor = buf[8] | (buf[9] << 8);
+- idProduct = buf[10] | (buf[11] << 8);
+- bcdDevice = buf[12] | (buf[13] << 8);
+-
+- maxcfg = buf[17];
+- if (buf[0] < 18 || buf[1] != USB_DT_DEVICE)
+- maxcfg = 1;
++ int a, b, c;
++ struct usb_device_descriptor dd;
++ struct usb_interface_descriptor id;
+
+- for (i = 0; i < maxcfg; i++)
+- do_config(fd, i);
+- err:
+- close(fd);
++ memset(&dd, 0, sizeof(dd));
++ memset(&id, 0, sizeof(id));
++ if (product == NULL ||
++ sscanf(product, "%hx/%hx/%hx", &dd.idVendor, &dd.idProduct, &dd.bcdDevice) != 3) {
++ fprintf(stderr, "Bad product format: '%s'\n", product);
++ return;
++ }
++ if (type == NULL || sscanf(type, "%d/%d/%d", &a, &b, &c) != 3) {
++ fprintf(stderr, "Bad type format: '%s'", type);
++ return;
++ }
++ dd.bDeviceClass = a;
++ dd.bDeviceSubClass = b;
++ dd.bDeviceProtocol = c;
++ if (dd.bDeviceClass == 0) {
++ /* interface must be specified for device class 0 */
++ if (interface == NULL ||
++ sscanf(interface, "%d/%d/%d", &a, &b, &c) != 3) {
++ fprintf(stderr, "Bad interface format: '%s'\n", interface);
++ return;
++ }
++ id.bInterfaceClass = a;
++ id.bInterfaceSubClass = b;
++ id.bInterfaceProtocol = c;
++ } else {
++ /* interface maybe given. if so, check and use arg */
++ if (interface != NULL && *interface != '\0' &&
++ sscanf(interface, "%d/%d/%d", &a, &b, &c) != 3) {
++ fprintf(stderr, "Bad interface format: '%s'\n", interface);
++ return;
++ }
++ id.bInterfaceClass = a;
++ id.bInterfaceSubClass = b;
++ id.bInterfaceProtocol = c;
++ }
++ match_modules(&dd, &id);
+ }
+
+-
+-int
+-main (int argc, char **argv)
++int main (int argc, char *argv[])
+ {
+ int opt_index = 0;
+ int opt;
+ char *device = NULL;
+ char *pathname = NULL;
++ char *product = NULL, *type = NULL, *interface = NULL;
+
+- while ((opt = getopt_long(argc, argv, OPT_STRING, long_options,
+- &opt_index)) != -1) {
++ while ((opt = getopt_long(argc, argv, OPT_STRING, long_options, &opt_index)) != -1) {
+ switch(opt) {
+- case 'c':
+- checkname = optarg;
+- break;
+- case 'd':
+- device = optarg;
+- break;
+- case 'h':
+- printf ("Usage: usbmodules [--help] [--device /proc/bus/usb/NNN/NNN] [--check module]\n"
+- "\t[--mapfile pathname] [--version]\n"
+- " Lists kernel modules corresponding to USB devices currently plugged\n"
+- " into the computer.\n");
+- return 0;
+- case 'm':
+- pathname = optarg;
+- break;
+- case 'v':
+- puts (VERSION);
+- return 0;
+- default:
+- fprintf(stderr,
+- "Unknown argument character \"%c\".\n",
+- opt);
+- return 1;
++ case 'c':
++ checkname = optarg;
++ break;
++ case 'd':
++ device = optarg;
++ break;
++ case 'h':
++ printf ("Usage: usbmodules [options]...\n"
++ "Lists kernel modules corresponding to USB devices currently plugged\n"
++ "\n"
++ "OPTIONS\n"
++ " -d, --device /proc/bus/usb/NNN/NNN\n"
++ " Selects which device usbmodules will examine\n"
++ " -c, --check module\n"
++ " Check if the given module's exported USB ID patterns matches\n"
++ " -m, --mapfile /etc/hotplug/usb.handmap\n"
++ " Specify a mapfile\n"
++ " -p, --product xx/xx/xx\n"
++ " -t, --type dd/dd/dd\n"
++ " -i, --interface dd/dd/dd\n"
++ " -h, --help\n"
++ " Print help screen\n"
++ " -v, --version\n"
++ " Show version of program\n"
++ "\n");
++ return 0;
++ case 'm':
++ pathname = optarg;
++ break;
++ case 'i':
++ interface = optarg;
++ break;
++ case 'p':
++ product = optarg;
++ break;
++ case 't':
++ type = optarg;
++ break;
++ case 'v':
++ puts (VERSION);
++ return 0;
++ default:
++ fprintf(stderr,
++ "Unknown argument character \"%c\".\n",
++ opt);
++ return 1;
+ }
+ }
+
+- if (device == NULL) {
++ if (device == NULL &&
++ (product == NULL || type == NULL || interface == NULL) ) {
+ fprintf (stderr,
+ "You must specify a device with something like:\n"
+- "\tusbmodules --device /proc/bus/usb/001/009\n");
+- return 1;
++ "\tusbmodules --device /proc/bus/usb/001/009\n"
++ "or\n"
++ "\tusbmodules --product 82d/100/100 --type 0/0/0 --interface 0/0/0\n");
++ return 1;
+ }
++
+ read_modules_usbmap(pathname);
+- process_device(device);
++ usb_init();
++ usb_find_busses();
++ usb_find_devices();
++ if (device != NULL)
++ process_device(device);
++ if (product != NULL && type != NULL)
++ process_args(product, type, interface);
+
+ if (checkname != NULL)
+ return 1; /* The module being checked was not needed */
+--- usbutils-0.11/usbutils.spec~usbutils-0.11+cvs20041108
++++ usbutils-0.11/usbutils.spec
+@@ -1,5 +1,5 @@
+ %define name usbutils
+-%define version 0.11
++%define version 0.12
+ %define release 1
+ Name: %{name}
+ Version: %{version}
+@@ -10,6 +10,7 @@
+ ExclusiveOS: Linux
+ Summary: Linux USB utilities.
+ Group: Applications/System
++BuildPrereq: libusb-devel
+
+ %description
+ This package contains an utility for inspecting
+--- /dev/null
++++ usbutils-0.11/update-usbids
+@@ -0,0 +1,37 @@
++#!/bin/sh
++# This is a script stolen from pciutils. Thanks to Martin Mares <mj@atrey.karlin.mff.cuni.cz>
++# for writing and publishing it under the GNU General Public License.
++
++set -e
++
++SRC="http://linux-usb.sourceforge.net/usb.ids"
++DEST=/var/lib/usbutils//usb.ids
++
++umask 022
++
++if which wget >/dev/null ; then
++ DL="wget -O $DEST.new $SRC"
++elif which lynx >/dev/null ; then
++ DL="eval lynx -source $SRC >$DEST.new"
++else
++ echo >&2 "update-usbids: cannot find wget nor lynx"
++ exit 1
++fi
++
++if ! $DL ; then
++ echo >&2 "update-usbids: download failed"
++ rm -f $DEST.new
++ exit 1
++fi
++
++if ! grep >/dev/null "^C " $DEST.new ; then
++ echo >&2 "update-usbids: missing class info, probably truncated file"
++ exit 1
++fi
++
++if [ -f $DEST ] ; then
++ mv $DEST $DEST.old
++fi
++mv $DEST.new $DEST
++
++echo "Done."
+--- /dev/null
++++ usbutils-0.11/update-usbids.8
+@@ -0,0 +1,27 @@
++.TH update-usbids 8 "27 October 2004" "usbutils-0.11" "Linux USB Utilities"
++.IX update-usbids
++
++.SH NAME
++update-usbids \- download new version of the USB ID list
++
++.SH SYNOPSIS
++.B update-usbids
++
++.SH DESCRIPTION
++.B update-usbids
++fetches the current version of the usb.ids file from the primary distribution
++site and installs it.
++
++This utility requires either wget or lynx to be installed. If gzip or bzip2
++are available, it automatically downloads the compressed version of the list.
++
++.SH FILES
++.TP
++.B /var/lib/usbutils/usb.ids
++Here we install the new list.
++
++.SH SEE ALSO
++.BR lsusb(8).
++
++.SH AUTHOR
++Thomas Sailer, <sailer@ife.ee.ethz.ch>.