ヒューマンインターフェース デバイス( HID ) は、通常人間が使用するコンピュータ デバイスの一種で、人間からの入力を受け取ったり、人間に出力を提供したりします。
「HID」という用語は、通常、USB HID仕様を指します。この用語は、Microsoftの Mike Van Flandern 氏がUSB委員会に Human Input Device クラスのワーキング グループの作成を提案したときに作られました。[いつ? ]ワーキング グループは、提案された標準が双方向通信をサポートしていたため、DECの Tom Schmidt 氏の提案により Human Interface Device クラスに名前が変更されました。 [いつ? ]
|
出力用HID | |
|
一般的なHID | |
|
あまり一般的ではないHID | |
| |
HID規格
HID 標準は、主にPC 入力デバイスの革新を可能にし、そのようなデバイスのインストール プロセスを簡素化するために採用されました。HID 概念が導入される前は、デバイスは通常、マウス、キーボード、ジョイスティックの厳密に定義されたプロトコルに準拠していました。たとえば、当時の標準マウス プロトコルは、相対的な X 軸と Y 軸のデータと、最大 2 つのボタンのバイナリ入力をサポートしていましたが、レガシー サポートはありませんでした。すべてのハードウェア革新には、既存のプロトコルでのデータの使用をオーバーロードするか、カスタム デバイス ドライバーを作成して開発者に新しいプロトコルを普及させる必要がありました。対照的に、すべての HID 定義デバイスは、任意の数のデータ型と形式を含むことができる自己記述型パッケージを提供します。コンピューター上の単一の HID ドライバーは、データを解析し、データI/Oとアプリケーション機能の動的な関連付けを可能にします。これにより、急速な革新と開発、および新しいヒューマン インターフェイス デバイスの豊富な多様化が可能になりました。
HID 標準は、いくつかの著名な企業の代表者による作業委員会によって開発されました。参加者のリストは、「ヒューマン インターフェイス デバイス (HID) のデバイス クラス定義」[1] 文書に記載されています。自己記述型の拡張可能なプロトコルの概念は、当初、Microsoftで「Raptor」というプロジェクトに取り組んでいた Mike Van Flandern と Manolito Adan によって考案されました。また、Forte Technologies 在籍中に、 ACCESS.busに基づくVFX1 VR ヘッドセットとその周辺機器用のデバイス プロトコルを定義する「SIM」プロジェクトに取り組んでいた Steve McGowan からも独立して考案されました。SIM も自己記述型で拡張可能ですが、VR やモーション キャプチャに使用されるシミュレーション デバイスに重点を置いていました。Consumer Game Developer Conference で意見を交換した後、Steve と Mike は、新興のユニバーサル シリアル バス(USB) の新しい標準について共同で取り組むことに同意しました。
HID 以前 (1995 年頃) は、PC に接続されているほぼすべてのデバイスに独自のドライバーをインストールする必要がありました。つまり、デバイス ベンダーは OS のリリースを追跡し、デバイス用の更新されたドライバーを定期的に提供し、サポートする OS ごとにドライバーを開発する必要がありました。また、当時は、フライト シミュレータ用に設計された追加ボタンやD パッド付きのジョイスティックなどの新しいデバイスでは、ドライバーだけでなく、新しいコントロールを有効にするために、それらをサポートする各ゲームによるソフトウェア サポートも必要でした。つまり、デバイス開発者には、サポートする各ゲームを有効にするという追加の責任がありました。HID デバイスがレポート記述子を使用して自分自身を記述する機能により、ハードウェア デバイス開発者とゲーム開発者が切り離されました。また、レポート記述子の概念により、OS ベンダーは、サポートするすべての OS 用のドライバーを作成または保守する必要なく、ベンダーが思いつくほぼすべての HID デバイスに対応できる HID ドライバー (パーサー) を作成できるようになりました。
そのため、HID クラスはデバイス ベンダーをゲーム ベンダーや OS ベンダーから切り離し、デバイス ベンダーはより迅速に革新を進め、開発コストを削減できるようになりました (ドライバーやゲーム開発者のサポートが不要など)。HID 使用状況テーブル ドキュメントでは、HID デバイスで表示できる何千ものコントロールが定義されています。ゲーム ベンダーは、OS の HID パーサーにクエリを実行して、デバイスで表示されるコントロールのセットを識別し、それらのコントロールをゲーム内の機能にマッピングできます。最初のリリース以来、HID 使用状況テーブル (HUT) ドキュメントには何百もの新しい用途が追加されています。
HID プロトコルには制限がありますが、最新の主流のオペレーティング システムはすべて、特別なドライバーを必要とせずに、キーボードやマウスなどの標準 USB HID デバイスを認識します。ただし、その汎用性は、22 年以上更新されていないという事実によって実証されており、現在生産されているすべての PC、タブレット、携帯電話でサポートされています。USB (つまり HID) デバイスはホットプラグが可能であるため、インストール時に「「HID 準拠デバイス」が認識されました」というメッセージが画面に表示されるのが一般的です。比較すると、このメッセージは、USB より前のPS/2 6 ピンDIN コネクタを介して接続されたデバイスでは通常表示されませんでした。PS/2 は通常、プラグ アンド プレイをサポートしていません。つまり、コンピューターの電源がオンの状態で PS/2 キーボードまたはマウスを接続しても、必ずしも機能せず、コンピューターのマザーボードに危険を及ぼす可能性があります。同様に、PS/2 標準は HID プロトコルをサポートしていませんでした。USBヒューマン インターフェイス デバイス クラスは、 USB HID について説明します。
HID プロトコル (レポート記述子とレポート メカニズム) は、 BluetoothやI2Cなど、USB 以外の多くのバスに実装されています。
「HID 統合使用表ドキュメント」には、無停電電源装置、ビデオ モニターコントロール、POSデバイス、アーケードおよびゲーム (スロット マシン) デバイス など、HID の拡張機能も多数定義されています。
レポート記述子
レポート記述子は、HID デバイスによって生成または受け入れられるメッセージを公開します。各メッセージは「レポート」と呼ばれます。レポートは、デバイス内のビット/コントロールを定義できます。これらのビット/コントロールは、読み取りまたは書き込みが可能で、定期的に生成してホストにデバイスの現在の状態を知らせることもできます。たとえば、マウスは通常、1 秒間に 200 回レポートを生成し、移動やボタンの押下をホストに通知します。レポート記述子は「ビット指向」です。つまり、コントロールは 1 ~ 32 ビットの情報を表示できます。レポート記述子で定義される各コントロールには ID があり、レポート内でのサイズと位置を定義します。レポート記述子は、それぞれが異なるセットまたは情報の組み合わせをレポートする多数のレポートを定義できます。
たとえば、基本的なマウスは 3 バイトのレポートを定義します。レポートの最下位 (0) ビットは左ボタン、次の (1) ビットは中央ボタン、3 番目の (2) ビットは右ボタンです。マウスの 8 ビット X および Y 位置座標がバイト境界に都合よく収まるように、5 ビットの「パッド」が定義されます。次に、X 座標はビット位置 8 から 15 にある 8 ビットの相対値 (つまり、前回のレポート以降の「ミッキー」の数) として定義され、Y 座標はビット位置 16 から 24 にある 8 ビットの相対値として定義され、その結果、ホストに提示されるデータ パケットが生成されます。
レポート記述子は非常に多用途で、デバイスが各コントロールの解像度、範囲、その他の多くの特性を指定できます。マウスやキーボード コントローラーがコードとデータすべてを格納するのに 1KB の ROM しかなかった時代に設計されたレポート記述子の構文には、サイズを最小限に抑える多くの機能があります。たとえば、選択したコントロール パラメーターはコントロールの複数の定義にわたって保持でき、値が変更された場合にのみ再宣言する必要があります。基本的なマウスによって生成されるレポートは 50 バイトで記述でき、104 キーボードは 65 バイトで記述できます。
物理的記述子
HID のあまり知られていない、またはあまり理解されていない機能は、物理記述子です。物理記述子は、レポート記述子で定義された個々のコントロールと相互作用する人体の部位を定義するために使用されます。ゲームを制御する場合、人差し指と親指は通常、反復的なアクションを呼び出すために使用されます。これらの指は「けいれん」反応が最も速いと考えられているため、通常、銃の引き金を引いたり、頻繁に使用されるゲーム機能をアクティブにしたりするのに使用されます。物理記述子を使用すると、デバイス ベンダーは、各コントロールにどの指が置かれているかを特定し、個々の指で到達できるコントロール セットを優先できます。この機能により、ゲーム ベンダーは、ゲームの開発時に存在しなかったデバイスに対しても、最適な既定のボタン マッピングをインテリジェントに提示できます。また、物理記述子を使用すると、HID デバイスによって全身のモーション キャプチャ情報 (つまり、人体の任意の関節の角度、方向、相対位置または絶対位置) を提示できます。また、レポート記述子を使用すると、デバイスがサポートできる任意の解像度でモーション キャプチャ データを提示できます。
HIDプロトコルのコンポーネント
HID プロトコルには、「ホスト」と「デバイス」という 2 つのエンティティがあります。デバイスは、キーボードやマウスなど、人間と直接やり取りするエンティティです。ホストはデバイスと通信し、人間が行った操作に基づいてデバイスから入力データを受信します。出力データはホストからデバイスへ、そして人間へと流れます。ホストの最も一般的な例は PC ですが、一部の携帯電話やPDAもホストになることができます。
HID プロトコルにより、デバイスの実装が非常に簡単になります。デバイスはデータ パケットを定義し、ホストに「HID 記述子」を提示します。HID 記述子は、デバイスのデータ パケットを記述するハードコードされたバイト配列です。これには、デバイスがサポートするパケットの数、パケットのサイズ、パケット内の各バイトとビットの目的が含まれます。たとえば、電卓プログラム ボタンを備えたキーボードは、ボタンの押下/解放状態がデータ パケット番号 4 の 6 番目のバイトの 2 番目のビットとして保存されていることをホストに伝えることができます (注: これらの場所は説明のみを目的としており、デバイスに固有です)。デバイスは通常、HID 記述子を ROM に保存し、HID 記述子を本質的に理解または解析する必要はありません。現在市場に出回っているマウスとキーボードのハードウェアの中には、8 ビットCPUのみを使用して実装されているものもあります。
ホストはデバイスよりも複雑なエンティティであることが予想されます。ホストはデバイスと完全に通信する前に、デバイスから HID 記述子を取得して解析する必要があります。HID 記述子の解析は複雑になる場合があります。デバイス ドライバーが最初に一般にリリースされてから数年後に、複数のオペレーティング システムでHID 記述子の解析を担当するデバイス ドライバーにバグが含まれたことが知られています。しかし、この複雑さこそが、HID デバイスの急速な革新が可能である理由です。
上記のメカニズムは、HID「レポート プロトコル」と呼ばれるものを説明しています。すべてのホストが HID 記述子を解析できるわけではないことがわかったため、HID では「ブート プロトコル」も定義されています。ブート プロトコルでは、固定データ パケット形式が使用されるため、特定のデバイスのみが特定の機能でサポートされます。このモードでは HID 記述子は使用されないため、イノベーションは制限されます。ただし、HID をサポートできないホストでも最小限の機能が使用できるという利点があります。ブート プロトコルでサポートされるデバイスは次のとおりです。
- キーボード – HID 使用テーブルの使用ページ 7 で定義されている最初の 256 個のキー コード ("使用法") は、いずれもブート プロトコルを使用するキーボードによって報告できますが、ほとんどのシステムではこれらのキーのサブセットしか処理しません。ほとんどのシステムは、IBM AT-101レイアウトの 104 個のキーすべてと、 Microsoft Windows 95用に設計された 3 つの追加キー(左と右のWindows キー、およびメニュー キー) をサポートしています。多くのシステムでは、西ヨーロッパの基本キー 105、韓国語のキー 106、ブラジルの ABNT のキー 107、および日本語 DOS/V のキー 109 レイアウトの追加キーもサポートしています。使用ページ 7 で報告されていないボタン、ノブ、およびキーは使用できません。たとえば、特定の US キーボードの QWERTY キーは機能しますが、電卓キーとログオフ キーは使用ページ 12 で定義されており、ブート プロトコルで報告できないため機能しません。
- マウス – X 軸、Y 軸、および最初の 3 つのボタンのみが使用可能です。マウスの追加機能は機能しません。
ブート モードの一般的な使用法の 1 つは、コンピューターの起動シーケンスの最初の瞬間です。コンピューターのBIOSを直接構成するには、ブート モードのみを使用することがよくあります。デバイスに正しいドライバーがインストールされ、使用可能になったことをユーザーに通知するメッセージが表示されることもあります。
デバイスの定義
HID 仕様によれば、レポート モードでは、デバイスはコントロールのセットまたはコントロールのグループとして記述されます。コントロールは、データを含むフィールドと、使用タグを含む別のフィールドによって照合されます。各使用タグは、レポート モードで記述されたデータのコンストラクターが提案する使用法として仕様に記述されます。
HID 記述子ツール HID デバイスに関連付けられたすべての記述子を生成するために使用できる Windows アプリです (以下のリンクを参照)。構文チェックを実行し、HID 記述子の C、C ヘッダー、およびバイナリ ファイルを生成できます。テキストベースの使用状況テーブル定義ファイルは、独自の使用状況 (コントロール タイプ) または使用状況テーブル (デバイスまたは機能に関連付けられた使用状況のセット) を定義するように簡単に拡張することもできます。
HIDを使用するその他のプロトコル
HID は元々 USB 上で定義されていましたが、現在では他のコンピュータ通信バスでも使用されています。これにより、従来は USB でしか使用できなかった HID デバイスを代替バスでも使用できるようになります。これは、マウス、タッチパッド、キーボードなどをサポートするためにまったく新しいプロトコルを開発するよりも、USB HID デバイスの既存のサポートを適応させる方がはるかに速いためです。HID を使用する既知のバスは次のとおりです。
- Bluetooth HID – Bluetooth経由で接続されたマウスやキーボードに使用されます
- シリアル HID – Microsoft のWindows Media Center PC リモート コントロール レシーバーで使用されます。
- Zigbee入力デバイス - Zigbee ( RF4CE ) は、Zigbee 入力デバイス プロファイルを通じて HID デバイスをサポートします。
- HID over I²C – Microsoft Windows 8の組み込みデバイスに使用[2]
- HID over SPI – マイクロソフトが開発した、より高速で低遅延の固定デバイス通信用[3]
- HOGP (HID over GATT) – Bluetooth Low Energyテクノロジーを使用して接続されたHIDデバイスに使用されます。
参照
- ヒューマンインターフェースガイドライン
- 人間とコンピュータの相互作用
- USBヒューマンインターフェースデバイスクラス
- グラフィカルユーザーインターフェースビルダー
- デスクトップ上の Linux
- 周辺
- 実体のあるユーザーインターフェース
参考文献
- ^ ヒューマン インターフェイス デバイス (HID) のデバイス クラス定義: ファームウェア仕様 -- 最終版 1997 年 1 月 30 日。USB 実装者フォーラム。1997 年。2014 年 4 月 28 日閲覧。
- ^ 「HID over I2C」。Microsoft 。 2016年1月19日閲覧。
- ^ 「HID over SPI の概要 - Windows ドライバー」。docs.microsoft.com。2022年 9 月 6 日閲覧。
外部リンク
- HID 開発者フォーラム、USB.org
- HID デバイス クラス定義 1.11 仕様、USB.org
- HID 使用表 1.4 仕様、USB.org
- HID 統合使用表ドキュメント、USB.org
- HID 記述子ツール、USB.org
