USB via CreateFile
-
Hi!
Also ich weiss echt nicht mehr weiter. Ich möchte gerne meine USB-
Schnittstellen ansteuern. Der Treiber von diesem Gerät (wers kennt
Flash2Advance für den GBA) wurde schon installiert. Das Programm was
zu der Hardware dabei war habe ich mir mal in WordPad angeschaut, und da
den Eintrag \.\ezusb gefunden. In der WinAPI wurde angegeben, das man
via CreateFile ein Gerät per \.\Gerätetreiber ansteuern kann.
Aber als Handle von CreateFile bekomme ich nur -1
Als Parameter übergebe ich:
"\.\ezusb",GENERIC_WRITE Or GENERIC_READ,FILE_SHARE_WRITE Or FILE_SHARE_READ,
0,OPEN_EXISTING,0,0
Jemand eine Idee warum es nicht geht?
mfg olli
-
Hallo,
das ist kein Standard-C++ Problem. Bitte für das nächste Mal das hier lesen:http://www.c-plusplus.net/forum/viewtopic.php?t=39405
-> WinAPI
-
Hm, aus irgend einem Grund kann ich im Moment den Beitrag nicht verschieben. Ich hole das nach, sobald mich die Software wieder lässt
-
Hi!
Oh sorry! Also so langsam glaube ich, dass der Name den ich an plFileName über-
gebe, falsch ist. \\.\\COM1 z.B. geht ja. Wie kann ich über Start -> Einstel-
lungen -> Systemsteuerung -> System -> Geräte-Manager den Namen heraus finden,
den ich an lpFileName übergeben kann? Oder gibt es irgendwo kostenlose Tools,
um Informationen über die USB-Schnittstellen zu bekommen?
Ich finde leider überall nur dieses blöde Beispiel mit dem Thermomter im Net
Hilfe!
mfg olli
-
Der Name ist in der Tat falsch. Das muß wenigstens "\\\.\\ezusb" heissen. Wenn CreateFile dann noch immer fehlschlägt, einfach mal mit GetLastError den ErrorCode holen. Der ErrorCode interessiert uns, anders kann man nur im Dunkeln stochern.
Zum Enumerieren der einzelnen Devices kannst Du das Setup-API verwenden (SetupDiGetClassDevs, SetupDiEnumDeviceInterfaces, SetupDiGetDeviceInterfaceDetail). Allerdings mußt Du hier wenigstens den GUID des DevInterfaces kennen. Aber es gibt doch bestimmt Doku zum Treiber, oder?
Um aber überhaupt erstmal was herauszufinden, kannst Du einfach mal WinObj anwerfen. Wenn Du im Tree auf die beiden Fragezeichen drückst, bekommst Du eine Liste der eingerichteten SymbolicLinks. Hier wirst Du bestimmt fündig. Aber auch hier gilt: Dem Namen ist \.\ voranzustellen. Beispielsweise gibt es bei mir den Link CdRom0. Der String für CreateFile lautet dann folglich: "\\\.\\CdRom0".
-
Hi!
Mit \.\ezusb-0 als lpFileName geht es. Ist der Stecker des Flashlinkers drausen,
so liefert mit CreateFile -1 zurück, ist er drin, dann ein gültiges
Handle.
Bloß DeviceIoControl will nicht richtig funktionieren. Von den
bekomme ich immer eine 0 zurück
Hier der Aufruf(sorry ich übersetze das immer von VB zu C++)
Control = DeviceIoControl(hDriver, 2, &lIn, 4, &lOut, 4, &lSize, &gOverlapped);
(ich hoffe mal das ist in C++ jetzt so richtig)
Control ist immer =0. GetLastError gibt immer nur 0 zurück.
Kann man eigentlich den lpFileName auch irgendwie via VendorID assozieren?
Wen es interessiert hier für den Flashlinker die Website:
http://flash2advance.com/
Leider ist keine EMail-Adresse oder sonstiges angegeben, um den Autor/Pogrammíerer
des Writer's zu kontaktieren.
mfg olli
-
Vertex schrieb:
Control = DeviceIoControl(hDriver, 2, &lIn, 4, &lOut, 4, &lSize, &gOverlapped);
So kann man nichts dazu sagen. Ich sehe nur, daß Du 4 Bytes reingibst und bei Rückkehr wieder 4 Bytes erwartest. BTW: Hast Du das Device mit FILE_FLAG_OVERLAPPED geöffnet? Wenn nicht , so ist der letzte Parameter überflüssig und kann einfach auf NULL gesetzt werden.
Mir kommt nur der zweite Parameter etwas komisch vor. Du setzt hier lediglich die Methode auf METHOD_OUT_DIRECT. Sollte nicht wenigstens der DeviceType auf FILE_DEVICE_UNKNOWN gesetzt werden? Und was ist mit dem Funktions-Code? Einfach 0? Woher hast Du denn überhaupt diesen Code?
Davon mal abgesehen verwenden die, so ich das richtig gesehen habe, den Treiber, den Cypress mit seinen Starter-Kits rausgegeben hat. Gibt es dazu keine Doku? Was sagen die Beschreibungen zu den Thermometern (die scheinbar den gleichen Treiber verwenden)?
Kann man eigentlich den lpFileName auch irgendwie via VendorID assozieren?
VID und PID sind zwar Bestandteil, aber machen allein noch keinen Namen. Aber über "\\\.\\ezusb-X" geht es doch jetzt.
Leider ist keine EMail-Adresse oder sonstiges angegeben, um den Autor/Pogrammíerer
des Writer's zu kontaktieren.
mfg olliTja, ...
-
Hi!
Durch dummen Zufall beim googlen kam mir als 2. Parameter folgendes
zum Vorschein: &H22206D also in C++ 0xH22206D
Das Overlapped habe ich nun auch herausgenommen und auf 0
gestezt wie Du gesagt hast, und nun gibt DeviceIoControl 1 zurück.
Nun muss ich nur noch eine GameBoy-ROM schreiben die Daten via Linkport
sendet und empfängt.
mfg olli
-
hi,
kannst du mir mal helfen, ich will über usb daten auslesen, habe aber keine ahnung wie ich den usb port ansteuern muss...