Commit 58268c729ae4227f1c8abe0547e0fef4d0c4947c
1 parent
142ecdaf
Qq modifs mineurs
Showing
1 changed file
with
50 additions
and
49 deletions
Show diff stats
init_USB.c
... | ... | @@ -12,7 +12,7 @@ struct TABLEAU{ |
12 | 12 | }; |
13 | 13 | |
14 | 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 | 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 | 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 | 30 | void enum_periph(libusb_context *context){ |
31 | 31 | libusb_device **list; |
32 | 32 | ssize_t count=libusb_get_device_list(context,&list); |
... | ... | @@ -43,90 +43,91 @@ void enum_periph(libusb_context *context){ |
43 | 43 | printf("Vendor ID 0x0%x\n",desc.idVendor); |
44 | 44 | printf("Product ID 0x0%x\n",desc.idProduct); |
45 | 45 | |
46 | + /* PEUT VARIER D'UNE CARTE A L'AUTRE ?*/ | |
46 | 47 | if(desc.idVendor == 0x413c && desc.idProduct == 0x2003) found = device; //recherche de notre périphérique et sauvegarde dans found |
47 | 48 | //printf("device :%d \n handle : %d\n", device, found); //test si le "found" reste le meme |
48 | 49 | } |
49 | 50 | libusb_free_device_list(list,1); |
50 | 51 | } |
51 | 52 | |
53 | + | |
52 | 54 | void config_periph(){ |
53 | - | |
54 | 55 | struct libusb_config_descriptor *config=NULL; |
55 | 56 | libusb_get_active_config_descriptor(found,&config); //on récupère la structure config_descriptor config dans found |
56 | 57 | |
57 | 58 | for(int num_intf=0;num_intf < config->bNumInterfaces ;num_intf++){ |
58 | 59 | |
59 | 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 | 63 | interface=config->interface[num_intf].altsetting[0].bInterfaceNumber; |
63 | 64 | |
64 | - // on detach cette interface | |
65 | + // on detache cette interface | |
65 | 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 | 68 | if(status!=0){ perror("libusb_detach_kernel_driver"); exit(-1); } //si status!=0 il y a une erreur |
68 | 69 | } |
69 | 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 | 124 | int main(){ |
124 | 125 | init_tableau(); // initialisation tableau point d'accès endpoint |
125 | 126 | //initialisation de la bibliothèque libusb-1.0 |
126 | 127 | libusb_context *context; |
127 | 128 | int status=libusb_init(&context); |
128 | 129 | if(status!=0) {perror("libusb_init"); exit(-1);} |
129 | - //fin init | |
130 | + //fin inititialisation | |
130 | 131 | |
131 | 132 | enum_periph(context); //énumération périphériques USB |
132 | 133 | |
... | ... | @@ -138,9 +139,9 @@ int main(){ |
138 | 139 | |
139 | 140 | |
140 | 141 | |
141 | - | |
142 | + /*fermeture du périphérique*/ | |
142 | 143 | libusb_close(handle); |
143 | 144 | |
144 | - libusb_exit(context); | |
145 | + libusb_exit(context); //fermeture de la bibliothèque | |
145 | 146 | return 0; |
146 | 147 | } | ... | ... |