Tab. 11-22 USB: HID Items
INPUT 80 81 xx 82 xxxx Main
OUTPUT 91 xx 92 xxxx Main
FEATURE B1 xx B2 xxxx Main
INPUT, OUTPUT und FEATURE sind Data-Type Main Items und legen Datenfelder für Reports an: für Eingabedaten (Tastenposition, Messwert), Ausgabedaten (LEDs) und Parameter-Informationen.
Gemeinsame Struktur
Bit 0 0 Data Report-Felder enthalten Variable und können vom Empfänger gelesen und beschrieben werden
1 Constant Report-Felder können vom Empfänger nur gelesen werden
Bit 1 0 Array Report-Felder enthalten je einen Index
1 Variable Report-Felder enthalten pro Feld den Zustand eines einzelnen Bedienelements oder einer Gruppe
Bit 2 0 Absolute Felder mit absoluten, auf einen Nullwert bezogenen Daten (Grafik-Tablett)
1 Relative Felder mit differentiellen Werten (Maus)
Bit 3 0 No Wrap mit Anschlag (Potentiometer)
1 Wrap ohne Anschlag (Positionsgeber)
Bit 4 0 Linear Linearer Zusammenhang zwischen Messwert und gelieferten Daten (unverarbeitet oder skaliert)
1 Non Linear Daten nichtlinear vorverarbeitet
Bit 5 0 Preferred State Bedienelement hat Ruheposition (Taste, Joystick)
1 No Preferred Bedienelement hat keine Ruheposition (Schalter, Potentiometer)
Bit 6 0 No Null Position Bedienelement sendet immer gültige Daten
1 Null State Bedienelement hat Position oder Zustand, in dem es einen ungültigen Minimalwert sendet.
Bit 7 0 Non Volatile Nicht flüchtig
1 Volatile Flüchtig
Bit 8 0 Bit Field Beliebige Datenstruktur
1 Buffered Bytes Daten werden nicht numerisch ausgewertet. Struktur muss Byte-Grenzen beachten. Inhalt wird von Applikation interpretiert (Strichcode)
Bemerkungen:
  • Bei Arrays haben nur Bits 0, 1 und 2 Bedeutung
  • Die Feldgröße wird durch vorher definierte Report Size s und Report Count c bestimmt (c Felder mit je s bit)
  • Arrays definieren Indizes. Wert 0 sollte reserviert sein für "keine Betätigung"
  • Daten können übertragen werden über Control Transfers mit den Requests GET_REPORT und SET_REPORT oder über Interrupt Transfers (vorzugsweise INPUT über Interrupt, OUTPUT und FEATURE über SET_REPORT)
