USB HID Descriptor Spotify-Steuerung STM32

#5689680
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
Gast #5690041
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
Angehängte Dateien:
Gast #5691381
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.
#5696228
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
Angehängte Dateien:
Gast #5697284
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

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