estrutura USBD_PIPE_INFORMATION (usb.h)

A estrutura USBD_PIPE_INFORMATION é usada por drivers de cliente USB para armazenar informações sobre um pipe de uma interface específica.

Sintaxe

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;

Membros

MaximumPacketSize

Especifica o tamanho máximo do pacote, em bytes, que esse pipe manipula. Esse valor deve ser menor ou igual ao valor de wMaxPacketSize no descritor de ponto de extremidade. A pilha USB ignorará esse valor se o sinalizador USBD_PF_CHANGE_MAX_PACKET não estiver definido no membro PipeFlags .

Para pontos de extremidade isócronos de alta velocidade, o valor MaximumPacketSize recebido inclui o número de bytes que podem ser transferidos em transações adicionais, se o ponto de extremidade der suporte a eles. Para obter mais informações, consulte Comentários.

EndpointAddress

Especifica o endereço do barramento para esse pipe.

Interval

Contém o intervalo de sondagem, indicado pelo campo bInterval no descritor de ponto de extremidade correspondente (USB_ENDPOINT_DESCRIPTOR). Esse valor só é válido para pipes isocronos e de interrupção. Para outros tipos de pipe, esse valor deve ser ignorado. Ele reflete a configuração do dispositivo no firmware. Os drivers não podem alterá-lo.

O intervalo de sondagem, juntamente com a velocidade do dispositivo e o tipo de controlador de host, determina a frequência com que o driver deve iniciar uma transferência. O valor em Interval não representa uma quantidade fixa de tempo. É um valor relativo e a frequência de sondagem real também dependerá se o dispositivo e o controlador de host USB operam em velocidade baixa, completa ou alta.

Se o controlador host ou o dispositivo operar em baixa velocidade, o período de tempo entre transferências (também conhecido como "período de sondagem") será medido em unidades de 1 milissegundos, e o período estará relacionado ao valor em Intervalo , conforme indicado na tabela a seguir:

Intervalo Período de sondagem (quadros de 1 milissegundos) Interrupção Isócrono
0 a 15 8 Com suporte. Não há suporte.
16 a 35 16 Com suporte. Não há suporte.
36 a 255 32 Com suporte. Não há suporte.
 

Para dispositivos e controladores de host que podem operar a toda velocidade, o período é medido em unidades de 1 milissegundos de quadros. Para transferências isócronas de velocidade total, o valor interval e o período de sondagem são sempre 1. Esse valor indica que os dados podem ser transferidos em cada quadro. Para transferências de interrupção de velocidade total, o período de sondagem é derivado do valor Interval . A tabela a seguir indica os valores com suporte para pontos de extremidade isócronos e de interrupção.

Intervalo Período de sondagem (quadros de 1 milissegundos) Interrupção Isócrono
1 1 Com suporte. Com suporte.
2 a 3 2 Com suporte. Não há suporte.
4 a 7 4 Com suporte. Não há suporte.
8 a 15 8 Com suporte. Não há suporte.
16 a 31 16 Com suporte. Não há suporte.
32 a 255 32 Com suporte. Não há suporte.
 

Para dispositivos e controladores de host que podem operar em alta velocidade, o período é medido em unidades de microframes. O período de sondagem é derivado do valor Interval usando a fórmula Polling period = 2 ** (Interval - 1). Os valores calculados são indicados na tabela a seguir:

Intervalo Período de sondagem (microframes) Interrupção Isócrono
1 1 Com suporte. Com suporte.
2 2 Com suporte. Com suporte.
3 4 Com suporte. Com suporte.
4 8 Com suporte. Com suporte.
5 16 Com suporte. Não há suporte.
6 a 255 32 Com suporte. Não há suporte.
 

Os períodos de votação com suporte para transferências isócronas de alta velocidade são 1, 2, 4 e 8. Se um driver cliente enviar uma solicitação URB_FUNCTION_ISOCH_TRANSFER para um ponto de extremidade isócrono de alta velocidade com período de sondagem maior que 8, a solicitação falhará com status USBD_STATUS_INVALID_PARAMETER. Para obter informações sobre transferências isócronas, consulte Como transferir dados para pontos de extremidade isocronos USB.

Os mapeamentos nas tabelas anteriores entre períodos e intervalos de sondagem são válidos no Microsoft Windows 2000 e versões posteriores do sistema operacional Windows.

