structure USBD_PIPE_INFORMATION (usb.h)
La structure USBD_PIPE_INFORMATION est utilisée par les pilotes clients USB pour contenir des informations sur un canal à partir d’une interface spécifique.
Syntaxe
typedef struct _USBD_PIPE_INFORMATION {
USHORT MaximumPacketSize;
UCHAR EndpointAddress;
UCHAR Interval;
USBD_PIPE_TYPE PipeType;
USBD_PIPE_HANDLE PipeHandle;
ULONG MaximumTransferSize;
ULONG PipeFlags;
} USBD_PIPE_INFORMATION, *PUSBD_PIPE_INFORMATION;
Membres
MaximumPacketSize
Spécifie la taille de paquet maximale, en octets, que ce canal gère. Cette valeur doit être inférieure ou égale à la valeur de wMaxPacketSize dans le descripteur de point de terminaison. La pile USB ignore cette valeur si l’indicateur USBD_PF_CHANGE_MAX_PACKET n’est pas défini dans le membre PipeFlags .
Pour les points de terminaison isochrons haute vitesse, la valeur MaximumPacketSize reçue inclut le nombre d’octets pouvant être transférés dans des transactions supplémentaires, si le point de terminaison les prend en charge. Pour plus d'informations, consultez la section Notes.
EndpointAddress
Spécifie l’adresse de bus pour ce canal.
Interval
Contient l’intervalle d’interrogation, indiqué par le champ bInterval dans le descripteur de point de terminaison correspondant (USB_ENDPOINT_DESCRIPTOR). Cette valeur n’est valide que pour les canaux d’interruption et isochronous. Pour les autres types de canal, cette valeur doit être ignorée. Il reflète la configuration de l’appareil dans le microprogramme. Les pilotes ne peuvent pas le modifier.
L’intervalle d’interrogation, ainsi que la vitesse de l’appareil et le type de contrôleur hôte, déterminent la fréquence à laquelle le pilote doit lancer un transfert. La valeur dans Interval ne représente pas une durée fixe. Il s’agit d’une valeur relative, et la fréquence d’interrogation réelle dépend également si l’appareil et le contrôleur hôte USB fonctionnent à faible, plein ou haut débit.
Si le contrôleur hôte ou l’appareil fonctionne à faible vitesse, la période entre les transferts (également appelée « période d’interrogation ») est mesurée en unités de 1 milliseconde d’images, et la période est liée à la valeur dans Interval comme indiqué dans le tableau suivant :
Intervalle | Période d’interrogation (images de 1 milliseconde) | Interruption | Isochrone |
---|---|---|---|
0 à 15 | 8 | Pris en charge. | Non pris en charge. |
16 à 35 | 16 | Pris en charge. | Non pris en charge. |
36 à 255 | 32 | Pris en charge. | Non pris en charge. |
Pour les appareils et les contrôleurs hôtes qui peuvent fonctionner à pleine vitesse, la période est mesurée en unités de 1 milliseconde d’images. Pour les transferts isochroneuses à pleine vitesse, la valeur Interval et la période d’interrogation sont toujours 1. Cette valeur indique que les données peuvent être transférées dans chaque image. Pour les transferts d’interruption à pleine vitesse, la période d’interrogation est dérivée de la valeur Interval . Le tableau suivant indique les valeurs prises en charge pour les points de terminaison d’interruption et d’isochronisme.
Intervalle | Période d’interrogation (images de 1 milliseconde) | Interruption | Isochrone |
---|---|---|---|
1 | 1 | Pris en charge. | Pris en charge. |
2 à 3 | 2 | Pris en charge. | Non pris en charge. |
4 à 7 | 4 | Pris en charge. | Non pris en charge. |
8 à 15 | 8 | Pris en charge. | Non pris en charge. |
16 à 31 | 16 | Pris en charge. | Non pris en charge. |
32 à 255 | 32 | Pris en charge. | Non pris en charge. |
Pour les appareils et les contrôleurs hôtes qui peuvent fonctionner à grande vitesse, la période est mesurée en unités de microframes. La période d’interrogation est dérivée de la valeur Interval à l’aide de la formule Polling period = 2 ** (Interval - 1)
. Les valeurs calculées sont indiquées dans le tableau suivant :
Intervalle | Période d’interrogation (microframes) | Interruption | Isochrone |
---|---|---|---|
1 | 1 | Pris en charge. | Pris en charge. |
2 | 2 | Pris en charge. | Pris en charge. |
3 | 4 | Pris en charge. | Pris en charge. |
4 | 8 | Pris en charge. | Pris en charge. |
5 | 16 | Pris en charge. | Non pris en charge. |
6 à 255 | 32 | Pris en charge. | Non pris en charge. |
Les périodes d’interrogation prises en charge pour les transferts isochrons à grande vitesse sont 1, 2, 4 et 8. Si un pilote client envoie une demande de URB_FUNCTION_ISOCH_TRANSFER pour un point de terminaison isochronisé à grande vitesse avec une période d’interrogation supérieure à 8, la demande échoue avec status USBD_STATUS_INVALID_PARAMETER. Pour plus d’informations sur les transferts isochronieux, consultez How to Transfer Data to USB Isochronous Endpoints.
Les mappages dans les tables précédentes entre les périodes et les intervalles d’interrogation sont valides dans Microsoft Windows 2000 et les versions ultérieures du système d’exploitation Windows.
PipeType
Spécifie le type de transferts utilisé par ce canal. Ces valeurs sont définies dans l’énumération USBD_PIPE_TYPE .
PipeHandle
Spécifie un handle opaque pour le canal de bloc ou d’interruption. Le pilote du contrôleur hôte retourne ce handle lorsque le pilote client sélectionne la configuration de l’appareil avec un URB de type URB_FUNCTION_SELECT_CONFIGURATION ou lorsque le pilote client modifie les paramètres d’une interface avec un URB de type URB_FUNCTION_SELECT_INTERFACE.
MaximumTransferSize
Spécifie la taille maximale, en octets, d’une demande de transfert sur ce canal. Dans Windows Server 2003, Windows XP et les systèmes d’exploitation ultérieurs, ce membre n’est pas utilisé et ne contient pas de données valides.
Pour plus d’informations sur les tailles de transfert maximales de chaque type de point de terminaison USB dans différentes versions de Windows, consultez Transfert USB et tailles de paquets.
PipeFlags
Contient un or au niveau du bit d’indicateurs de canal que le pilote peut utiliser pour spécifier certaines caractéristiques configurables du canal. Le pilote spécifie ces caractéristiques de canal lorsqu’il sélectionne la configuration d’un périphérique USB avec une requête URB dont le type de fonction est URB_FUNCTION_SELECT_CONFIGURATION.
Le tableau suivant explique la signification de chaque indicateur de canal :
Nom de l’indicateur | Signification |
---|---|
USBD_PF_CHANGE_MAX_PACKET | Indique que le pilote remplace la taille maximale du paquet de point de terminaison par la valeur spécifiée dans MaximumPacketSize. Cette valeur doit être inférieure ou égale au maximum par défaut spécifié dans le descripteur de point de terminaison du canal. |
Remarques
Cette structure contient des informations pour un point de terminaison, récupérées à partir du descripteur d’interface de l’appareil. Pour obtenir des explications sur la façon d’obtenir les informations dans USBD_PIPE_INFORMATION à partir du descripteur d’interface, consultez Comment sélectionner une configuration pour un périphérique USB.
La valeur MaximumPacketSize est dérivée des 11 premiers bits du champ wMaxPacketSize du descripteur de point de terminaison, qui indique le nombre maximal d’octets que le contrôleur hôte peut envoyer ou recevoir à partir du point de terminaison dans une seule transaction.
En règle générale, pour les transferts à haut débit, le contrôleur hôte envoie ou reçoit une transaction par microframe. Toutefois, les points de terminaison à haute vitesse, à bande passante élevée ou aux interruptions prennent en charge des débits de données plus élevés par le biais de transactions supplémentaires. Cela permet au contrôleur hôte de transférer jusqu’à 3 072 octets dans un microframe unique. Le nombre de transactions supplémentaires prises en charge par ce type de point de terminaison est indiqué par les bits 12..11 de wMaxPacketSize (le bit le moins significatif est 0). Ce nombre peut être 0, 1 ou 2. Si 12..11 indique 0, les transactions supplémentaires par microframe ne sont pas prises en charge par le point de terminaison. Si le nombre est 1, le contrôleur hôte peut envoyer une transaction supplémentaire (deux transactions au total par microframe) ; 2 indique deux transactions supplémentaires (au total trois transactions par microframe).
La valeur reçue dans MaximumPacketSize pour un point de terminaison isochronieux (haute vitesse et bande passante élevée) indique le nombre total d’octets que le contrôleur hôte peut envoyer ou recevoir à partir du point de terminaison dans un microframe. La valeur inclut le nombre d’octets dans les transactions supplémentaires, si le point de terminaison les prend en charge. Par exemple, considérez les caractéristiques de point de terminaison isochronaises suivantes :
- wMaxPacketSize est 1 024
- Les bits 12..11 indiquent 2
- L’intervalle est 1.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | usb.h (inclure Usb.h) |