www.mikrocontroller.net

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


Autor: Sven Ludwig (clinicus)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven Ludwig (clinicus)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Ben R. (Firma: Explinovo GmbH) (exi)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Smo-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das liegt am name mangling von C++.

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

Gruß,
Matthias

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.