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 表示输入,0 表示输出。
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 毫秒帧中有 8 个微帧。 周期与 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 及更高版本的操作系统中有效。
要求
要求 | 值 |
---|---|
Header | usbspec.h (包括 Usb100.h) |