Hallo Leute, nach über einem Jahr Programmierung habe ich nun die erste Version meines generischen USB Treibers fertig gestellt. Die wichtigsten Features auf einem Blick: Treiber (EasyUSB): - Windows XP, XP64, Vista, Vista64 - USB 1.1 Full-Speed Transfers (Bulk, Interrupt, Isochronous) - USB 2.0 High-Speed Transfers (Bulk, Interrupt) - Anpassbar für eigene Geräte durch ändern der Treiber VID,PID - Getestet mit ATmega64 + USBN9604 - Auch Geräte mit mehreren Konfigurationen (USB) werden unterstützt - KMDF-basiert C++ API (EasyUSBConnect): - Objektorientierte API - Einfacher Zugriff auf Deskriptoren und Endpunkte - Synchrone und asynchrone Transfers - Anpassbare Callbacks (über Interface-Klassen) pro Endpunkt - komplett Doxygen dokumentiert - einfaches Beispiel vorhanden (benötigt angeschlossenes USB Gerät mit obigen Treiber) - Multi-Threaded via boost::thread - Einbindung als dynamische (DLL) oder statische (LIB) Bibliothek möglich Für die API wird boost (boost.org) und das PlatformSDK benötigt (u.a. enthalten im Visual Studio). Das komplette Projekt steht unter der BSD License und darf somit privat wie auch kommerziell verwendet werden. Alle Treiber und Pakete befinden sich auf Sourceforge unter: www.sourceforge.net/projects/easyusb Es handelt sich um die erste Beta-Version. Ich wäre sehr erfreut über weitere Tests und Feedback. Grüße Andre
Womit hast du denn den treiber kompiliert? Sehe ich das richtig, im grunde handelt es sich um einen Treiber ähnlich wie LibUSB-win32? Wo liegen die Vorteile/Nachteile?
> - Windows XP, XP64, Vista, Vista64
Es läuft zum Glück auf keinem Kommunisten-Betriebssystem.
;-)
@Lupin: Der Treiber wurde mit dem Windows Driver Development Kit (WDK) kompiliert. Der darin enthaltene Compiler ist speziell für Windows Treiber und setzt entsprechende Umgebungsvariablen. Die Vorteile zu LibUSB-win32 (0.1) sind: - Isochrone Endpunkte werden unterstützt (vorerst nur Full-Speed) - Asynchrone Transfers - C++ API (mit Exception Handling/Error system), ob dies ein Vor- oder Nachteil ist liegt aber wohl auch daran was einem eher liegt, C oder C++ Vielleicht werde ich den Treiber später als Portierung der neuen LibUSB version (1.0) für windows anbieten. Bin mir aber noch nicht sicher wie ich das angehen werde, möglich ist es aber.
Ich habe sowohl den Treiber als auch die API verbessert. Neue aktuelle Version ist 0.9.1. Bei dem Treiber wurde vor allem ein Problem behoben, das auftrat bei vielen isochronen Endpunkten. Dabei wurden Lese-Anforderungen nicht mehr verarbeitet oder es trat sogar ein Bug Check (Blue Screen) bei mehr als 4 isochronen Endpunkten auf. Die API benutzt nun keine Threads mehr, stattdessen wird auf jeden Endpunkt vom Benutzer die Funktion Run() aufgerufen. Diese ruft Callbacks auf und überprüft den Status der gesendeten Requests. Dadurch wird auch die boost library nicht mehr zwingend benötigt. Wer eine Thread sichere Variante benötigt, kann die API jedoch mit EASYUSB_THREAD_SAFE kompilieren. Dazu wird dann allerdings die boost library benötigt. Das Beispiel wurde an den neuen Code angepasst. Viel Spaß damit
Da der Treiber das Windows Kernel Mode Driver Framework (KMDF) benutzt, wird leider nur Windows 2000 aufwärts unterstützt. Alles was davor war ist nicht kompatibel mit dem KMDF.
Hallo! Ich würde den Treiber gerne statt LibUSB-win32 verwenden, da LibUSB nicht mit Vista64 funktioniert (und wegen der zwingend nötigen Signatur auch keine Besserung in Sicht ist). Der EasyUSB-Treiber lässt sich zwar installieren, aber nicht laden. Hier die Fehlermeldung aus dem Gerätemanager (eines englischen 64-Bit Vista SP1): Windows cannot load the device driver for this hardware. The driver may be corrupted or missing. (Code 39)
Ohne den Treiber von Andre R. abzuwerten, aber es gibt von Microsoft ebenfalls einen generischen USB Treiber, seit Vista bereits im OS integriert. WinUSB basiert auf dem UMDF und läuft ab WinXP. => http://msdn.microsoft.com/en-us/library/aa476426.aspx
Danke für den Hinweis, das werde ich mir mal angucken!
Hallo zusammen, ich habe leider auch das Problem feststellen müssen, dass sich der libusb-win32 treiber zwar unter vista x64 installieren läßt, aber nicht geladen werden kann (Code 39). Gibt es wirklich keinen Workaround/Lösung für? Wofür taugt denn die libusb0_x64 Variante im libusb-win32-Treiberpaket überhaupt? Gruß
Erst mal sorry, ich hatte fast vergessen, dass ich hier mal nen Thread angelegt habe. Zu dem Problem mit Vista, da ich leider kein Vista habe, kann ich das nicht selbst überprüfen. Ich hab ehrlich gesagt auch schon n paar Monate nicht mehr daran gearbeitet. Aber du könntest mal DebugView starten (gibs bei MS unter: http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx) und gucken was da für ausgaben kommen (ich hoffe ich habe die nicht ausgestellt in der Release). Bei libusb kann ich leider nicht helfen. Gruß Andre PS: Der Unterschied zu anderen Treibern ist die Unterstützung von Isochronous Transfers (Full Speed).
bro schrieb: > Hallo zusammen, > > ich habe leider auch das Problem feststellen müssen, dass sich der > libusb-win32 treiber zwar unter vista x64 installieren läßt, aber nicht > geladen werden kann (Code 39). > Gibt es wirklich keinen Workaround/Lösung für? Wofür taugt denn die > libusb0_x64 Variante im libusb-win32-Treiberpaket überhaupt? Naja, da der ja nicht mehr digital signiert ist, sobald du die inf Datei anpasst, musst du den bei jedem Systemstart manuell reinknüppeln. Bei x64 gibts nur signierte Treiber. Kannst natürlich eine Verisign ID kaufen und den angepassten Treiber bei MS WHQL zertifizieren lassen. Dann klappts auch ohne Verrenkungen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.