- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I would like to translate KBA228479into Japanese.
Please confirm to my work.
Thanks,
Kenshow
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello, Kenshow-san
Confirm to work this KBA
Thanks
Jenna
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
==============================
タイトル: 単独の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インターフェイスを使用したマウスとキーボード機能の実装について説明します。
- レポートディスクリプタには、マウス用とキーボード用の2つの コレクションアプリケーションが必要です。各コレクションアプリケーションに、各アプリケーションのレポートIDアイテムを配置します。
- レポートでは、最初のバイトはレポート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キーコード */
// LEDの5ビット入力レポートを宣言します */
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 ); / * 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 SDKのMouseDemoサンプル(デフォルトのSDKパス: C:\Program Files(x86)\Cypress\EZ-USB FX3 SDK\1.3\firmware\hid_examples\cyfx3_hid)に実装され、参照用にこのKBAに添付されています。
==============================
29-May-2020