writeFile gibt immer Fehler 87 zurück (HID)

#1877514
Lesenswert?

Hallo zusammen,

ich habe hier ein MCBSTM32E von Keil, mit dem ich über den USB Port 
kommunizieren will. Das mitgelieferte Beispiel von Keil funktioniert 
auch bestens, nur wenn ich jetzt versuche das umzuschreiben komme ich 
nicht ganz zurecht.

Ich habe folgenden Code:
1
DWORD cnt;
2
BYTE OutReport[2];
3
OutReport[1] = 0x01;
4

5
...
6

7
h_device = CreateFile(p_interface_detail_data->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING, 0, NULL);
8
HidD_GetProductString(h_device, buffer, 1000);
9
for(x=0; x<NameLng; x++){
10
    if(buffer[x] == name[x])
11
    equal = 1;
12
    else
13
    equal = 0;
14
}
15
if(equal == 1){
16
    printf("Name: %ls\n", buffer);
17
    if (!WriteFile(h_device, OutReport, sizeof(OutReport), &cnt, NULL)) {
18
    GetLastErrorText(sz_err, 256);
19
    printf("[ERR] %s\n", sz_err);
20
    }
21
}

WriteFile liefert mir nur immer den Fehler 87 Invalid Parameter zurück, 
nur welcher der Parameter ist falsch? Ich verwende die gleichen 
Parameter wie in dem funktionierenden Beispiel.
Achja mit der For-Schleife überprüfe ich, ob der gefundene Name der Name 
meines Boards ist, um so auf das richtige Handle zu kommen.
Hoffe ihr könnt mir weiterhelfen.

Gruß
Mathias
#1877567
Lesenswert?

Ich habs zwar noch nicht explizit überprüft, da ich aber nach dem 
CreateFile den Namen auslesen kann hätte ich gedacht, dass es 
funktioniert hat. Und falls ich ein Fehlerhaftes Handle an WriteFile 
gebe kommt ein anderer Fehler (hatte ich auch schon ^^)
Deswegen hätte ich gesagt, dass das Problem nicht beim Handle liegt.
Werde es aber nochmal testen.
#1878581
Lesenswert?

Die Länge des Output-Reports ist die tatsächliche Länge des Reports + 1. 
Das erste Byte des Reports wird dann vor dem Aufruf von WriteFile mit 
dem Report-Identifier initialisiert. Arbeitest Du nicht mit Identifiern, 
setzt Du das erste Byte ganz einfach auf 0.

In Deinem Auszug fehlt auf alle Fälle schon mal die Initialisierung von 
OutReport[0].
#1879698
Lesenswert?

Rufus t. Firefly schrieb:
> Tja, dann poste mal den funktionierenden Original-Code und Deinen
> nichtfunktionierenden, und beschreibe, welche Veränderung Du angestellt
> hast.

Ok, werd ich machen, kanns aber erst am Montag machen.

> Ansonsten ist bei solchen Programmierereien die Auswertung der
> Rückgabewerte von Funktionen immer wichtig, die sollte nie weggelassen
> werden. Gewöhn Dir das ganz schnell ab.

Werd ich machen :)

René König schrieb:
> Die Länge des Output-Reports ist die tatsächliche Länge des Reports + 1.
> Das erste Byte des Reports wird dann vor dem Aufruf von WriteFile mit
> dem Report-Identifier initialisiert. Arbeitest Du nicht mit Identifiern,
> setzt Du das erste Byte ganz einfach auf 0.
>
> In Deinem Auszug fehlt auf alle Fälle schon mal die Initialisierung von
> OutReport[0].

Hmm ok werde ich auch am Montag gleich nachhohlen.

Danke für eure Hilfe!

Gruß
#1882249
Lesenswert?

René König schrieb:
> Die Länge des Output-Reports ist die tatsächliche Länge des Reports + 1.
> Das erste Byte des Reports wird dann vor dem Aufruf von WriteFile mit
> dem Report-Identifier initialisiert. Arbeitest Du nicht mit Identifiern,
> setzt Du das erste Byte ganz einfach auf 0.
>
> In Deinem Auszug fehlt auf alle Fälle schon mal die Initialisierung von
> OutReport[0].

Danke, daran lag es. Hab OutReport[0] = 0 gesetzt und jetzt gehts.

Gruß

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