Commit 58268c729ae4227f1c8abe0547e0fef4d0c4947c

Authored by rguillom
1 parent 142ecdaf

Qq modifs mineurs

Showing 1 changed file with 50 additions and 49 deletions   Show diff stats
@@ -12,7 +12,7 @@ struct TABLEAU{ @@ -12,7 +12,7 @@ struct TABLEAU{
12 }; 12 };
13 13
14 struct EP { 14 struct EP {
15 - uint8_t ep; //adresse d'accès de l'endpoint 15 + uint8_t ep; //adresse d'accès de l'endpoint
16 unsigned char io; //décrit si c'est une entrée ou une sortie 16 unsigned char io; //décrit si c'est une entrée ou une sortie
17 }; 17 };
18 18
@@ -26,7 +26,7 @@ void init_tableau(){ @@ -26,7 +26,7 @@ void init_tableau(){
26 tab_pa.dernier=0; 26 tab_pa.dernier=0;
27 } 27 }
28 28
29 -//énumération des périphériques USB 29 +/*énumération des périphériques USB*/
30 void enum_periph(libusb_context *context){ 30 void enum_periph(libusb_context *context){
31 libusb_device **list; 31 libusb_device **list;
32 ssize_t count=libusb_get_device_list(context,&list); 32 ssize_t count=libusb_get_device_list(context,&list);
@@ -43,90 +43,91 @@ void enum_periph(libusb_context *context){ @@ -43,90 +43,91 @@ void enum_periph(libusb_context *context){
43 printf("Vendor ID 0x0%x\n",desc.idVendor); 43 printf("Vendor ID 0x0%x\n",desc.idVendor);
44 printf("Product ID 0x0%x\n",desc.idProduct); 44 printf("Product ID 0x0%x\n",desc.idProduct);
45 45
  46 + /* PEUT VARIER D'UNE CARTE A L'AUTRE ?*/
46 if(desc.idVendor == 0x413c && desc.idProduct == 0x2003) found = device; //recherche de notre périphérique et sauvegarde dans found 47 if(desc.idVendor == 0x413c && desc.idProduct == 0x2003) found = device; //recherche de notre périphérique et sauvegarde dans found
47 //printf("device :%d \n handle : %d\n", device, found); //test si le "found" reste le meme 48 //printf("device :%d \n handle : %d\n", device, found); //test si le "found" reste le meme
48 } 49 }
49 libusb_free_device_list(list,1); 50 libusb_free_device_list(list,1);
50 } 51 }
51 52
  53 +
52 void config_periph(){ 54 void config_periph(){
53 -  
54 struct libusb_config_descriptor *config=NULL; 55 struct libusb_config_descriptor *config=NULL;
55 libusb_get_active_config_descriptor(found,&config); //on récupère la structure config_descriptor config dans found 56 libusb_get_active_config_descriptor(found,&config); //on récupère la structure config_descriptor config dans found
56 57
57 for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){ 58 for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){
58 59
59 //Si le méchant noyau est passé avant nous 60 //Si le méchant noyau est passé avant nous
60 - int interface; //on récupère ttes les numéros des alt_settings numéro 0 => for et détach 61 + int interface; //on récupère tous les numéros des alt_settings numéro 0 => for et détach
61 62
62 interface=config->interface[num_intf].altsetting[0].bInterfaceNumber; 63 interface=config->interface[num_intf].altsetting[0].bInterfaceNumber;
63 64
64 - // on detach cette interface 65 + // on detache cette interface
65 if(libusb_kernel_driver_active(handle,interface)){ 66 if(libusb_kernel_driver_active(handle,interface)){
66 - int status=libusb_detach_kernel_driver(handle,config->interface); 67 + int status=libusb_detach_kernel_driver(handle,interface);
67 if(status!=0){ perror("libusb_detach_kernel_driver"); exit(-1); } //si status!=0 il y a une erreur 68 if(status!=0){ perror("libusb_detach_kernel_driver"); exit(-1); } //si status!=0 il y a une erreur
68 } 69 }
69 printf("indice intf trouvée %d\n",interface); 70 printf("indice intf trouvée %d\n",interface);
70 } 71 }
71 72
72 73
73 - //Utilisation d'une configuration du périphérique  
74 - int configuration=config->bConfigurationValue;  
75 - int status=libusb_set_configuration(handle,configuration);  
76 - if(status!=0){ perror("libusb_set_configuration"); exit(-1); } 74 + //Utilisation d'une configuration du périphérique
  75 + int configuration=config->bConfigurationValue;
  76 + int status=libusb_set_configuration(handle,configuration);
  77 + if(status!=0){ perror("libusb_set_configuration"); exit(-1); }
77 78
78 - //Appropriation d'une interface (fonctionnalité USB)  
79 - status=libusb_claim_interface(handle,interface);  
80 - if(status!=0){ perror("libusb_claim_interface"); exit(-1); } //si status!=0 il y a une erreur  
81 -  
82 - printf("indice interface claim %d",interface); 79 + //Appropriation d'une interface (fonctionnalité USB)
  80 + status=libusb_claim_interface(handle,interface);
  81 + if(status!=0){ perror("libusb_claim_interface"); exit(-1); } //si status!=0 il y a une erreur
