From 58268c729ae4227f1c8abe0547e0fef4d0c4947c Mon Sep 17 00:00:00 2001 From: rguillom Date: Mon, 13 Jan 2020 21:49:00 +0100 Subject: [PATCH] Qq modifs mineurs --- init_USB.c | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------- 1 file changed, 50 insertions(+), 49 deletions(-) diff --git a/init_USB.c b/init_USB.c index c7bdaab..72bd407 100644 --- a/init_USB.c +++ b/init_USB.c @@ -12,7 +12,7 @@ struct TABLEAU{ }; struct EP { - uint8_t ep; //adresse d'accès de l'endpoint + uint8_t ep; //adresse d'accès de l'endpoint unsigned char io; //décrit si c'est une entrée ou une sortie }; @@ -26,7 +26,7 @@ void init_tableau(){ tab_pa.dernier=0; } -//énumération des périphériques USB +/*énumération des périphériques USB*/ void enum_periph(libusb_context *context){ libusb_device **list; ssize_t count=libusb_get_device_list(context,&list); @@ -43,90 +43,91 @@ void enum_periph(libusb_context *context){ printf("Vendor ID 0x0%x\n",desc.idVendor); printf("Product ID 0x0%x\n",desc.idProduct); + /* PEUT VARIER D'UNE CARTE A L'AUTRE ?*/ if(desc.idVendor == 0x413c && desc.idProduct == 0x2003) found = device; //recherche de notre périphérique et sauvegarde dans found //printf("device :%d \n handle : %d\n", device, found); //test si le "found" reste le meme } libusb_free_device_list(list,1); } + void config_periph(){ - struct libusb_config_descriptor *config=NULL; libusb_get_active_config_descriptor(found,&config); //on récupère la structure config_descriptor config dans found for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){ //Si le méchant noyau est passé avant nous - int interface; //on récupère ttes les numéros des alt_settings numéro 0 => for et détach + int interface; //on récupère tous les numéros des alt_settings numéro 0 => for et détach interface=config->interface[num_intf].altsetting[0].bInterfaceNumber; - // on detach cette interface + // on detache cette interface if(libusb_kernel_driver_active(handle,interface)){ - int status=libusb_detach_kernel_driver(handle,config->interface); + int status=libusb_detach_kernel_driver(handle,interface); if(status!=0){ perror("libusb_detach_kernel_driver"); exit(-1); } //si status!=0 il y a une erreur } printf("indice intf trouvée %d\n",interface); } - //Utilisation d'une configuration du périphérique - int configuration=config->bConfigurationValue; - int status=libusb_set_configuration(handle,configuration); - if(status!=0){ perror("libusb_set_configuration"); exit(-1); } + //Utilisation d'une configuration du périphérique + int configuration=config->bConfigurationValue; + int status=libusb_set_configuration(handle,configuration); + if(status!=0){ perror("libusb_set_configuration"); exit(-1); } - //Appropriation d'une interface (fonctionnalité USB) - status=libusb_claim_interface(handle,interface); - if(status!=0){ perror("libusb_claim_interface"); exit(-1); } //si status!=0 il y a une erreur - - printf("indice interface claim %d",interface); + //Appropriation d'une interface (fonctionnalité USB) + status=libusb_claim_interface(handle,interface); + if(status!=0){ perror("libusb_claim_interface"); exit(-1); } //si status!=0 il y a une erreur + printf("indice interface claim %d",interface); + - //Sauvegarde des points d'accès - for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){ - for(num_ep=0;num_epinterface[num_intf].altsetting[0].bNumEndpoints ;num_ep++){ - int eptype = config->interface[num_intf].altsetting[0].endpoint.bDescriptorType; - if(eptype & 0b11==LIBUSB_TRANSFER_TYPE_INTERRUPT){ //sauvegarde dans tab_pa du point d'accès qui est une interruption - struct EP ep1; + //Sauvegarde des points d'accès + for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){ + for(num_ep=0;num_epinterface[num_intf].altsetting[0].bNumEndpoints ;num_ep++){ + int eptype = config->interface[num_intf].altsetting[0].endpoint.bDescriptorType; + if(eptype & 0b11==LIBUSB_TRANSFER_TYPE_INTERRUPT){ //sauvegarde dans tab_pa du point d'accès qui est une interruption + struct EP ep1; - //LAISSER TOMBER INPUT OUTPUT - ep1.ep=config->interface[num_intf].altsetting[0].endpoint.bEndpointAddress; - if (num_intf==0){ - if (eptype & 0b10000000 == LIBUSB_ENDPOINT_OUT){ - tab_pa.tableau[num_intf].ep=ep1.ep; - tab_pa.tableau[num_intf].io=1; - tab_pa.dernier++; - break; - } //sortie => io=1 - } - else{ - if (eptype & 0b10000000 == LIBUSB_ENDPOINT_IN) { - tab_pa.tableau[num_intf].ep=ep1.ep; - - tab_pa.tableau[num_intf].io=0; - tab_pa.dernier++; - if (num_ep >2)break;//entrée => io=0 - } - } + //LAISSER TOMBER INPUT OUTPUT + ep1.ep=config->interface[num_intf].altsetting[0].endpoint.bEndpointAddress; + if (num_intf==0){ + if (eptype & 0b10000000 == LIBUSB_ENDPOINT_OUT){ + tab_pa.tableau[num_intf].ep=ep1.ep; + tab_pa.tableau[num_intf].io=1; + tab_pa.dernier++; + break; + } //sortie => io=1 } + else{ + if (eptype & 0b10000000 == LIBUSB_ENDPOINT_IN) { + tab_pa.tableau[num_intf].ep=ep1.ep; + tab_pa.tableau[num_intf].io=0; + tab_pa.dernier++; + if (num_ep >2)break;//entrée => io=0 + } + } } - if (num_intf = 3) break; } + if (num_intf = 3) break; + } - //release des interfaces - for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){ - status=libusb_release_interface(handle,interface); - if(status!=0){ perror("libusb_release_interface"); exit(-1); } + //release des interfaces + for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){ + status=libusb_release_interface(handle,interface); + if(status!=0){ perror("libusb_release_interface"); exit(-1); } - } + } } + int main(){ init_tableau(); // initialisation tableau point d'accès endpoint //initialisation de la bibliothèque libusb-1.0 libusb_context *context; int status=libusb_init(&context); if(status!=0) {perror("libusb_init"); exit(-1);} - //fin init + //fin inititialisation enum_periph(context); //énumération périphériques USB @@ -138,9 +139,9 @@ int main(){ - + /*fermeture du périphérique*/ libusb_close(handle); - libusb_exit(context); + libusb_exit(context); //fermeture de la bibliothèque return 0; } -- libgit2 0.21.2