ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
ホストPCに、HIDデバイスクラスのファンクションであることを通知するには、インターフェイスディスクリプターのbInterfaceClassフィールドを0x03とする。
USB HID クラスの種類を表わすために、当初はサブクラスを使うことが想定されていた。しかし、現実にはその種類は膨大となり、サブクラスのプロトコル定義は非現実的と判断された。
結果として、USB HID クラスデバイスはレポートディスクリプターでプロトコルを判別する。
しかし、キーボードおよびマウスはBIOSがサポートするデバイス(ブートデバイス)として、シンプルな実装が求められた。そこで、ブートデバイスとして用いられるUSB HID クラスデバイス(キーボードあるいはマウス)は、ブートプロトコルに対応することを示すためにサブクラスを使用する。
ホストPCに、デバイスがブートプロトコルに対応することを伝えるためには、インターフェイスディスクリプターのbInterfaceSubClassフィールドを0x01とする。
デバイスがブートプロトコルに対応している(サブクラスコードが0以外)場合は、デバイスの種類を表わすためにプロトコルコードフィールドを使う。
ホストPCに、デバイスの種類を通知するためには、インターフェイスディスクリプターのbInterfaceProtocolフィールドに値を設定する。
USB HID クラスのファンクションデバイスは、他のUSBファンクションデバイスが持つディスクリプター情報の他に、「HIDディスクリプター」「レポートディスクリプター」「フィジカルディスクリプター」(オプション)が必要である。
次のような構成になる。
一部の例外を除いて、それぞれのディスクリプターは、長さ+ディスクリプタータイプに始まる定形のフォーマットを持つ。
複数のディスクリプターが続く場合、デバイスディスクリプター、コンフィギュレーションディスクリプターの後は、「インターフェイスディスクリプターと以下一式、エンドポイントディスクリプター」を繰り返す。
HIDディスクリプターは、レポートディスクリプターとフィジカルディスクリプター(オプション)を纏めるために存在する。
次のような構造である。
クラスディスクリプター数が複数ある場合、+6と+7の内容を、その数分繰り返すことになるが、その場合はbLengthも変更することになる。
レポートディスクリプターは、他と構造が全く違う。HIDディスクリプターに続いて送られるもので、独自の形式を持っている。
レポートディスクリプターは可変長で、デバイスに関する情報を提供する。
アイテムと呼ばれる情報のまとまり(階層構造)を持つのが特徴である。
アイテムには、短いアイテム(データ長0、1、2、4バイト)と、長いアイテム(データ長最大255バイト)がある。短いアイテムの場合、次のような構造である。
アイテムタイプには「Main」「Global」「Local」の3種類がある。各アイテムタイプごとにbTagでアイテムの種類を定義するが、Main(フィールドの定義やグループ化用)が5種類、Global(データの記述に使用)は12種類、Local(特性の定義に使用)は10種類ある。これらを組み合わせて、レポートディスクリプターを構成する。
なお、1バイト目が0xfe (1111 11 10)の場合、長いアイテムになる。
USBは、Usageと呼ばれる数値でデバイスの種類を定義する。これは32ビットの符号なし整数であり、USB-IFがHID Usage Tableで定義している。
このうち、Usageの上位16ビットがUsage page、下位16ビットがUsage IDである。
レポートディスクリプターでは、まずUsage Pageがあり大まかなデバイスの種類を選ぶ。次にUsage IDがあり、Usage Pageごとに定義される番号によって、実際のデバイスを選択することになる。
様々なものが定義されているが、よく使われるものを抜粋する。Usage Pageごとに一意になるので、Usage Pageにぶら下げるようにして表記する。
JoystickやGame Padは特殊なケースであり、Generic Desktop Pageで定義されている。Usage Page=0x05 Game Controls Pageではない。
アイテム | 値(HEX) | ||
Usage Page (Generic Desktop) | 05 01 | ||
Usage (Mouse) | 09 02 | ||
Collection (Application) | A1 01 | ||
Usage (Pointer) | 09 01 | ||
Collection (Physical) | A1 00 | ||
Usage Page (Buttons) | 05 09 | ||
Usage Minimum (01) | 19 01 | ||
Usage Maximum (03) | 29 03 | ||
Logical Minimum (0) | 15 00 | ||
Logical Maximum (1) | 25 01 | ||
Report Count (3) | 95 03 | ||
Report Size (1) | 75 01 | ||
Input (Data, Variable, Absolute) | 81 02 | ||
Report Count (1) | 95 01 | ||
Report Size (5) | 75 05 | ||
Input (Constant) | 81 01 | ||
Usage Page (Generic Desktop) | 05 01 | ||
Usage (X) | 09 30 | ||
Usage (Y) | 09 31 | ||
Usage (Wheel) | 09 38 | ||
Logical Minimum (−127) | 15 81 | ||
Logical Maximum (127) | 25 7F | ||
Report Size (8) | 75 08 | ||
Report Count (3) | 95 03 | ||
Input (Data, Variable, Relative) | 81 06 | ||
End Collection | C0 | ||
End Collection | C0 |
コメントなどを投稿するフォームは、日本語対応時のみ表示されます