Funzioni WinUSB per la modifica dei criteri di pipe
Per consentire alle applicazioni di ottenere e impostare i parametri predefiniti di un endpoint pipe, Winusb.dll espone la funzione WinUsb_GetPipePolicy per recuperare i criteri predefiniti della pipe. La funzione WinUsb_SetPipePolicy consente a un'applicazione di impostare il parametro dei criteri su un nuovo valore.
WinUSB consente di modificare il comportamento predefinito applicando i criteri alla pipe di un endpoint. Usando questi criteri, è possibile configurare WinUSB in modo che corrisponda meglio al dispositivo alle relative funzionalità. La tabella seguente fornisce un elenco dei criteri di pipe supportati da WinUSB.
Nota
I criteri descritti nella tabella sono validi solo per gli endpoint specificati. L'impostazione dei criteri in altri endpoint non ha alcun effetto sul comportamento di WinUSB per le richieste di lettura o scrittura.
Numero di criteri | Nome criteri | Descrizione | Endpoint (direzione) | Valore predefinito |
---|---|---|---|---|
0x01 | SHORT_PACKET_TERMINATE | Invia un pacchetto di lunghezza zero per una richiesta di scrittura in cui il buffer è un multiplo delle dimensioni massime dei pacchetti supportate dall'endpoint. | Bulk (OUT) Interruzione (OUT) |
FALSE |
0x02 | AUTO_CLEAR_STALL | Cancella automaticamente una pipe bloccata senza arrestare il flusso di dati. | Bulk (IN) Interruzione (IN) |
FALSE |
0x03 | PIPE_TRANSFER_TIMEOUT | Attende un intervallo di timeout, in millisecondi, prima di annullare la richiesta. | Bulk (IN) Bulk (OUT) Interruzione (IN) Interruzione (OUT) |
5 secondi (5000 millisecondi) per il controllo; 0 per gli altri |
0x04 | IGNORE_SHORT_PACKETS | Completa una richiesta di lettura quando viene ricevuto un pacchetto breve o viene letto un determinato numero di byte. Se la dimensione del file è sconosciuta, la richiesta viene terminata in un pacchetto breve. | Bulk (IN) Interruzione (IN) |
FALSE |
0x05 | ALLOW_PARTIAL_READS | Consente di leggere le richieste da un dispositivo che restituisce più dati che richiesti dal chiamante. | Bulk (IN) Interruzione (IN) |
true |
0x06 | AUTO_FLUSH | Salva i dati in eccesso dalla richiesta di lettura e lo aggiunge alla richiesta di lettura successiva o elimina i dati in eccesso. | Bulk (IN) Interruzione (IN) |
FALSE |
0x07 | RAW_IO | Ignora l'accodamento e la gestione degli errori per migliorare le prestazioni per più richieste di lettura. | Bulk (IN) Interruzione (IN) |
FALSE |
0x08 | MAXIMUM_TRANSFER_SIZE | Ottiene la dimensione massima di un trasferimento USB supportato da WinUSB. Si tratta di un criterio di sola lettura che può essere recuperato chiamando WinUsb_GetPipePolicy. | Bulk (IN) Bulk (OUT) Interruzione (IN) Interruzione (OUT) |
|
0x09 | RESET_PIPE_ON_RESUME | Reimposta la pipe dell'endpoint dopo aver ripreso dalla sospensione prima di accettare nuove richieste. | Bulk (IN) Bulk (OUT) Interruzione (IN) Interruzione (OUT) |
FALSE |
La tabella seguente identifica le procedure consigliate per l'uso di ognuno dei criteri della pipe e descrive il comportamento risultante quando il criterio è abilitato.
Criteri | Abilitare se... | Comportamento |
---|---|---|
SHORT_PACKET_TERMINATE(0x01) | Il dispositivo richiede che i trasferimenti OUT vengano terminati con un pacchetto a lunghezza zero. La maggior parte dei dispositivi non ha questo requisito. | Se abilitato (il valore del parametro dei criteri è TRUE o diverso da zero), ogni richiesta di scrittura che è una più delle dimensioni massime dei pacchetti supportate dall'endpoint, viene seguita da un pacchetto a lunghezza zero. Dopo l'invio di dati al controller host, WinUSB invia una richiesta di scrittura con un pacchetto a lunghezza zero e quindi completa la richiesta creata da WinUsb_WritePipe. |
AUTO_CLEAR_STALL | Non si vuole che i trasferimenti non riusciti lascino l'endpoint in uno stato bloccato. Questo criterio è utile solo quando si dispone di più richieste di lettura in sospeso all'endpoint quando RAW_IO è disabilitato. |
|
PIPE_TRANSFER_TIMEOUT | Si prevede che i trasferimenti a un endpoint vengano completati entro un periodo di tempo specifico. |
|
IGNORE_SHORT_PACKETS | RAW_IO è disabilitato e non si desidera che i pacchetti brevi completino le richieste di lettura. |
|
ALLOW_PARTIAL_READS | Il dispositivo può inviare più dati rispetto a quanto richiesto se le dimensioni del buffer delle richieste sono un multiplo delle dimensioni massime dei pacchetti dell'endpoint. Usare se l'applicazione vuole leggere alcuni byte per determinare il numero totale di byte da leggere. |
|
AUTO_FLUSH | ALLOW_PARTIAL_READS criterio è abilitato. Il dispositivo può inviare più dati rispetto a quanto richiesto e l'applicazione non richiede altri dati. Ciò è possibile se le dimensioni del buffer delle richieste sono multiple delle dimensioni massime dei pacchetti dell'endpoint. |
AUTO_FLUSH definisce il comportamento di WinUSB quando ALLOW_PARTIAL_READS è abilitato. Se ALLOW_PARTIAL_READS è disabilitato, il valore AUTO_FLUSH viene ignorato da WinUSB. WinUSB può eliminare i dati rimanenti o inviarli con la richiesta di lettura successiva del chiamante.
|
RAW_IO | Le prestazioni sono una priorità e l'applicazione invia richieste di lettura simultanee allo stesso endpoint. RAW_IO impone determinate restrizioni al buffer passato dal chiamante in WinUsb_ReadPipe:
|
Se abilitata, trasferisce ignora l'accodamento e la gestione degli errori per migliorare le prestazioni per più richieste di lettura. WinUSB gestisce le richieste di lettura come indicato di seguito:
L'abilitazione di questa impostazione migliora significativamente le prestazioni di più richieste di lettura riducendo il ritardo tra l'ultimo pacchetto di un trasferimento e il primo pacchetto del trasferimento successivo. |
RESET_PIPE_ON_RESUME | Il dispositivo non mantiene lo stato di attivazione/disattivazione dei dati nella sospensione. | In caso di ripresa dalla sospensione, WinUSB reimposta l'endpoint prima che consenta al chiamante di inviare nuove richieste all'endpoint. |
Argomenti correlati
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per