2 Replies Latest reply on May 28, 2020 6:05 PM by NoTa_4591161

    Community Translation - How to Implement Multiple HID Class Functionalities with a Single HID interface – KBA228479

    NoTa_4591161

      Hi,

       

      I would like to translate KBA228479into Japanese.

      Please confirm to my work.

       

      Thanks,

      Kenshow

        • 2. Re: Community Translation - How to Implement Multiple HID Class Functionalities with a Single HID interface – KBA228479
          NoTa_4591161

          Hi Jenna-san,

           

          Japanese translation was over.
          Please check below.

           

          Original KBA:

          How to Implement Multiple HID Class Functionalities with a Single HID interface – KBA228479

           

          Thanks.

          Kenshow

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

           

          タイトル: 単独のHIDインターフェイスで複数のHIDクラス機能を実装する方法 – KBA228479

           

          バージョン:**

           

          一般に、HIDインターフェイスは、マウス、キーボード、ジョイスティックなどの単独のHID機能に使用されます。2つの機能、たとえばマウスとキーボードを組み合わせる場合、2つのHIDインターフェイスを作成する必要があります(つまり、2つのエンドポイント、2つのレポートディスクリプタ、2つのHIDディスクリプタ、2つのDMAチャネル)。2つのインターフェイスの代わりに、1つのインターフェイス(1つのエンドポイント、1つのレポートディスクリプタ、1つのHIDディスクリプタ、1つのDMAチャネル)で実行できます。

          このKBAでは、1つのHIDインターフェイスを使用したマウスとキーボード機能の実装について説明します。

          1. レポートディスクリプタには、マウス用とキーボード用の2つの コレクションアプリケーションが必要です。各コレクションアプリケーションに、各アプリケーションのレポートIDアイテムを配置します。
          2. レポートでは、最初のバイトはレポートIDで、残りのバイトはレポート情報でなければなりません。

          たとえば、最初のコレクション(N = 1)にマウスを使用し、2番目(N = 2)にキーボードを使用する場合、マウスの状態を報告するには、0x01に続いてボタンフラグと軸データを送信する必要があります。キーボードの状態を報告するには、0x02を送信し、続いて代替キーバイト、次にキーコードを送信する必要があります。

          レポートディスクリプタとレポートフォーマットを以下に説明します。

           

          レポートディスクリプタ:

          0x05,  0x01, /*  使用法ページ(汎用デスクトップ)  */

          0x09,  0x02, /*  使用法(マウス)  */

          0xA1,  0x01, /*  コレクション(アプリケーション)  */

          0x09,  0x01, /*  使い方(ポインタ)*/

          0xA1,  0x00, /*  コレクション(物理)  */

          0x85, 0x01,  /*  レポートID   */

          0x05,  0x09, /*  使用法ページ(ボタン)  */

          0x19,  0x01, /*  最小使用量(01  */

          0x29,  0x03, /*  最大使用量(03  */

          0x15,  0x00, /*  論理最小値(0  */

          0x25,  0x01, /*  論理最大値(0  */

          0x95,  0x03, /*  レポート数(3  */

          0x75,  0x01, /*  レポートサイズ(1  */

          0x81,  0x02, /*  入力(データ変数絶対)  */

          0x95,  0x01, /*  レポート数(1  */

          0x75,  0x05, /*  レポートサイズ(5  */

          0x81,  0x01, /*  入力(定数); 5ビットパディング  */

          0x05,  0x01, /*  使用法ページ(汎用デスクトップ)  */

          0x09,  0x30, /*  使用法(X  */

          0x09,  0x31, /*  使用法(Y  */

          0x15,  0x81, /*  論理最小値(-127  */

          0x25,  0x7F, /*  論理最大値(127  */

          0x75,  0x08, /*  レポートサイズ(8  */

          0x95,  0x02, /*  レポート数(2  */

          0x81,  0x06, /*  入力(データ変数相対)  */

          0xC0,  0xC0, /*  End Collection,  End Collection  */

          0x09,  0x06, /*  使用法(キーボード)  */

          0xA1,  0x01, /*  コレクション(アプリケーション)  */

          0x85, 0x02,  /*  レポートID   */

          0x05,  0x07, /*  使用法ページ(キーコード)  */

          0x19,  224, /*  最小使用量  */

          0x29,  231, /*  最大使用量  */

          0x15,  0, /*  論理最小値  */

          0x25,  1, /*  論理最大値  */

          0x75,  1, /*  レポートサイズ= 1ビット  */

          0x95,  8, /*  レポート数  */

          0x81,  2, /*  入力(DataAbsolute=修飾子バイト  */

          0x81,  1, /*  入力(定数)=予約済みバイト  */

          0x75,  8, /*  レポートサイズ= 1バイト  */

          0x95,  3, /*  レポート数= 3コード  */

          //印刷可能なASCIIキー(およびCR)のみをサポートします  */

          0x19,  0, /*  最小使用量  */

          0x29,  0x38, /*  最大使用量  */

          0x15,  0, /*  論理最小値  */

          0x25,  0x38, /*  論理最大値  */

          0x81,  0, /*  入力(データ配列)= 3キーコード  */ 

          // LED5ビット入力レポートを宣言します  */

          0x05,  0x08, /*  使用法ページ(LED  */

          0x19,  0x01, /*  最小使用量  */

          0x29,  0x05, /*  最大使用量  */

          0x15,  0, /*  論理最小値  */

          0x25,  0x01, /*  論理最大値  */

          0x75,  0x01, /*  レポートサイズ= 1ビット  */

          0x95,  0x05, /*  レポート数  */

          0x91,  0x02, /*  出力(DataAbsolute= LED   */

          0x95,  0x03, /*  レポート数  */

          0x91,  0x01, /*  出力(定数)=次のバイト境界へのLEDパディング  */

          0xC0  /*  コレクションの終了  */

           

          マウスのレポートフォーマット:

          CyU3PMemSet((uint8_t)outBuf.buffer, 0, 10);

          /*  レポートデータを出力バッファーにコピー  */

          outBuf.buffer[0] = (uint8_t) (0x01); /* レポートID  */

          outBuf.buffer[1] = (uint8_t) (0x00); /* ボタンのクリック

          outBuf.buffer[2] = (uint8_t) (glMouseData [i]); / * X

          outBuf.buffer[3] = (uint8_t) (glMouseData [i + 1]); /* Y

          status = CyU3PDmaChannelCommitBuffer(&glChHandleIntrCPU2U, 4, 0);

           

          キーボードのレポートフォーマット:

          CyU3PMemSet(outBuf.buffer, 0, 10);

          /* レポートデータを出力バッファーにコピー */

          outBuf.buffer[0] = (uint8_t) (0x02); /* レポートID */

          outBuf.buffer[1] = (uint8_t) (0x02); /* Modifier */

          outBuf.buffer[2] = (uint8_t) (0x00); /* Cosntant Byte */

          outBuf.buffer[3] = (uint8_t) (0x06); /* C */

          outBuf.buffer[4] = (uint8_t) (0x1C); /* Y */

          outBuf.buffer[5] = (uint8_t) (0x28); /* Enter */

            status = CyU3PDmaChannelCommitBuffer(&glChHandleIntrCPU2U, 6, 0);

           

          これらの変更は、FX3 SDKMouseDemoサンプル(デフォルトのSDKパス: C\Program Filesx86\Cypress\EZ-USB FX3 SDK\1.3\firmware\hid_examples\cyfx3_hid)に実装され、参照用にこのKBAに添付されています。

           

           

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

          29-May-2020

          Kenshow