#include #include #include #define ID_VENDOR 0x0951 #define ID_PRODUCT 0x01666 // gcc file.c -l usb-1.0 int main(){ // init libusb_context *context; int status = libusb_init(&context); if(status != 0){perror("libusb_init"); exit(-1);} // devices list libusb_device **devices; ssize_t devices_count = libusb_get_device_list(context, &devices); if(devices_count < 0){perror("libusb_get_device_list"); exit(-1);} for(int i=0; ibConfigurationValue; // detach kernel for(int j=0; jbNumInterfaces; j++){ int interface = config_desc->interface[j].altsetting[0].bInterfaceNumber; if(libusb_kernel_driver_active(handle, interface)){ status = libusb_detach_kernel_driver(handle, interface); if(status != 0){ perror("libusb_detach_kernel_driver"); exit(-1); } } } // use config status = libusb_set_configuration(handle, configuration); if(status != 0){ perror("libusb_set_configuration"); exit(-1); } // claim interfaces for(int j=0; jbNumInterfaces; j++){ libusb_interface_descriptor *interface_desc = config_desc->interface[j].altsetting[0]; int interface = interface_desc->bInterfaceNumber; status = libusb_claim_interface(handle, interface); if(status != 0){ perror("libusb_claim_interface"); exit(-1); } // find endpoints for(int k=0; kbNumEndpoints; k++){ libusb_endpoint_descriptor *endpoint_desc = interface_desc->endpoints[k]; // list endpoints bEndpointAddress and bmAttributes printf("Endpoint inter. %d, num. %d\n", j, k); printf("bEndpointAddress = 0x%x\n", endpoint_desc->bEndpointAddress); printf("bmAttributes = 0x%x\n", endpoint_desc->bmAttributes); } // release interfaces status = libusb_release_interface(handle, interface); if(status != 0){ perror("libusb_release_interface"); exit(-1); } } // free config libusb_free_config_descriptor(config_desc); // close connection libusb_close(handle); } libusb_free_device_list(devices, 1); libusb_exit(context); }