83 82
  83 + printf("indice interface claim %d",interface);
  84 +
84 85
85 - //Sauvegarde des points d'accès  
86 - for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){  
87 - for(num_ep=0;num_ep<config->interface[num_intf].altsetting[0].bNumEndpoints ;num_ep++){  
88 - int eptype = config->interface[num_intf].altsetting[0].endpoint.bDescriptorType;  
89 - if(eptype & 0b11==LIBUSB_TRANSFER_TYPE_INTERRUPT){ //sauvegarde dans tab_pa du point d'accès qui est une interruption  
90 - struct EP ep1; 86 + //Sauvegarde des points d'accès
  87 + for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){
  88 + for(num_ep=0;num_ep<config->interface[num_intf].altsetting[0].bNumEndpoints ;num_ep++){
  89 + int eptype = config->interface[num_intf].altsetting[0].endpoint.bDescriptorType;
  90 + if(eptype & 0b11==LIBUSB_TRANSFER_TYPE_INTERRUPT){ //sauvegarde dans tab_pa du point d'accès qui est une interruption
  91 + struct EP ep1;
91 92
92 - //LAISSER TOMBER INPUT OUTPUT  
93 - ep1.ep=config->interface[num_intf].altsetting[0].endpoint.bEndpointAddress;  
94 - if (num_intf==0){  
95 - if (eptype & 0b10000000 == LIBUSB_ENDPOINT_OUT){  
96 - tab_pa.tableau[num_intf].ep=ep1.ep;  
97 - tab_pa.tableau[num_intf].io=1;  
98 - tab_pa.dernier++;  
99 - break;  
100 - } //sortie => io=1  
101 - }  
102 - else{  
103 - if (eptype & 0b10000000 == LIBUSB_ENDPOINT_IN) {  
104 - tab_pa.tableau[num_intf].ep=ep1.ep;  
105 -  
106 - tab_pa.tableau[num_intf].io=0;  
107 - tab_pa.dernier++;  
108 - if (num_ep >2)break;//entrée => io=0  
109 - }  
110 - } 93 + //LAISSER TOMBER INPUT OUTPUT
  94 + ep1.ep=config->interface[num_intf].altsetting[0].endpoint.bEndpointAddress;
  95 + if (num_intf==0){
  96 + if (eptype & 0b10000000 == LIBUSB_ENDPOINT_OUT){
  97 + tab_pa.tableau[num_intf].ep=ep1.ep;
  98 + tab_pa.tableau[num_intf].io=1;
  99 + tab_pa.dernier++;
  100 + break;
  101 + } //sortie => io=1
111 } 102 }
  103 + else{
  104 + if (eptype & 0b10000000 == LIBUSB_ENDPOINT_IN) {
  105 + tab_pa.tableau[num_intf].ep=ep1.ep;
  106 + tab_pa.tableau[num_intf].io=0;
  107 + tab_pa.dernier++;
  108 + if (num_ep >2)break;//entrée => io=0
  109 + }
  110 + }
112 } 111 }
113 - if (num_intf = 3) break;  
114 } 112 }
  113 + if (num_intf = 3) break;
  114 + }
115 115
116 - //release des interfaces  
117 - for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){  
118 - status=libusb_release_interface(handle,interface);  
119 - if(status!=0){ perror("libusb_release_interface"); exit(-1); } 116 + //release des interfaces
  117 + for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){
  118 + status=libusb_release_interface(handle,interface);
  119 + if(status!=0){ perror("libusb_release_interface"); exit(-1); }
120 120
121 - } 121 + }
122 } 122 }
  123 +
123 int main(){ 124 int main(){
124 init_tableau(); // initialisation tableau point d'accès endpoint 125 init_tableau(); // initialisation tableau point d'accès endpoint
125 //initialisation de la bibliothèque libusb-1.0 126 //initialisation de la bibliothèque libusb-1.0
126 libusb_context *context; 127 libusb_context *context;
127 int status=libusb_init(&context); 128 int status=libusb_init(&context);
128 if(status!=0) {perror("libusb_init"); exit(-1);} 129 if(status!=0) {perror("libusb_init"); exit(-1);}
129 - //fin init 130 + //fin inititialisation
130 131
131 enum_periph(context); //énumération périphériques USB 132 enum_periph(context); //énumération périphériques USB
132 133
@@ -138,9 +139,9 @@ int main(){ @@ -138,9 +139,9 @@ int main(){
138 139
139 140
140 141
141 - 142 + /*fermeture du périphérique*/
142 libusb_close(handle); 143 libusb_close(handle);
143 144
144 - libusb_exit(context); 145 + libusb_exit(context); //fermeture de la bibliothèque
145 return 0; 146 return 0;
146 } 147 }