Étape 3: Déterminer les descripteurs
La prochaine meilleure chose à faire après que vous avez déterminé le VID/PID consiste à identifier le descripteur de l’appareil. Un descripteur est une sorte de « palette » de ce que l’appareil peut faire et comment il veut transférer les données. En général, chaque périphérique possède un descripteur. Parfois, un appareil a plus d’un descripteur et vous pouvez choisir celui qui vous voulez mais sa pas terriblement communs si nous allons juste l’ignorer. Un moyen fantastique pour obtenir le descripteur sans avoir à écrire n’importe quel logiciel consiste à exécuter lsusb - vv sur un ordinateur linux. Nous n’avons pas trouvé d’équivalent pour Windows ou Mac, afin de trouver un ami avec un ordinateur Linux. (Essayez de l’outil « USB Prober » d’Apple pour Mac OS X).Voici la sortie de lsusb pour le moteur de NUI
Descripteur de périphérique :
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (défini au niveau de l’Interface)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x02b0
bcdDevice 1.05
iManufacturer 1 Microsoft
iProduct 2 Xbox NUI moteur
iSerial 0
bNumConfigurations 1
Descripteur de configuration :
bLength 9
bDescriptorType 2
wTotalLength 18
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Auto-alimenté
MaxPower 100mA
Descripteur de l’interface :
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 classe spécifique du vendeur
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
État du périphérique: 0 x 0000
(Alimenté par bus)
Nous allons voir ce que nous avons. Vous pouvez voir la VID et PID là-haut. Ensuite, nous regarderons bNumConfigurations (descripteurs différents combien nous avons) et heureusement pour nous le nombre est 1. Ensuite, Regardez le descripteur d’Interface en particulier, bNumEndpoints qui est 0. Autrement dit, qu'il n’y a aucun point de terminaison.
Points de terminaison sont un type d’USB « pipe de données » - il y a 4 types :
Points de terminaison en vrac sont pour transférer une grande quantité de données, comme un disque dur. C’est OK si cela prend un peu plus longtemps, mais nous voulons gros paquets. Ce point de terminaison ne va que dans un sens (donc à lire et à écrire que vous souhaiterez peut-être que deux)
Interrompre points de terminaison sont pour transférer de petites quantités de données très rapidement, comme pour une souris USB. Dans ce cas, l’appareil doit être sensible, donc nous voulons un mouvement rapide. Ce point de terminaison va seulement dans un seul sens
Points de terminaison isochrones sont pour transférer une quantité considérable de données où les données doivent apparaître dans le même temps, et si elle ne peut pas il devraient juste être supprimées. C’est pour des trucs comme l’Audio et la vidéo où le chronométrage est clé. Ce point de terminaison ne va que dans un sens (donc audio bidirectionnel pour casque et micro aurait deux EPs)
Points de terminaison de contrôle sont cette bizarre n’est pas tout à fait-un-point de sortie du Endpoint. Ils sont utilisés pour transférer de petites quantités de données pour dire mettre un appareil allumé ou éteint. Ils sont très « bon marchés » à développer, et chaque dispositif a une même si ce n’est pas mentionné.
Par exemple, un port série peut avoir deux points de terminaison d’interruption pour transférer des données dedans et dehors, puis un point de terminaison de contrôle pour le réglage du débit en bauds.
Pour plus de détails nous vraiment vous suggère de lire tout à lvr.com sur USB car c’est complexe.
Cet appareil moteur n’a aucun point de terminaison, mais qui ne signifie pas que vous ne pouvez pas communiquer avec lui. Cela signifie simplement qu’il utilise seulement un bidirectionnel de point de terminaison de contrôle. Ce n’est pas surprenant, les moteurs sont lents et ne nécessitent pas beaucoup de données au contrôle.
Comparez ceci au périphérique vidéo/caméra :
Descripteur de périphérique :
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (défini au niveau de l’Interface)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x02ae
bcdDevice 1. 0 b
iManufacturer 2 Microsoft
iProduct 1 Xbox NUI Camera
iSerial 3 A00366A08793039A
bNumConfigurations 1
Descripteur de configuration :
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Auto-alimenté
MaxPower 16mA
Descripteur de l’interface :
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 classe spécifique du vendeur
bInterfaceSubClass 255 sous-classe spécifique du vendeur
bInterfaceProtocol 255 protocole spécifique du vendeur
iInterface 0
Descripteur de point de terminaison :
bLength 7
bDescriptorType 5
bEndpointAddress 0 x 81 EP 1 IN
bmAttributes 1
Type de transfert isochrone
Synch tapez aucun
Données de Type d’utilisation
wMaxPacketSize 0x0bc0 2 x 960 octets
bInterval 1
Descripteur de point de terminaison :
bLength 7
bDescriptorType 5
bEndpointAddress 0 x 82 EP 2 IN
bmAttributes 1
Type de transfert isochrone
Synch tapez aucun
Données de Type d’utilisation
wMaxPacketSize 0x0bc0 2 x 960 octets
bInterval 1
Qualificateur d’appareil (pour les autre vitesse périphérique) :
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 0 (défini au niveau de l’Interface)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
bNumConfigurations 1
État du périphérique: 0 x 0001
Auto-alimenté
Cet appareil possède deux points de terminaison isochrones qui sont de type (données entrant dans l’ordinateur). C’est logique : le Kinect a une IR caméra de profondeur et une caméra VGA normale. Deux caméras, deux points de terminaison. Bien sûr, il y a aussi un point de terminaison de contrôle ne pas mentionné ici, le point de terminaison de contrôle pourrait être utilisée pour définir des trucs comme ouverture, correction gamma, toute sorte de filtre intégré, etc..