#include #include #include "libusb.h" typedef struct libusb_device_descriptor libusb_device_descriptor; typedef struct libusb_device_handle libusb_device_handle; void printdev(libusb_device *dev) { libusb_device_descriptor desc; int res; res = libusb_get_device_descriptor(dev, &desc); if (res < 0) { printf("failed to get device descriptor\n"); return; } printf("Vendor ID: %u Product ID: %u\n", desc.idVendor, desc.idProduct); libusb_device_handle *handle; res = libusb_open(dev, &handle); if (res < 0) { printf("failed to open\n"); return; } if (desc.iManufacturer > 0) { unsigned char buf[256]; res = libusb_get_string_descriptor_ascii(handle, desc.iManufacturer, buf, 256); if (res < 0) { printf("failed to get string descriptor\n"); return; } printf("Manufacturer: %s\n", buf); } } int main() { libusb_device **devs; libusb_context *ctx; int res; res = libusb_init(&ctx); if (res < 0) { printf("init error\n"); exit(-1); } libusb_set_debug(ctx, 3); ssize_t cnt; cnt = libusb_get_device_list(ctx, &devs); if (cnt < 0) { printf("get device error\n"); exit(-1); } printf("%Zd device(s) in list\n", cnt); int i; for (i = 0; i < cnt; ++i) { printf("\n"); printdev(devs[i]); } libusb_free_device_list(devs, 1); libusb_exit(ctx); return 0; }