From 08e49fd919cd64a4b3b948232aeb5f17bdbe02de Mon Sep 17 00:00:00 2001 From: pifou Date: Fri, 7 Dec 2018 11:10:00 +0000 Subject: [PATCH] Seance 2 --- test_com.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 16 deletions(-) diff --git a/test_com.c b/test_com.c index 01e5fb5..21f8fe8 100644 --- a/test_com.c +++ b/test_com.c @@ -2,6 +2,8 @@ #include #include +// gcc file.c -l usb-1.0 + int main(){ // init libusb_context *context; @@ -15,32 +17,65 @@ int main(){ for(int i=0; ibConfigurationValue; // detach kernel - if(libusb_kernel_driver_active(handle, interface)){ - status = libusb_detach_kernel_driver(handle, interface); - if(status != 0){perror("libusb_detach_kernel_driver"); exit(-1);} + 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 - // TODO int configuration = valueof("bConfigurationValue"); status = libusb_set_configuration(handle, configuration); - if(status != 0){perror("libusb_set_configuration"); exit(-1);} + 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 - // close interface - status = libusb_release_interface(handle, interface); - if(status != 0){perror("libusb_release_interface"); exit(-1);} + // 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); -- libgit2 0.21.2