Partilhar via


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 de USBD_PF_CHANGE_MAX_PACKET não estiver definido no pipeFlags membro.

Para pontos de extremidade isocronos 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, determinam a frequência com que o driver deve iniciar uma transferência. O valor em intervalo de não representa um período fixo 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 de host ou o dispositivo opera em baixa velocidade, o período de tempo entre transferências (também conhecido como "período de sondagem") é medido em unidades de 1 milissegundos, e o período está relacionado ao valor em Intervalo conforme indicado na tabela a seguir:

Intervalo Período de sondagem (quadros de 1 milissegundos) Interromper Isócrono
0 a 15 8 Suportado. Não há suporte.
16 a 35 16 Suportado. Não há suporte.
36 a 255 32 Suportado. 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 isocronas de velocidade total, o valor Intervalo e o período de sondagem é 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 intervalo de. A tabela a seguir indica os valores com suporte para pontos de extremidade isocronos e de interrupção.

Intervalo Período de sondagem (quadros de 1 milissegundos) Interromper Isócrono
1 1 Suportado. Suportado.
2 a 3 2 Suportado. Não há suporte.
4 a 7 4 Suportado. Não há suporte.
8 a 15 8 Suportado. Não há suporte.
16 a 31 16 Suportado. Não há suporte.
32 a 255 32 Suportado. 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 intervalo de 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) Interromper Isócrono
1 1 Suportado. Suportado.
2 2 Suportado. Suportado.
3 4 Suportado. Suportado.
4 8 Suportado. Suportado.
5 16 Suportado. Não há suporte.
6 a 255 32 Suportado. Não há suporte.
 

Os períodos de sondagem com suporte para transferências isocronas 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 isocrono de alta velocidade com período de sondagem maior que 8, a solicitação falhará com o status USBD_STATUS_INVALID_PARAMETER. Para obter informações sobre transferências isocronas, consulte How to Transfer Data to USB Isochronous Endpoints.

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 em massa ou de interrupção. O driver do controlador de host retorna esse identificador quando o driver 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 neste 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.

Observação Para WinUSB, não use maximumTransferSize para determinar o tamanho máximo de uma transferência USB. Em vez disso, use o valor de 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.

Observações

Essa estrutura contém informações para um ponto de extremidade, recuperadas 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 do primeiro 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 isocronos ou de interrupção dão suporte a taxas de dados mais altas por meio de transações adicionais. Isso permite que o controlador de host transfira até 3.072 bytes em um único microframe. O número de transações adicionais compatíveis com esse tipo de ponto de extremidade é indicado por bits 12..11 de wMaxPacketSize (o bit menos significativo é 0). Esse número pode ser 0, 1 ou 2. Se 12..11 indicar 0, não há suporte para transações adicionais por microframe pelo ponto de extremidade. Se o número for 1, o controlador de 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 isocrono (alta velocidade e largura de banda alta) 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 isocrono:

  • wMaxPacketSize é 1.024
  • Bits 12..11 indicam 2
  • Intervalo é 1.
No exemplo anterior, o valor recebido em MaximumPacketSize é de 3.072 bytes (Total de transações * wMaxPacketSize). Como Intervalo é 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 de host não pode transferir mais de 24.576 bytes.

Requisitos

Requisito Valor
cabeçalho usb.h (incluir Usb.h)

Consulte também

estruturas USB

USB_ENDPOINT_DESCRIPTOR