USBD_PIPE_INFORMATION结构(usb.h)

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

包含由相应终结点描述符(USB_ENDPOINT_DESCRIPTOR)中的 bInterval 字段指示的轮询间隔。 此值仅对中断和时序管道有效。 对于其他类型的管道,应忽略此值。 它反映设备在固件中的配置。 驱动程序无法更改它。

轮询间隔以及设备的速度和主机控制器的类型确定驱动程序应启动传输的频率。 Interval 中的值不表示固定的时间量。 它是一个相对值,实际轮询频率也将取决于设备和 USB 主机控制器是以低、完整还是高速运行。

如果主机控制器或设备以低速运行,传输(也称为“轮询期”)之间的时间段以 1 毫秒帧为单位进行测量,并且时间段与 间隔 中的值相关,如下表所示:

间隔 轮询周期(1 毫秒帧) 中断 等时的
0 到 15 8 支持。 不支持。
16 到 35 16 支持。 不支持。
36 到 255 32 支持。 不支持。
 

对于可以全速运行的设备和主机控制器,周期以 1 毫秒帧为单位进行测量。 对于全速时序传输,间隔 值,轮询周期始终为 1。 该值指示可以在每个帧中传输数据。 对于全速中断传输,轮询期派生自 间隔 值。 下表指示中断和时序终结点支持的值。

间隔 轮询周期(1 毫秒帧) 中断 等时的
1 1 支持。 支持。
2 到 3 2 支持。 不支持。
4 到 7 4 支持。 不支持。
8 到 15 8 支持。 不支持。
16 到 31 16 支持。 不支持。
32 到 255 32 支持。 不支持。
 

对于可以高速运行的设备和主机控制器,周期以微帧为单位进行测量。 轮询周期派生自 间隔 值,方法是使用公式 Polling period = 2 ** (Interval - 1)。 下表中指示计算值:

间隔 轮询周期 (微帧) 中断 等时的
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 时序终结点

在时段和轮询间隔之间的上述表中的映射在 Windows 2000 和更高版本的 Windows作系统Microsoft有效。

PipeType

指定此管道使用的传输类型。 这些值在 USBD_PIPE_TYPE 枚举中定义。

PipeHandle

指定批量管道或中断管道的不透明句柄。 当客户端驱动程序使用类型为 URB_FUNCTION_SELECT_CONFIGURATION 的 URB 选择设备配置时,或者当客户端驱动程序更改具有类型为 URB_FUNCTION_SELECT_INTERFACE 的 URB 的接口的设置时,主机控制器驱动程序将返回此句柄。

MaximumTransferSize

指定此管道上传输请求的最大大小(以字节为单位)。 在 Windows Server 2003、Windows XP 及更高版本的作系统中,此成员未使用,并且不包含有效数据。

有关不同版本的 Windows 中每种 USB 终结点的最大传输大小的信息,请参阅 USB 传输和数据包大小

Note For WinUSB, do not use MaximumTransferSize to determine the maximum size of a USB transfer. 请改用由 WinUsb_GetPipePolicy检索的MAXIMUM_TRANSFER_SIZE值。
 

PipeFlags

包含驱动程序可用于指定管道的某些可配置特征的按位 OR 管道标志。 当驱动程序选择具有其函数类型为URB_FUNCTION_SELECT_CONFIGURATION的 URB 请求的 USB 设备的配置时,驱动程序会指定这些管道特征。

下表说明了每个管道标志的含义:

标志名称 意义
USBD_PF_CHANGE_MAX_PACKET 指示驱动程序使用 MaximumPacketSize中指定的值替代终结点最大数据包大小。 此值必须小于或等于管道的终结点描述符中指定的默认最大值。

言论

此结构包含从设备的接口描述符检索的终结点的信息。 有关如何从接口描述符获取 USBD_PIPE_INFORMATION 中的信息的说明,请参阅 如何为 USB 设备选择配置。

MaximumPacketSize 值派生自终结点描述符 wMaxPacketSize 字段的第一 11 位,指示主机控制器可以在单个事务中向终结点发送或接收的最大字节数。

通常,对于高速传输,主机控制器为每个微帧发送或接收一个事务。 但是,高速、高带宽不时或中断终结点通过其他事务支持更高的数据速率。 这样,主机控制器就可以在单个微帧中传输高达 3072 字节。 该类型的终结点支持的其他事务数由 wMaxPacketSize(最小有效位为 0)的位 12..11 指示。 该数字可以是 0、1 或 2。 如果 12..11 指示 0,则终结点不支持每个微帧的其他事务。 如果数字为 1,则主机控制器可以发送额外的事务(每个微帧总共有两个事务):2 表示另外两个事务(每个微帧总共有三个事务)。

MaximumPacketSize 中接收的值表示主机控制器可以在一个微帧中向终结点发送或接收的字节总数。 如果终结点支持这些字节,则该值包含其他事务中的字节数。 例如,请考虑以下时序终结点特征:

  • wMaxPacketSize 为 1,024
  • 12..11 指示 2
  • 间隔 为 1。
在前面的示例中,MaximumPacketSize 中收到的值为 3,072 字节(事务总数 * wMaxPacketSize)。 由于 间隔 为 1,因此轮询期为 1。 因此,主机控制器可以在帧的每个微帧中传输 3,072 字节。 在单个 I/O 请求(一个 URB 中所述)中,主机控制器可以传输不超过 24,576 字节。

要求

要求 价值
标头 usb.h (包括 Usb.h)

另请参阅

USB 结构

USB_ENDPOINT_DESCRIPTOR