Daten an USB-Device schreiben

#1313718
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:
1
HANDLE  DeviceHandle = CreateFile(
2
        lpcwstr_handle,
3
        GENERIC_READ | GENERIC_WRITE,
4
        FILE_SHARE_READ | FILE_SHARE_WRITE,
5
        NULL,                           // no SECURITY_ATTRIBUTES structure
6
        OPEN_EXISTING,                  // No special create flags
7
        0,                              // No special attributes
8
        NULL);                          // No template file
9

10

11
if(DeviceHandle != INVALID_HANDLE_VALUE)
12
{
13
   // geschriebene Anzahl an Bytes
14
   DWORD numBytesReturned =0;
15

16
   // Daten
17
   char Antwort[32];
18
   for(int i=0; i<32; i++)
19
     Antwort[i] = 1;
20

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

27
   DWORD s = GetLastError();
28
}


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?
#1313822
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
#1317413
Lesenswert?

Hallo,

also mit "DeviceIoControl()" hat leider auch nicht funktioniert
1
int result = DeviceIoControl(
2
                             DeviceHandle,                        //__inopt
3
                             IOCTL_USBSAMP_GET_CONFIG_DESCRIPTOR, //__in
4
                             Antwort,
5
                             32,
6
                             Antwort,
7
                             32,
8
                             &numBytesReturned,
9
                             NULL
10
                             );
11

12
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 ?
#1318739
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren