+ for (int i = 0; i < conf_desc->bNumInterfaces; i++) {
+ printf("interface %d\n", i);
+ for (int j = 0; j < conf_desc->interface[i].num_altsetting; j++) {
+ for (int k = 0; k < conf_desc->interface[i].altsetting[j].bNumEndpoints; k++) {
+ const struct libusb_endpoint_descriptor *endpoint;
+ endpoint = &conf_desc->interface[i].altsetting[j].endpoint[k];
+ if (endpoint->bEndpointAddress & LIBUSB_ENDPOINT_IN) {
+ stl->endpoint_in = endpoint->bEndpointAddress;
+ printf("Found IN endpoint\n");
+ } else {
+ stl->endpoint_out = endpoint->bEndpointAddress;
+ printf("Found OUT endpoint\n");
+ }
+ }
+ }
+ }
+ libusb_free_config_descriptor(conf_desc);
+
+ ret = libusb_kernel_driver_active(stl->handle, 0);
+ if (ret == 1) {
+ printf("kernel driver active\n");
+ } else if (ret == 0) {
+ //printf("kernel driver not active\n");
+ } else {
+ fprintf(stderr, "libusb_kernel_driver_active = %d\n", ret);
+ }
+ ret = libusb_claim_interface(stl->handle, 0);
+ if (ret != LIBUSB_SUCCESS) {
+ fprintf(stderr, "claiming interface failed: %d\n", ret);
+ libusb_close(stl->handle);
+ free(stl);
+ return NULL;
+ }
+
+ return stl;
+}
+#endif
+