Commit 16cfb9bfffdfe55056fae745e4afa9b59acec1a6

Authored by achemin1
1 parent 56d9dc54

fix, oublis git rm

.gitignore deleted
... ... @@ -1,2 +0,0 @@
1   -bin
2   -obj
Makefile deleted
... ... @@ -1,56 +0,0 @@
1   -BIN = bin
2   -OBJ = obj
3   -SRC = src
4   -INCLUDE = include
5   -CFLAGS =
6   -CLIBS = -lusb-1.0 -I"C:\Program Files\zLib\libusb-1.0.23\include"
7   -#sur le Windows d'Axel :
8   -#CLIBS := ${CLIBS} -B"C:\Program Files\zLib\libusb-1.0.23\MinGW32\static"
9   -GNUMAKEFLAGS = --no-print-directory
10   -
11   -gcc = gcc
12   -#sur le Windows d'Axel :
13   -#gcc := "/mnt/c/Program Files (x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/gcc.exe"
14   -
15   -
16   -DEBUG?=0
17   -ifeq ($(DEBUG), 0)
18   - CFLAGS = -W -Wall
19   -else
20   - CFLAGS = -W -Wall -g -O0 -DDEBUG
21   -endif
22   -
23   -
24   -
25   -all : main
26   -
27   -
28   -version :
29   - ${gcc} -v
30   -
31   -main : bin libusb_wrapper ${SRC}/main.c
32   - ${gcc} -o ${OBJ}/$@.o -c ${SRC}/$@.c -I ${INCLUDE} ${CLIBS} ${CFLAGS}
33   - ${gcc} -o ${BIN}/$@.exe ${OBJ}/main.o ${OBJ}/libusb_wrapper.o ${CFLAGS} ${CLIBS}
34   -
35   -demostep : main
36   - ${BIN}/main.exe demo4.1
37   -
38   -libs: libusb_wrapper
39   -
40   -libusb_wrapper: obj ${SRC}/libusb_wrapper.c ${INCLUDE}/libusb_wrapper.h
41   - ${gcc} -o ${OBJ}/$@.o -c ${SRC}/$@.c -I ${INCLUDE} ${CLIBS} ${CFLAGS}
42   -
43   -
44   -
45   -obj :
46   - @-mkdir ${OBJ}
47   -
48   -bin :
49   - @-mkdir ${BIN}
50   -
51   -clean :
52   - rm -rf obj/*.o
53   -
54   -mrproper: clean
55   - rm -rf bin
56   - rm -rf obj
hexToDec.sh deleted
... ... @@ -1,10 +0,0 @@
1   -#!/bin/bash
2   -
3   -if [ $# -eq 1 ]; then
4   - echo "obase=10; ibase=16; $1" | bc
5   -else
6   - echo "Type a hex number"
7   - read hexNum
8   - echo -n "The decimal value of $hexNum="
9   - echo "obase=10; ibase=16; $hexNum" | bc
10   -fi
include/libusb_wrapper.h deleted
... ... @@ -1,35 +0,0 @@
1   -#ifndef LIBUSB_WRAPPER_H_
2   -#define LIBUSB_WRAPPER_H_
3   -
4   -#include <libusb-1.0/libusb.h>
5   -#include <stdbool.h>
6   -#include <stdio.h>
7   -#include <stdlib.h>
8   -
9   -void usbinit(libusb_context **context_ptr);
10   -void usbclose(libusb_context *context);
11   -
12   -void interfaceclaim(libusb_device_handle *handle,
13   - struct libusb_interface *interface);
14   -void interfaceclose(libusb_device_handle *handle,
15   - struct libusb_interface *interface);
16   -
17   -ssize_t getListDevices(libusb_context *context, libusb_device ***list_ptr);
18   -void getFromKernel(libusb_device_handle *handle, int interface);
19   -
20   -void displayDevices(libusb_context *context);
21   -void displayDevicesMore(libusb_context *context);
22   -
23   -void getFirstDeviceFromID(libusb_context *context, int vid, int pid,
24   - libusb_device **device);
25   -
26   -void getOurInterfaces(libusb_device *device,
27   - struct libusb_interface **int_hidjoy,
28   - struct libusb_interface **int_leds,
29   - struct libusb_interface **int_vibrators);
30   -
31   -void displayDeviceEndpoints();
32   -
33   -char getOnlyEndpoint(struct libusb_interface *interface);
34   -
35   -#endif
src/libusb_wrapper.c deleted
... ... @@ -1,307 +0,0 @@
1   -#include "libusb_wrapper.h"
2   -
3   -void usbinit(libusb_context **context_ptr) {
4   - // libusb_context *context;
5   - int statusInit = libusb_init(context_ptr);
6   - if (statusInit != LIBUSB_SUCCESS) {
7   - perror("libusb_init");
8   - exit(-1);
9   - }
10   -}
11   -
12   -void usbclose(libusb_context *context) { libusb_exit(context); }
13   -
14   -void interfaceclaim(libusb_device_handle *handle,
15   - struct libusb_interface *interface) {
16   - const struct libusb_interface_descriptor *interface_desc =
17   - &interface->altsetting[0]; // TODO enlever cette ligne, refactor
18   -
19   - if (interface_desc->bInterfaceClass ==
20   - LIBUSB_CLASS_VENDOR_SPEC) { // ON PEUT VERIFIER LA CLASS
21   - printf("> vendor specific class\n");
22   -
23   - int status =
24   - libusb_claim_interface(handle, interface_desc->bInterfaceNumber);
25   - if (status != 0) {
26   - perror("libusb_claim_interface");
27   - exit(-1);
28   - }
29   - }
30   -}
31   -
32   -void interfaceclose(libusb_device_handle *handle,
33   - struct libusb_interface *interface) {
34   - const struct libusb_interface_descriptor *interface_desc =
35   - &interface->altsetting[0];
36   - int status =
37   - libusb_release_interface(handle, interface_desc->bInterfaceNumber);
38   - if (status != 0) {
39   - perror("libusb_release_interface");
40   - exit(-1);
41   - }
42   -}
43   -
44   -// Si le méchant noyau est passé avant vous :
45   -void getFromKernel(libusb_device_handle *handle,
46   - int interface) { // private method for now
47   - if (libusb_kernel_driver_active(handle, interface)) {
48   - int statusKDriver = libusb_detach_kernel_driver(handle, interface);
49   - if (statusKDriver != LIBUSB_SUCCESS) {
50   - perror("libusb_detach_kernel_driver");
51   - exit(-1);
52   - }
53   - }
54   -}
55   -
56   -ssize_t getListDevices(libusb_context *context, libusb_device ***list_ptr) {
57   - ssize_t count = libusb_get_device_list(context, list_ptr);
58   - if (count < 0) {
59   - perror("libusb_get_device_list");
60   - exit(-1);
61   - }
62   - return count;
63   -}
64   -
65   -void *_enumerateDevices(libusb_context *context,
66   - void (*func)(libusb_device *device)) {
67   - libusb_device **list;
68   - ssize_t count = getListDevices(context, &list);
69   -
70   - ssize_t i = 0;
71   - for (i = 0; i < count; i++) {
72   - libusb_device *device = list[i];
73   -
74   - func(device);
75   - }
76   -
77   - libusb_free_device_list(list, 1);
78   -
79   - return NULL; // DBGONLY TEMP
80   -}
81   -
82   -// print readable string, not asked for tutoring
83   -void _printConfig(libusb_device *device) { // private method
84   - // Ouverture du périphérique
85   - libusb_device_handle *handle;
86   - int statusDevice = libusb_open(device, &handle);
87   - if (statusDevice != LIBUSB_SUCCESS) {
88   - perror("libusb_open");
89   - // return; //exit(-1);
90   - }
91   -
92   - int MAXLEN_DESCRIPTOR_STRING = 200;
93   - uint8_t desc_idx = 2;
94   - // uint16_t langid = 16;
95   - unsigned char data[200];
96   -
97   - // TEST 16
98   - for (desc_idx = 0; desc_idx < 16; desc_idx++) {
99   - int statusAscii = libusb_get_string_descriptor_ascii(
100   - handle, desc_idx, data, MAXLEN_DESCRIPTOR_STRING);
101   - if (statusAscii == -9) // TEST seems to be LIBUSB_ERROR
102   - break;
103   - printf(" - Descriptor string : %s ; %i\n", data, statusAscii);
104   - }
105   -
106   - libusb_close(handle);
107   -}
108   -
109   -void _displayOneDevice(libusb_device *device) {
110   - struct libusb_device_descriptor desc;
111   -
112   - int status = libusb_get_device_descriptor(device, &desc);
113   - if (status != LIBUSB_SUCCESS) {
114   - printf("Cannot get device desc : %s\n",
115   - libusb_error_name(status)); // DBGONLY
116   - perror("libusb_open");
117   - return;
118   - }
119   -
120   - uint8_t bus = libusb_get_bus_number(device);
121   - uint8_t address = libusb_get_device_address(device);
122   -
123   - printf("Device Found @ (Bus:Address) %d:%d\n", bus, address);
124   - printf("Vendor ID 0x0%x\n", desc.idVendor);
125   - printf("Product ID 0x0%x\n", desc.idProduct);
126   -
127   - // displayDeviceEndpoints(device); //Not really work on Axel@Alptop
128   -}
129   -
130   -void displayDevices(libusb_context *context) {
131   - _enumerateDevices(context, _displayOneDevice);
132   -}
133   -
134   -void _displayOneDeviceMore(libusb_device *device) {
135   - _displayOneDevice(device);
136   - _printConfig(device);
137   -}
138   -
139   -void displayDevicesMore(libusb_context *context) {
140   - _enumerateDevices(context, _displayOneDeviceMore);
141   -}
142   -
143   -// get device from iteration (and not from not recommanded function :
144   -// ugly using global vars ?? Cannot communicate between getFirstDeviceFromID and
145   -// _getFirstDeviceFromID
146   -int g_vid;
147   -int g_pid;
148   -libusb_device *g_device = NULL;
149   -void _getFirstDeviceFromID(libusb_device *device) {
150   - struct libusb_device_descriptor desc;
151   -
152   - int status = libusb_get_device_descriptor(device, &desc);
153   - if (status != LIBUSB_SUCCESS) {
154   - printf("Cannot get device desc : %s\n",
155   - libusb_error_name(status)); // DBGONLY
156   - perror("libusb_open");
157   - return;
158   - }
159   -
160   - if (desc.idVendor == g_vid && desc.idProduct == g_pid) {
161   - g_device = device;
162   - }
163   -}
164   -
165   -void getFirstDeviceFromID(libusb_context *context, int vid, int pid,
166   - libusb_device **device) {
167   - g_vid = vid; // pass parameters for enumeration
168   - g_pid = pid; // idem
169   - _enumerateDevices(context, _getFirstDeviceFromID);
170   - *device = g_device; // get return from enumeration
171   -}
172   -
173   -// void getDevicesFromID(vid, pid) //return array
174   -
175   -void displayDeviceEndpoints(libusb_device_handle *handle) {
176   - // recover pointer from handle
177   - libusb_device *device;
178   - device = libusb_get_device(handle);
179   -
180   - // lectures des configs => on prend la première configuration pour l'instant
181   - /*int configuration = 0; // valueof("bConfigurationValue");
182   - int statusConfig = libusb_set_configuration(handle, configuration);
183   - if (statusConfig != LIBUSB_SUCCESS) {
184   - perror("libusb_set_configuration");
185   - return;
186   - }*/
187   -
188   - // 4.2 configuration du périph usb
189   - struct libusb_config_descriptor *config;
190   - int statusFetchConfig = libusb_get_active_config_descriptor(device, &config);
191   - if (statusFetchConfig != LIBUSB_SUCCESS) {
192   - perror("libusb_get_active_config_descriptor");
193   - return;
194   - }
195   -
196   - // caractéristiques globales
197   - printf("Config.bConfigurationValue : %d\n", config->bConfigurationValue);
198   - printf("Config/ bLength:%d\nbDescriptorType:%d\nbNumInterfaces:%d\n",
199   - config->bLength, config->bDescriptorType, config->bNumInterfaces);
200   -
201   - // itération des interfaces
202   - printf("Itération de l'interface\n");
203   - for (int indexInterface = 0; indexInterface < config->bNumInterfaces;
204   - indexInterface++) {
205   - printf("-indexInterface=%d\n", indexInterface);
206   - printf("-Altsetting=%d\n",
207   - config->interface[indexInterface].num_altsetting);
208   -
209   - const struct libusb_interface *interface =
210   - &config->interface[indexInterface];
211   -
212   - // if 1 setting (or more)
213   - if (interface->num_altsetting != 0) {
214   - const struct libusb_interface_descriptor *interface_desc =
215   - &interface->altsetting[0];
216   -
217   - printf("--bNumEndpoints=%d\n", interface_desc->bNumEndpoints);
218   - printf("--bDescriptorType=%d\n", interface_desc->bDescriptorType);
219   -
220   - for (int indexEndpoints = 0;
221   - indexEndpoints < interface_desc->bNumEndpoints; indexEndpoints++) {
222   - const struct libusb_endpoint_descriptor *endpoint_desc =
223   - &interface_desc->endpoint[indexEndpoints];
224   - printf("---bDescriptorType=%d\n", endpoint_desc->bDescriptorType);
225   - printf("---bEndpointAddress=%d\n", endpoint_desc->bEndpointAddress);
226   -
227   - if (endpoint_desc->extra != NULL)
228   - printf("---extra: %s\n", endpoint_desc->extra);
229   - if (endpoint_desc->bmAttributes ==
230   - LIBUSB_TRANSFER_TYPE_INTERRUPT) // TODO AJOUT MASQUE ? (voir doc)
231   - printf("---is of type INTERRUPT\n");
232   - }
233   - }
234   -
235   - // Affichez l’indice et le numéro de chaque interface détectée et réclamée.
236   - // Affichez aussi les points d’accès trouvés en précisant ceux sauvés.
237   -
238   - /*
239   - //int interface=valueof("bInterfaceNumber");
240   - int
241   - status=libusb_claim_interface(handle,interface->bInterfaceNumber);
242   - if(status!=0){ perror("libusb_claim_interface"); exit(-1); }
243   -
244   - status=libusb_release_interface(handle,interface->bInterfaceNumber);
245   - if(status!=0){ perror("libusb_release_interface"); exit(-1); }
246   -
247   - //claim_interface(.., config interface altsetting bInterfaceNumber
248   - //config interface altsetting endpoint bmAttributes ==
249   - LIBUSB_TRANSFER_TYPE_INTERRUPT
250   - //add des enpoint unint8_t*/
251   -
252   - // DESCRIPTOR.C /.H :décommenter
253   -
254   - // IL FAUT RELEASE UNIQUEMENT LES INTERFACES QUI NE SONT PAS DES HID
255   - }
256   -
257   - printf("\n");
258   -
259   - libusb_close(handle);
260   -}
261   -
262   -void getOurInterfaces(libusb_device *device,
263   - struct libusb_interface **int_hidjoy,
264   - struct libusb_interface **int_leds,
265   - struct libusb_interface **int_vibrators) {
266   - struct libusb_config_descriptor *config;
267   - int statusFetchConfig = libusb_get_active_config_descriptor(device, &config);
268   - if (statusFetchConfig != LIBUSB_SUCCESS) {
269   - perror("libusb_get_active_config_descriptor");
270   - return;
271   - }
272   -
273   - // itération des interfaces
274   - for (int indexInterface = 0; indexInterface < config->bNumInterfaces;
275   - indexInterface++) {
276   -
277   - const struct libusb_interface *interface =
278   - &config->interface[indexInterface];
279   -
280   - // todo use le descriptor pour avoir bInterfaceNumber?
281   - if (indexInterface == 0) {
282   - *int_hidjoy = (struct libusb_interface *)interface;
283   - } else if (indexInterface == 1) {
284   - *int_leds = (struct libusb_interface *)interface;
285   - } else if (indexInterface == 2) {
286   - *int_vibrators = (struct libusb_interface *)interface;
287   - }
288   -
289   - //#define pour les indices correspondants aux interfaces
290   - // variables globales
291   - }
292   -}
293   -
294   -char getOnlyEndpoint(struct libusb_interface *interface) {
295   -
296   - const struct libusb_interface_descriptor *interface_desc =
297   - &interface->altsetting[0];
298   -
299   - const struct libusb_endpoint_descriptor *endpoint_desc =
300   - &interface_desc->endpoint[0];
301   -
302   - if (endpoint_desc->bmAttributes !=
303   - LIBUSB_TRANSFER_TYPE_INTERRUPT) // ON PEUT VERIFIER LE TRANSFER TYPE
304   - printf("> is NOT of type INTERRUPT\n");
305   -
306   - return (char)endpoint_desc->bEndpointAddress;
307   -}
src/main.c deleted
... ... @@ -1,132 +0,0 @@
1   -#include "libusb_wrapper.h"
2   -#include <stdio.h>
3   -#include <string.h>
4   -
5   -#define VID 1003
6   -#define PID 8259
7   -
8   -int main(int argc, char *argv[]) {
9   - printf("Hello World :-|\n");
10   -
11   - libusb_context *context;
12   - usbinit(&context);
13   -#ifdef DEBUG
14   - libusb_set_option(context, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_DEBUG);
15   -#endif
16   -
17   - if (argc > 1) {
18   - // command mode
19   - if (strcmp(argv[1], "demo4.1") == 0) { // if 4.1
20   - printf("\e[91mDemo 4.1\e[39m\n");
21   - displayDevices(context);
22   - } else if (strcmp(argv[1], "demo4.1plus") == 0) { // if 4.1 bonus
23   - printf("\e[91mDemo 4.1\e[39m\n");
24   - displayDevicesMore(context);
25   - } else if (strcmp(argv[1], "demo4.2") == 0) { // if 4.2
26   - printf("\e[91mDemo 4.2\e[39m\n");
27   -
28   - if (argc > 3) {
29   - uint16_t vendor_id;
30   - uint16_t product_id;
31   - sscanf(argv[2], "%hu", &vendor_id);
32   - sscanf(argv[3], "%hu", &product_id);
33   -
34   - libusb_device_handle *handle;
35   - handle =
36   - libusb_open_device_with_vid_pid(context, vendor_id, product_id);
37   - if (handle != NULL) {
38   - printf("Show endpoints of VID:%hu;PID:%hu\n", vendor_id, product_id);
39   - displayDeviceEndpoints(handle);
40   - } else {
41   - printf("Error while getting handle of VID:%hu;PID:%hu\n", vendor_id,
42   - product_id);
43   - }
44   - } else {
45   - printf("Error, need VID and PID\n");
46   - }
47   - } else {
48   - printf("Wrong command\n");
49   - }
50   -
51   - } else {
52   - // interactive mode
53   - printf("Welcome to interactive mode\n");
54   - printf("Compiled for VID:PID => %d:%d\n", VID, PID);
55   -
56   - // Find the device
57   - printf("Iterate list of devices, and getting the right one\n");
58   - libusb_device *device = NULL;
59   - getFirstDeviceFromID(context, VID, PID, &device);
60   - // code
61   - if (device == NULL) {
62   - printf("Error : cannot find the device !\n");
63   - return 1;
64   - }
65   -
66   - // take the handle
67   - libusb_device_handle *device_handle = NULL;
68   - if (libusb_open(device, &device_handle) != 0) {
69   - printf("Error : cannot handle the device\n");
70   - return 1;
71   - }
72   -
73   - // Take the interfaces
74   - printf("\nSearch for interfaces\n");
75   - struct libusb_interface *int_hidjoy = NULL;
76   - struct libusb_interface *int_leds = NULL;
77   - struct libusb_interface *int_vibrators = NULL;
78   - getOurInterfaces(device, &int_hidjoy, &int_leds, &int_vibrators);
79   -
80   - // Claim interface
81   - printf("\nClaim interfaces ...\n");
82   - printf("-Leds\n");
83   - interfaceclaim(device_handle, int_leds);
84   - printf("-Vibrators\n");
85   - interfaceclaim(device_handle, int_vibrators);
86   -
87   - // récupération des endpoints
88   - printf("\nRécupération endpoints\n");
89   - printf("-Leds");
90   - int endpoint_leds =
91   - getOnlyEndpoint(int_leds); /* ID of endpoint (bit 8 is 0) */
92   - printf(" is %d\n", endpoint_leds);
93   - printf("-Vibrators");
94   - int endpoint_vibrators =
95   - getOnlyEndpoint(int_vibrators); /* ID of endpoint (bit 8 is 0) */
96   - printf(" is %d\n", endpoint_vibrators);
97   -
98   - /*LE CODE UTILE*/
99   - int i;
100   - for(i = 0 ; i<5 ; i++) {
101   - unsigned char data[2] = {0xff, 0xff}; // data to send or to receive
102   - int size = 2; // size to send or maximum size to receive
103   - int timeout = 1000; // timeout in ms
104   -
105   - // OUT interrupt, from host to device
106   - int bytes_out;
107   - printf("%p %02X\n", device_handle, endpoint_leds);
108   - int status = libusb_interrupt_transfer(device_handle, endpoint_leds, data,
109   - size, &bytes_out, timeout);
110   - if (status != 0) {
111   - perror("libusb_interrupt_transfer");
112   - exit(-1);
113   - }
114   -
115   - //sleep(1); demande l'ajout de macro pour la portabilité
116   - }
117   - /*FIN DU CODE UTILE*/
118   -
119   - // Close
120   - printf("\nUnclaim interfaces ...\n");
121   - printf("-Leds\n");
122   - interfaceclose(device_handle, int_leds);
123   - printf("-Vibrators\n");
124   - interfaceclose(device_handle, int_vibrators);
125   -
126   - printf("Finished\n");
127   - }
128   -
129   - usbclose(context);
130   -
131   - return 0;
132   -}