2016-04-20 30 views
1

Ich versuche, einen HID-Berichtsdeskriptor für USB 3.0 mit einer Berichtanzahl von 1024 Bytes zu erstellen. Die Dokumentation auf USB.org für HID scheint keine zwei Byte Berichtanzahl zu erwähnen. Dennoch habe ich einige Leute 0x96 verwenden gesehen (statt 0x95) eine Zwei-Byte-Zählung zu geben, wie zum Beispiel:Zwei-Byte-Bericht Anzahl für versteckte Bericht-Deskriptor

0x96, 0x00, 0x02, // REPORT_COUNT (512)

, die sich von hier genommen wurde: Custom HID device HID report descriptor

In diesem Beispiel wird 0x26 für ein logisches 2-Byte-Maximum verwendet.

Meine Frage: Woher kam dieses Feld 0x96 und 0x26? Ich sehe keine Dokumentation dafür.

Dank

Antwort

1

REPORT_COUNT im Device Class Definition for HID 1.11 Dokument in Abschnitt 6.2.2.7 Globale Artikel auf Seite definiert ist 36, wie:

Report Count 1001 01 nn Unsigned integer specifying the number of data 
         fields for the item; determines how many fields are included in the 
         report for this particular item (and consequently how many bits are 
         added to the report). 

Die nn in dem obigen Code ist das Element Längenindikator (bSize) und ist bereits in Abschnitt definiert. 6.2.2.2 Short Items wie:

bSize Numeric expression specifying size of data: 
     0 = 0 bytes 
     1 = 1 byte 
     2 = 2 bytes 
     3 = 4 bytes 

Eher verwirrend, die gültigen Werte von bSize sind in Dezimal aufgelistet. Also, in binär, die Bits für nn wäre:

00 = 0 bytes (i.e. there is no data associated with this item) 
01 = 1 byte 
10 = 2 bytes 
11 = 4 bytes 

Dass sie alle zusammen für REPORT_COUNT, die eine ganze Zahl ohne Vorzeichen ist, könnten folgende Alternativen angegeben werden:

1001 01 00 = 0x94 = REPORT_COUNT with no length (can only have value 0?) 
1001 01 01 = 0x95 = 1-byte REPORT_COUNT (can have a value from 0 to 255) 
1001 01 10 = 0x96 = 2-byte REPORT_COUNT (can have a value from 0 to 65535) 
1001 01 11 = 0x97 = 4-byte REPORT_COUNT (can have a value from 0 to 4294967295) 

Ähnlich für LOGICAL_MAXIMUM, die eine vorzeichenbehaftete Ganzzahl ist (in der Regel gibt es eine Ausnahme):

0010 01 00 = 0x24 = LOGICAL_MAXIMUM with no length (can only have value 0?) 
0010 01 01 = 0x25 = 1-byte LOGICAL_MAXIMUM (can have a values from -128 to 127) 
0010 01 10 = 0x26 = 2-byte LOGICAL_MAXIMUM (can have a value from -32768 to 32767) 
0010 01 11 = 0x27 = 4-byte LOGICAL_MAXIMUM (can have a value from -2147483648 to 2147483647) 

Die Spezifikation ist unklar, Welchen Wert ein Element der Länge Null im Allgemeinen hat. Er erwähnt nur am Ende des Abschnitts 6.2.2.4 Haupt Artikel, dass MAIN Elementtypen und innerhalb dieser Art, INPUT Element-Tags, einen Standardwert von 0 haben:

Remarks - The default data value for all Main items is zero (0). 
     - An Input item could have a data size of zero (0) bytes. In this case the value of 
      each data bit for the item can be assumed to be zero. This is functionally 
      identical to using a item tag that specifies a 4-byte data item followed by four 
      zero bytes. 

Es wäre vernünftig, nehme auch 0 als Standard für andere Elementtypen an, aber für REPORT_COUNT (ein GLOBAL-Element) ist ein Wert von 0 nicht wirklich ein vernünftiger Standardwert (IMHO). Die Spezifikation sagt nicht wirklich.

+0

Große Antwort. Vielen Dank! – itsallgood

+1

Nicht spezifizierte Zero-Size-Objekte werden vom Windows-HID-Parser nicht akzeptiert (obwohl sie unter Mac OS, iOS und Linux funktionieren). – Nipo