USBD_PIPE_INFORMATION-Struktur (usb.h)

Die USBD_PIPE_INFORMATION-Struktur wird von USB-Clienttreibern verwendet, um Informationen zu einer Pipe von einer bestimmten Schnittstelle aufzunehmen.

Syntax

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;

Member

MaximumPacketSize

Gibt die maximale Paketgröße in Bytes an, die diese Pipe verarbeitet. Dieser Wert muss kleiner oder gleich dem Wert von wMaxPacketSize im Endpunktdeskriptor sein. Der USB-Stapel ignoriert diesen Wert, wenn das flag USBD_PF_CHANGE_MAX_PACKET im PipeFlags-Element nicht festgelegt ist.

Bei isochronen Hochgeschwindigkeitsendpunkten enthält der empfangene MaximumPacketSize-Wert die Anzahl von Bytes, die in zusätzlichen Transaktionen übertragen werden können, sofern sie vom Endpunkt unterstützt werden. Weitere Informationen finden Sie in den Hinweisen.

EndpointAddress

Gibt die Busadresse für diese Pipe an.

Interval

Enthält das Abfrageintervall, das durch das Feld bInterval im entsprechenden Endpunktdeskriptor (USB_ENDPOINT_DESCRIPTOR) angegeben wird. Dieser Wert ist nur für Interrupt- und isochrone Pipes gültig. Bei anderen Pipetypen sollte dieser Wert ignoriert werden. Es spiegelt die Konfiguration des Geräts in der Firmware wider. Treiber können sie nicht ändern.

Das Abrufintervall bestimmt zusammen mit der Geschwindigkeit des Geräts und dem Typ des Hostcontrollers die Häufigkeit, mit der der Treiber eine Übertragung initiieren soll. Der Wert in Interval stellt keinen festen Zeitraum dar. Es handelt sich um einen relativen Wert, und die tatsächliche Abrufhäufigkeit hängt auch davon ab, ob das Gerät und der USB-Hostcontroller mit niedriger, voller oder hoher Geschwindigkeit arbeiten.

Wenn entweder der Hostcontroller oder das Gerät mit niedriger Geschwindigkeit arbeitet, wird der Zeitraum zwischen übertragungen (auch als "Abrufzeitraum" bezeichnet) in Einheiten von 1 Millisekundenframes gemessen, und der Zeitraum hängt mit dem Wert in Interval zusammen, wie in der folgenden Tabelle angegeben:

Intervall Abfragezeitraum (1 Millisekundenrahmen) Interrupt Isochronen
0 bis 15 8 Unterstützt. Wird nicht unterstützt.
16 bis 35 16 Unterstützt. Wird nicht unterstützt.
36 bis 255 32 Unterstützt. Wird nicht unterstützt.
 

Für Geräte und Hostcontroller, die mit voller Geschwindigkeit arbeiten können, wird der Zeitraum in Einheiten von 1 Millisekundenframes gemessen. Bei isochronen Übertragungen mit voller Geschwindigkeit ist der Wert Intervall und der Abrufzeitraum immer 1. Dieser Wert gibt an, dass Daten in jedem Frame übertragen werden können. Bei Interruptübertragungen mit voller Geschwindigkeit wird der Abrufzeitraum vom Wert Interval abgeleitet. In der folgenden Tabelle sind die unterstützten Werte für Interrupt- und isochrone Endpunkte angegeben.

Intervall Abfragezeitraum (1 Millisekundenrahmen) Interrupt Isochronen
1 1 Unterstützt. Unterstützt.
2 bis 3 2 Unterstützt. Wird nicht unterstützt.
4 bis 7 4 Unterstützt. Wird nicht unterstützt.
8 bis 15 8 Unterstützt. Wird nicht unterstützt.
16 bis 31 16 Unterstützt. Wird nicht unterstützt.
32 bis 255 32 Unterstützt. Wird nicht unterstützt.
 

Bei Geräten und Hostcontrollern, die mit hoher Geschwindigkeit arbeiten können, wird der Zeitraum in Einheiten von Microframes gemessen. Der Abfragezeitraum wird mithilfe der Formel Polling period = 2 ** (Interval - 1)vom Wert Interval abgeleitet. Die berechneten Werte sind in der folgenden Tabelle angegeben:

Intervall Abfragezeitraum (Microframes) Interrupt Isochronen
1 1 Unterstützt. Unterstützt.
2 2 Unterstützt. Unterstützt.
3 4 Unterstützt. Unterstützt.
4 8 Unterstützt. Unterstützt.
5 16 Unterstützt. Wird nicht unterstützt.
6 bis 255 32 Unterstützt. Wird nicht unterstützt.
 

Die unterstützten Abrufperioden für isochrone Hochgeschwindigkeitsübertragungen sind 1, 2, 4 und 8. Wenn ein Clienttreiber eine URB_FUNCTION_ISOCH_TRANSFER Anforderung für einen isochronen Hochgeschwindigkeitsendpunkt mit einem Abrufzeitraum von mehr als 8 sendet, schlägt die Anforderung mit status USBD_STATUS_INVALID_PARAMETER fehl. Informationen zu isochronen Übertragungen finden Sie unter Übertragen von Daten an isochrone USB-Endpunkte.

Die Zuordnungen in den vorherigen Tabellen zwischen Zeiträumen und Abrufintervallen sind in Microsoft Windows 2000 und höheren Versionen des Windows-Betriebssystems gültig.

