Hallo, Ich habe ein Problem mit libusb unter Windows. Bei mir funktioniert die normale libusb nicht, sondern nur die libusb-winx32. Ich finde diesen Port von libusb für Windows nicht so schön, weil man erst für alle Geräte, die man später ansprechen will, einen Treiber installieren muss. Zum Test hab ich das mal mit meinem USB-Stick gemacht. Das Kompilieren eines Beispiels hat funktioniert, jedoch zeigt das Programm an, dass es keine Hardware finden kann:( Das Test-Tool von der libusb-win zeigt den Stick aber an. Komisch. Ich würde wirklich gerne lieber die normale libusb für Windows benutzen und frage mich, ob das möglich ist. Von mir aus wäre es auch OK die dlls einfach zu benutzen, ist mir schnuppe! Ich hab schon Vieles versucht, aber es hat nicht geklappt irgendwas zu erstellen (weder in Bloodshed Dev C++, in VC++ 2005 Express, noch in VS 2010 Pro). Kennt sich hier vielleicht jemand damit aus? Gruß -Alex
Die Original LibUSB ist für Linux. Der Windows Port ist LibUSB-win32 und das funktioniert dann unter Windows. Selbstverständlich musst du für jedes Gerät welches du mit LibUSB bearbeiten möchtest, den LibUSB Treiber installieren. Erst dann hast du über die User Mode DLLs Zugriff. Und das klappt bestens. Ich hab da schon einiges gemacht. Wir haben dann aber für produktive Systeme doch lieber WinUSB genommen, ist stabiler und schon im Windows drin. Natürlich kann man dann keine Software für mehrere OS erstellen.
Also MUSS ich libusbwin32 unter Windows nehemen. Ich hab ja mal den Treiber für meinen USB-Stick installiert, aber danach hat Windows ihn nicht mehr richtig erkannt, ist das normal? Ich glaube er war nicht mal im Gerätemanager zu sehen. Was hat denn WinUSB für Vorteile gegenüber dem Windows-Port von libusb?
Ja natürlich ist der Stick dann weg, denn dann ist der unter LibUSB-Win32 Devices zu finden und ist über die LibUSB ansprechbar, also generisches USB Device. LibUSB bringt ja nur was für eigene Geräte, die keiner USB Standardklasse entsprechen. Der größte Vorteil war bis vor kurzen, dass WinUSB WHQL signiert ist und damit auch unter x64 problemlos installiert werden kann. LibUSB ist aber mittlerweile auch signiert. Und ich weiß nicht, ob LibUSB mittlerweile asynchrone Transfers beherrscht. Ansonsten ist es halt ein Systembestandteil und wird von MS gepflegt.
Achso ist das. Ist das bei WinUSB genau so? Ich glaube libusb beherrscht asynchrone Tranfers. Wo bekomme ich denn WinUSB und wo gibt es eine Dokumentation? Ich glaube, dass ich dann zu WinUSB wecheln werden.
Christian R. schrieb: > Ja natürlich ist der Stick dann weg Wenn man die Filter-Version installiert, dann klinkt die libusb sich in alle existierenden Treiber ein (eben an der Filter-Schnittstelle). Dann hat man beides: den normalen Windows-Treiber (den es dann aber für jedes Gerät geben muss) und den Zugriff über libusb.
Alexx schrieb: > Wo bekomme ich denn WinUSB und wo gibt es eine Dokumentation? Ich > glaube, dass ich dann zu WinUSB wecheln werden. http://msdn.microsoft.com/en-us/library/ff540196.aspx WinUSB kann aber keine isochronen USB Transfers. Ich glaube LibUSB kann das. Musst du selbst entscheiden, was die besser passt, ein besser oder schlechter gibts da meiner Meinung nach nicht mehr.
Ist die Library im Download von VC++ 2010 entahlten? Bei mir ist die Library von vc++ nämlich überhaupt nicht vollständig! Nichtmal windows.h oder stdlib.h sind dabei! Oder brauche ich das Windows SDK? Ich probiere mal die Filter-Version bei libusb aus.
Für die WinUSB brauchst du nicht nur das Windows SDK sondern auch das WDK. Ist aber beides kostenlos herunterladbar.
OK! Ich hole mir gerade das neue Visual Studio 11b Prof., da scheint alles dabei zu sein. Ist WinUSB auch kompatibel mit libFTDI, kannst du mir das sagen? Gruß, Alex
Alexx schrieb: > OK! > Ich hole mir gerade das neue Visual Studio 11b Prof., da scheint alles > dabei zu sein. > Ist WinUSB auch kompatibel mit libFTDI, kannst du mir das sagen? > > Gruß, > Alex WinUSB und libFTDI sind doch 2 Treiber auf der selben Ebene, wie sollen die miteinander kompatibel sein? Oder hab ich da grad was falsch im Kopf. Es gibt zu WinUSB und libUSB noch mehr Alternativen. für jene die sich nicht entscheiden können gibt es auch libUsbK, die API ist kompatible mit WinUSB.sys, libusb0.sys und libusbk.sys. Was das beste ist entscheiden wohl folgende Fragen: - Welche Programmiersprache? - Auf was willst du zugreifen? - Welche Transfertype brauchst du?
Alexx schrieb: > Ist WinUSB auch kompatibel mit libFTDI, kannst du mir das sagen? Nee, natürlich nicht. LibFTDI ist doch wieder was ganz anderes. Was genau willst du denn überhaupt machen? Irgendwie ist das unklar.
OK, um jetzt mal zu erklären,was ich genau machen will: Ich möchte in C/C++ ein Tool schreiben, mit dem ich, wie in libusb, Daten an einen USB-Port und an das angeschlossene Gerät transferieren kann. In Linux hab ich schon sowas geschrieben (mit libusb) und möchte mein Tool jetzt auch für Windows schreiben. Außerdem würde ich gerne als zweites "Projekt" meinen FTDI Chip auf einem Dev-Board unter Windows ansteuern. In Linux braucht man dazu libusb, deswegen wollte ich wissen, ob libFTDI mit WinUSB kompatibel ist. Gruß, Alex
Achso, na dann nimm am besten LibUSB-win32, da kannst du den Quellcode fast 1:1 übernehmen. Die LibFTDI gibts meines Wissens unter Windows gar nicht so recht, höchstens über Cygwin. Unter Windows kommuniziert man über die D2XX.dll mit den FTDI Chips, den Treiber nimmst man dann den originalen von FTDI.
Alexx schrieb: > Ist die Library im Download von VC++ 2010 entahlten? Bei mir ist die > Library von vc++ nämlich überhaupt nicht vollständig! Nichtmal windows.h > oder stdlib.h sind dabei! Das sind Headerdateien und keine Libraries. Und die müssen im Umfang von VC 2010 enthalten sein. Üblicherweise finden sie sich in <installationsort>\vc\include, auf einem 64-Bit-Windows ist das C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include Windows.h gehört zum Windows-SDK, das aber automatisch mit VC installiert werden sollte. Das landet üblicherweise in C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include
Rufus Τ. Firefly schrieb: > Das sind Headerdateien und keine Libraries. Und die müssen im Umfang von > VC 2010 enthalten sein. Meines Wissens gehört die stdlib.h zur Standartbibliothek von C. Außerdem habe ich jetzt das neue VS 11b, da ist alles dabei:) Christian R. schrieb: > Unter Windows kommuniziert man über die D2XX.dll mit den FTDI Chips, den > Treiber nimmst man dann den originalen von FTDI. Ist die dll im Treiberpacket entahlten oder wo finde ich die? Wie benutze ich diese dann in meinem C code? Ich brauche doch noch eine lib-file oä für den Kompiler...? Gruß, Alex
Alexx schrieb: > Ist die dll im Treiberpacket entahlten oder wo finde ich die? Wie > benutze ich diese dann in meinem C code? Ich brauche doch noch eine > lib-file oä für den Kompiler...? Genau, sind im Treiber-Paket enthalten, sowohl als 32 Bit als auch 64 Bit Version. Zum Beispiel da drin: http://www.ftdichip.com/Drivers/CDM/CDM%202.08.24%20WHQL%20Certified.zip
Hallo, also Kompilieren und Linken hat jetzt geklappt! Ich konnte mein erstes libusb-Projekt erstellen:) Danke euch allen für die Hilfe! Ich hab jetzt noch eine spezielle Frage zu libusb: Was ist den denn ein End Point? Es gibt einen (oder zwei?) für read und write und der für read ist meistens 0x81...? Warum? Kann man ihn irgendwie ermitteln? Ich brauche den End Point z.B. für: int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout); Den Treiber für den FTDI Chip hab ich installiert und konnte ihn auch ansprechen:) Gruß, Alex
Alexx schrieb: > Ich hab jetzt noch eine spezielle Frage zu libusb: > Was ist den denn ein End Point? Oha, da hat jemand aber überhaupt keine Ahnung von USB. JEDE Kommunikation mit einem USB Device läuft über Endpoints, davon kann es mehrere geben, wenn du mit dem Gerät kommunizieren willst, musst du natürlich wissen, welche Endpoints da was machen. Ist denn dokumentiert, wie man die Endpoints eines FTDI ohne deren Treiber verwendet? Ich frage mich immer noch, was das soll? Wieso willst du den FTDI mit LibUSB ansprechen? Irgendwie ergibt das für mich wenig Sinn.
Ja, ich hab davon echt keine Ahnung! Nein, mit dem FTDI-Projekt hat das nix zu tun, das klappt so hervorragend! Ich meinte jetzt mein 2. Projekt: mit libusb ein Gerät ansteuern. Kannst du mir erklären, was ein End Point ist? Kann man den auslesen? Gruß, Alex
Achso, schau mal hier: http://www.beyondlogic.org/usbnutshell/usb3.shtml#Endpoints Und ja, man kann den auslesen, wenn es ein IN Endpoint ist (oberstes Bit in der Adresse gesetzt, also beispielsweise 0x81) und wenn Daten bereit gestellt wurden.
Aha, das hilft schon ein bisschen! Wenn ich jetzt mein Device ansteuern will und ein Befehl schicken will benutze ich: usb_bulk_write(usb_handle, OUT_ENDPT, commmand, 5, USB_TIMEOUT); Dabei ist OUT_ENDPT der End Point fürs Output bzw. schreiben. Doch wie bekomme ich den jetzt raus?
Du musst doch eine Doku zu dem Gerät haben?!? Die Endpoints zeigt dir auch USBView an.
Christian R. schrieb: > Du musst doch eine Doku zu dem Gerät haben?!? Die Endpoints zeigt dir > auch USBView an. Nein, ich hab keine Doku, da das Gerät eigentlich nicht dafür gedacht ist, dass man es mit eigenen Tools selber ansteuert... Danke für den USBView-Tipp! Diese Application scheint auch libusb zu benutzen. Ich bekomme bei usb_bulk_write immer -22 als Rückgabewert zurück:/ Hier mal der gekürzte source mit dem selben Problem: http://dl.dropbox.com/u/41173070/tools/TEST.rar Gruß, Alex
USBView nutzt sicher nicht LibUSB. Das war mal ein Demo-Projekt von MS im WDK. Was genau willst du denn da ansteuern? Die VID/PID ist ein Sandisk Cruzer Stick. Wenn da ein Fehler auftritt, musst du dann halt erst mal gucken, was -22 bedeutet und dann rätseln, was das Gerät da eventuell nicht haben will. Oder mal die USB Mass Storade Doku anschauen, was du denn überhaupt übertragen kannst.
Den Sandisk Cruzer Stick habe ich nur als Beispiel genommen. Egal welches Gerät ich ansteuern will, ich bekomme immer -22 als Returnwert.
Mach doch mal ein libusb_error_name auf den Errorcode, dann siehst du, was es bdeutet.
Ah, die normale libusb funktioniert jetzt unter Windows! Ich habe ja die ganze Zeit die libusb-win32 benutzt... Die libusb kennt den Errorcode nicht (UNKNOWN), aber das liegt wahrscheinlich daran, dass ich den Error mit der libusb-win32 erzeuge und mir von den normalen libusb auswerten lasse! Einen Moment, ich werde gleich nochmal posten...
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.