# # 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 + * lsusb.c: minor formatting updates; add a warning when those HID + descriptors aren't available. + +2004-10-20 Aurelien Jarno + * lsusb.c: bugfixes for reading HID descriptors + +2004-10-15 David Brownell + * 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 + Move to CVS at linux-usb.sf.net + Label as version 0.12. + +2003-12-06 Aurelien Jarno + Update Debian with libusb based version. + +2003-08-31 David Brownell + * lsusb.c: (against 0.11) recognize CDC descriptors, USB 2.0 updates, + string handling updates, + +2003-??-?? Aurelien Jarno + Convert to latest libusb, supporting BSD and Darwin. + 2000-11-06 Thomas Sailer * 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 #include -#include #include -#include #include #include -#include -#include #include #include - -#include -#ifdef HAVE_LINUX_USBDEVICE_FS_H -#include -#else -#include "usbdevice_fs.h" -#endif -#ifdef HAVE_LINUX_USB_H -#include -#else -#include "usb.h" -#endif - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif +#include #include "names.h" #include "devtree.h" +#include "usbmisc.h" #define _GNU_SOURCE #include -#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 ] [-s [:][]] [-d []:[]]\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 -#include -#include -#include -#include -#include /* for in_interrupt() */ -#include -#include - -#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 # 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 + /* --------------------------------------------------------------------- */ #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 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 +#include + +#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 + +/* ---------------------------------------------------------------------- */ + +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 #include #include -#include -#include #include #include #include @@ -48,36 +46,27 @@ #include #include #include - -#include -#ifdef HAVE_LINUX_USBDEVICE_FS_H -#include -#else -#include "usbdevice_fs.h" -#endif -#ifdef HAVE_LINUX_USB_H -#include -#else -#include "usb.h" -#endif +#include #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "usbmodules.h" -#include "names.h" -#include "devtree.h" +#include "usbmisc.h" #define _GNU_SOURCE #include -#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 +# 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, .