次の方法で共有


USBD_PIPE_INFORMATION構造体 (usb.h)

USBD_PIPE_INFORMATION 構造体は、特定のインターフェイスからのパイプに関する情報を保持するために USB クライアント ドライバーによって使用されます。

構文

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;

メンバーズ

MaximumPacketSize

このパイプが処理する最大パケット サイズをバイト単位で指定します。 この値は、エンドポイント記述子 wMaxPacketSize の値以下である必要があります。 PipeFlags メンバーでUSBD_PF_CHANGE_MAX_PACKET フラグが設定されていない場合、USB スタックはこの値を無視します。

高速等時性エンドポイントの場合、受信した MaximumPacketSize 値には、追加のトランザクションで転送できるバイト数が含まれます (エンドポイントでサポートされている場合)。 詳細については、「解説」を参照してください。

EndpointAddress

このパイプのバス アドレスを指定します。

Interval

対応するエンドポイント記述子 (USB_ENDPOINT_DESCRIPTOR) の bInterval フィールドで示されるポーリング間隔を格納します。 この値は、割り込みパイプと等時パイプに対してのみ有効です。 他の種類のパイプの場合、この値は無視する必要があります。 ファームウェアにデバイスの構成が反映されます。 ドライバーは変更できません。

ポーリング間隔は、デバイスの速度とホスト コントローラーの種類と共に、ドライバーが転送を開始する頻度を決定します。 間隔 の値は、一定の時間を表していません。 これは相対値であり、実際のポーリング頻度は、デバイスと USB ホスト コントローラーが低速、完全、高速のいずれで動作するかによっても異なります。

ホスト コントローラーまたはデバイスのいずれかが低速で動作する場合、転送間の期間 ("ポーリング期間" とも呼ばれます) は 1 ミリ秒フレーム単位で測定され、期間は次の表に示すように 間隔 の値に関連します。

ポーリング期間 (1 ミリ秒フレーム) 割り込む 等時性
0 ~ 15 8 サポート。 サポートされていません。
16 から 35 16 サポート。 サポートされていません。
36 から 255 32 サポート。 サポートされていません。
 

全速度で動作できるデバイスとホスト コントローラーの場合、期間は 1 ミリ秒フレーム単位で測定されます。 全速等時転送の場合、Interval 値とポーリング期間は常に 1 です。 この値は、すべてのフレームでデータを転送できることを示します。 全速割り込み転送の場合、ポーリング期間は Interval 値から派生します。 次の表は、割り込みエンドポイントと等時性エンドポイントでサポートされている値を示しています。

ポーリング期間 (1 ミリ秒フレーム) 割り込む 等時性
1 1 サポート。 サポート。
2 ~ 3 2 サポート。 サポートされていません。
4 ~ 7 4 サポート。 サポートされていません。
8 ~ 15 8 サポート。 サポートされていません。
16 から 31 16 サポート。 サポートされていません。
32 から 255 32 サポート。 サポートされていません。
 

高速で動作できるデバイスとホスト コントローラーの場合、期間はマイクロフレーム単位で測定されます。 ポーリング期間は、数式 Polling period = 2 ** (Interval - 1)を使用して、間隔 値から派生します。 計算値を次の表に示します。

ポーリング期間 (マイクロフレーム) 割り込む 等時性
1 1 サポート。 サポート。
2 2 サポート。 サポート。
3 4 サポート。 サポート。
4 8 サポート。 サポート。
5 16 サポート。 サポートされていません。
6 ~ 255 32 サポート。 サポートされていません。
 

高速等時転送でサポートされるポーリング期間は、1、2、4、8 です。 クライアント ドライバーがポーリング期間が 8 を超える高速等時性エンドポイントのURB_FUNCTION_ISOCH_TRANSFER要求を送信した場合、要求は状態USBD_STATUS_INVALID_PARAMETERで失敗します。 等時性転送の詳細については、「USB 等時性エンドポイントにデータを転送する方法」を参照してください。

期間とポーリング間隔の間の前の表のマッピングは、Microsoft Windows 2000 以降のバージョンの Windows オペレーティング システムで有効です。

PipeType

このパイプで使用する転送の種類を指定します。 これらの値は、USBD_PIPE_TYPE 列挙型で定義されます。

PipeHandle

