struttura USBD_PIPE_INFORMATION (usb.h)
La struttura USBD_PIPE_INFORMATION viene usata dai driver client USB per contenere informazioni su una pipe da un'interfaccia specifica.
Sintassi
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;
Members
MaximumPacketSize
Specifica le dimensioni massime del pacchetto, in byte, gestite da questa pipe. Questo valore deve essere minore o uguale al valore di wMaxPacketSize nel descrittore dell'endpoint. Lo stack USB ignora questo valore se il flag USBD_PF_CHANGE_MAX_PACKET non è impostato nel membro PipeFlags .
Per gli endpoint isocroni ad alta velocità, il valore MaximumPacketSize ricevuto include il numero di byte che possono essere trasferiti in transazioni aggiuntive, se l'endpoint le supporta. Per altre informazioni, vedere la sezione Osservazioni.
EndpointAddress
Specifica l'indirizzo del bus per questa pipe.
Interval
Contiene l'intervallo di polling, indicato dal campo bInterval nel descrittore dell'endpoint corrispondente (USB_ENDPOINT_DESCRIPTOR). Questo valore è valido solo per le pipe interrupt e isocrone. Per altri tipi di pipe, questo valore deve essere ignorato. Riflette la configurazione del dispositivo nel firmware. I driver non possono modificarli.
L'intervallo di polling, insieme alla velocità del dispositivo e al tipo di controller host, determina la frequenza con cui il driver deve avviare un trasferimento. Il valore in Interval non rappresenta un periodo di tempo fisso. Si tratta di un valore relativo e la frequenza di polling effettiva dipenderà anche dal fatto che il dispositivo e il controller host USB funzionino a bassa, piena o ad alta velocità.
Se il controller host o il dispositivo opera a bassa velocità, il periodo di tempo tra i trasferimenti (noto anche come "periodo di polling") viene misurato in unità di 1 millisecondo di fotogrammi e il periodo è correlato al valore in Interval , come indicato nella tabella seguente:
Interval | Periodo di polling (fotogrammi di 1 millisecondi) | Interrompere | Isocroni |
---|---|---|---|
da 0 a 15 | 8 | Supportata. | Non supportato. |
Da 16 a 35 | 16 | Supportata. | Non supportato. |
Da 36 a 255 | 32 | Supportata. | Non supportato. |
Per i dispositivi e i controller host che possono funzionare a tutta velocità, il periodo viene misurato in unità di 1 millisecondo di fotogrammi. Per i trasferimenti isocroni a velocità intera, il valore Interval e il periodo di polling sono sempre 1. Questo valore indica che i dati possono essere trasferiti in ogni frame. Per i trasferimenti di interrupt a velocità intera, il periodo di polling viene derivato dal valore Interval . La tabella seguente indica i valori supportati per gli endpoint interrupt e isocroni.
Interval | Periodo di polling (fotogrammi di 1 millisecondi) | Interrompere | Isocroni |
---|---|---|---|
1 | 1 | Supportata. | Supportata. |
da 2 a 3 | 2 | Supportata. | Non supportato. |
da 4 a 7 | 4 | Supportata. | Non supportato. |
da 8 a 15 | 8 | Supportata. | Non supportato. |
Da 16 a 31 | 16 | Supportata. | Non supportato. |
Da 32 a 255 | 32 | Supportata. | Non supportato. |
Per i dispositivi e i controller host che possono operare ad alta velocità, il periodo viene misurato in unità di microframe. Il periodo di polling deriva dal valore Interval usando la formula Polling period = 2 ** (Interval - 1)
. I valori calcolati sono indicati nella tabella seguente:
Interval | Periodo di polling (microframe) | Interrompere | Isocroni |
---|---|---|---|
1 | 1 | Supportata. | Supportata. |
2 | 2 | Supportata. | Supportata. |
3 | 4 | Supportata. | Supportata. |
4 | 8 | Supportata. | Supportata. |
5 | 16 | Supportata. | Non supportato. |
Da 6 a 255 | 32 | Supportata. | Non supportato. |
I periodi di polling supportati per i trasferimenti isocroni ad alta velocità sono 1, 2, 4 e 8. Se un driver client invia una richiesta di URB_FUNCTION_ISOCH_TRANSFER per un endpoint isochronous ad alta velocità con periodo di polling maggiore di 8, la richiesta non riesce con lo stato USBD_STATUS_INVALID_PARAMETER. Per informazioni sui trasferimenti isochronous, vedere How to Transfer Data to USB Isochronous Endpoints (Come trasferire dati a endpoint ISochronous).
I mapping nelle tabelle precedenti tra periodi e intervalli di polling sono validi in Microsoft Windows 2000 e versioni successive del sistema operativo Windows.
PipeType
Specifica il tipo di trasferimento usato da questa pipe. Questi valori sono definiti nell'enumerazione USBD_PIPE_TYPE .
PipeHandle
Specifica un handle opaco per la pipe bulk o di interruzione. Il driver del controller host restituisce questo handle quando il driver client seleziona la configurazione del dispositivo con un URB_FUNCTION_SELECT_CONFIGURATION di tipo o quando il driver client modifica le impostazioni per un'interfaccia con un'interfaccia di tipo URB_FUNCTION_SELECT_INTERFACE.
MaximumTransferSize
Specifica le dimensioni massime, in byte, per una richiesta di trasferimento in questa pipe. In Windows Server 2003, Windows XP e sistemi operativi successivi, questo membro non viene usato e non contiene dati validi.
Per informazioni sulle dimensioni massime di trasferimento di ogni tipo di endpoint USB in versioni diverse di Windows, vedere Trasferimento USB e Dimensioni pacchetti.
PipeFlags
Contiene un bit per bit-OR di flag di pipe che il driver può usare per specificare determinate caratteristiche configurabili della pipe. Il driver specifica queste caratteristiche della pipe quando seleziona la configurazione di un dispositivo USB con una richiesta URB il cui tipo di funzione è URB_FUNCTION_SELECT_CONFIGURATION.
La tabella seguente illustra il significato di ogni flag di pipe:
Nome flag | Significato |
---|---|
USBD_PF_CHANGE_MAX_PACKET | Indica che il driver esegue l'override delle dimensioni massime del pacchetto dell'endpoint con il valore specificato in MaximumPacketSize. Questo valore deve essere minore o uguale al valore massimo predefinito specificato nel descrittore dell'endpoint della pipe. |
Commenti
Questa struttura contiene informazioni per un endpoint, recuperato dal descrittore dell'interfaccia del dispositivo. Per una spiegazione di come ottenere le informazioni in USBD_PIPE_INFORMATION dal descrittore dell'interfaccia, vedere Come selezionare una configurazione per un dispositivo USB.
Il valore MaximumPacketSize deriva dai primi 11 bit del campo wMaxPacketSize del descrittore dell'endpoint, che indica il numero massimo di byte che il controller host può inviare o ricevere dall'endpoint in una singola transazione.
In genere, per i trasferimenti ad alta velocità, il controller host invia o riceve una transazione per microframe. Tuttavia, alta velocità, larghezza di banda elevata isochrono o endpoint di interruzione supportano velocità di dati più elevate tramite transazioni aggiuntive. Ciò consente al controller host di trasferire fino a 3072 byte in un singolo microframe. Il numero di transazioni aggiuntive supportate da quel tipo di endpoint è indicato da bit 12..11 di wMaxPacketSize (bit meno significativo è 0). Tale numero può essere 0, 1 o 2. Se 12..11 indica 0, le transazioni aggiuntive per microframe non sono supportate dall'endpoint. Se il numero è 1, il controller host può inviare una transazione aggiuntiva (totale di due transazioni per microframe); 2 indica due transazioni aggiuntive (totale di tre transazioni per microframe).
Il valore ricevuto in MaximumPacketSize per un endpoint isochronous (alta velocità e larghezza di banda elevata) indica il numero totale di byte che il controller host può inviare o ricevere dall'endpoint in un microframe. Il valore include il numero di byte in transazioni aggiuntive, se l'endpoint li supporta. Si consideri ad esempio le caratteristiche dell'endpoint isochronous seguenti:
- wMaxPacketSize è 1.024
- Bit 12..11 indicano 2
- L'intervallo è 1.
Requisiti
Requisito | Valore |
---|---|
Intestazione | usb.h (include Usb.h) |