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 の値以下である必要があります。 USBD_PF_CHANGE_MAX_PACKET フラグが PipeFlags メンバーに設定されていない場合、USB スタックはこの値を無視します。

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

EndpointAddress

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

Interval

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

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

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

Interval ポーリング期間 (1 ミリ秒のフレーム) 割り込み アイソクロナス
0 から 15 8 サポートされています。 サポートされていません。
16 から 35 16 サポートされています。 サポートされていません。
36 から 255 32 サポートされています。 サポートされていません。
 

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

Interval ポーリング期間 (1 ミリ秒のフレーム) 割り込み アイソクロナス
1 1 サポートされています。 サポートされています。
2 から 3 2 サポートされています。 サポートされていません。
4 から 7 4 サポートされています。 サポートされていません。
8 から 15 8 サポートされています。 サポートされていません。
16 から 31 16 サポートされています。 サポートされていません。
32 から 255 32 サポートされています。 サポートされていません。
 

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

Interval ポーリング期間 (マイクロフレーム) 割り込み アイソクロナス
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_FUNCTION_SELECT_CONFIGURATION 型の URB を持つデバイス構成を選択したとき、またはクライアント ドライバーが URB_FUNCTION_SELECT_INTERFACE 型の URB を持つインターフェイスの設定を変更したときに、このハンドルを返します。

MaximumTransferSize

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

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

メモ WinUSB の場合は、 MaximumTransferSize を使用して USB 転送の最大サイズを決定しないでください。 代わりに、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)。 Interval は 1 であるため、ポーリング期間は 1 です。 したがって、ホスト コントローラーは、フレームの各マイクロフレームで 3,072 バイトを転送できます。 1 つの I/O 要求 (1 つの URB で説明) では、ホスト コントローラーは 24,576 バイト以下を転送できます。

要件

要件
Header usb.h (Usb.h を含む)

こちらもご覧ください

USB 構造体

USB_ENDPOINT_DESCRIPTOR