COLLECTION A1 xx Main
Stellt eine Beziehung her zwischen nachfolgenden INPUT, OUTPUT und FEATURE Feldern. Verschachtelte Collections sind möglich.
xx = 00 Physical Satz von Daten-Items, die mit einem geometrischen Punkt verbunden sind (Sensoren mit mehreren Messgrößen)
xx = 01 Application Fasst Daten-Items einer Funktionseinheit zusammen (Collection Maus aus Feldern für Bewegung und Tasten) oder trennt sie (2 Collections für Tastatur mit integrierter Rollkugel)
xx = 02 Logical Satz von Daten-Items bilden eine gemeinsame Struktur (Länge und Inhalt eines Blocks)
USAGE PAGE 05 xx Global
Enthält den höherwertigen Teil einer Usage (16 von 32 bit)
xx= 01 Generic Desktop Page
xx= 02 Simulation Controls Page
xx= 03 VR Controls Page
xx= 04 Sport Controls Page
xx= 05 Game Controls Page
xx= 07 Keyboard / Keypad Page
xx= 08 LED Page
xx= 09 Button Page
xx= 0A Ordinal Page
xx= 0B Telephony Device Page
xx= 0C Consumer Page
xx= 0D Digitizers
xx= 10 Unicode Page
xx= 14 Alphanumeric Display Page
LOGICAL MINIMUM 15 xx 16 xxxx Global
LOGICAL MAXIMUM 25 xx 26 xxxx Global
Zwischen diesen beiden Grenzen bewegen sich die erlaubten logischen Werte für die späteren Nutzdaten.
Beispiel Maus: Log.Min. 0 xx= 00
Log.Max. 128 xx= 80
PHYSICAL MINIMUM 35 xx 36 xxxx Global
PHYSICAL MAXIMUM 45 xx 46 xxxx Global
Grenzen für die erlaubten physikalischen Werte.
Physical = Logical * Unit
UNIT EXPONENT 54 55 xx Global
Code xx 0 1 2 3 4 5 6 7 8 9 A B C D E F
Exponent 0 1 2 3 4 5 6 7 -8 -7 -6 -5 -4 -3 -2 -1
UNIT 64 65 xx 66 xxxx Global
Der Parameterteil besteht aus maximal 4 Byte (= 8 Nibble)
Nibble 0 definiert das zugrundeliegende Einheitensystem.
Nibble 1 .. 6 legen fest, in welcher Potenz eine bestimmte Grundeinheit in UNIT enthalten ist.
Nibble
7 6 5 4 3 2 1 0
0 UI Ui UT Ut Um UL SY
Lichtst. Strom Temp. Zeit Masse Länge System
Candela Ampere Kelvin Sekunde Gramm Zentimeter =1: SI Linear
Candela Ampere Kelvin Sekunde Gramm Radian =2: SI Rotation
Candela Ampere Fahr. Sekunde Slug Inch =3: Engl.Linear
Candela Ampere Fahr. Sekunde Slug Grad =4: Engl.Rotation
Die Codierung für die Potenzwerte ist die gleiche wie für UNIT EXPONENT.
Phys.Wert = Log.(Zähl-)Wert * Gesamteinheit * 10UNIT EXP
= Log.Wert * cmUL * gUm * sUt * KUT * AUi * cdUI * 10UE
Beispiele
Unit Unit Exp
Länge m 0 0 0 0 0 0 1 1 02
cm SI 102
Kraft m*kg/s2 0 0 0 0 E 1 1 1 05
s-2 g cm SI 105
REPORT COUNT 95 xx 96 xxxx 97 xxxxxxxx Global
Ein durch INPUT / OUTPUT angelegtes Feld für Nutzdaten wird in xx gleich lange Teilfelder aufgeteilt
REPORT SIZE 75 xx 76 xxxx 77 xxxxxxxx Global
xx= Länge eines Teilfeldes (vorzeichenlose ganze Zahl)
Beispiel:
Eine Tastatur mit 4 * 8 Tasten kann verschiedene Report-Strukturen verwenden:
Array: Teilfeld enthält Index
REPORT SIZE = 5 (zur Codierung von 1 aus 32)
REPORT COUNT = x (erlaubte gleichzeitig gedrückte Tasten)
Variable: Teilfeld enthält Zustände von 8 Tasten
REPORT SIZE = 8 (Tastenanzahl einer Matrixzeile)
REPORT COUNT = 4 (Tastenanzahl einer Matrixspalte)
REPORT ID 85 xx Global
xx = Report ID.
Wenn ein Gerät mehrere Reports mit unterschiedlichen Strukturen erzeugen kann, enthält das erste Byte eines Reports die Report ID, die einen Index für die Auswahl der Reportstruktur bestimmt.
Gibt es im Deskriptor nur eine Report-Struktur, entfällt das Report-ID.
Ein Report kann auch mehrere Reports mit gleicher ID enthalten.
PUSH A4 Global
Speichert eine Kopie der globalen Item-Zustandstabelle auf den Stack
POP B4 Global
Holt die letzte globale Item-Zustandstabelle vom Stack.
USAGE 05 xx 06 xxxx Local
= Usage ID (Zweiter Teil der 32 bit-Usage)
Tabelle einiger wichtiger Usages:
Usage Page xx = Usage ID Benennung
00 01 00 01 Generic Desktop Pointer
00 02 Mouse
00 04 Joystick
00 05 Game Pad
00 06 Keyboard
00 07 Keypad
00 02 00 01 Simulation Controls Flight Simulator
00 03 .. .. VR Controls ...
00 04 .. .. Sport Controls ...
00 05 .. .. Game Controls ...
00 07 00 00 Keyboard No Event
00 04 Keyboard a and A
00 05 Keyboard b and B
.. .. (s. gesonderte Tabelle...)
00 08 00 01 LED NumLock
00 02 CapsLock
00 03 ScrollLock
00 04 Compose
00 05 Kana
00 09 .. .. Button
00 0A .. .. Ordinal
00 0B .. .. Telephony Device
00 0C .. .. Consumer
00 0D 00 01 Digitizers Digitizer
00 02 Pen
00 03 Light Pen
00 04 Touch Screen
00 10 uu uu Unicode Unicode Character
00 14 Alphanumeric Display
USAGE MINIMUM 19 xx 1A xxxx Local
USAGE MAXIMUM 29 xx 2A xxxx Local
Erstes und letztes Usage des verwendeten Listenausschnitts
DESIGNATOR INDEX 39 xx Local
Legt zur Bedienung benutztes Körperteil fest. Index zeigt auf Designator im Physical Descriptor
DESIGNATOR MINIMUM 49 xx Local
DESIGNATOR MAXIMUM 59 xx Local
Index des ersten und letzten Designators eines Listenausschnitts
STRING INDEX 79 xx 2A xxxx Local
String Index für String Descriptor; ermöglicht Zuordnung eines Strings zu einem Item oder Bedienelement.
STRING MINIMUM 89 xx Local
STRING MAXIMUM 99 xx Local
Index des ersten und letzten Strings einer Gruppe
DELIMITER A9 xx Local
xx = 0 Close Set
xx = 1 Open Set
Definiert Anfang oder Ende einer Gruppe lokaler Items