Stap 3: Bepaal de descriptoren
De volgende beste ding om te doen nadat u hebt vastgesteld dat de VID/PID is te identificeren van de "descriptor" van het apparaat. Een descriptor is een soort 'menu' van wat het apparaat kan doen en hoe graag het overbrengen van gegevens. In het algemeen, heeft elk apparaat een descriptor. Soms een apparaat heeft meer dan één descriptor en u kunt kiezen welke je maar zijn niet erg vaak, wilt dus we gaan gewoon om het te negeren. Een fantastische manier om de "descriptor" zonder te hoeven schrijven alle software is het uitvoeren van lsusb - vv op een linux computer. Hebben we niet een equivalent gevonden voor Windows of Mac, dus het vinden van een vriend met een Linux computer. (Probeer de "USB-Prober" tool van Apple voor Mac OS X).Hier is de output van lsusb voor de NUI Motor
Apparaat Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2,00
bDeviceClass 0 (Defined op Interface-niveau)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x02b0
bcdDevice 1.05
iManufacturer 1 Microsoft
iProduct 2 Xbox NUI Motor
iSerial 0
bNumConfigurations 1
Configuratie-Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 18
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Zelf aangedreven
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 Vendor specifieke klasse
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Apparaatstatus: 0x0000
(Bus-aangedreven)
Laten we eens kijken wat we hebben. Daarboven ziet u de VID en PID. Vervolgens zullen we kijken naar bNumConfigurations (hoeveel verschillende descriptoren we hebben) en gelukkig voor ons is het nummer 1. Vervolgens kijken naar de Interface-Descriptor in met name bNumEndpoints die is ingesteld op 0. Dit betekent dat er zijn geen eindpunten.
Eindpunten zijn een soort USB "gegevens pipe" - er zijn 4 soorten:
Bulk eindpunten zijn voor de overdracht van grote hoeveelheden gegevens, zoals een schijfstation. Het is OK als het duurt een beetje langer, maar we grote pakketten willen. Dit eindpunt gaat slechts in één richting (zo te lezen en schrijven dat zou je twee)
Onderbreken eindpunten zijn voor inbrengende kleine hoeveelheden gegevens zeer snel, zoals voor een USB-muis. In dit geval moet het apparaat worden responsieve zodat wij snelle beweging willen. Dit eindpunt gaat slechts in één richting
Isochrone eindpunten zijn voor het overbrengen van een behoorlijke hoeveelheid gegevens waar de gegevens moeten verschijnen op hetzelfde moment en als het niet het moeten gewoon worden geschrapt. Dit is voor dingen zoals Audio en Video waar timing is de sleutel. Dit eindpunt gaat slechts in één richting (dus bidirectionele audio voor hoofdtelefoon en microfoon twee EPs moeten zou)
Controle eindpunten zijn deze rare niet-vrij-an-Endpoint eindpunt. Ze worden gebruikt om te dragen kleine hoeveelheden gegevens te zeggen zet een apparaat in- of uitschakelen. Ze zijn erg 'goedkoop' te ontwikkelen, en elk apparaat heeft een zelfs als zijn niet vermeld.
Bijvoorbeeld, kan een seriële poort hebben twee eindpunten van de Interrupt voor gegevensoverdracht in en uit en vervolgens het eindpunt van een besturingselement voor het instellen van de baud-rate.
Voor meer informatie raden we echt alles op lvr.com over USB te lezen zoals het is complex.
Deze motor apparaat heeft geen eindpunten, maar dat betekent niet dat u niet kunt communiceren met het. Het betekent gewoon dat het alleen een bidirectionele controle eindpunt gebruikt. Dit is niet verrassend, motoren zijn traag en niet vergen veel van de gegevens te controleren.
Contrast dit naar de Video/Camera-apparaat:
Apparaat Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2,00
bDeviceClass 0 (Defined op Interface-niveau)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x02ae
bcdDevice 1.0b
iManufacturer 2 Microsoft
iProduct 1 Xbox NUI Camera
iSerial 3 A00366A08793039A
bNumConfigurations 1
Configuratie-Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Zelf aangedreven
MaxPower 16mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor specifieke klasse
bInterfaceSubClass 255 Vendor specifieke subklasse
bInterfaceProtocol 255 Vendor specifiek Protocol
iInterface 0
Eindpunt Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 1
Overdrachttype isochrone
Synch typt u geen
Type gebruiksgegevens
wMaxPacketSize 0x0bc0 2 x 960 bytes
bInterval 1
Eindpunt Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 1
Overdrachttype isochrone
Synch typt u geen
Type gebruiksgegevens
wMaxPacketSize 0x0bc0 2 x 960 bytes
bInterval 1
De kwalificatie van het apparaat (voor andere apparaatsnelheid):
bLength 10
bDescriptorType 6
bcdUSB 2,00
bDeviceClass 0 (Defined op Interface-niveau)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
bNumConfigurations 1
Apparaatstatus: 0x0001
Zelf aangedreven
Dit apparaat heeft twee isochrone eindpunten die allebei IN type (gegevens gaan op de computer). Dit is logisch: de Kinect heeft een IR diepte camera en een gewone VGA-camera. Twee camera's, twee eindpunten. Natuurlijk, er is ook het eindpunt van een besturingselement dat niet genoemd is hier, het eindpunt van het besturingselement kan worden gebruikt om dingen zoals diafragma, gammacorrectie, een soort van ingebouwd filter, enz.