struttura _URB_BULK_OR_INTERRUPT_TRANSFER (usb.h)
La struttura _URB_BULK_OR_INTERRUPT_TRANSFER viene usata dai driver client USB per inviare o ricevere dati su una pipe bulk o su una pipe di interrupt.
Sintassi
struct _URB_BULK_OR_INTERRUPT_TRANSFER {
struct _URB_HEADER Hdr;
USBD_PIPE_HANDLE PipeHandle;
ULONG TransferFlags;
ULONG TransferBufferLength;
PVOID TransferBuffer;
PMDL TransferBufferMDL;
struct _URB *UrbLink;
struct _URB_HCD_AREA hca;
};
Members
Hdr
Puntatore a una struttura di _URB_HEADER che specifica le informazioni sull'intestazione HEADER. Hdr.Function deve essere URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER e Hdr.Length deve essere impostato su sizeof(_URB_BULK_OR_INTERRUPT_TRANSFER)
.
PipeHandle
Specifica un handle opaco per la pipe bulk o interrupt. 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 URB_FUNCTION_SELECT_INTERFACE di tipo".
TransferFlags
Specifica zero, uno o una combinazione dei flag seguenti:
Valore | Significato |
---|---|
|
È impostato per richiedere i dati da un dispositivo. Per trasferire i dati in un dispositivo, questo flag deve essere chiaro. |
|
È impostato per trasferire i dati in un dispositivo. L'impostazione di questo flag equivale alla cancellazione del flag di USBD_TRANSFER_DIRECTION_IN. |
|
È impostato per indirizzare il controller host a non restituire un errore quando riceve un pacchetto dal dispositivo che è più breve della dimensione massima del pacchetto per l'endpoint. La dimensione massima del pacchetto per l'endpoint viene segnalata nel membro wMaxPacketSize della struttura USB_ENDPOINT_DESCRIPTOR (descrittore dell'endpoint). Quando il controller host riceve un pacchetto più breve di wMaxPacketSize su un endpoint bulk o interrupt, il controller host interrompe immediatamente la richiesta di dati dall'endpoint e completa il trasferimento. Se il flag USBD_SHORT_TRANSFER_OK non è impostato, il controller host completa il trasferimento con un errore.
Questo flag non deve essere impostato a meno che non sia impostato anche USBD_TRANSFER_DIRECTION_IN. Nota Nei controller host EHCI USBD_SHORT_TRANSFER_OK viene ignorato per gli endpoint bulk e interrupt. Il trasferimento di pacchetti brevi nei controller EHCI non genera una condizione di errore. Nei controller host UHCI e OHCI, se USBD_SHORT_TRANSFER_OK non è impostato per un trasferimento bulk o interrupt, un trasferimento di pacchetti breve interrompe l'endpoint e viene restituito un codice di errore per il trasferimento. Il driver client deve riprendere l'endpoint inviando una richiesta di URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL prima di inviare una richiesta di trasferimento all'endpoint. |
TransferBufferLength
Specifica la lunghezza, in byte, del buffer specificato in TransferBuffer o descritto in TransferBufferMDL. Il driver del controller host restituisce il numero di byte inviati o letti dalla pipe in questo membro.
TransferBuffer
Puntatore a un buffer residente per il trasferimento o è NULL se viene fornito un MDL in TransferBufferMDL. Il contenuto di questo buffer dipende dal valore di TransferFlags. Se viene specificato USBD_TRANSFER_DIRECTION_IN questo buffer conterrà i dati letti dal dispositivo al ritorno dal driver del controller host. In caso contrario, questo buffer contiene i dati forniti dal driver per il trasferimento al dispositivo.
TransferBufferMDL
Puntatore a un MDL che descrive un buffer residente o è NULL se viene fornito un buffer in TransferBuffer. Il contenuto del buffer dipende dal valore di TransferFlags. Se viene specificato USBD_TRANSFER_DIRECTION_IN, il buffer descritto conterrà i dati letti dal dispositivo al ritorno dal driver del controller host. In caso contrario, il buffer contiene i dati forniti dal driver per il trasferimento al dispositivo. Questo file MDL deve essere allocato da un pool non di paging.
UrbLink
Riservato. Non usare.
hca
Riservato. Non usare.
Commenti
I driver possono usare la routine del servizio UsbBuildInterruptOrBulkTransferRequest per formattare questo VALORE. I buffer specificati in TransferBuffer o descritti in TransferBufferMDL devono essere non modificabili.
In un'istanza DI, sia i parametri TransferBuffer che TransferBufferMDL possono essere valori non NULL, contemporaneamente. In tal caso, il buffer di trasferimento e il MDL a cui punta TransferBuffer e TransferBufferMDL devono puntare allo stesso buffer.
Il driver dell'autobus USB elabora questa classe DISPATCH_LEVEL.
I membri riservati di questa struttura devono essere considerati opachi e sono riservati per l'uso del sistema.
Requisiti
Requisito | Valore |
---|---|
Intestazione | usb.h (include Usb.h) |