#include #include #include // 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++){ for(int k=0; kinterface[j].num_altsetting; k++){ int interface = config_desc->interface[j].altsetting[k].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++){ for(int k=0; kinterface[j].num_altsetting; k++){ int interface = config_desc->interface[j].altsetting[k].bInterfaceNumber; status = libusb_claim_interface(handle, interface); if(status != 0){ perror("libusb_claim_interface"); exit(-1); } } } /* ... some code ... */ // TODO endpoints // release interfaces for(int j=0; jbNumInterfaces; j++){ for(int k=0; kinterface[j].num_altsetting; k++){ int interface = config_desc->interface[j].altsetting[k].bInterfaceNumber; 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); }