Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para permitir que os aplicativos obtenham e definam os parâmetros de política padrão de um pipe de ponto de extremidade, 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 policy 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 adequar seu dispositivo aos seus recursos. A tabela a seguir fornece uma lista das políticas de pipe suportadas pelo WinUSB.
Observação
As políticas descritas na tabela são válidas apenas para os pontos de extremidade especificados. Definir a política em outros pontos de extremidade não tem efeito sobre 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 predefinido |
|---|---|---|---|---|
| 0x01 | TERMINAR_PACOTE_CURTO | Envia um pacote de comprimento zero para uma solicitação de gravação na qual o buffer é um múltiplo do tamanho máximo de pacote suportado pelo ponto de extremidade. | A granel (OUT) Interrupção (OUT) |
FALSO |
| 0x02 | AUTO_CLEAR_STALL | Limpa automaticamente um tubo parado sem interromper o fluxo de dados. | Bulk (IN) Interrupção (IN) |
FALSO |
| 0x03 | PIPE_TRANSFER_TIMEOUT | Aguarda um intervalo de tempo limite, em milissegundos, antes de cancelar a solicitação. | A granel (IN) Carga a Granel (Saída) Interrupção (IN) Interrupção (OUT) |
5 segundos (5000 milissegundos) para controlo; 0 para outros |
| 0x04 | IGNORAR_PACOTES_CORTOS | 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. | A granel (IN) Interrupção (IN) |
FALSO |
| 0x05 | PERMITIR_LEITURAS_PARCIASI | Permite solicitações de leitura de um dispositivo que retorna mais dados do que o solicitado pelo chamador. | A granel (interno) Interrupção (IN) |
VERDADEIRO |
| 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. | Volume (IN) Interrupção (IN) |
FALSO |
| 0x07 | RAW_IO | Ignora o enfileiramento e o tratamento de erros para melhorar o desempenho para múltiplas solicitações de leitura. | A granel (IN) Interrupção (IN) |
FALSO |
| 0x08 | MAXIMUM_TRANSFER_SIZE | Obtém o tamanho máximo de uma transferência USB suportada pelo WinUSB. Esta é uma política só de leitura que pode ser obtida ao chamar WinUsb_GetPipePolicy. | A granel (IN) Saída (A granel) Interrupção (IN) Interrupção (OUT) |
|
| 0x09 | RESET_PIPE_ON_RESUME | Redefine o pipe do ponto de extremidade depois de retomar da suspensão antes de aceitar novas solicitações. | Encomenda a granel (IN) A granel (SAÍDA) Interrupção (IN) Interrupção (OUT) |
FALSO |
A tabela a seguir identifica as práticas recomendadas para usar cada uma das políticas de pipe e descreve o comportamento resultante quando a política está habilitada.
| Policy | Ativar 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 de pacote suportado pelo ponto de extremidade é seguida por um pacote de comprimento zero. Depois de enviar dados para o controlador host, WinUSB envia uma solicitação de gravação com um pacote de comprimento zero e, em seguida, conclui a solicitação que foi criada por WinUsb_WritePipe. |
| Limpar automaticamente obstrução | Não quer que as transferências falhadas deixem o endpoint num estado estagnado. Esta política é útil apenas quando tens várias solicitações de leitura pendentes para o endpoint quando o RAW_IO está desativado. |
|
| PIPE_TRANSFER_TIMEOUT | Você espera que as transferências para um destino final sejam concluídas dentro de um tempo específico. |
|
| IGNORAR_PACOTES_CURTOS | RAW_IO está desativado e você não quer pacotes curtos para concluir 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 final. Utilize se a sua aplicação quiser ler alguns bytes para determinar quantos bytes totais ler. |
|
| AUTO_FLUSH | A política ALLOW_PARTIAL_READS está habilitada. O dispositivo pode enviar mais dados do que foi solicitado, 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 ponto final. |
AUTO_FLUSH define o comportamento do WinUSB quando ALLOW_PARTIAL_READS está habilitado. Se ALLOW_PARTIAL_READS estiver desativado, o valor AUTO_FLUSH será ignorado pelo WinUSB. 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 ativada, as transferências ignoram o enfileiramento e o tratamento de erros para melhorar o desempenho em múltiplas solicitações de leitura. 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. |
| REINICIAR_CANAL_AO_RETOMAR | O dispositivo não preserva o estado de alternância dos dados durante a 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 WinUSB
- Escolhendo um modelo de driver para desenvolver um driver de cliente USB
- Instalação do WinUSB (Winusb.sys)
- Como acessar um dispositivo USB usando funções WinUSB
- Funções do WinUSB
- WinUsb_GetPipePolicy
- WinUsb_SetPipePolicy
- Introdução ao WinUSB para desenvolvedores