65 libusb_device **usb_devices;
66 struct libusb_device_descriptor descriptor;
67 ssize_t total = libusb_get_device_list(ctx, &usb_devices);
70 fprintf(stderr,
"USBDevice: Can't get device list\n");
73 for (
int i = 0; i < total; i++)
75 libusb_device *
device = usb_devices[i];
76 if (!libusb_get_device_descriptor(
device, &descriptor))
78 if (descriptor.idVendor == vendor && descriptor.idProduct == product)
80 if (index == searchindex)
83 libusb_free_device_list(usb_devices, 1);
84 fprintf(stderr,
"Found device %04x/%04x/%d\n", descriptor.idVendor, descriptor.idProduct, index);
89 fprintf(stderr,
"Skipping device %04x/%04x/%d\n", descriptor.idVendor, descriptor.idProduct, index);
95 fprintf(stderr,
"Skipping device %04x/%04x\n", descriptor.idVendor, descriptor.idProduct);
99 libusb_free_device_list(usb_devices, 1);
140 struct libusb_config_descriptor *config;
141 struct libusb_interface_descriptor *interface;
142 int rc = libusb_get_config_descriptor(
dev, 0, &config);
145 fprintf(stderr,
"USBDevice: libusb_get_config_descriptor -> %s\n",
libusb_error_name(rc));
149 interface = (struct libusb_interface_descriptor *) & (config->interface[0].altsetting[0]);
150 for (
int i = 0; i < interface->bNumEndpoints; i++)
152 fprintf(stderr,
"Endpoint %04x %04x\n", interface->endpoint[i].bEndpointAddress,
153 interface->endpoint[i].bmAttributes);
154 int dir = interface->endpoint[i].bEndpointAddress & LIBUSB_ENDPOINT_DIR_MASK;
155 if (dir == LIBUSB_ENDPOINT_IN)
157 fprintf(stderr,
"Got an input endpoint\n");
159 InputType = interface->endpoint[i].bmAttributes & LIBUSB_TRANSFER_TYPE_MASK;
161 else if (dir == LIBUSB_ENDPOINT_OUT)
163 fprintf(stderr,
"Got an output endpoint\n");
165 OutputType = interface->endpoint[i].bmAttributes & LIBUSB_TRANSFER_TYPE_MASK;
int ControlMessage(unsigned char request_type, unsigned char request, unsigned int value, unsigned int index, unsigned char *data, unsigned char len)