Forum: Mikrocontroller und Digitale Elektronik USB HID Descriptor Spotify-Steuerung STM32


von Ferdinand B. (ferry)


Lesenswert?

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
von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

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

von Clemens L. (c_l)


Lesenswert?


von Pit (Gast)


Lesenswert?

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

von Guido Körber (Gast)


Lesenswert?

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.

von Ferdinand B. (ferry)


Angehängte Dateien:

Lesenswert?

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

von Thomas (Gast)


Lesenswert?

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

von Guido Körber (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.