2016-05-24 2 views
1

Juste pour clarifier les choses, je suis totalement novice en matière de communication USB. Bien que je m'occupe des communications série de bas niveau (SPI, UART, I2C) sur le microcontrôleur, je n'ai jamais eu affaire à l'USB ni au côté OS des communications série. Restez avec moi.Découverte et communication avec des périphériques USB en C++

J'ai un lecteur/enregistreur RFID qui a son propre protocole que j'utilise pour émettre diverses commandes. Je cherche à utiliser la bibliothèque Boost: ASIO pour effectuer les opérations de lecture/écriture dont j'ai besoin.

Cependant, la bibliothèque me dépasse un peu et je cherche des conseils. De plus, pendant que je travaille dans un environnement Windows, je voudrais rendre ma couche d'abstraction matérielle aussi portable que possible. Dans le même ordre d'idées, j'ai déjà eu de mauvaises expériences avec d'autres ports COM en codage en dur (d'autres programmeurs) et je préférerais que mon programme découvre mon lecteur lorsque je le branche, basé peut-être sur l'ID du lecteur.

+1

Et votre question est? – NathanOliver

+0

Quelques directions dans ce domaine – audiFanatic

Répondre

2

La détection de périphérique est assez spécifique à la plate-forme, vous devez donc définir une API multiplate-forme entre la partie spécifique au système d'exploitation et le traitement des données.

Pour l'énumération de périphériques sous Windows, il existe les API SetupDi *. Les événements d'arrivée de périphérique peuvent être obtenus avec RegisterDeviceNotification. Vous pouvez inspecter l'ID "Compatible" qui contient VID et PID, ainsi que la description de l'appareil dépendant du bus qui signale les descripteurs de chaîne USB, afin de reconnaître votre propre appareil.

Sous Linux, udev est capable de faire correspondre les descripteurs VID, PID et chaîne et de fournir des événements d'énumération et d'arrivée aux périphériques correspondants. Une fois que vous utilisez ces moyens spécifiques au système d'exploitation pour trouver le nom du port série, vous disposez de diverses bibliothèques de port série multiplateformes pour ouvrir une connexion et échanger des données avec le périphérique.

3

Je suggère de regarder dans libusb (http://www.libusb.org/) il a un support multiplate-forme pour les interfaces USB, et n'est pas si complexe si vous comprenez comment fonctionne l'USB.

+0

Je lui ai donné un lookover et il semble attrayant. Cependant, ma principale préoccupation est l'octroi de licences. Mon application est à source fermée (pas par mon choix, blâmer les patrons proverbiaux aux cheveux pointus). Donc, je dois me méfier de l'utilisation de logiciels libres. – audiFanatic

+0

Il est sous licence GNU Lesser General Public License, aussi longtemps que vous ne créez pas de lien statique ou que vous ne modifiez pas sa source, il vous suffit d'inclure une copie de sa licence dans la version finale. – Meep

+0

Excellent, merci! – audiFanatic