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.

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;
}
et j'obtiens le résultat suivant:


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---------------------------------------------------------------------
si j'enlève le usb_set_configuration(), j'obtiens cela:


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 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:


1------------------------------------------------------
LIBUSB_DLL: error: usb_set_configuration: could not set config 2: win error: ParamÞtre incorrect.
j'ai trouvé sur un site allemand des personnes qui avaient le même type de problème mais pas de résolution.

http://www.mikrocontroller.net/topic/73794

ils ont même suggéré de remplacer cette commande par son équivalence avec usb_control_msg

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);
mais j'obtiens toujours le blocage.
je ne sais plus où donner de la tête.
merci d'avance.