最終更新:2015-08-26 (水) 20:29:44 (3165d)
HID/レポート
HID インターフェースでは、Input、Output、Featureの3タイプのレポートをデバイスとホストの間で転送します。これらのレポートのフォーマットは、レポートディスクリプタでインターフェースごとに定義されます。
メモ
- 普通はインタラプトIN(必須)/インタラプトOUT(Optional)エンドポイントで送受信を行う。
- HIDのクラスリクエストのSET_REPORT/GET_REPORTはコントロール転送でレポートを送受信する
メモ
- Using USB terminology, a device may send or receive a transaction every USB frame (1 millisecond). A transaction may be made up of multiple packets (token, data, handshake) but is limited in size to 8 bytes for low-speed devices and 64 bytes for high-speed devices. A transfer is one or more transactions creating a set of data that is meaningful to the device—for example, Input, Output, and Feature reports.
- 最初のバイトはレポートID。
エンディアン
- Multibyte numeric values in reports are represented in little-endian format, with the least significant byte at the lowest address.
USB/パイプ
コントロールパイプ 必須 インタラプトIN 必須 インタラプトOUT Optional
レポートディスクリプタ
- レポートの構造はレポートディスクリプタで定義する。マニアック。
メインアイテム(抜粋)
レポート 説明 レポートディスクリプタ 転送の種類 パイプ Inputレポート ホストへ入力するレポート。ボタンとかスイッチとか レポートディスクリプタ/Input インタラプト転送 インタラプトIN(必須)、コントロールパイプ Outputレポート ホストから出力するレポート。LEDの制御とか レポートディスクリプタ/Output インタラプト転送 コントロールパイプ (オプションでインタラプトOUT?) Featureレポート 手動で読み書きできる。主にデバイスのコンフィギュレーション情報を指定する。エンドポイント0を使用する。(双方向) レポートディスクリプタ/Feature コントロール転送 コントロールパイプ
グローバルアイテム(必須項目抜粋)
item tag bTag bType bSize 意味 bSize=0 bSize=1 bSize=2 bSize=3 Usage Page 0000 01 nn 現在の Usage Page を指定している値。アイテム使用法のインデックスを定義 - 0x05 0x06 0x07 Logical Minimum 0001 01 nn 変数または配列のアイテムが報告する最小値。たとえば、0~128 まで X位置価値を報告するマウスは、0 の論理的な最小値をもつ。 0x14 0x15 0x16 0x17 Logical Maximum 0010 01 nn 変数または配列のアイテムが報告する最大値。たとえば、0~128 まで X位置価値を報告するマウスは、128 の論理的な最大値をもつ。 0x24 0x25 0x26 0x27 Report Size 0111 01 nn レポートフィールドのサイズをビットで指定する符号なし値 0x74 0x75 0x76 0x77 Report Count 1001 01 nn アイテムのデータフィールド数を指定する符号なし整数
何個のフィールドがこの特定のアイテムのためにレポートに含められるかを決定する(したがってビットが何個であるかがレポートに付け加えられる)0x94 0x95 0x96 0x97
ローカルアイテム(必須項目抜粋)
item tag bTag bType bSize 意味 bSize=0 bSize=1 bSize=2 bSize=3 Usage 0000 10 nn アイテムまたはコレクションの用法(Usage)インデックスを定義 0x08 0x09 0x0A 0x0B
例
Report Size (3) Report Count (2) Input Report Size (8) Input Output
- は
- Input
ビット 0-2 3-5 6-13 14-21 サイズ 3 3 8 8 - Output
ビット 0-7 8-16 サイズ 8 8 - のレポートを定義する。
リトルエンディアン
- Multibyte numeric values in reports are represented in little-endian format, with the least significant byte at the lowest address.
ダンプ
Windows Hardware Dev Center
Handling HID Reports
- http://msdn.microsoft.com/en-us/library/windows/hardware/ff538783(v=vs.85).aspx
- ReadFile
- HidD_GetInputReport - 取得漏れがある
Windowsでのレポートの送受信
- Windowsでレポート用のバッファを確保するときは、たとえレポートID0x00のみを使用する場合もレポートID分1バイトを加えた分を確保しなければならない。
- 書き込むときもバッファの先頭にレポートIDを入れる。
- Windows/HID