共用方式為


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

包含輪詢間隔,以對應端點描述元中的 bInterval 字段表示, (USB_ENDPOINT_DESCRIPTOR) 。 這個值僅適用於中斷和連續管道。 針對其他類型的管道,應該忽略此值。 它會反映裝置在韌體中的組態。 驅動程式無法變更它。

輪詢間隔以及裝置的速度和主機控制器的類型,決定驅動程式應該起始傳輸的頻率。 Interval 中的值不代表固定的時間量。 它是相對值,而實際的輪詢頻率也會取決於裝置和USB主機控制器是否以低、完整或高速運作。

如果主機控制器或裝置以低速運作,則傳輸 (之間的時間週期也稱為「輪詢期間」) 是以 1 毫秒畫面為單位來測量,而期間與 Interval 中的值相關,如下表所示:

間隔 輪詢期間 (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)衍生自 Interval 值。 下表指出匯出值:

間隔 輪詢期間 (微框架) 中斷 同步
1 1 支援。 支援。
2 2 支援。 支援。
3 4 支援。 支援。
4 8 支援。 支援。
5 16 支援。 不支援。
6 到 255 32 支援。 不支援。
 

高速同步傳輸的支援輪詢期間為 1、2、4 和 8。 如果客戶端驅動程式提交高速非連續端點的URB_FUNCTION_ISOCH_TRANSFER要求,輪詢期間大於 8,則要求會失敗,狀態為 USBD_STATUS_INVALID_PARAMETER。 如需異時傳輸的相關信息,請參閱 如何將數據傳輸至USB異動端點

期間和輪詢間隔之間的上述數據表對應在 Microsoft Windows 2000 和更新版本的 Windows 操作系統中有效。

PipeType

指定此管道使用的傳輸類型。 這些值定義於 USBD_PIPE_TYPE 列舉中。

PipeHandle

指定大量或中斷管道的不透明句柄。 當用戶端驅動程式選取類型為 URB 的裝置組態 URB_FUNCTION_SELECT_CONFIGURATION時,或當用戶端驅動程式變更具有類型為 URB_FUNCTION_SELECT_INTERFACE 之 URB 的介面設定時,主機控制器驅動程式會傳回此句柄。

MaximumTransferSize

指定此管道上傳輸要求的大小上限,以位元組為單位。 在 Windows Server 2003、Windows XP 和更新版本的作業系統中,不會使用此成員,而且不包含有效的數據。

如需不同 Windows 版本中每種 USB 端點最大傳輸大小的資訊,請參閱 USB 傳輸和封包大小

注意 針對 WinUSB,請勿使用 MaximumTransferSize 來判斷 USB 傳輸的大小上限。 請改用 WinUsb_GetPipePolicy 擷取的MAXIMUM_TRANSFER_SIZE值。
 

PipeFlags

包含管線旗標的位 OR,驅動程式可用來指定管道的特定可設定特性。 當驅動程式選取 USB 裝置的組態時,驅動程式會指定這些管道特性,其函式類型為URB_FUNCTION_SELECT_CONFIGURATION的 URB 要求。

下表說明每個管道旗標的意義:

旗標名稱 意義
USBD_PF_CHANGE_MAX_PACKET 表示驅動程式會以 MaximumPacketSize 中指定的值覆寫端點最大封包大小。 此值必須小於或等於管道端點描述元中指定的預設最大值。

備註

這個結構包含從裝置介面描述元擷取之端點的資訊。 如需如何從介面描述元取得 USBD_PIPE_INFORMATION 資訊的說明,請參閱 如何選取USB裝置的組態

MaximumPacketSize 值衍生自端點描述元 wMaxPacketSize 字段的前 11 位,這表示主控制器可以在單一交易中傳送或接收的位元組數目上限。

一般而言,針對高速傳輸,主機控制器會傳送或接收每個微框架一筆交易。 不過,高速、高頻寬不連續或中斷端點可透過其他交易支援較高的數據速率。 這可讓主控制器在單一微框架中傳輸最多 3072 個字節。 該端點類型所支持的額外交易數目是由 wMaxPacketSize 的位 12..11 (最小有效位為 0) 。 該數位可以是 0、1 或 2。 如果 12..11 表示 0,端點不支援每個微框架的其他交易。 如果數位為 1,則主控制器可以傳送額外的交易 (每個微框架) 兩筆交易總數;2 表示每個微框架) 總共有三筆交易 (兩個額外的交易。

在 MaximumPacketSize 中針對非時序端點接收的值 (高速和高頻寬) 指出主控制器可以在一個微框架中傳送或接收端點的位元組總數。 如果端點支持這些位元組,此值就會包含其他交易中的位元元組數目。 例如,請考慮下列不連續的端點特性:

  • wMaxPacketSize 為 1,024
  • 12..11 表示2
  • 間隔 為 1。
在上述範例中, MaximumPacketSize 中收到的值為 3,072 個字節, (Total transactions * wMaxPacketSize) 。 因為 Interval 是 1,所以輪詢期間是 1。 因此,主控制器可以在框架的每個微框架中傳輸 3,072 個字節。 在一個 URB () 中所述的單一 I/O 要求中,主控制器無法傳輸超過 24,576 個字節。

規格需求

需求
標頭 usb.h (包含 Usb.h)

另請參閱

USB 結構

USB_ENDPOINT_DESCRIPTOR