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,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 | } |