USB HID クラス

読み:ユーエスビー・エイチアイディー・クラス
外語:HID: Human Interface Device class 英語
品詞:名詞

USBにおけるデバイスクラスの一つ。

目次

利用者が電子計算機に対して情報を入力するために使うクラスとして扱われ、主にキーボードマウスが該当する。

他の対象としては、ジョイスティックタブレット等。

キーボードとマウスに関してはHIDBPという簡易プロトコルが規定されている。

電源装置であるUPSも、(なぜか)殆どがUSB HID クラスである。

インターフェイスディスクリプター

HIDクラス

ホストPCに、HIDデバイスクラスのファンクションであることを通知するには、インターフェイスディスクリプターのbInterfaceClassフィールドを0x03とする。

サブクラス

USB HID クラスの種類を表わすために、当初はサブクラスを使うことが想定されていた。しかし、現実にはその種類は膨大となり、サブクラスのプロトコル定義は非現実的と判断された。

結果として、USB HID クラスデバイスはレポートディスクリプターでプロトコルを判別する。

しかし、キーボードおよびマウスはBIOSがサポートするデバイス(ブートデバイス)として、シンプルな実装が求められた。そこで、ブートデバイスとして用いられるUSB HID クラスデバイス(キーボードあるいはマウス)は、ブートプロトコルに対応することを示すためにサブクラスを使用する。

ホストPCに、デバイスがブートプロトコルに対応することを伝えるためには、インターフェイスディスクリプターのbInterfaceSubClassフィールドを0x01とする。

プロトコルコード

デバイスがブートプロトコルに対応している(サブクラスコードが0以外)場合は、デバイスの種類を表わすためにプロトコルコードフィールドを使う。

ホストPCに、デバイスの種類を通知するためには、インターフェイスディスクリプターのbInterfaceProtocolフィールドに値を設定する。

  • キーボードの場合は0x01
  • マウスの場合は0x02

ディスクリプター

構成

USB HID クラスのファンクションデバイスは、他のUSBファンクションデバイスが持つディスクリプター情報の他に、「HIDディスクリプター」「レポートディスクリプター」「フィジカルディスクリプター」(オプション)が必要である。

次のような構成になる。

  1. デバイスディスクリプター
  2. コンフィギュレーションディスクリプター
  3. インターフェイスディスクリプター
    • HIDディスクリプター
      • レポートディスクリプター
      • フィジカルディスクリプター
  4. エンドポイントディスクリプター

一部の例外を除いて、それぞれのディスクリプターは、長さ+ディスクリプタータイプに始まる定形のフォーマットを持つ。

複数のディスクリプターが続く場合、デバイスディスクリプター、コンフィギュレーションディスクリプターの後は、「インターフェイスディスクリプターと以下一式、エンドポイントディスクリプター」を繰り返す。

HIDディスクリプター

HIDディスクリプターは、レポートディスクリプターとフィジカルディスクリプター(オプション)を纏めるために存在する。

次のような構造である。

  • +0 bLength (1バイト) ディスクリプターの長さ(0x09で固定)
  • +1 bDescriptorType (1バイト) ディスクリプターのタイプ(0x21で固定)
  • +2 bcdHID (2バイト) BCD表現のHIDバージョン(1.10なら0x0110)
  • +4 bCountryCode (1バイト) 地域固有デバイスのための国識別番号(必要がなければ0)
  • +5 bNumDescriptors (1バイト) クラスディスクリプターの数(例えば1)
  • +6 bDescriptorType (1バイト) クラスディスクリプターの型 (HID Reportの場合0x22)
  • +7 wDescriptorLength (2バイト) レポートディスクリプターのサイズ

クラスディスクリプター数が複数ある場合、+6と+7の内容を、その数分繰り返すことになるが、その場合はbLengthも変更することになる。

レポートディスクリプター

ディスクリプター構造

レポートディスクリプターは、他と構造が全く違う。HIDディスクリプターに続いて送られるもので、独自の形式を持っている。

レポートディスクリプターは可変長で、デバイスに関する情報を提供する。

アイテムと呼ばれる情報のまとまり(階層構造)を持つのが特徴である。

アイテムには、短いアイテム(データ長0、1、2、4バイト)と、長いアイテム(データ長最大255バイト)がある。短いアイテムの場合、次のような構造である。

  1. 1バイト目
    • bit7…4 bTag
    • bit3…2 bType
      • 00 Main
      • 01 Global
      • 10 Local
      • 11 Reserve
    • bit1…0 bSize
      • 00 0バイト
      • 01 1バイト
      • 10 2バイト
      • 11 4バイト
  2. 2バイト目以降 (短いアイテムの場合、必要に応じて、データが1、2、4バイト付く)

アイテムタイプには「Main」「Global」「Local」の3種類がある。各アイテムタイプごとにbTagでアイテムの種類を定義するが、Main(フィールドの定義やグループ化用)が5種類、Global(データの記述に使用)は12種類、Local(特性の定義に使用)は10種類ある。これらを組み合わせて、レポートディスクリプターを構成する。

なお、1バイト目が0xfe (1111 11 10)の場合、長いアイテムになる。

  1. 1バイト目 (1111 11 10)
  2. 2バイト目 bDataSize
  3. 3バイト目 bLongItemTag
  4. 4バイト目以降 (データ0〜255バイト)
Usage

USBは、Usageと呼ばれる数値でデバイスの種類を定義する。これは32ビットの符号なし整数であり、USB-IFがHID Usage Tableで定義している。

このうち、Usageの上位16ビットがUsage page、下位16ビットがUsage IDである。

レポートディスクリプターでは、まずUsage Pageがあり大まかなデバイスの種類を選ぶ。次にUsage IDがあり、Usage Pageごとに定義される番号によって、実際のデバイスを選択することになる。

Usage Page
  • 0x01 Generic Desktop Page
  • 0x02 Simulation Controls Page
  • 0x03 VR Controls Page
  • 0x04 Sport Controls Page
  • 0x05 Game Controls Page
  • 0x06 Generic Device Controls Page
  • 0x07 Keyboard/Keypad Page
  • 0x08 LED Page
  • 0x09 Button Page
  • 0x0A Ordinal Page
  • 0x0B Telephony Device Page
  • 0x0C Consumer Page
  • 0x0D Digitizers
  • 0x10 Unicode Page
  • 0x14 Alphanumeric Display Page
  • 0x40 Medical Instrument Page
Usage ID

様々なものが定義されているが、よく使われるものを抜粋する。Usage Pageごとに一意になるので、Usage Pageにぶら下げるようにして表記する。

  • 0x01 Generic Desktop Page
    • 0x01 Pointer
    • 0x02 Mouse
    • 0x04 Joystick
    • 0x05 Game Pad
    • 0x06 Keyboard
    • 0x07 Keypad
    • 0x80 System Control
  • 0x0C Consumer Page
    • 0x01 Consumer Control

JoystickやGame Padは特殊なケースであり、Generic Desktop Pageで定義されている。Usage Page=0x05 Game Controls Pageではない。

マウスの例(USB 2.0の仕様書にある例)

アイテム値(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 CollectionC0
End CollectionC0
用語の所属
USB (バス)
デバイスクラス
関連する用語
HIDBP

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club