_URB_BULK_OR_INTERRUPT_TRANSFER構造体 (usb.h)
_URB_BULK_OR_INTERRUPT_TRANSFER構造は、USB クライアント ドライバーが一括パイプまたは割り込みパイプでデータを送受信するために使用されます。
構文
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;
};
メンバー
Hdr
URB ヘッダー情報を指定する _URB_HEADER 構造体へのポインター。 Hdr.Function をURB_FUNCTION_BULK_OR_INTERRUPT_TRANSFERし、 Hdr.Length を に設定する sizeof(_URB_BULK_OR_INTERRUPT_TRANSFER)
必要があります。
PipeHandle
バルク パイプまたは割り込みパイプへの不透明なハンドルを指定します。 ホスト コントローラー ドライバーは、クライアント ドライバーが URB_FUNCTION_SELECT_CONFIGURATION 型の URB を持つデバイス構成を選択したとき、またはクライアント ドライバーが URB_FUNCTION_SELECT_INTERFACE 型の URB を持つインターフェイスの設定を変更したときに、このハンドルを返します。
TransferFlags
0、1、または次のフラグの組み合わせを指定します。
値 | 意味 |
---|---|
|
デバイスからデータを要求するように設定されています。 デバイスにデータを転送するには、このフラグをクリアする必要があります。 |
|
デバイスにデータを転送するように設定されています。 このフラグの設定は、USBD_TRANSFER_DIRECTION_IN フラグをクリアすることと同じです。 |
|
エンドポイントの最大パケット サイズよりも短いパケットをデバイスから受信したときにエラーを返さないようにホスト コントローラーに指示するように設定されています。 エンドポイントの最大パケット サイズは、USB_ENDPOINT_DESCRIPTOR構造体 (エンドポイント記述子) の wMaxPacketSize メンバーで報告されます。 ホスト コントローラーが一括または割り込みエンドポイントで wMaxPacketSize よりも短いパケットを受信すると、ホスト コントローラーは直ちにエンドポイントからのデータの要求を停止し、転送を完了します。 USBD_SHORT_TRANSFER_OK フラグが設定されていない場合、ホスト コントローラーはエラーで転送を完了します。
USBD_TRANSFER_DIRECTION_INも設定されていない限り、このフラグを設定しないでください。 メモ EHCI ホスト コントローラーでは、一括エンドポイントと割り込みエンドポイントのUSBD_SHORT_TRANSFER_OKは無視されます。 EHCI コントローラーで短いパケットを転送しても、エラー状態になりません。 UHCI および OHCI ホスト コントローラーで、一括転送または割り込み転送にUSBD_SHORT_TRANSFER_OKが設定されていない場合、短いパケット転送がエンドポイントを停止し、転送に対してエラー コードが返されます。 クライアント ドライバーは、エンドポイントに転送要求を送信する前に、URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL要求を送信してエンドポイントを再開する必要があります。 |
TransferBufferLength
TransferBuffer またはTransferBufferMDL で説明されているバッファーの長さをバイト単位で指定します。 ホスト コントローラー ドライバーは、このメンバーのパイプに送信またはパイプから読み取られたバイト数を返します。
TransferBuffer
転送用の常駐バッファーへのポインター。MDL が TransferBufferMDL で指定されている場合は NULL です。 このバッファーの内容は、 TransferFlags の値によって異なります。 USBD_TRANSFER_DIRECTION_INが指定されている場合、このバッファーには、ホスト コントローラー ドライバーからの復帰時にデバイスから読み取られたデータが含まれます。 それ以外の場合、このバッファーには、デバイスへの転送用のドライバーから提供されたデータが含まれます。
TransferBufferMDL
常駐バッファーを記述する MDL へのポインター。バッファーが TransferBuffer で指定されている場合は NULL です。 バッファーの内容は、 TransferFlags の値によって異なります。 USBD_TRANSFER_DIRECTION_INが指定されている場合、記述されたバッファーには、ホスト コントローラー ドライバーから返されたデバイスから読み取られたデータが含まれます。 それ以外の場合、バッファーには、デバイスへの転送用のドライバーから提供されたデータが含まれます。 この MDL は、非ページ プールから割り当てる必要があります。
UrbLink
予約済み。 使用しないでください。
hca
予約済み。 使用しないでください。
注釈
ドライバーは 、UsbBuildInterruptOrBulkTransferRequest サービス ルーチンを使用して、この URB を書式設定できます。 TransferBuffer で指定されたバッファー、または TransferBufferMDL で説明されているバッファーは、ページ不可能である必要があります。
URB では、TransferBuffer パラメーターと TransferBufferMDL パラメーターの両方に NULL 以外の値を同時に指定できます。 その場合、転送バッファーと MDL が TransferBuffer と TransferBufferMDL を指している場合は、同じバッファーを指す必要があります。
USB バス ドライバーは、DISPATCH_LEVELでこの URB を処理します。
この構造体の予約済みメンバーは不透明として扱う必要があり、システム使用のために予約されています。
要件
要件 | 値 |
---|---|
Header | usb.h (Usb.h を含む) |