
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
FX3/FX2LP XferData() APIの使い方 - KBA226200 - Community Translated (JA)
Community Translated by NoTa_4591161 Version: **
Translation - English: FX3/FX2LP XferData() API Usage - KBA226200
質問:
XferData()API関数の「パケットモード」パラメーターの意味は何ですか?
回答:
KBAは、デバイスがエンドポイントディスクリプタのMaxPcktSizeパラメーターの倍数でデータパケットを送信する条件について説明します。
XferData() API関数がCyUSBライブラリで定義されています。このライブラリのソースファイルはhttp://www.cypress.com/documentation/software-and-drivers/ez-usb-fx3-software-development-kitにあります。
このAPI関数は、CyUSB3ドライバーにバインドされているホストとデバイス間の同期データ転送に使用されます。このAPI関数を使用するには、CyUSB.NETガイド/ Cypress USB Control Centerソースコードを参照してください。サイプレスUSBコントロールセンターは、「Transfer Data」ボタンが押されたときにこのAPIを呼び出します。
XferData()は、次のいずれかが発生すると戻ります。
- 要求された数のデータバイトが転送されていた。
- 短いパケットまたは長さがゼロのパケットが転送されたとき。
- タイムアウト(関数の呼び出し中に設定)が発生したとき。
XferData()の定義は次のようにします:
public bool XferData(ref byte[] buf, ref int len, bool PacketMode);
IN転送中に、ホストから要求されたデータのバイトがディスクリプタ内のエンドポイントのMaxPcktSizeパラメーターの倍数でない場合、XferData()関数は失敗し、トランザクションが失敗したことを示すエラーコード997が表示されます。これらの条件下で、「PacketMode」パラメーターの重要性は次のように説明されます。USBBulkSourceSinkファームウェアでプログラムされたFX3デバイスを考えます。このファームウェアは、1024バイトとしてMaxPcktSizeで INエンドポイントを設定します。サイプレスUSBコントロールセンターは、デバイスからデータを読み取るために使用されます。サイプレスUSBコントロールセンターの[ PktMode]チェックボックスが選択されている場合、XferData関数のPacketModeパラメータはtrueに設定されます。ケースA:
- 「PktMode」チェックボックスはオフです。
- 「Bytes to transfer」ボックスは16387バイトで埋められます(MaxPcktSizeの倍数ではありません)
[Transfer Data]ボタンを押すと、XferData()関数はタイムアウトになるまで待機し続け、トランザクションが失敗したことを示すエラーコード997を返します。
ケースB:
- 「PktMode」チェックボックスがオンになっている
- 「Bytes to transfer」ボックスは16387バイトで埋められます(MaxPcktSizeの倍数ではありません)
[Transfer Data]ボタンをクリックすると、データ転送要求が複数のXferData()関数呼び出しに分割され、それぞれがエンドポイントのMaxPcktSizeパラメーターと等しいデータ長を持ちます。この場合、要求されたデータ長の前の倍数(この場合は16384バイト、0x4000)までのデータがホストアプリケーションで受信されます。
これらの両方の状況で、エンドポイントは停止し、ResetPipe)()関数を使用してクリアする必要があり、アプリケーションからの保留中のI/Oトランザクションは、新しい転送を実行する前にAbortPipe()関数を使用してクリアする必要があります。