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.
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.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | usb.h (inclua Usb.h) |