テクニカル ドキュメント #107



Doc ID: 107
製品: WinDriver
Version:  5.04 - 5.22

WD_UsbTransfer() 関数を使って、データ転送をする際に、USB_SHORT_TRANSFER および USB_FULL_TRANSFER フラグをどのように使用しますか? (V5.04 - 5.22)

上記のフラグは、WinDriver のバージョン 5.04 から利用可能です。

USB_SHORT_TRANSFER フラグを設定する場合、WD_UsbTransfer() 関数は以下の1つ以上の結果を返します:
  1. 短い転送を示すために、短いパケット (たとえば、最大パケット サイズより小さい場合) を転送、またはデバイスが 0 パケットを転送した場合、fOk は TRUE となります。

  2. 短いパケットを転送する (または 0 パケットを受信する) 前に、タイムアウト (usbTrans.dwTimeout に指定) となった場合、fOk は FALSE となります。

USB_FULL_TRANSFER フラグを設定する場合、WD_UsbTransfer() 関数は以下の1つ以上の結果を返します:
  1. バッファ全体 (usbTrans.dwBytes) を filled/written (満たす) 場合、fOk は TRUE となります。

  2. バッファ全体を filled/written (満たす) 前に、タイムアウトとなった場合、fOk は FALSE となります (転送が成功する場合もあります)。

デフォルトでは、bulk および interrupt 転送用に USB_SHORT_TRANSFER フラグを設定し、isochronous 転送用に USB_FULL_TRANSFER フラグを設定します。Control 転送は常に short 転送です。

以前の WinDriver のバージョン (v5.03 以前) では、WD_UsbTransfer() 関数は、v5.04 およびそれ以降の USB_SHORT_TRANSFER フラグの上記の説明のように、動作していました (すべての転送タイプで)。その関数は常に以下の1つ以上の結果を返します:
  1. 短い転送を示すために、短いパケット (たとえば、最大パケット サイズより小さい場合) を転送、またはデバイスが 0 パケットを転送した場合、fOk は TRUE となります (たとえ、バッファ全体が filled/written (満たす) されなくても)。

  2. そのような転送なしで、タイムアウトとなった場合、fOK は FALSE となります。