diff --git a/lufa-master/PolytechLille/PAD/PAD.h b/lufa-master/PolytechLille/PAD/PAD.h index 052fc62..45285f8 100644 --- a/lufa-master/PolytechLille/PAD/PAD.h +++ b/lufa-master/PolytechLille/PAD/PAD.h @@ -46,7 +46,7 @@ #include "Descriptors.h" //#include - #include "LUFA/Drivers/PeripheralSerial.h" + //#include //inventé? #include #include diff --git a/lufa-master/PolytechLille/PAD/init_USB.c b/lufa-master/PolytechLille/PAD/init_USB.c new file mode 100644 index 0000000..5d6e3d0 --- /dev/null +++ b/lufa-master/PolytechLille/PAD/init_USB.c @@ -0,0 +1,164 @@ +#include +#include +#include + +libusb_device_handle *handle=NULL; +libusb_device *device=NULL; +libusb_device *found=NULL; //notre périphérique + +struct TABLEAU{ + struct EP *tableau[3]; //tableau des points d'accès en interruption + int dernier; +}; + +struct EP { + uint8_t ep; //adresse d'accès de l'endpoint + unsigned char io; //décrit si c'est une entrée ou une sortie +}; + +//init structure tableau +struct TABLEAU tab_pa; + +void init_tableau(){ + for (int i=0;i<3;i++){ + tab_pa.tableau[i]=NULL; + } + tab_pa.dernier=0; +} + +/*é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); + if(count<0) {perror("libusb_get_device_list"); exit(-1);} + ssize_t i=0; + for(i=0;ibNumInterfaces ;num_intf++){ + + //Si le méchant noyau est passé avant nous + + //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 detache cette interface + if(libusb_kernel_driver_active(handle,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; + printf("valeur config %d\n", config->bConfigurationValue); // Affichage valeur de la configuration + int status=libusb_set_configuration(handle,configuration); + if(status!=0){ perror("libusb_set_configuration"); exit(-1); } + + //Appropriation de toutes les interfaces (fonctionnalité USB) + for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){ + status=libusb_claim_interface(handle,num_intf); + if(status!=0){ perror("libusb_claim_interface"); exit(-1); } //si status!=0 il y a une erreur + printf("indice interface claim %d\n",num_intf); + } + + + + //Sauvegarde des points d'accès + for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){ + for(int 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 + } + } + */ + } + } + 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); } + + } +} + + + + +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 inititialisation + + enum_periph(context); //énumération périphériques USB + + //ouverture du périphérique + //libusb_device_handle *handle; + int status_ouv=libusb_open(found,&handle); + if(status_ouv!=0){ perror("libusb_open"); exit(-1); } //status_ouv!=0 => erreur d'ouverture + + config_periph(); + + + + /*fermeture du périphérique*/ + libusb_close(handle); + + libusb_exit(context); //fermeture de la bibliothèque + return 0; +} -- libgit2 0.21.2