web-dev-qa-db-fra.com

Comment utiliser au mieux libusb pour parler aux périphériques USB connectés?

Comment utiliser correctement libusb pour parler aux périphériques USB connectés?

Plus précisément, comment transférer des données sur des périphériques USB, recevoir des informations de ces périphériques, connaître le nom du périphérique connecté, s’il dispose d’un espace de stockage, etc.

Plus précisément, je vais l'exécuter sur un ordinateur Mac OS X, donc je sais que je ne peux pas utiliser uniquement les fichiers d'en-tête Windows.

S'il existe une bonne explication sur les périphériques libusb et USB, cela serait également utile.

14
user473973

J'ai trouvé ici un guide textuel sur l'utilisation de libusb-1.0: http://www.dreamincode.net/forums/topic/148707-introduction-to-using-libusb-10/

9
user2469202

Ici est un article sur une question similaire qui pourrait vous être utile. J'inclus beaucoup de liens.

Mais peut-être préféreriez-vous le voir ici. Donc dans ce cas, ça y est!

Libusb vous permet d'énumérer les périphériques et de sélectionner celui que vous souhaitez en fonction d'un identifiant de fournisseur/produit spécifique (identifiant V/P). Si vous ne le savez pas et que vous ne le trouvez pas en ligne avec la description du produit, vous pouvez le trouver facilement.

Si ce n'est pas en ligne, vous devrez utiliser une application similaire à lsusb sous Linux. (Je ne crois pas que ce soit sur Mac.) Lorsque vous exécutez lsusb, il répertorie les périphériques connectés et leurs identifiants V/P. Vous pouvez facilement trouver votre appareil en le débranchant, en exécutant lsusb, en le branchant et en le comparant. C'est un morceau de gâteau. Espérons que n'importe quelle application liste USB sur Mac affichera le V/P ID comme le fait lsusb.

Ensuite, une fois que vous aurez cet identifiant V/P, vous utiliserez libusb (si vous utilisez 0.1) pour énumérer tous les périphériques et rechercher le périphérique correspondant à cet identifiant. (Je suis favorable à l'utilisation de libusbx, qui ne dispose que d'une seule fonction de recherche basée sur l'identifiant V/P - en fait, libusbx est beaucoup plus concis dans l'ensemble.)

Après avoir sélectionné votre appareil, vous enverrez un paquet à l'aide de rapports de fonctionnalité ou de sortie. C’est la partie la plus compliquée car le paquet que vous envoyez dépend du périphérique individuel que je crois. Il s’agit de 8 octets de données, dont un seul caractère que vous souhaitez envoyer au périphérique USB. (Si vous souhaitez envoyer 8 caractères, vous devez parcourir un tableau de caractères et envoyer un rapport de fonctionnalité ou de sortie pour chaque caractère.)

Par exemple, n'hésitez pas à faire référence à un terminal exemple j'ai écrit pour contrôler deux LED. Si c'est utile, génial! Il contient un exemple libusbx et libusb-0.1.

J'espère que ça aide!

6
eatonphil

Le processus que vous pouvez suivre est le suivant:

  1. Obtenez le VID, le PID du périphérique que vous souhaitez communiquer à l'aide de lsusb
  2. Essayez d'ouvrir le périphérique et lisez le descripteur de périphérique
  3. Si vous voulez le nom du périphérique, utilisez le descripteur de chaîne pour l'obtenir.
  4. Vérifiez si un pilote de noyau est connecté. Si c'est le cas, détachez-le et transférez des données brutes.
  5. Après avoir obtenu la réponse, reconnectez le pilote.
1
freeworld

Le site officiel de libusb 1.0 (la version plus récente et recommandée) est https://libusb.info/ . La documentation de l'API se trouve à http://api.libusb.info . Cliquez sur la section Modules pour parcourir les différentes zones de fonction. La source est à https://github.com/libusb/libusb et vous pouvez voir des exemples utiles à https://github.com/libusb/libusb/tree/master/examples J'espère que cela pourra aider!

L'article de @ user2469202 est également une bonne introduction de base.

1
studgeek