Guten Abend,
ich habe eine Frage wie man die WindowsAPI HidD_GetFeature() richtig
verwendet - weil ich tu es offensichtlich falsch oder es ist ein Bug:
-auf dem Mikrocontroller läuft VUSB
1. Szenario: ich lege auf dem Mikrocontroller die ReportID auf default
(= 0)
wenn ich den Report abfrage mit HidD_GetFeature() dann kommen die Daten
richtig
2. Szenario: ich lege die Report ID auf 1 (im Report Descriptor) und
frage den Report ab (mit ID1). Der kommt dann auch, aber leider falsch -
das 1. Byte fehlt
der Inhalt des Eingangspuffers:
Eingangspuffer (Byte Nr) [0][1][2][3][4][5][6][7][8]
Daten bei ID0: 0 1 2 3 4 5 6 7 8
Daten bei ID1: 1 2 3 4 5 6 7 8 ?
Was mache ich falsch?
Gruß Markus
Wie sehen denn Deine Descriptoren bei VUSB genau aus (Quellcode)?
Meinst du den ReportDescriptor? Das ist der wo der Fehler passiert:
1 | PROGMEM char usbHidReportDescriptor[27] = { |
2 | 0x06, 0x00, 0xff, // USAGE_PAGE (Generic Desktop) |
3 | 0x09, 0x01, // USAGE (Vendor Usage 1) |
4 | 0xa1, 0x01, // COLLECTION (Application) |
5 | |
6 | 0x85, 0x01, // REPORT_ID (1) |
7 | 0xa1, 0x01, // COLLECTION (Application) |
8 | 0x09, 0x01, // USAGE (Undefined) |
9 | 0x15, 0x00, // LOGICAL_MINIMUM (0) |
10 | 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) |
11 | 0x75, 0x08, // REPORT_SIZE (8) |
12 | 0x95, 0x40, // REPORT_COUNT (64) |
13 | 0xb2, 0x02, 0x01, // FEATURE (Data,Var,Abs,Buf) |
14 | 0xc0, // END_COLLECTION |
15 | |
16 | 0xc0 // END_COLLECTION |
Bei dem Funktioniert es:
1 | PROGMEM char usbHidReportDescriptor[25] = { |
2 | 0x06, 0x00, 0xff, // USAGE_PAGE (Generic Desktop) |
3 | 0x09, 0x01, // USAGE (Vendor Usage 1) |
4 | 0xa1, 0x01, // COLLECTION (Application) |
5 | |
6 | 0xa1, 0x01, // COLLECTION (Application) |
7 | 0x09, 0x01, // USAGE (Undefined) |
8 | 0x15, 0x00, // LOGICAL_MINIMUM (0) |
9 | 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) |
10 | 0x75, 0x08, // REPORT_SIZE (8) |
11 | 0x95, 0x40, // REPORT_COUNT (64) |
12 | 0xb2, 0x02, 0x01, // FEATURE (Data,Var,Abs,Buf) |
13 | 0xc0, // END_COLLECTION |
14 | |
15 | 0xc0 // END_COLLECTION |
ich verwende als Host-Software das Commandozeilen-Tool aus dem HID-Data-Beispiel vom VUSB Download.
Probiers mal hiermit:
1 | PROGMEM char usbHidReportDescriptor[] = { |
2 | 0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined Page 1) |
3 | 0xa1, 0x01, // COLLECTION (Application) |
4 | 0x15, 0x00, // LOGICAL_MINIMUM (0) |
5 | 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) |
6 | 0x75, 0x08, // REPORT_SIZE (8) |
7 | |
8 | 0x85, 0x01, // REPORT_ID (1) |
9 | 0x95, 0x40, // REPORT_COUNT (64) |
10 | 0x09, 0x01, // USAGE (Vendor Usage 1) |
11 | 0xB2, 0x02, 0x01 // FEATURE (Data,Var,Abs) |
12 | |
13 | 0x85, 0x02, // REPORT_ID (2) |
14 | 0x95, 0x80, // REPORT_COUNT (128) |
15 | 0x09, 0x01, // USAGE (Vendor Usage 1) |
16 | 0xB2, 0x02, 0x01 // FEATURE (Data,Var,Abs) |
17 | |
18 | ...
|
19 | ...
|
20 | 0xc0 // END_COLLECTION |
21 | };
|
In dem Beispiel werden jetzt zwei Descriptoren definiert: - ID = 1; Größe 64 Bytes - ID = 2; Größe 128 Bytes Je nach Bedarf kannst du Dir das anpassen und auch noch einen dritten/vierten anfügen. Du mußt dann noch die Firmware ändern, so dass Dein erstes Byte immer die entsprechende Report ID enthält. Gruß Potter
Vor der Collection fehlt noch eine Usage hab ich grade gesehen. Gruß Potter
super, "Du mußt dann noch die Firmware ändern, so dass Dein erstes Byte immer die entsprechende Report ID enthält." das war es, warum es nicht so wie gewollte geklappt hat, weil ich gleich mit Nutzdaten angefangen habe Danke
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.