diff options
author | Chris Larson <clarson@kergoth.com> | 2004-11-25 10:19:50 +0000 |
---|---|---|
committer | Chris Larson <clarson@kergoth.com> | 2004-11-25 10:19:50 +0000 |
commit | 119b59cd0df00269bfe51d906657193217b8c884 (patch) | |
tree | be4bc7f812a9df2c6b3f17e6c3cc9bfafad07253 /usbutils | |
parent | c985a77fad25302d576fbcf92149c983887bc0b9 (diff) |
Remove the EOLN_NATIVE flag from a ton of files (patches & the like for which line ending conversions can break things).
BKrev: 41a5b1c6eA2OPeQrDQEgEwAmKXvQJg
Diffstat (limited to 'usbutils')
-rw-r--r-- | usbutils/usbutils-0.11+cvs20041108/usbutils-0.11+cvs20041108.patch | 7817 |
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>. |