From f8fc88aa7576bf3fa52499be36eff347c5016025 Mon Sep 17 00:00:00 2001 From: gperson Date: Thu, 3 Dec 2020 17:23:12 +0100 Subject: [PATCH] avancement juste avant de claim, iterations des interfaces --- src/libusb_wrapper.c | 43 +++++++++++++++++++++++++++++++++---------- src/main.c | 2 +- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/libusb_wrapper.c b/src/libusb_wrapper.c index 643a30b..0769d14 100644 --- a/src/libusb_wrapper.c +++ b/src/libusb_wrapper.c @@ -126,13 +126,13 @@ void displayDeviceEndpoints(libusb_device_handle* handle) { // lectures des configs? - int configuration = 0; // valueof("bConfigurationValue"); +/* int configuration = 0; // valueof("bConfigurationValue"); int statusConfig = libusb_set_configuration(handle, configuration); if (statusConfig != LIBUSB_SUCCESS) { perror("libusb_set_configuration"); return; } - +*/ // 4.2 configuration du périph usb struct libusb_config_descriptor *config; @@ -146,17 +146,40 @@ void displayDeviceEndpoints(libusb_device_handle* handle) { config->bLength, config->bDescriptorType, config->bNumInterfaces); - // itération de l'interface - for (int indexInterface = 0; indexInterface < config->bNumInterfaces; - indexInterface++) { - // struct libusb_interface * interface = - // &config->interface[indexInterface]; - printf("^%d", indexInterface); - printf("Alt%d", config->interface[indexInterface].num_altsetting); + // itération de l'interface + printf("Itération de l'interface\n"); + for (int indexInterface = 0; indexInterface < config->bNumInterfaces; indexInterface++) { + printf("indexInterface=%d\n", indexInterface); + printf("Altsetting=%d\n", config->interface[indexInterface].num_altsetting); + + const struct libusb_interface * interface = &config->interface[indexInterface]; + + + //if 1 setting (or more) + if(interface->num_altsetting != 0) { + const struct libusb_interface_descriptor * interface_desc = &interface->altsetting[0]; + + printf("--bNumEndpoints=%d\n", interface_desc->bNumEndpoints); + printf("--bDescriptorType=%d\n", interface_desc->bDescriptorType); + + for(int indexEndpoints = 0; indexEndpoints < interface_desc->bNumEndpoints ; indexEndpoints++){ + const struct libusb_endpoint_descriptor * endpoint_desc = &interface_desc->endpoint[indexEndpoints]; + printf("---bDescriptorType=%d\n", endpoint_desc->bDescriptorType); + printf("---bEndpointAddress=%d\n", endpoint_desc->bEndpointAddress); + + if(endpoint_desc->extra != NULL) + printf("---extra: %s\n", endpoint_desc->extra); + if(endpoint_desc->bmAttributes == LIBUSB_TRANSFER_TYPE_INTERRUPT)//TODO AJOUT MASQUE ? (voir doc) + printf("---is of type INTERRUPT\n"); + + } + } + + } printf("\n"); libusb_close(handle); -} \ No newline at end of file +} diff --git a/src/main.c b/src/main.c index 9393193..b9e4b0d 100644 --- a/src/main.c +++ b/src/main.c @@ -34,7 +34,7 @@ int main(int argc, char *argv[]){ handle = libusb_open_device_with_vid_pid(context, vendor_id, product_id); if(handle != NULL){ printf("Show endpoints of VID:%hu;PID:%hu\n", vendor_id, product_id); - displayDeviceEndpoints(NULL); + displayDeviceEndpoints(handle); } else{ printf("Error while getting handle of VID:%hu;PID:%hu\n", vendor_id, product_id); -- libgit2 0.21.2