[Linux][libusb] : utilisation de usb_get_descriptor_by_endpoint
Bonjour à tous,
J'utilise une carte audio USB avec un certain nombre de sorties sur un endpoint, mais ce nombre n'est pas fixe !
Je me suis dit : "Pas de problème, je vais lire le descripteur de ce endpoint !"
Je pense alors avoir trouvé la solution en utilisant cette fonction :
Code:
1 2
|
int usb_get_descriptor_by_endpoint(usb_dev_handle *dev, int ep, unsigned char type, unsigned char index, void *buf, int size); |
Mais avec la documentation de sourceforge, je n'arrive pas à comprendre l'utilisation de la fonction.
Je fais donc appel à quelqu'un qui l'aurai déjà utilisée !
Merci.
Utilisation d'une autre méthode
J'ai abandonné l'utilisation de la fonction usb_get_descriptor_by_endpoint.
:P J'utilise le code suivant :
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
| // Parcourir tous les bus USB
for ( bus = usb_get_busses(); bus != NULL; bus = bus->next )
{
struct usb_device * usb_devices = bus->devices;
// Parcourir tous les peripheriques USB connectes au bus
for( device = usb_devices; device != NULL; device = device->next )
{
// Si le peripherique est la carte audio, alors
if( device->descriptor.idVendor == AUDIO_VID && device->descriptor.idProduct == AUDIO_PID )
{
for ( int i = 0; i < device->descriptor.bNumConfigurations; i++)
{
struct usb_config_descriptor *cfg = &device->config[i];
for (int j = 0; j < cfg->bNumInterfaces; j++)
{
struct usb_interface *ifp = &cfg->interface[j];
for (int k = 0; k < ifp->num_altsetting; k++)
{
struct usb_interface_descriptor *as = &ifp->altsetting[k];
for(int l = 0; l < as->bNumEndpoints; l++)
{
struct usb_endpoint_descriptor *ep=&as->endpoint[l];
if ( ep->bEndpointAddress == ES_ENDPPOINT_1_IN )
_nbMaxByteInAudio = ep->wMaxPacketSize;
if ( ep->bEndpointAddress == ES_ENDPPOINT_1_OUT )
_nbMaxByteOutAudio = ep->wMaxPacketSize;
}
}
}
}
}
}
} |
Je récupère directement mes données _nbMaxByteInAudio et _nbMaxByteOutAudio dans les descripteurs.
Je poste cette solution à tout hasard !
Peut-être ne suis-je pas le seul :roll: à utiliser la librairie "libusb" ? :aie: