Forum: Mikrocontroller und Digitale Elektronik HID device IN Report mit ReadFile empfangen


von Sven L. (clinicus)


Lesenswert?

Hallo,
ich habe schon ne ganze Menge an Beiträgen hier durchforstet aber keine 
Antwort auf meine Frage gefunden.
Ich möchte mit ReadFile einen Report von meinem HID device empfangen. 
Der Report Deskriptor sieht folgerndermaßen aus:
HID_UsagePageVendor(0xFF),
HID_Usage(0x01),
HID_Collection(HID_Application),
  HID_Usage(0x03),
  HID_LogicalMin(0),
  HID_LogicalMax(1),
  HID_ReportCount(4),
  HID_ReportSize(8),
  HID_Input(HID_Data | HID_Variable | HID_Absolute),
  HID_Usage(0x04),
  HID_LogicalMin(0),
  HID_LogicalMax(1),
  HID_ReportCount(127),
  HID_ReportSize(8),
  HID_Output(HID_Data | HID_Variable | HID_Absolute),
HID_EndCollection,

ReadFile liefert aber kein Ergebnis (time out - can't read from device). 
Mit einem USB Paket Analyzer sehe ich aber, dass ein IN Paket vom 
controller gesendet wird. Ich habe probiert dem Report eine ID 
zuzuweisen und dann im IN Report im ersten Byte die ID anzugeben und es 
ging. Ich möchte aber die Report ID vermeiden, da ich keine brauche. 
Soweit ich das verstanden habe bekommen dann alle Reports die ID 0. Aber 
selbst wenn das erste Byte im IN Report eine 0 ist empfängt Windows ihn 
nicht.
Hat jemand eine Idee woran das liegen könnte?

Danke
mfg
sven

von Sven L. (clinicus)


Lesenswert?

Ich hab das Problem gefunden...
mir war nicht bewusst, dass Windows die Berichte offensichtlich nur 
empfängt, wenn die Berichtsgröße 100%ig mit der im Deskriptor 
angegebenen Größe übereinstimmt...

von Ben R. (Firma: Explinovo GmbH) (exi)


Lesenswert?

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!

von Smo-G (Gast)


Lesenswert?

Das liegt am name mangling von C++.

versuch es mal so:
[c]
extern "C"
{
#include <HIDSDI.h>
#include <HID.h>
}

Gruß,
Matthias

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
Noch kein Account? Hier anmelden.