USB HIDディスクリプターを構築するための値はどこで検索しますか?


10

自分が試したいPIC32 USBプロジェクトのCでUSB HID記述子を作成する方法について少し自習しようとしています。

HID Usage Tablesドキュメントをhttp://www.usb.org/developers/hidpage/からダウンロードし、実際の値がHID記述子のさまざまな要素に示されている場所を見つけようとしました。

私が見ているサンプルからの抜粋で説明しましょう:

ROM struct{BYTE report[HID_RPT01_SIZE];}hid_rpt01={{
  0x05,0x01,        // USAGE_PAGE (Generic Desktop)
  0x09,0x05,        // USAGE (Game Pad)
  0xA1,0x01,        // COLLECTION (Application)
  0x15,0x00,        //   LOGICAL_MINIMUM(0)
  0x25,0x01,        //   LOGICAL_MAXIMUM(1)
  0x35,0x00,        //   PHYSICAL_MINIMUM(0)
  0x45,0x01,        //   PHYSICAL_MAXIMUM(1)
  // ...

上記の例から、BYTE配列がキーと値のペアで構成されていることがわかります。たとえば、2行目:0x05,0x01はキー0x05を示し、これはUsage Pageであり、0x01はGeneric Desktopを示す値です。

これらの値がHID Usage Table PDFドキュメントのどこに示されているのかを把握しようとしています。たとえば、私はその参照を見つけることができません

USAGE_PAGE == 0x05

そして例えば

COLLECTION == 0xA1

PDFで0xA1を検索しましたが、結果はありませんでした。値が何であるかを見つけることができる唯一の方法は、例のコメントを見るか、上のリンクからUSB記述子ツールを使用することです。

私はただ疑問に思っています、私はこのキー/値のリファレンスドキュメントを見逃してしまったのですか?

たとえば次のリンクのように、たくさんの例がオンラインにあります:http : //www.frank-zhao.com/cache/hid_tutorial_1.php

しかし、これでもEND_COLLECTION == 0xc0のような文字列値のロードを参照しています

これらの値のリファレンスはどこにありますか?何が欠けていますか?


USB記述子ツールを使用してHID記述子を作成する必要があるようです。:)
josef.van.niekerk 2013年

回答:


19

USBのドキュメントはかなりひどいです。それは過度の総称化に悩まされており、ドキュメントから特定のアプリケーションに到達するのが難しいほど、すべてを非常に一般的かつ一般的にしようとしています。

記述子の形式は、提供するusb.orgへのリンクにある「HIDのデバイスクラス定義」と呼ばれるドキュメントにあります。

欠けている重要なことは、さまざまなセグメント(0x05など)0xという接頭辞で文書化されていないことです。実際、彼らは一般的にそれらを生のバイナリで記述します

たとえば、0xA1に関して: ここに画像の説明を入力してください

あなたはそれを見ることができるバイナリプレフィックスが1010_00nnコレクションであり、そしてPostfixがそれを示してnnnn_nn01、それは1バイト長であることを示します。次に、後続のバイトがコレクション型として解釈されます。この場合は、アプリケーション型です。次に、HID記述子パーサーが別のコレクションタグまたは終了コレクションマーカーを見つけるまで、追加のバイトが解釈されるコンテキストを設定します。

が無視END COLLECTIONされ0b1100_00nn、として指定されていることがわかりますnn。これは0xC0から来たのかです。

他の引数がどのように構成されているかを確認することもできます。たとえば、LOGICAL MINIMUMis 0x25、または0b0010_0101です。これから、データ長が0bnnnn_nn011バイトであることがわかります。指定子LOGICAL MINIMUM0b0010_01nn

ここに画像の説明を入力してください

USAGE PAGE記述子の構造は同じです。使用法ページを選択するコマンドはで0000_01nnnnnn_nn011バイト長であることを示しています。ドキュメントには、usages-pagesが32ビットであると記載されているため、上位ビットはゼロであるか、ドキュメントの別の部分から推測されると想定されています。実際にどのように指定されているのかわかりません。

ここには、さまざまなHID定数の良いページがあります

そして、BSDソースからのより新しいバージョンはここにあります(ありがとう、@ crazysim!)(最新のHEAD、持続しない場合があります)。


ちょうど私が必要としたもの。詳細な回答をありがとうございました。本当に助かります!;)
josef.van.niekerk 2013

1
@ josef.van.niekerk-問題ありません。私がUSB標準を掘り下げる前に久しぶりに、それらは私が覚えているほど不透明です。
Connor Wolf

重大な問題をお詫びしますが、USB.orgへのリンクが機能しなくなります。
Rob van der Veer 2015

1
@RobvanderVeerを修正する必要があります。
hoosierEE 2015

1
その「さまざまなHID定数の適切なページ」をFreeBSDソースからのそのファイルの新しいバージョンに変更する必要がありますか?
crazysim、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.