PipeType

Especifica que tipo de transferências esse pipe usa. Esses valores são definidos na enumeração USBD_PIPE_TYPE .

PipeHandle

Especifica um identificador opaco para o pipe de interrupção ou em massa. O driver do controlador de host retorna esse identificador quando o driver do cliente seleciona a configuração do dispositivo com um URB do tipo URB_FUNCTION_SELECT_CONFIGURATION ou quando o driver cliente altera as configurações de uma interface com um URB do tipo URB_FUNCTION_SELECT_INTERFACE.

MaximumTransferSize

Especifica o tamanho máximo, em bytes, para uma solicitação de transferência nesse pipe. No Windows Server 2003, Windows XP e sistemas operacionais posteriores, esse membro não é usado e não contém dados válidos.

Para obter informações sobre os tamanhos máximos de transferência de cada tipo de ponto de extremidade USB em diferentes versões do Windows, consulte Transferência USB e Tamanhos de Pacote.

Nota Para WinUSB, não use MaximumTransferSize para determinar o tamanho máximo de uma transferência USB. Em vez disso, use o valor MAXIMUM_TRANSFER_SIZE recuperado por WinUsb_GetPipePolicy.
 

PipeFlags

Contém um OR bit a bit de sinalizadores de pipe que o driver pode usar para especificar determinadas características configuráveis do pipe. O driver especifica essas características de pipe quando seleciona a configuração de um dispositivo USB com uma solicitação URB cujo tipo de função é URB_FUNCTION_SELECT_CONFIGURATION.

A tabela a seguir explica o significado de cada sinalizador de pipe:

Nome do sinalizador Significado
USBD_PF_CHANGE_MAX_PACKET Indica que o driver está substituindo o tamanho máximo do pacote do ponto de extremidade com o valor especificado em MaximumPacketSize. Esse valor deve ser menor ou igual ao máximo padrão especificado no descritor de ponto de extremidade do pipe.

Comentários

Essa estrutura contém informações para um ponto de extremidade, recuperado do descritor de interface do dispositivo. Para obter uma explicação de como obter as informações em USBD_PIPE_INFORMATION do descritor de interface, consulte Como selecionar uma configuração para um dispositivo USB.

O valor MaximumPacketSize é derivado dos primeiros 11 bits do campo wMaxPacketSize do descritor de ponto de extremidade, o que indica o número máximo de bytes que o controlador host pode enviar ou receber do ponto de extremidade em uma única transação.

Normalmente, para transferências de alta velocidade, o controlador de host envia ou recebe uma transação por microframe. No entanto, pontos de extremidade de alta velocidade, de alta largura de banda isócrona ou de interrupção dão suporte a taxas de dados mais altas por meio de transações adicionais. Isso permite que o controlador host transfira até 3072 bytes em um único microframe. O número de transações adicionais compatíveis com esse tipo de ponto de extremidade é indicado pelos bits 12..11 de wMaxPacketSize (bit menos significativo é 0). Esse número pode ser 0, 1 ou 2. Se 12..11 indicar 0, transações adicionais por microframe não serão suportadas pelo ponto de extremidade. Se o número for 1, o controlador host poderá enviar uma transação adicional (total de duas transações por microframe); 2 indica duas transações adicionais (total de três transações por microframe).

O valor recebido em MaximumPacketSize para um ponto de extremidade isócrono (alta velocidade e alta largura de banda) indica o número total de bytes que o controlador host pode enviar ou receber do ponto de extremidade em um microframe. O valor inclui o número de bytes em transações adicionais, se o ponto de extremidade der suporte a elas. Por exemplo, considere as seguintes características de ponto de extremidade isócrono:

  • wMaxPacketSize é 1.024
  • Bits 12..11 indicam 2
  • O intervalo é 1.
No exemplo anterior, o valor recebido em MaximumPacketSize é de 3.072 bytes (Total de transações * wMaxPacketSize). Como Interval é 1, o período de sondagem é 1. Assim, o controlador de host pode transferir 3.072 bytes em cada microframe de um quadro. Em uma única solicitação de E/S (descrita em um URB), o controlador host não pode transferir mais de 24.576 bytes.

Requisitos

Requisito Valor
Cabeçalho usb.h (inclua Usb.h)

Confira também

Estruturas USB

USB_ENDPOINT_DESCRIPTOR