www.mikrocontroller.net

Forum: PC-Programmierung Daten an USB-Device schreiben


Autor: Usb Newby (spawnb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe ein USB-Device mit eintsprechenden Treiber, welches ich auch unter 
XP erfolgreich installieren konnte.

Nun möchte ich es gerne im Programm ansprechen und im ersten Schritt 
Daten schreiben und im 2ten Schritt lesen.

Leider komme ich mit der WinAPI beim schreiben über "WriteFile()" der 
Daten nicht weiter, definition hier:

http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx


Hier der Code-Abschnitt dazu:
HANDLE  DeviceHandle = CreateFile(
        lpcwstr_handle,
        GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL,                           // no SECURITY_ATTRIBUTES structure
        OPEN_EXISTING,                  // No special create flags
        0,                              // No special attributes
        NULL);                          // No template file


if(DeviceHandle != INVALID_HANDLE_VALUE)
{
   // geschriebene Anzahl an Bytes
   DWORD numBytesReturned =0;

   // Daten
   char Antwort[32];
   for(int i=0; i<32; i++)
     Antwort[i] = 1;

   result = WriteFile(DeviceHandle,   // open file handle
              (char*) Antwort,        // start of data to write
              32,                     // number of bytes to write
              &numBytesReturned,      // number of bytes that were written
              NULL);                  // no overlapped structure

   DWORD s = GetLastError();
}


Leider ist der Rückgabewert "result" von "WriteFile()" ==0 so wie auch 
"numBytesReturned" == 0

und die Funktion GetLastError() liefert ==87

Laut MSDN --> GetLastError() returns 87 (ERROR_INVALID_PARAMETERS)

Nu was kann denn da Falsch sein?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für ein USB Device? Was für einen Treiber hat das ganze?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht jedes Device, dessen Handle man mit CreateFile öffnen kann, lässt 
WriteFile/ReadFile-Operationen zu.

Vermutlich will dieses Device hier mit DeviceIoControl angesteuert 
werden.

http://msdn.microsoft.com/en-us/library/aa363216(VS.85).aspx

Autor: Usb Newby (spawnb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist ein neu entwickelts System, bestehend aus einer Basis-platine und 
einem aufgesetzten Rechen-Modul mit kleinem OS. (näher darf ich nicht 
drauf ein gehen)

Es handelt sich um einen USBFN Driver (USB Serial Class Usage)

@Firefly das könnte es sein, werd mich gleich mal auf DeviceIoControl 
stürtzen.

Beim DDK (WDK) gibt es Test-Tools mit den ich Daten an das Gerät senden 
kann.
Besser gesagt bei der Generierung eines USBbulk-Treibers wird gleich ein 
kleines Test-tool mit generiert. (..\WinDDK\6001.18002\src\kmdf\usbsamp)

Wobei ich ja über den Quellcode dieses USB-Testtools verfüge und dort 
wird zwar "DeviceIoControl" unter anderem verwendet, aber die Daten auch 
über WriteFile() geschrieben.

Aber aufjeden Fall ein Anhaltspunkt für mich.

DANKE

Autor: Usb Newby (spawnb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also mit "DeviceIoControl()" hat leider auch nicht funktioniert
int result = DeviceIoControl(
                             DeviceHandle,                        //__inopt
                             IOCTL_USBSAMP_GET_CONFIG_DESCRIPTOR, //__in
                             Antwort,
                             32,
                             Antwort,
                             32,
                             &numBytesReturned,
                             NULL
                             );

DWORD s = GetLastError();

Ergebnise:
result           = 0
numBytesReturned = 0
s                = 6

Laut MSDN --> GetLastError() returns 6 Error Code "The handle is 
invalid."


Das kann ja wiederum nicht ganz sein, da ich ja zuvor das Handle 
überprüfe  if(DeviceHandle != INVALID_HANDLE_VALUE)


Jemand Ideen ?

Autor: Usb Newby (spawnb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehler gefunden, um ein Handle auf das Device zum schreiben bzw. lesen 
von daten zu erhalten, reicht es nicht aus nur den Pfad zum Device 
anzugeben, sondern man muss auch noch den Endpoint 
(Lesen/Schreiben-Pipe) angeben.

in etwa so (Beispiel-Daten):

\\\\?\\usb#vid_9999&pid_9999#5&479E82ES&4&2#{R4EC42X0Q-54G2-42Sf-A1C0-4C 
AWSDD002AA}\\PIPE01";

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.