Hallo Leute, ich möchte eine kleine Box bauen mit der ich bei z.B. Spotify Lieder einfach über springen kann. Diese Box möchte ich per USB an meinem Rechner anschließen. Grade arbeite ich mit dem "BluePill" (STM32F103C8T6). Einfache Dinge wie einen Mausklick habe ich bereits hinbekommen. Es gibt online auch ein paar Projekte zu diesem Thema, aber ich möchte nicht einfach nur kopieren sondern wirklich in der Lage sein später eigene HID Geräte zu entwickeln. Alles in allem habe ich eine genaue, spezifische und umfangreiche Dokumentation bezüglich des Descriptors vermisst und so sind mir viele Dinge noch schleierhaft, da ich alles was ich bis jetzt gemacht habe aus Projekten "kopiert" habe. Zu meinen Fragen gehören zum Beispiel: - was machen "report_count" und "report_size"? - 0x09, 0xB6, /*Usage (Scan Previous Track)*/" habe ich in einem Projekt gefunden. Wie finde ich solche Eigenschaften außerhalb von Projekten?/ Wo werden diese definiert? - Warum wird 0x09, 0xB6, /*Usage (Scan Previous Track)*/" in einem Usage benutzt? Da ich viele solcher Fragen habe und wahrscheinlich noch mehr aufkommen werden wollte ich wissen ob es eine gute und verständliche Dokumentation dazu gibt. Wenn ja kann mir diese bitte jemand zukommen lassen? Grüße Ferdinand
:
Bearbeitet durch User
Hallo Ferdinand, du solltest dir die USB HID spec ansehen. Ich hab mir mal ein (unvollständiges) header file geschrieben das den Umgang mit den Tabellen erleichtert.
1 | 0x09 -> HID_LOCAl | 1 // USAGE 1 byte |
2 | 0xB6 -> FEATURE | _VAR | _REL // feature report |
vieleicht hilft das zum Eintieg. Hid ist aber ziemlich komplex. Ohne die Spec von USB org koomst du sicher nicht sehr weit. Thomas
Hallo Ferdinand, das mit dem HID ist eigentlich ganz einfach. Schau mal auf ahidlib.com. Das ist zwar ein kommerzieller HID Teiber für Windows. Aber wie das auf Geräte-Seite aussieht wird anhand eines Beispiels auch ganz gut erklärt: http://ahidlib.com/pages/fundamentals.php?lang=de Gruß Pit
Dafür braucht man ein Interface das die Media Controls von HID umsetzt. Also das Interface als HID ohne Subclass und ohne Boot Protocol definieren. Den Report Descriptor mit Usage Page Consumer, Usage General Consumer Device deklarieren. Report Size 1, Report count 1. Dann die Usages sepzifizieren, die Du verwenden willst. Das ergibt dann ein Bitfeld in dem der jeweilige Key als Flag gesetzt wird.
Hallo Leute, vielen Dank für all die Informationen! Die genaue Definition die ich gesucht habe, habe ich in den beiden PDFs die ich angehängt habe gefunden. Aktuell bin ich noch dabei mich hier druch zu arbeiten, aber bei Versuchen mit dem descriptor tool (https://www.usb.org/document-library/hid-descriptor-tool) einen vernünftigen Descriptor zu erstellen bin ich bisher leider immer gescheitert. Windows meint es hätte ein Problem mit dem Treiber. - Weis jemand warum das so ist bzw. wie man das beheben kann? - Hat zufällig jemand einen Beispiel Descriptor der eine ähnliche Aufgabe wie meine erfüllt? - Muss ich etwas bestimmtes beachten beim einstellen des Discriptors? Auch was die beiden anderen Arrays, die CubeMX erstellt, angeht? Danke und Grüße Ferdinand
Und warum zeigt du nicht einfach mal deine Deskriptoren? Was sagt den USBView zu einem Gerät? Und von welchen anderen Tabellen redest du? Thomas
db $05, $0C ; Usage Page (Consumer) db $09, $01 ; Usage (General Consumer Device) db $A1, $01 ; Collection (Application) db $15, $00 ; logical minimum (0) db $25, $01 ; logical maximum (1) db $75, $01 ; Report Size (1) db $95, $01 ; report count (1) db $09, $B8 ; Usage (Eject) db $81, $06 ; Input (Data, Variable, Relative) db $09, $E9 ; Usage (Volume Increment) db $81, $02 ; Input db $09, $EA ; Usage (Volume Decrement) db $81, $02 ; Input db $09, $E2 ; Usage (Mute) db $81, $06 ; Input db $09, $CD ; Usage (Play/Pause) db $81, $06 ; Input db $09, $B5 ; Usage (Scan Next Track) db $81, $06 ; Input db $09, $B6 ; Usage (Scan Previous Track) db $81, $06 ; Input db $09, $B3 ; Usage (Fast Forward) db $81, $22 ; Input db $09, $B4 ; Usage (Rewind) db $81, $22 ; Input db $09, $B7 ; Usage (Stop) db $81, $06 ; Input db $C0 ; End Collection
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.