単独のHIDインターフェイスで複数のHIDクラス機能を実装する方法 – KBA228479 - Community Translated (JA)

Version 1

    Community Translated by  NoTa_4591161        Version: **

     

    Translation - English: How to Implement Multiple HID Class Functionalities with a Single HID interface – 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に添付されています。