Funções WinUSB para modificação de política de pipe
Para permitir que os aplicativos obtenham e definam os parâmetros de política padrão de um pipe de endpoint, Winusb.dll expõe a função WinUsb_GetPipePolicy para recuperar a política padrão do pipe. A função WinUsb_SetPipePolicy permite que um aplicativo defina o parâmetro de política para um novo valor.
O WinUSB permite que você modifique seu comportamento padrão aplicando políticas ao pipe de um ponto de extremidade. Usando essas políticas, você pode configurar o WinUSB para melhor corresponder seu dispositivo aos seus recursos. A tabela a seguir fornece uma lista das políticas de pipe compatíveis com o WinUSB.
Observação
As políticas descritas na tabela são válidas apenas para os endpoints especificados. Definir a política em outros pontos de extremidade não afeta o comportamento do WinUSB para solicitações de leitura ou gravação.
Número da apólice | Nome da política | Descrição | Ponto final (direção) | Valor padrão |
---|---|---|---|---|
0x01 | SHORT_PACKET_TERMINATE | Envia um pacote de comprimento zero para uma solicitação de gravação na qual o buffer é um múltiplo do tamanho máximo do pacote suportado pelo endpoint. | Massa (OUT) Interrupção (OUT) |
FALSE |
0x02 | AUTO_CLEAR_STALL | Limpa automaticamente um pipe parado sem interromper o fluxo de dados. | Massa (IN) Interrupção (IN) |
FALSE |
0x03 | PIPE_TRANSFER_TIMEOUT | Aguarda um intervalo de tempo limite, em milissegundos, antes de cancelar a solicitação. | Massa (IN) Massa (OUT) Interrupção (IN) Interrupção (OUT) |
5 segundos (5000 milissegundos) para controle; 0 para os outros |
0x04 | IGNORE_SHORT_PACKETS | Conclui uma solicitação de leitura quando um pacote curto é recebido ou um determinado número de bytes é lido. Se o tamanho do arquivo for desconhecido, a solicitação será encerrada em um pacote curto. | Massa (IN) Interrupção (IN) |
FALSE |
0x05 | ALLOW_PARTIAL_READS | Permite solicitações de leitura de um dispositivo que retorna mais dados do que os solicitados pelo chamador. | Massa (IN) Interrupção (IN) |
TRUE |
0x06 | AUTO_FLUSH | Salva os dados em excesso da solicitação de leitura e os adiciona à próxima solicitação de leitura ou descarta os dados em excesso. | Massa (IN) Interrupção (IN) |
FALSE |
0x07 | RAW_IO | Ignora o enfileiramento e o tratamento de erros para aumentar o desempenho de várias solicitações de leitura. | Massa (IN) Interrupção (IN) |
FALSE |
0x08 | MAXIMUM_TRANSFER_SIZE | Obtém o tamanho máximo de uma transferência USB com suporte do WinUSB. Essa é uma política somente leitura que pode ser recuperada chamando WinUsb_GetPipePolicy. | Massa (IN) Massa (OUT) Interrupção (IN) Interrupção (OUT) |
|
0x09 | RESET_PIPE_ON_RESUME | Redefine o pipe do endpoint após retomar da suspensão antes de aceitar novas solicitações. | Massa (IN) Massa (OUT) Interrupção (IN) Interrupção (OUT) |
FALSE |
A tabela a seguir identifica as práticas recomendadas de como usar cada uma das políticas de pipe e descreve o comportamento resultante quando a política é habilitada.
Policy | Ative se... | Comportamento |
---|---|---|
SHORT_PACKET_TERMINATE(0x01) | O dispositivo requer que as transferências OUT sejam encerradas com um pacote de comprimento zero. A maioria dos dispositivos não tem esse requisito. | Se habilitado (o valor do parâmetro de política é TRUE ou diferente de zero), cada solicitação de gravação que é um múltiplo do tamanho máximo do pacote suportado pelo endpoint é seguida por um pacote de comprimento zero. Depois de enviar dados para o controlador de host, o WinUSB envia uma solicitação de gravação com um pacote de comprimento zero e, em seguida, conclui a solicitação criada por WinUsb_WritePipe. |
AUTO_CLEAR_STALL | Você não quer que as transferências com falha deixem o ponto de extremidade em um estado paralisado. Essa política é útil somente quando você tem várias solicitações de leitura pendentes para o ponto de extremidade quando RAW_IO está desabilitado. |
|
PIPE_TRANSFER_TIMEOUT | Você espera que as transferências para um ponto de extremidade sejam concluídas dentro de um tempo específico. |
|
IGNORE_SHORT_PACKETS | RAW_IO está desabilitado e você não deseja que pacotes curtos concluam as solicitações de leitura. |
|
ALLOW_PARTIAL_READS | O dispositivo pode enviar mais dados do que o solicitado se o tamanho do buffer de solicitação for um múltiplo do tamanho máximo do pacote de ponto de extremidade. Use se o aplicativo quiser ler alguns bytes para determinar quantos bytes totais ler. |
|
AUTO_FLUSH | ALLOW_PARTIAL_READS política está habilitada. O dispositivo pode enviar mais dados do que os solicitados e seu aplicativo não requer nenhum outro dado. Isso é possível se o tamanho do buffer de solicitação for um múltiplo do tamanho máximo do pacote de endpoint. |
AUTO_FLUSH define o comportamento do WinUSB quando ALLOW_PARTIAL_READS está habilitado. Se ALLOW_PARTIAL_READS estiver desabilitado, o valor AUTO_FLUSH será ignorado pelo WinUSB. O WinUSB pode descartar os dados restantes ou enviá-los com a próxima solicitação de leitura do chamador.
|
RAW_IO | O desempenho é uma prioridade e o aplicativo envia solicitações de leitura simultâneas para o mesmo ponto de extremidade. RAW_IO impõe certas restrições ao buffer que é passado pelo chamador em WinUsb_ReadPipe:
|
Se habilitadas, as transferências ignoram o enfileiramento e o tratamento de erros para aumentar o desempenho de várias solicitações de leitura. O WinUSB lida com solicitações de leitura da seguinte maneira:
Habilitar essa configuração melhora significativamente o desempenho de várias solicitações de leitura, reduzindo o atraso entre o último pacote de uma transferência e o primeiro pacote da próxima transferência. |
RESET_PIPE_ON_RESUME | O dispositivo não preserva seu estado de alternância de dados em suspensão. | Ao retomar da suspensão, o WinUSB redefine o ponto de extremidade antes de permitir que o chamador envie novas solicitações para o ponto de extremidade. |
Tópicos relacionados
- Gerenciamento de energia WinUSB
- Arquitetura e módulos do WinUSB
- Como escolher um modelo de driver desenvolvendo um driver cliente USB
- Instalação do WinUSB (Winusb.sys)
- Como acessar um dispositivo USB usando funções do WinUSB
- Funções do WinUSB
- WinUsb_GetPipePolicy
- WinUsb_SetPipePolicy
- Introdução ao WinUSB para desenvolvedores