usb.h) (USBD_PIPE_INFORMATION 结构
USB 客户端驱动程序使用 USBD_PIPE_INFORMATION 结构来保存来自特定接口的管道的相关信息。
语法
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 毫秒帧为单位进行测量。 对于全速常时等量传输, 间隔 值和轮询周期始终为 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。 如果客户端驱动程序针对轮询周期大于 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 XP 及更高版本的操作系统中,不会使用此成员,并且不包含有效数据。
有关不同版本的 Windows 中每种类型的 USB 终结点的最大传输大小的信息,请参阅 USB 传输和数据包大小。
PipeFlags
包含管道标志的按位 OR,驱动程序可以使用这些标志指定管道的某些可配置特征。 驱动程序在选择具有 URB 请求(其函数类型为URB_FUNCTION_SELECT_CONFIGURATION)的 USB 设备的配置时指定这些管道特征。
下表说明了每个管道标志的含义:
标志名称 | 含义 |
---|---|
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。
要求
要求 | 值 |
---|---|
Header | usb.h (包括 Usb.h) |