Atton_666 | 28 Jun 2012 16:43
Picon
Favicon

Timeout Error with libUSB Win 32

Hi everybody,

I develop an application on Windows 7 64bits with Qt Creator. I use libusb
win 32 in order to communicate with a STM32 µc. I can find my device after
install a driver with inf-wizard. I can open connection with this device but
i can't use bulk_read/write.

Here is a part of my code:

#define VENDOR  0x0483
#define PRODUCT 0x3748

#define EP_IN 0x81
#define EP_OUT 0x02
#define BUF_SIZE 64

m_testUSB->clear(); //Effacement du texte précédent.

    int ret;
    char buffer[BUF_SIZE];    //Définition de la taille du Buffer permettant
l'échange d'instructions
                              //entre le périphérique USB et le PC

    struct usb_bus *busses = new usb_bus(); // Création de la structure
busses permettant d'obtenir des informations sur les bus du PC
    usb_init(); // Initialisation de la librairie. Cette fonction doit être
appelée avant tout autre fonction de libUSB

    m_testUSB->append("le nombre de bus = " +
QString().setNum(usb_find_busses())); //Récupération du nombre de bus depuis
le dernier appel à cette fonction
    m_testUSB->append("le nombre d'appareil = " +
QString().setNum(usb_find_devices())); //Récupération du nombre de
périphérique (Branché/Débranché) depuis le dernier appel à cette fonction

    busses = usb_get_busses(); //récupération de la liste des bus usb

    // Parcours tous les bus
    for (struct usb_bus *bus = busses; bus; bus = bus->next)
    {
        int k = 0; //Compteur d'appareil attendu

        // Parcours tous les appareils afin d'identifier l'appareil concerné
        for (struct usb_device *dev = bus->devices; dev; dev = dev->next)
        {
           // Teste si le périférique détecté est bien celui qui possède les
PID VID indiqués par PRODUCT et VENDOR
           if( (dev->descriptor.idVendor == VENDOR) &&
(dev->descriptor.idProduct == PRODUCT) )
           {
               k++;
               m_testUSB->append("CLE DETECTEE");

               // Ouverture de l'appareil
               struct usb_dev_handle *devHandle ;
               devHandle = usb_open(dev);
               if (dev == NULL)
               {
                   m_testUSB->append("Erreur a l'ouverture.");
               }

               else
               {
                   // Set la configuration active
                   if(usb_set_configuration(devHandle, 1)>=0)
                   {
                       m_testUSB->append("Configuration 1 réussie");
                   }
                   else
                   {
                       m_testUSB->append("Configuration 1 ratée");
                       usb_close(devHandle);
                   }

                   //Demande d'interface avec le périphérique
                   if(usb_claim_interface(devHandle, 0)>=0)
                   {
                       m_testUSB->append("Demande d'une interface et
process");
                   }
                   else
                   {
                       m_testUSB->append("Impossible d'ouvrir l'interface");
                   }

                   if(usb_set_altinterface(devHandle,0)==0)
                   {
                       m_testUSB->append("Config interface OK");
                   }
                   else
                   {
                       m_testUSB->append("Config interface Ratée");
                   }

                   //Initialise les configurations des endpoints
                   if(usb_clear_halt(devHandle, EP_OUT)>=0)
                   {
                       m_testUSB->append("usb clear halt ep out OK");
                   }
                   if(usb_clear_halt(devHandle, EP_IN)>=0)
                   {
                       m_testUSB->append("usb clear halt ep in OK");
                   }

                  buffer[0]=0x00;

                   //Ecriture sur le périphérique
                   ret = usb_bulk_write(devHandle, EP_OUT, buffer,
sizeof(buffer), 500);
                   if(ret)
                   {
                       m_testUSB->append("usb_interrupt_write OK");
                   }
                   if( (ret = usb_bulk_write( devHandle, EP_OUT, buffer,
sizeof(buffer), 500 )) < 0 )
                   {
                       m_testUSB->append( QString( "usb_interrupt_write KO :
%1" ).arg( usb_strerror() ) );
                   }
                   else
                   {
                       m_testUSB->append( QString( "usb_interrupt_write OK :
%1 écrits" ).arg( ret ) );
                   }

                   //                   if(ret>0)
                   //                   {
                   //                      
m_testUSB->append("usb_interrupt_write test OK");
                   //                       m_testUSB->append("Emis : " );
                   //                       m_testUSB->append(buffer);
                   //                   }
                   //                   else
                   //                   {
                   //                       m_testUSB->append("Erreur
écriture: ");
                   //                      
m_testUSB->append(usb_strerror());
                   //                   }

                   // Fermeture de l'appareil
                   usb_close(devHandle);
               }
           }

         }
         if(k==0) // Si le périphérique voulu n'est pas détecté on affiche
le message ci-dessous
         m_testUSB->append("LA CLE N'EST PAS DETECTEE");

Here is my libusb test's result:

DLL version:	1.2.6.0
Driver version:	1.2.6.0

bus/device  idVendor/idProduct
bus-0/\\.\libusb0-0001--0x0483-0x3748     0483/3748
- Manufacturer : STMicroelectronics
- Product      : STM32 STLink
- Serial Number: VÿjIpST(%‡
bLength:             18
bDescriptorType:     01h
bcdUSB:              0200h
bDeviceClass:        00h
bDeviceSubClass:     00h
bDeviceProtocol:     00h
bMaxPacketSize0:     40h
idVendor:            0483h
idProduct:           3748h
bcdDevice:           0100h
iManufacturer:       1
iProduct:            2
iSerialNumber:       3
bNumConfigurations:  1
  wTotalLength:         39
  bNumInterfaces:       1
  bConfigurationValue:  1
  iConfiguration:       0
  bmAttributes:         80h
  MaxPower:             50
    bInterfaceNumber:   0
    bAlternateSetting:  0
    bNumEndpoints:      3
    bInterfaceClass:    255
    bInterfaceSubClass: 255
    bInterfaceProtocol: 255
    iInterface:         4
      bEndpointAddress: 81h
      bmAttributes:     02h
      wMaxPacketSize:   64
      bInterval:        0
      bRefresh:         0
      bSynchAddress:    0
      bEndpointAddress: 02h
      bmAttributes:     02h
      wMaxPacketSize:   64
      bInterval:        0
      bRefresh:         0
      bSynchAddress:    0
      bEndpointAddress: 83h
      bmAttributes:     02h
      wMaxPacketSize:   64
      bInterval:        0
      bRefresh:         0
      bSynchAddress:    0

Here application's messages:

le nombre de bus = 0
le nombre d'appareil = 0
CLE DETECTEE
Configuration 1 réussie
Demande d'une interface et process
Config interface OK
usb_interrupt_write OK
usb_interrupt_write KO : libusb0-dll:err [_usb_reap_async] timeout error

And to finish reports of out application:

libusb0-dll:[os_init] dll version: 1.2.6.0
libusb0-dll:[os_init] driver version: 1.2.6.0
libusb0-dll:[os_find_busses] found bus-0
libusb0-dll:[os_find_devices] found \\.\libusb0-0001--0x0483-0x3748 on bus-0
libusb0-dll:err [_usb_reap_async] reaping request failed, win error: Un
périphérique attaché au système ne fonctionne pas correctement.

libusb0-dll:err [_usb_reap_async] timeout error

I hope that someone is able to fix my problem ;)
Best Regards.

--
View this message in context: http://libusb.6.n5.nabble.com/Timeout-Error-with-libUSB-Win-32-tp5710113.html
Sent from the LibUSB Dev - Win32 mailing list archive at Nabble.com.

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Libusb-win32-devel mailing list
Libusb-win32-devel <at> lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libusb-win32-devel

Gmane