USB HID Host Treiber

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

USB HID Schnittstellen für Steuerungsaufgaben zu verwenden ist allgemein üblich in der Elektronik. Es gibt unzählige Mikrocontroller mit USB von einer ganzen Menge Hersteller, welche die notwendige Firmware schon mitbringen. Aber auf PC Seite ist es immer noch mit einigem Aufwand verbunden, wenn man den USB nutzen will. Sparen Sie sich die Mühe und verwenden Sie die AHID Bibliothek.

Funktionen

  • AHid_Init(): initialisiert den Treiber.
  • AHid_Register(): registriert die Schnittstelle.
  • AHid_Write(): schreibt Daten.
  • AHid_Read(): ließt Daten ein.
  • AHid_Request(): fordert einen Feature Report an.
  • AHid_Attached(): stellt Anschluß an den USB fest.
  • AHid_Find(): sucht die Schnittstelle am Bus.
  • AHid_Flush(): löscht die Datenpuffer.
  • AHid_Info(): zeigt Treiber-Infos an.

Konzept

Die Bibliothek wird durch einmaligen Aufruf der Funktion AHid_Init() zu Beginn initialisiert. Mit AHid_Register() erhält man Zugriff auf das gewünschte USB-Gerät. Die Funktion öffnet eine Schnittstelle für den Datentransfer.

AHid_Write() dient zum Senden von Daten an das USB-Gerät. Hierbei wird ein Interrupt- oder Control-Transfer (Feature Report) verwendet (je nach Festlegung bei der Registrierung). Der Datenempfang erfolgt durch AHid_Read(). Bei Interrupt-Transfers wird hierfür ein eigener Thread gestartet, der fortlaufend die Schnittstelle auf ankommende Daten hin prüft. Sobald Daten vorliegen, wird an die Anwendung eine AHID_DATARECEIVED-Nachricht verschickt. Innerhalb der Nachrichtenschleife kann man dann auf diese Daten mit AHid_Read() zugreifen. Der Empfang von Feature Reports unterscheidet sich etwas von diesem Ablauf. Feature Reports müssen nämlich aktiv angefordert werden, was die Funktion AHid_Request() erledigt. Nach erfolgreichem Erhalt des Feature Reports wird wiederum eine AHID_DATARECEIVED-Nachricht verschickt und AHid_Read() erledigt dann den Rest. Durch dieses Konzept werden alle eingehenden Daten (unabhängig vom Transfertyp) an eine Stelle der Nachrichtenschleife transportiert. Das erleichtert das Erstellen einer Zustandsmaschine.

Die Funktion AHid_Attached() stellt fest, ob das USB-Gerät überhaupt am Bus verfügbar ist und gibt einen entsprechenden Wert zurück. AHid_Find() macht in etwa das Gleiche. Die Funktion sucht das USB-Gerät und gibt über den Rückgabewert den entsprechenden Zustand aus. Mit der Funktion AHid_Flush() werden die internen Datenpuffer gelöscht. Das kann notwendig sein, falls z.B. das USB-Gerät vom Bus abgeklemmt wird, und man noch nicht ausgelesene Daten sicher löschen möchte. AHid_Info() hat im normalen Betrieb keine Funktion. Es zeigt lediglich ein paar Informationen über die AHID Bibliothek an.

Die AHID Library ist eine Dynamic Link Library (DLL) und arbeitet mit verschiedenen Programmiersprachen zusammen. Sie steht als Download auf http://embedded24.net bereit.

Beispiel-Anwendungen:

  • AHID Demo C++ (VS 2008)
  • AHID Demo C# (VS 2010)
  • AHID Demo VB (VS 2010)
  • AHID Demo Matlab
  • AHID Demo Scilab
  • AHID Demo LabVIEW

Download

Die Nutzung ist nicht kostenlos.

http://www.ahidlib.com

Diskussion

http://www.mikrocontroller.net/topic/210792

Kontakt

info(at)ahidlib.com

Alternativen

Zu obigem Treiber gibt es u.a. folgende Alternativen, deren Sourcen frei zugänglich sind:

  • GenericHID von Jan Axelson (Link) -> C++, C#, VB
  • GenericHID von pikim (Link) -> C# (Weiterentwicklung/ Modifikation von Jan Axelsons Version, standalone DLL, erweiterte Funktionalität, generisch verwendbar mit verschiedenen Devices in verschiedenen Projekten)
  • HidLibrary von Mike O'Brien (Link) -> C#
  • HidLibrary von jj-jabb (Link) -> C# (Weiterentwicklung von Mike O'Briens Version)
  • HidLib von jj-jabb (Link) -> C#
  • HID USB Library von Florian Leitner (Link) -> C#
  • Generic HID USB class-library von Simon Inns (Link) -> C#
  • USB HID Component von wimar (Link) -> C#
  • USBwisec von Bryan Batchelder (Link) -> C#
  • Raw HID von PJRC.COM (Link) -> C