bonjour,
je dois réaliser un programme afin de communiquer par USB avec un matériel. J'ai donc choisi libusb_win32 pour réaliser cette tache.
J'arrive à trouver mon matériel, mais au moment de configurer le matériel avec usb_set_configuration(udev,1). Le programme se met à planter: en fait, il continu indéfiniment de fonctionner. Impossibilité de l'arrêter, killtask où la méthode graphique pour arrêter un processus ne fonctionnent pas.
et j'obtiens le résultat suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 int main(void) { struct usb_device *dev; int ret, i; char string[256]; usb_dev_handle *udev; usb_set_debug(1); usb_init(); usb_find_busses(); usb_find_devices(); findDevice(IDVENDOR,IDPRODUCT,&dev); if(dev==0) { printf("error l%d: find Device\n",__LINE__); return -1; } printf("0--------------------------------------------\n"); udev = usb_open(dev); if (udev!=NULL) { int v; printf("1-------------------------------------------------\n"); if((v=usb_set_configuration(udev, 1))<0) { printf("error l%d: Set Configuration %d\n",__LINE__, v); return -2; } printf("2--------------------------------------------------\n"); if((v=usb_claim_interface(udev, INTF))<0) { printf("error l%d: Claim Interface %d\n",__LINE__,v); return -2; } usb_close (udev); } if (!dev->config) { printf(" Couldn't retrieve descriptors\n"); return -2; } return 0; }
si j'enlève le usb_set_configuration(), j'obtiens cela:
LIBUSB_DLL: info: usb_os_init: dll version: 0.1.12.2
LIBUSB_DLL: info: usb_os_init: driver version: 0.1.12.2
LIBUSB_DLL: info: usb_os_find_busses: found bus-0
LIBUSB_DLL: info: usb_os_find_devices: found \\.\libusb0-0001--0x0409-0x0058 on
bus-0
LIBUSB_DLL: info: usb_os_find_devices: found \\.\libusb0-0002--0x046d-0xc016 on
bus-0
LIBUSB_DLL: info: usb_os_find_devices: found \\.\libusb0-0003--0x413c-0x1002 on
bus-0
LIBUSB_DLL: info: usb_os_find_devices: found \\.\libusb0-0004--0x04d8-0x0033 on
bus-0
LIBUSB_DLL: info: usb_os_find_devices: found \\.\libusb0-0005--0x413c-0x2002 on
bus-0
LIBUSB_DLL: info: usb_os_find_devices: found \\.\libusb0-0006--0x413c-0x2002 on
bus-0
LIBUSB_DLL: info: usb_os_find_devices: found \\.\libusb0-0007--0x413c-0x2002 on
bus-0
LIBUSB_DLL: info: usb_os_find_devices: found \\.\libusb0-0008--0x04d8-0x003f on
bus-0
0---------------------------------------------------------------------
1---------------------------------------------------------------------
j'ai vu que sur la doc que la configuration était forcement à 1. si je choisis de mettre une configuration différente à 1, le programme me renvoie:
0------------------------------------------------------
1------------------------------------------------------
2------------------------------------------------------
LIBUSB_DLL: error: usb_claim_interface: could not claim interface 0, invalid con
figuration 0
error l70: Claim Interface -22
j'ai trouvé sur un site allemand des personnes qui avaient le même type de problème mais pas de résolution.
1------------------------------------------------------
LIBUSB_DLL: error: usb_set_configuration: could not set config 2: win error: ParamÞtre incorrect.
http://www.mikrocontroller.net/topic/73794
ils ont même suggéré de remplacer cette commande par son équivalence avec usb_control_msg
mais j'obtiens toujours le blocage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 usb_control_msg(devh, RT_STD_OUT, SET_CONFIGURATION, 1, 1, buf, 1, 10);
je ne sais plus où donner de la tête.
merci d'avance.
Partager