2 Replies Latest reply on Jun 9, 2020 7:54 PM by NoTa_4591161

    Community Translation - FX3/FX2LP XferData() API Usage - KBA226200

    NoTa_4591161

      Hi,               

       

      I would like to translate KBA226200 into Japanese.

      Please confirm to my work.

       

      Thanks,

      Kenshow

        • 1. Re: Community Translation - FX3/FX2LP XferData() API Usage - KBA226200
          JuyoungJ_06

          Hello, Kenshow-san

          Confirm to work this KBA.

           

          Thanks

          Jenna

          • 2. Re: Community Translation - FX3/FX2LP XferData() API Usage - KBA226200
            NoTa_4591161

            Hi Jenna-san,

                                           

            Japanese translation was over.
            Please check below.

             

            Original KBA:

            FX3/FX2LP XferData() API Usage - KBA226200

             

            Thanks.

            Kenshow

            ==============================

             

            タイトル: FX3/FX2LP XferData() APIの使い方 - 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()は、次のいずれかが発生すると戻ります。

            1. 要求された数のデータバイトが転送されていた。
            2. 短いパケットまたは長さがゼロのパケットが転送されたとき。
            3. タイムアウト(関数の呼び出し中に設定)が発生したとき。

            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

            1. PktMode」チェックボックスはオフです。
            2. Bytes to transfer」ボックスは16387バイトで埋められます(MaxPcktSizeの倍数ではありません)

            [Transfer Data]ボタンを押すと、XferData()関数はタイムアウトになるまで待機し続け、トランザクションが失敗したことを示すエラーコード997を返します。

            pastedImage_0.png  

            ケースB

            1. 「PktMode」チェックボックスがオンになっている
            2. Bytes to transfer」ボックスは16387バイトで埋められます(MaxPcktSizeの倍数ではありません)

            [Transfer Data]ボタンをクリックすると、データ転送要求が複数のXferData()関数呼び出しに分割され、それぞれがエンドポイントのMaxPcktSizeパラメーターと等しいデータ長を持ちます。この場合、要求されたデータ長の前の倍数(この場合は16384バイト、0x4000)までのデータがホストアプリケーションで受信されます。

            pastedImage_1.png  

            これらの両方の状況で、エンドポイントは停止し、ResetPipe)()関数を使用してクリアする必要があり、アプリケーションからの保留中のI/Oトランザクションは、新しい転送を実行する前にAbortPipe()関数を使用してクリアする必要があります。

               pastedImage_2.png

             

            ==============================

            10-June-2020

            Kenshow