problème avec libusb sous windows xp
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:
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:
Citation:
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:
Citation:
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:
Citation:
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:
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.