Hi list. I've made a small example using libusbx that could be useful to someone. It's a simple USB-enumerator program that prints the VID/PID and names of your local USB-hardware installed. Here is prints:
0: VID:8086 PID:3B3C -> Intel Corp. <not found> 1: VID:8086 PID:3B34 -> Intel Corp. <not found> 2: VID:041E PID:405F -> Creative Technology, Ltd WebCam Vista (VF0330) 3: VID:04A9 PID:174A -> Canon, Inc. <not found> 4: VID:0846 PID:6A00 -> NetGear, Inc. WG111v2 54 Mbps Wireless [RealTek RTL8187L] 5: VID:0951 PID:1624 -> Kingston Technology DataTraveler G2 6: VID:09DA PID:000A -> A4 Tech Co., Ltd Optical Mouse Opto 510D 7: VID:0A12 PID:0001 -> Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) 8: VID:8087 PID:0020 -> Intel Corp. Integrated Rate Matching Hub 9: VID:8087 PID:0020 -> Intel Corp. Integrated Rate Matching Hub 10: VID:CACE PID:0001 -> CACE Technologies Inc. <not found> I made it with the help of a Python-script I took from the WireShark project. And as you see the list at http://www.linux-usb.org/usb.ids is a bit incomplete. examples/make-usb.py uses this URL for the vendors/product IDs. Don't ask me for a autotool diff since I know very little about it. But the commands I use to build it (MSVC + GNU-make) is: usb_enum.exe: examples/usb_enum.c examples/usb_vendors.c libusb-1.0.lib $(CC) -c $(CFLAGS) examples/usb_enum.c examples/usb_vendors.c link $(LDFLAGS) -out:$@ usb_enum.obj usb_vendors.obj libusb-1.0.lib examples/usb_vendors.c: examples/make-usb.py python $^ > $@ For the 'clean' target, add 'rm -f examples/usb_vendors.c'. The example sources are attached. --gv
#ifndef _USB_ENUM_H
#define _USB_ENUM_H
struct value_string {
unsigned long val;
const char *string;
};
extern const struct value_string usb_vendors_vals[];
extern const struct value_string usb_products_vals[];
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "libusb.h"
#include "usb_enum.h"
#ifdef _MSC_VER
#define snprintf _snprintf
#endif
/*
* The generated arrays 'usb_vendors_vals[]' and 'usb_products_vals[]' are
* sorted on 'val'. So we break the loops below early when there can be
* no match.
*/
const char *find_vendor_name (unsigned short vendor)
{
const struct value_string *list = usb_vendors_vals;
for ( ; list->string && vendor >= list->val; list++) {
if (list->val == vendor)
return (list->string);
}
return (NULL);
}
const char *find_product_name (unsigned short vendor, unsigned short product)
{
const struct value_string *list = usb_products_vals;
unsigned long val = (vendor << 16) + product;
for ( ; list->string && vendor >= (list->val >> 16); list++) {
if (list->val == val)
return (list->string);
}
return (NULL);
}
void list_devices (void)
{
int i, cnt;
libusb_context *ctx;
libusb_device **list;
libusb_init (&ctx);
cnt = libusb_get_device_list (ctx, &list);
for (i = 0; i < cnt; i++)
{
struct libusb_device_descriptor dd;
const char *vendor, *product;
libusb_get_device_descriptor (list[i], &dd);
printf ("%2d: VID:%04X PID:%04X -> ", i, dd.idVendor, dd.idProduct);
vendor = find_vendor_name (dd.idVendor);
product = find_product_name (dd.idVendor, dd.idProduct);
printf ("%-30s %s\n", vendor ? vendor : "<not found>", product ? product : "<not
found>");
}
libusb_free_device_list (list, 1);
libusb_exit (ctx);
}
int main (int argc, char **argv)
{
list_devices();
return (0);
}
make-usb.py
Description: Binary data
------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________ libusbx-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/libusbx-devel
