USB_ENDPOINT_DESCRIPTOR 結構 (usbspec.h)

USB 用戶端驅動程式會使用 USB_ENDPOINT_DESCRIPTOR 結構來擷取 USB 定義的端點描述元。 此結構的成員會在 USB 文件庫提供的通用序列總線 3.1 規格中說明。 請參閱 9.6.6 節。

語法

typedef struct _USB_ENDPOINT_DESCRIPTOR {
  UCHAR  bLength;
  UCHAR  bDescriptorType;
  UCHAR  bEndpointAddress;
  UCHAR  bmAttributes;
  USHORT wMaxPacketSize;
  UCHAR  bInterval;
} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;

成員

bLength

指定這個描述元的長度,以位元組為單位。

bDescriptorType

指定描述項類型。 必須設定為 USB_ENDPOINT_DESCRIPTOR_TYPE。

bEndpointAddress

指定 USB 定義的端點位址。 四個低序位會指定端點編號。 高序位會指定此端點上的數據流方向:1 代表 in,0 用於 out。

bmAttributes

兩個低序位會指定端點類型、其中一個USB_ENDPOINT_TYPE_CONTROL、USB_ENDPOINT_TYPE_ISOCHRONOUS、USB_ENDPOINT_TYPE_BULK或USB_ENDPOINT_TYPE_INTERRUPT。

wMaxPacketSize

指定可從或傳送至此端點的最大封包大小。

bInterval

bInterval 值包含中斷和連續端點的輪詢間隔。 對於其他類型的端點,應該忽略此值。 這個值會反映裝置在韌體中的設定。 驅動程式無法變更它。

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

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

bInterval 的值 輪詢期間 (1 毫秒的畫面格) 中斷
0 到 15 8 支援。
16 到 35 16 支援。
36 到 255 32 支援。
> 255 USB 規格禁止輪詢間隔 > 255。
 

對於可以完整速度運作的裝置和主機控制器,期間是以 1 毫秒的畫面格為單位來測量,而期間與 bInterval 中的值相關,如下表所示:

bInterval 的值 輪詢期間 (1 毫秒的畫面格) 中斷 同步
1 1 支援。 支援。
2 到 3 2 支援。 支援。
4 到 7 4 支援。 支援。
8 到 15 8 支援。 支援。
16 到 31 16 支援。 不支援。
32 到 255 32 支援。 不支援。
> 255 USB 規格禁止輪詢間隔 > 255。
 

對於可以高速運作的裝置和主機控制器,此期間是以微框架單位來測量。 每1毫秒框架有八個微框架。 句點與 bInterval 中的值相關,公式 Period = 2 ** (bInterval - 1) ,如下表所示:

bInterval 的值 輪詢期間 (微框架) 中斷 同步
1 1 支援。 支援。
2 2 支援。 支援。
3 4 支援。 支援。
4 8 支援。 支援。
5 16 支援。 不支援。
6 32 支援。 不支援。
7 到 255 32 支援。 不支援。
> 255 USB 規格禁止輪詢間隔 > 255。
 

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

規格需求

需求
標頭 usbspec.h (包含 Usb100.h)

另請參閱

USB 結構

UsbBuildGetDescriptorRequest

_URB_CONTROL_DESCRIPTOR_REQUEST