2016-08-25 3 views
0

Ich arbeite an einem USB-Gerät, das mit einer einzigen Anwendung sprechen wird. Es sieht so aus, als ob wir einen Windows-Treiber haben möchten, der der Anwendung eine schönere Software-Schnittstelle bietet. (Im Gegensatz zu der Anwendung selbst senden niedrigeren Ebene Befehle an das Gerät über WinUSB.)Verwenden von WinUSB in einer DLL?

Ist es möglich, WinUSB aus einer DLL zu verwenden? Choosing a driver model for developing a USB client driver adressiert das nicht spezifisch.

Gibt es in dieser Situation Gründe, warum ich stattdessen einen UMDF-basierten oder KMDF-basierten Treiber oder einen Hybridtreiber schreiben sollte, der WDM-Routinen aufruft?

Antwort

1

Mit WinUSB ist wahrscheinlich der richtige Weg zu gehen. Sie können WinUSB definitiv in einer DLL verwenden. Im Allgemeinen können Sie eine DLL schreiben, die Funktionen in einer anderen DLL aufruft, und es gibt nichts Besonderes an winusb.dll, das Sie davon abhält. Außerdem ist es bereits in anderen Projekten wie libusb und libusbp gemacht, die zu einer DLL kompilieren, die winusb.dll verwendet.

Ich würde Sie auch ermutigen, Ihren Code plattformübergreifend zu machen: Rufen Sie WinUSB nicht direkt von Ihrer DLL, sondern stattdessen eine USB-Abstraktionsbibliothek wie libusb oder libusbp. Selbst wenn Sie nur Windows unterstützen möchten, sind diese Bibliotheken viel einfacher zu verwenden als SetupAPI und WinUSB, daher sollten sie Entwicklungszeit sparen. Sie sparen außerdem viel Zeit, wenn Sie möchten, dass Ihr Code auf verschiedenen Betriebssystemen funktioniert.

Ich denke, der einzige Grund, in einer Situation wie diesem Ihren eigenen UMDF- oder KMDF-Treiber zu schreiben, ist, wenn Sie erweiterte Funktionen des Windows-USB-Stacks benötigen, die von WinUSB nicht unterstützt werden. Zum Beispiel, wenn Sie Ihr Gerät auf eine andere USB-Konfiguration umstellen müssen, oder knifflige Sachen mit Energieverwaltung machen, oder erlauben Sie mehreren Anwendungen, das Gerät sofort zu benutzen. Wenn Sie nur einige Daten hin und her senden möchten, ist WinUSB eine gute Wahl.