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
USBD_TRANSFER_DIRECTION_IN
È impostato per richiedere i dati da un dispositivo. Per trasferire i dati in un dispositivo, questo flag deve essere chiaro.
USBD_TRANSFER_DIRECTION_OUT
È impostato per trasferire i dati in un dispositivo. L'impostazione di questo flag equivale alla cancellazione del flag di USBD_TRANSFER_DIRECTION_IN.
USBD_SHORT_TRANSFER_OK
È 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)

Vedi anche

URB

Strutture USB

_URB_HEADER