バルクパイプまたは割り込みパイプへの不透明ハンドルを指定します。 ホスト コントローラー ドライバーは、クライアント ドライバーが URB の種類がURB_FUNCTION_SELECT_CONFIGURATIONのデバイス構成を選択した場合、またはクライアント ドライバーが URB の種類がURB_FUNCTION_SELECT_INTERFACEインターフェイスの設定を変更したときに、このハンドルを返します。

MaximumTransferSize

このパイプの転送要求の最大サイズをバイト単位で指定します。 Windows Server 2003、Windows XP 以降のオペレーティング システムでは、このメンバーは使用されず、有効なデータは含まれません。

さまざまなバージョンの Windows における各種類の USB エンドポイントの最大転送サイズについては、「USB 転送とパケット サイズの」を参照してください。

WinUSB の場合、USB 転送の最大サイズを決定するために MaximumTransferSize 使用しないでください。 代わりに、WinUsb_GetPipePolicyによって取得されたMAXIMUM_TRANSFER_SIZE値を使用します。
 

PipeFlags

ドライバーがパイプの構成可能な特定の特性を指定するために使用できるパイプ フラグのビットごとの OR が含まれています。 ドライバーは、関数の種類がURB_FUNCTION_SELECT_CONFIGURATION URB 要求を持つ USB デバイスの構成を選択するときに、これらのパイプの特性を指定します。

次の表では、各パイプ フラグの意味について説明します。

フラグ名 意味
USBD_PF_CHANGE_MAX_PACKET ドライバーが、MaximumPacketSize で指定された値でエンドポイントの最大パケット サイズオーバーライドしていることを示します。 この値は、パイプのエンドポイント記述子で指定された既定の最大値以下である必要があります。

備考

この構造体には、デバイスのインターフェイス記述子から取得されたエンドポイントの情報が含まれています。 インターフェイス記述子から USBD_PIPE_INFORMATION の情報を取得する方法については、「USB デバイスの構成を選択する方法」を参照してください。

MaximumPacketSize 値は、エンドポイント記述子の wMaxPacketSize フィールドの最初の 11 ビットから派生します。これは、ホスト コントローラーが 1 つのトランザクションでエンドポイントとの間で送受信できる最大バイト数を示します。

通常、高速転送の場合、ホスト コントローラーはマイクロフレームごとに 1 つのトランザクションを送受信します。 ただし、高速、高帯域幅等時性または割り込みエンドポイントでは、追加のトランザクションを通じてより高いデータ レートがサポートされます。 これにより、ホスト コントローラーは 1 つのマイクロフレームで最大 3072 バイトを転送できます。 その種類のエンドポイントでサポートされる追加トランザクションの数は、wMaxPacketSize のビット 12..11 示されます (下位ビットは 0)。 この数値には、0、1、または 2 を指定できます。 12..11 0 を示す場合、マイクロフレームあたりの追加トランザクションはエンドポイントではサポートされません。 数値が 1 の場合、ホスト コントローラーは追加のトランザクション (マイクロフレームあたり 2 つのトランザクションの合計) を送信できます。2 は、2 つの追加トランザクション (マイクロフレームあたり 3 つのトランザクションの合計) を示します。

等時性エンドポイント (高速および高帯域幅) の MaximumPacketSize で受信される値は、ホスト コントローラーがエンドポイントとの間で送受信できる合計バイト数を 1 つのマイクロフレームで示します。 エンドポイントでサポートされている場合、値には追加のトランザクションのバイト数が含まれます。 たとえば、次の等時性エンドポイントの特性を考えてみましょう。

  • wMaxPacketSize は 1,024 です
  • ビット 12..11 は 2 を示します
  • 間隔 は 1 です。
前の例では、MaximumPacketSize で受け取る値は 3,072 バイトです (トランザクションの合計 * wMaxPacketSize)。 間隔 は 1 であるため、ポーリング期間は 1 です。 したがって、ホスト コントローラーは、フレームの各マイクロフレームで 3,072 バイトを転送できます。 1 つの I/O 要求 (1 つの URB で説明) では、ホスト コントローラーは 24,576 バイト以下を転送できます。

必要条件

要件 価値
ヘッダー usb.h (Usb.h を含む)

関連項目

USB 構造体

USB_ENDPOINT_DESCRIPTOR