2016-05-24 8 views
1

Nur um die Aufzeichnung gerade zu machen, bin ich ein völlig neues, wenn es um USB-Kommunikation geht. Während ich auf der Micro-Controller Ende der Dinge mit der unteren seriellen Kommunikation (SPI, UART, I2C) beschäftigt, habe ich noch nie mit USB-oder OS-Seite der seriellen Kommunikation beschäftigt. Also bitte bitte mit mir.Entdecken und Kommunizieren mit USB-Geräten in C++

Ich habe einen RFID-Leser/Schreiber, der sein eigenes Protokoll hat, das ich verwende, um verschiedene Befehle auszugeben. Ich untersuche die Verwendung der Boost: ASIO-Bibliothek, um die Lese-/Schreiboperationen durchzuführen, die ich brauche.

Allerdings ist die Bibliothek ein wenig über meinen Kopf und ich suche eine Anleitung. Außerdem möchte ich, während ich in einer Windows-Umgebung arbeite, meine Hardware-Abstraktionsschicht so portabel wie möglich machen. In der gleichen Weise hatte ich in der Vergangenheit schlechte Erfahrungen mit (anderen Programmierern), die COM-Ports fest codierten, und ich würde lieber mein Programm entdecken, wenn ich es anschließe, basierend auf der Leser-ID.

+1

Und deine Frage ist? – NathanOliver

+0

Irgendeine Richtung in diesem Bereich – audiFanatic

Antwort

2

Die Geräteerkennung ist ziemlich plattformspezifisch. Daher sollten Sie eine plattformübergreifende API zwischen dem Betriebssystemspezifischen Teil und der Datenverarbeitung definieren.

Für die Geräteaufzählung unter Windows gibt es die SetupDi * APIs. Geräteankunftsereignisse können mit RegisterDeviceNotification erhalten werden. Sie können die "Compatible ID" prüfen, die VID und PID enthält, sowie die Bus-Dependent Device Description, die die USB-String-Deskriptoren meldet, um Ihr eigenes Gerät zu erkennen.

Unter Linux gibt es udev, das in der Lage ist, auf VID-, PID- und String-Deskriptoren abzugleichen und Enumerations- und Ankunftsereignisse für passende Geräte zu geben.

Sobald Sie mithilfe dieser betriebssystemspezifischen Mittel den Namen des seriellen Anschlusses ermittelt haben, verfügen Sie über eine Vielzahl von plattformübergreifenden seriellen Anschlussbibliotheken, um eine Verbindung zu öffnen und Daten mit dem Gerät auszutauschen.

3

Ich würde vorschlagen, in libusb (http://www.libusb.org/) zu suchen, es hat Cross-Plattform-Unterstützung für USB-Schnittstellen und ist nicht so komplex, wenn Sie verstehen, wie USB funktioniert.

+0

Ich habe es einen Blick gegeben und es scheint attraktiv. Mein Hauptanliegen ist jedoch die Lizenzierung. Meine Bewerbung ist Closed Source (nicht von meiner Wahl, schuld den sprichwörtlichen spitzenhäutigen Chefs). Also muss ich vorsichtig sein, Open-Source-Sachen zu verwenden. – audiFanatic

+0

Es ist unter GNU Lesser General Public License lizenziert, so dass Sie nur eine Kopie seiner Lizenz in die Freigabe einbinden müssen, solange Sie nicht statisch darauf verlinken oder die Quelle ändern. – Meep

+0

Ausgezeichnet, danke! – audiFanatic