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 傳輸和封包大小。
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。
規格需求
需求 | 值 |
---|---|
標頭 | usb.h (包含 Usb.h) |