Hallo, ich habe ein kleines Problemchen. Gerade beschäftige ich mich mit dem PIC 18F4550 und wollte nun eine Verbindung über USB zum PC herstellen. Ich habe alle Deskriptoren geschrieben und die Enumeration scheint gut zu funktionieren oder zumindest das Gerät wird im Gerätmanager als HID angezeigt. Jetzt möchte ich Daten an Geräte senden und empfangen. Dazu habe ich ein Programm in Visual C++ geschrieben (Microsoft Visual Studio 2009). Ich habe vieles in Foren gelesen und was ich verstanden habe ist daß es mit den Funktionen ReadFile(...) und WriteFile(...) vollkommen ausreicht, leider sende und empfange ich nichts. Deswegen glaube ich, dass ich noch etwas falsch mache. Inzwischen bin ich auf die WDK (früher DDK) gestoßen. Aus dieser Library benutze ich die Funnktionen HidD_GetInputReport(...)zum empfangen und HidD_SetOutputReport(...)zum senden. Ich habe die Dateien HID.h und HIDSDI.h hinzugefügt, aber jetzt es kompiliert nicht mehr. Ich kriege immer: *** error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""unsigned char __stdcall HidD_GetInputReport(void *,void *,unsigned long)" (?HidD_GetInputReport@@YGEPAX0K@Z)" in Funktion "_main". *** Muss ich DDK oder WDK Librarys benutzen? Hat jemand schon so ein Problem gehabt? Habt Ihr Ideen woran es liegen könnte? Ich befürchte das es an dem Report Deskriptor liegt... Was glaubt ihr?? Vielen Dank für jede Antwort!
DDK ist das Device Driver Development Kit, d.H. wenn du Code daraus verwendest, muss dein Programm nachher auch als Treiber compiliert werden und laufen, und nicht mehr als normale Anwendung. Vermutlich nicht was du willst.
Vieleicht hilft dir das hier ein wenig weiter: http://www.holger-klabunde.de/usb/usbpic.htm >mit den Funktionen ReadFile(...) und WriteFile(...) vollkommen Ja, das geht. Das Problem ist an das HID Handle ranzukommen. Ziemlich komplizierter Kram. Auf der Seite oben findest du C-Quellcode (kein C++) für VC5 und einen Zugriff auf PIC16C765 per HID. Aber frag mich bloß nicht was ich da gemacht habe ;) Ist schon sehr lange her das ganze. Heute nehme ich eigentlich nur noch CDC Devices. Ist einfacher.
Ben R. wrote: > *** > error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""unsigned > char __stdcall HidD_GetInputReport(void *,void *,unsigned long)" > (?HidD_GetInputReport@@YGEPAX0K@Z)" in Funktion "_main". > *** > > Muss ich DDK oder WDK Librarys benutzen? Na aber sicher doch. Die große Überraschung: Die Library heißt hid.lib. :-) Das wird Dein Problem aber sicherlich nicht lösen. Ein Klassiker ist das vergessen der ReportID. Selbst wenn Du damit nicht arbeitest, muss der Report ein Byte länger allokiert werden und das erste Byte des Reports auf 0 gesetzt werden, vor dem Aufruf von ReadFile oder WriteFile. Ansonsten sind Fehlerbeschreibungen wie "leider sende und empfange ich nichts" nicht gerade hilfreich beim Eingrenzen des Problems. Zumindest den Error-Code hättest Du uns verraten können (siehe GetLastError).
Ernst Bachmann wrote: > DDK ist das Device Driver Development Kit, d.H. wenn du Code daraus > verwendest, muss dein Programm nachher auch als Treiber compiliert > werden und laufen, und nicht mehr als normale Anwendung. Vermutlich > nicht was du willst. Die hid.dll ist für den User-Mode gedacht. Da Header und Import-Lib nur im WDK enthalten sind, ist es sehr wohl das, was er braucht. Und ohne dem ist HID Entwicklung unter Windows nicht gerade eine Freude, da Du ohne dem nicht an im HID gespeicherte Strings herankommst, da Du nicht an den Feature-Report herankommst, da Du nicht an VID/PID des Gerätes herankommst...
hk wrote: > Ziemlich komplizierter Kram. Nur ungewohnt, aber ganz und gar nicht kompliziert. > Ist schon sehr lange her das ganze. Heute nehme ich eigentlich > nur noch CDC Devices. Ist einfacher. Naja, wenn ich bedenke, dass ich noch extra eine INF-Datei mitschleppen muss, um mich an usbser.sys zu binden, empfinde ich das nicht gerade als einfach. War da nicht etwas unter Vista64, dass soetwas ohne Signierung einfach ablehnt? Bei HIDs hingegen brauchst Du nichts zu machen, das funktioniert einfach. Desweiteren hatte ich beim letzten Mal so meine liebe Not, mein CDC zu finden, zusammen mit der Port-Nummer. Dann habe ich keine WM_DEVICECHANGE-Message erhalten, da usbser.sys scheinbar kein GUID_DEVINTERFACE_COMPORT registriert. Dann komme ich an die im Gerät gespeicherten Strings nicht so ohne weiteres heran usw.. Da freue ich mich doch jedesmal, wenn ich an HIDs arbeiten darf. Einfacher geht es doch fast gar nicht. Und ich brauche den Usern nichtmal zu erklären, was ein COM-Port ist. :-) Unterm Strich ist das aber wohl ganz einfach nur eine Frage des persönlichen Geschmacks.
Gibt es nicht irgendwo ein schönes How-To, in dem genau steht, was man an dem ATmega machen muss, und was in einem Programm für den PC stehen muss, damit ein reiner Datenaustausch funktioniert? Das wird ja wohl immer das selbe Schema sein...
Vielleicht findest Du in Deinem Doppelposting ja die Antwort: Beitrag "HID device IN Report mit ReadFile empfangen"
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.