この記事では、I2C トランスポート経由で HID をサポートするデバイスのプラグ アンド プレイのサポートについて説明します。
ドライバーの読み込み
Windows は、ハードウェア ID と INF 間の互換性 ID の一致に基づいて HID I2C クラス ドライバーを読み込みます。 Advanced Configuration and Power Interface (ACPI) によって識別子が生成されます。 ハードウェア ID は、ACPI の I2C デバイス ノードに対して生成されます。 すべての HID I2C 互換デバイスは、一意のハードウェア ID に加えて、互換性 ID を公開する必要があります。
ACPI 5.0 仕様には、HID クラス デバイスのサポートが含まれています。 HID I2C の ACPI 定義は次のとおりです。
フィールド | 値 | ACPI オブジェクト | 形式 | Comments |
---|---|---|---|---|
互換性 ID | PNP0C50 | _CID | ACPI0C50 または PNP0C50 の形式の文字列 | CompatibleID |
ハードウェアID | ベンダー固有 | _HID | VVVVddddd 形式の文字列 (例: NVDA0001) | VendorID + DeviceID |
[サブシステム] | ベンダー固有 | _SUB | VVVVssss 形式の文字列 (例: INTL1234) | SubVendorID + SubSystemID |
ハードウェアのリビジョン | ベンダー固有 | _HRV | 0xRRRR (2 バイトリビジョン) | RevisionID |
現在のリソース設定 | ベンダー固有 | _CRS | バイト ストリーム | I2C コントローラーおよび GPIO 割り込み応答のための I2CSerialBus と GPIO_INT を含める必要があります。 |
デバイス固有の方法 | GUID {3CDFF6F7-4267-4555-AD05-B30A3D8938DE} | _DSM | パッケージ | HID 記述子アドレスを含む構造体を定義します。 |
すべての HID I2C デバイスでは、次の必須フィールドを指定する必要があります。
- 互換性 ID
- ハードウェアID
- ハードウェアのリビジョン
- 現在のリソース設定
- デバイス固有の方法
詳細については、高度な構成と電源インターフェイス仕様バージョン 5.0 を参照してください。
次のハードウェア ID と互換性のある ID は、ランダム HID I2C デバイスの例を提供します。 これらの詳細は、クラス "ベンダー固有" の最上位の 1 つのコレクションを持つ HID として自身を報告するサンプル デバイスに基づいています。
Advanced Configuration and Power Interface (ACPI) では、HID I2C トランスポート ドライバーを読み込むために、次のハードウェア ID と互換性 ID が生成されます。
ハードウェア ID: 互換性 ID
ACPI\Vid_xxxx&Pid_yyyy&Rev_zzzz;: ACPI\PNP0C50
ACPI\Vid_xxxxPid_yyyy;:
ACPI\xxxxyyyy;:
前の例では、サンプル デバイスの _HID ACPI メソッドから抽出された値を使用してハードウェア ID が生成されました。 互換性 ID は、サンプル デバイスの _CID ACPI メソッドから抽出された値を使用して生成されます。 HID over I2C の互換性 ID は、バージョン 1.0 では常に PNP0C50 にする必要があります。
注: INF を指定する場合は、前の表の左側の列にあるハードウェア ID のみを使用する必要があります (右側の列には互換性のある識別子を使用しないでください)。
HIDClass.sys コンポーネントによって生成される HID クライアント デバイス ノードのハードウェア ID は次のとおりです。
ハードウェア ID: 互換性 ID
HID\VEN_MSFT&DEV_0010&REV_0002&Col01;: N/A
-HID\VEN_MSFT&DEV_0010&Col01 HID\MSFT0010&Col01;: N/A
-HID\*MSFT0010Col01: N/A
-HID_DEVICE_UP:FF00_U:0001;: N/A
-HID_DEVICE: N/A
HIDClass.sysはハードウェア ID を生成し、すべてのトランスポートで同じです。 この ID は、HIDI2C.sys (ACPI から抽出) から HIDClass.sys に渡される値に基づいています。
デバイス列挙シーケンス
HID I2C デバイス ドライバー (HIDI2C.sys) が読み込まれると、I2C バス経由でデバイスとの通信が開始されます。 ドライバーが実行する最初の操作は、デバイス列挙シーケンスです。
列挙シーケンスを次の一覧に示します。 この一覧の順序は、今後のバージョンの Windows で変更される可能性があります。
システム BIOS から HID I2C DEVICE の ACPI ソース言語 (ASL) コードを取得します。
デバイスから HID 記述子を取得します。
- HID 記述子アドレスを書き込みます
- HID 記述子を読み取ります
デバイスに SET_POWER を発行します。
- SET_POWER コマンドを書き込みます
RESET (ホストによって開始されたリセット) をデバイスに発行します。
- RESET コマンドを書き込みます
- デバイスが GPIO 割り込みをアサートします
- 入力レジスタから値 (0x00 0x00) を読み取ります
デバイスからレポート記述子を取得します。
- レポート記述子アドレスを書き込みます
- レポート記述子を読み取ります
HOST がデバイスを使用して手順 1 から 5 のいずれかを正常に完了できない場合、HIDI2C ドライバーがコード 10 のエラー値で読み込まれる可能性があります。 これらのコマンドに組み込まれている再試行ロジックはありません。
注: 手順 4 と 5 は、I2C での時間を最適化するために並列で実行できます。 レポート記述子は (a) 静的で (b) 長いため、Windows 8 は 4 のデバイスからの応答を待機している間に 5 の要求を発行する可能性があります。
サポートされている HID I2C コマンド
HIDI2C.SYS ドライバーでは、次のコマンドがサポートされています。
command | 用途 | 用途 |
---|---|---|
リセット | Windows では、ホストによって開始されたリセットがサポートされています。 | Windows は、次のシナリオでこのコマンドを発行します 。デバイスの初期化 - 無効/有効 - アンインストール/再インストール |
Get/Set_Report | Windows では、Get/Set_Report コマンドがサポートされています。 | Windows は、次のシナリオでこのコマンドを発行します。 HID クライアント ドライバーが取得/設定機能レポート要求を発行するとき - HID クライアント ドライバーが同期入力/出力レポートを発行するとき |
Set_Power | Windows では、Set_Power コマンドがサポートされています | Windows では、次のシナリオでこのコマンドが発行されます。システムが低電力 S3/コネクト スタンバイ状態に移行すると、システムがシャットダウンされます。 |