From 47ec0d5e2cdba9b49496add1c4880763b4d79736 Mon Sep 17 00:00:00 2001 From: Axel CHEMIN Date: Wed, 9 Dec 2020 14:02:08 +0100 Subject: [PATCH] récupération des endpoints --- include/libusb_wrapper.h | 2 ++ src/libusb_wrapper.c | 19 +++++++++++++++++++ src/main.c | 21 +++++++++++++++++++++ 3 files changed, 42 insertions(+), 0 deletions(-) diff --git a/include/libusb_wrapper.h b/include/libusb_wrapper.h index becb898..6143169 100644 --- a/include/libusb_wrapper.h +++ b/include/libusb_wrapper.h @@ -29,5 +29,7 @@ void getOurInterfaces(libusb_device *device, void displayDeviceEndpoints (); +char getOnlyEndpoint(struct libusb_interface * interface); + #endif diff --git a/src/libusb_wrapper.c b/src/libusb_wrapper.c index e6a6ac2..14f1616 100644 --- a/src/libusb_wrapper.c +++ b/src/libusb_wrapper.c @@ -17,6 +17,10 @@ void usbclose(libusb_context *context) { void interfaceclaim(libusb_device_handle *handle, struct libusb_interface *interface){ const struct libusb_interface_descriptor * interface_desc = &interface->altsetting[0]; //TODO enlever cette ligne, refactor + + if(interface_desc->bInterfaceClass == LIBUSB_CLASS_VENDOR_SPEC)//ON PEUT VERIFIER LA CLASS + printf("> NOT vendor specific class\n"); + int status=libusb_claim_interface(handle, interface_desc->bInterfaceNumber); if(status!=0){ perror("libusb_claim_interface"); exit(-1); } } @@ -270,4 +274,19 @@ void getOurInterfaces(libusb_device *device, //variables globales } +} + +char getOnlyEndpoint(struct libusb_interface * interface){ + + const struct libusb_interface_descriptor * interface_desc = &interface->altsetting[0]; + + printf("--bNumEndpoints=%d\n", interface_desc->bNumEndpoints); + printf("--bDescriptorType=%d\n", interface_desc->bDescriptorType); + + const struct libusb_endpoint_descriptor * endpoint_desc = &interface_desc->endpoint[0]; + + if(endpoint_desc->bmAttributes != LIBUSB_TRANSFER_TYPE_INTERRUPT)//ON PEUT VERIFIER LE TRANSFER TYPE + printf("> is NOT of type INTERRUPT\n"); + + return (char)endpoint_desc->bEndpointAddress; } \ No newline at end of file diff --git a/src/main.c b/src/main.c index 1a7f241..5f65d91 100644 --- a/src/main.c +++ b/src/main.c @@ -85,7 +85,28 @@ int main(int argc, char *argv[]){ printf("-Vibrators\n"); interfaceclaim(device_handle, int_vibrators); + //récupération des endpoints + printf("\nRécupération endpoints\n"); + printf("-Leds"); + int endpoint_leds=getOnlyEndpoint(int_leds); /* ID of endpoint (bit 8 is 0) */ + printf(" is %d\n", endpoint_leds); + printf("-Vibrators"); + int endpoint_vibrators=getOnlyEndpoint(int_vibrators); /* ID of endpoint (bit 8 is 0) */ + printf(" is %d\n", endpoint_vibrators); + + /*LE CODE UTILE*/ +/* + char data[MAX_DATA]; // data to send or to receive + int size=...; // size to send or maximum size to receive + int timeout=...; // timeout in ms + + //OUT interrupt, from host to device + int bytes_out; + int status=libusb_interrupt_transfer(handle,endpoint_out,data,size,&bytes_out,timeout); + if(status!=0){ perror("libusb_interrupt_transfer"); exit(-1); } +*/ + /*FIN DU CODE UTILE*/ //Close printf("\nUnclaim interfaces ...\n"); -- libgit2 0.21.2