PipeType

Gibt an, welche Art von Übertragungen diese Pipe verwendet. Diese Werte werden in der USBD_PIPE_TYPE-Enumeration definiert.

PipeHandle

Gibt ein undurchsichtiges Handle für die Bulk- oder Interruptpipe an. Der Hostcontrollertreiber gibt dieses Handle zurück, wenn der Clienttreiber die Gerätekonfiguration mit einer URB vom Typ URB_FUNCTION_SELECT_CONFIGURATION oder wenn der Clienttreiber die Einstellungen für eine Schnittstelle mit einer URB vom Typ URB_FUNCTION_SELECT_INTERFACE ändert.

MaximumTransferSize

Gibt die maximale Größe für eine Übertragungsanforderung für diese Pipe in Bytes an. In Windows Server 2003, Windows XP und höheren Betriebssystemen wird dieser Member nicht verwendet und enthält keine gültigen Daten.

Informationen zu den maximalen Übertragungsgrößen jedes USB-Endpunkttyps in verschiedenen Versionen von Windows finden Sie unter USB-Übertragung und Paketgrößen.

Hinweis Verwenden Sie für WinUSB nicht MaximumTransferSize , um die maximale Größe einer USB-Übertragung zu bestimmen. Verwenden Sie stattdessen den von WinUsb_GetPipePolicy abgerufenen MAXIMUM_TRANSFER_SIZE Wert.
 

PipeFlags

Enthält ein bitweises OR mit Pipeflags, mit denen der Treiber bestimmte konfigurierbare Eigenschaften der Pipe angeben kann. Der Treiber gibt diese Pipeeigenschaften an, wenn er die Konfiguration eines USB-Geräts mit einer URB-Anforderung auswählt, dessen Funktionstyp URB_FUNCTION_SELECT_CONFIGURATION ist.

In der folgenden Tabelle wird die Bedeutung der einzelnen Pipeflags erläutert:

Flagname Bedeutung
USBD_PF_CHANGE_MAX_PACKET Gibt an, dass der Treiber die maximale Paketgröße des Endpunkts mit dem in MaximumPacketSize angegebenen Wert überschreibt. Dieser Wert muss kleiner oder gleich dem im Endpunktdeskriptor der Pipe angegebenen Standardmaximum sein.

Hinweise

Diese Struktur enthält Informationen für einen Endpunkt, die aus dem Schnittstellendeskriptor des Geräts abgerufen werden. Eine Erklärung zum Abrufen der Informationen in USBD_PIPE_INFORMATION aus dem Schnittstellendeskriptor finden Sie unter Auswählen einer Konfiguration für ein USB-Gerät.

Der MaximumPacketSize-Wert wird von den ersten 11 Bits des wMaxPacketSize-Felds des Endpunktdeskriptors abgeleitet, was die maximale Anzahl von Bytes angibt, die der Hostcontroller an den Endpunkt in einer einzelnen Transaktion senden oder von diesem empfangen kann.

Bei Hochgeschwindigkeitsübertragungen sendet oder empfängt der Hostcontroller in der Regel eine Transaktion pro Microframe. Hochgeschwindigkeits-Endpunkte, isochrone Oder Interrupt-Endpunkte mit hoher Bandbreite unterstützen jedoch höhere Datenraten durch zusätzliche Transaktionen. Dadurch kann der Hostcontroller bis zu 3072 Bytes in einem einzelnen Microframe übertragen. Die Anzahl der zusätzlichen Transaktionen, die von diesem Endpunkttyp unterstützt werden, wird durch bits 12...11 von wMaxPacketSize angegeben (das geringste signifikante Bit ist 0). Diese Zahl kann 0, 1 oder 2 sein. Wenn 12..11 0 angibt, werden zusätzliche Transaktionen pro Microframe vom Endpunkt nicht unterstützt. Wenn die Zahl 1 ist, kann der Hostcontroller eine zusätzliche Transaktion senden (insgesamt zwei Transaktionen pro Microframe); 2 gibt zwei zusätzliche Transaktionen an (insgesamt drei Transaktionen pro Microframe).

Der wert, der in MaximumPacketSize für einen isochronen Endpunkt (Hochgeschwindigkeits- und hohe Bandbreite) empfangen wird, gibt die Gesamtzahl der Bytes an, die der Hostcontroller an den Endpunkt in einem Mikroframe senden oder empfangen kann. Der Wert enthält die Anzahl von Bytes in zusätzlichen Transaktionen, wenn sie vom Endpunkt unterstützt werden. Betrachten Sie beispielsweise die folgenden isochronen Endpunktmerkmale:

  • wMaxPacketSize ist 1.024
  • Bits 12...11 zeigen 2 an
  • Intervall ist 1.
Im vorherigen Beispiel beträgt der in MaximumPacketSize empfangene Wert 3.072 Bytes (Gesamttransaktionen * wMaxPacketSize). Da Intervall 1 ist, ist der Abrufzeitraum 1. Daher kann der Hostcontroller 3.072 Bytes in jedem Mikroframe eines Frames übertragen. In einer einzelnen E/A-Anforderung (in einer URB beschrieben) kann der Hostcontroller nicht mehr als 24.576 Bytes übertragen.

Anforderungen

Anforderung Wert
Header usb.h (einschließlich Usb.h)

Weitere Informationen

USB-Strukturen

USB_ENDPOINT_DESCRIPTOR