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 maximale des paquets, 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 isochrones à haute vitesse, la valeur MaximumPacketSize reçue inclut le nombre d’octets qui peuvent être transférés dans des transactions supplémentaires, si le point de terminaison les prend en charge. Pour plus d’informations, consultez Remarques.

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 d’isochrone. Pour les autres types de canal, cette valeur doit être ignorée. Elle 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 avec laquelle le pilote doit lancer un transfert. La valeur dans Intervalle 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 du fonctionnement de l’appareil et du contrôleur hôte USB à faible, pleine ou haute vitesse.

Si le contrôleur hôte ou l’appareil fonctionne à faible vitesse, la période de temps entre les transferts (également appelée « période d’interrogation ») est mesurée en unités de 1 millisecondes et la période est liée à la valeur dans Intervalle comme indiqué dans le tableau suivant :

Intervalle Période d’interrogation (images de 1 millisecondes) Interrompre Isochrone
0 à 15 8 Supporté. Non pris en charge.
16 à 35 16 Supporté. Non pris en charge.
36 à 255 32 Supporté. 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 millisecondes. Pour les transferts isochrones à pleine vitesse, l’intervalle valeur et la période d’interrogation est toujours 1. Cette valeur indique que les données peuvent être transférées dans chaque image. Pour les transferts d’interruptions à vitesse totale, 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 isochrones.

Intervalle Période d’interrogation (images de 1 millisecondes) Interrompre Isochrone
1 1 Supporté. Supporté.
2 à 3 2 Supporté. Non pris en charge.
4 à 7 4 Supporté. Non pris en charge.
8 à 15 8 Supporté. Non pris en charge.
16 à 31 16 Supporté. Non pris en charge.
32 à 255 32 Supporté. 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 intervalle de à 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) Interrompre Isochrone
1 1 Supporté. Supporté.
2 2 Supporté. Supporté.
3 4 Supporté. Supporté.
4 8 Supporté. Supporté.
5 16 Supporté. Non pris en charge.
6 à 255 32 Supporté. Non pris en charge.
 

Les périodes d’interrogation prises en charge pour les transferts isochroniques à 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 isochrone à grande vitesse avec une période d’interrogation supérieure à 8, la demande échoue avec l’état USBD_STATUS_INVALID_PARAMETER. Pour plus d’informations sur les transferts isochrones, consultez Comment transférer des données vers des points de terminaison isochronous USB.

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 transfert utilisé par ce canal. Ces valeurs sont définies dans l’énumération USBD_PIPE_TYPE.

PipeHandle

Spécifie un handle opaque vers 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, pour 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 les tailles de transfert et de paquets USB.

Remarque 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 ou plusieurs 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 du 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 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 du premier 11 bits du champ wMaxPacketSize du descripteur de point de terminaison, qui indique le nombre maximal d’octets auxquels le contrôleur hôte peut envoyer ou recevoir du point de terminaison dans une seule transaction.

En règle générale, pour les transferts à grande vitesse, le contrôleur hôte envoie ou reçoit une transaction par microframe. Toutefois, la vitesse élevée, les points de terminaison d’interruption ou d’isochronous à bande passante élevée 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’à 3072 octets dans un microframe unique. Le nombre de transactions supplémentaires prises en charge par ce type de point de terminaison est indiqué par bits 12..11 de wMaxPacketSize (le bit le moins significatif est 0). Ce nombre peut être égal à 0, 1 ou 2. Si 12..11 indiquent 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 (total de deux transactions 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 isochrone (haute vitesse et bande passante élevée) indique le nombre total d’octets auxquels 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 des transactions supplémentaires, si le point de terminaison les prend en charge. Par exemple, tenez compte des caractéristiques de point de terminaison isochrones suivantes :

  • wMaxPacketSize est de 1 024
  • Les bits 12..11 indiquent 2
  • intervalle est 1.
Dans l’exemple précédent, la valeur reçue dans MaximumPacketSize est de 3 072 octets (Nombre total de transactions * wMaxPacketSize). Étant donné que intervalle 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 trame. Dans une requête d’E/S unique (décrite dans un URB), le contrôleur hôte ne peut transférer pas plus de 24 576 octets.

Exigences

Exigence Valeur
d’en-tête usb.h (include Usb.h)

Voir aussi

structures USB

USB_ENDPOINT_DESCRIPTOR