Partager via


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.

Note Pour WinUSB, n’utilisez pas MaximumTransferSize pour déterminer la taille maximale d’un transfert USB. Utilisez plutôt la valeur MAXIMUM_TRANSFER_SIZE récupérée par WinUsb_GetPipePolicy.
 

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.
Dans l’exemple précédent, la valeur reçue dans MaximumPacketSize est de 3 072 octets (Total des transactions * wMaxPacketSize). Étant donné que Interval est 1, la période d’interrogation est 1. Ainsi, le contrôleur hôte peut transférer 3 072 octets dans chaque microframe d’une image. Dans une seule demande d’E/S (décrite dans un seul URB), le contrôleur hôte ne peut pas transférer plus de 24 576 octets.

Configuration requise

Condition requise Valeur
En-tête usb.h (inclure Usb.h)

Voir aussi

USB Structures

USB_ENDPOINT_DESCRIPTOR