HID Over SPI のプラグ アンド プレイ サポート
この記事では、SPI トランスポート経由で HID をサポートするデバイスのプラグ アンド プレイのサポートについて説明します。
ドライバーの読み込み
Windows は、ハードウェア ID と INF 間の互換性 ID の一致に基づいて HID SPI クラス ドライバーを読み込みます。 この ID は、Advanced Configuration and Power Interface (ACPI) によって生成されます。 ハードウェア ID は、ACPI の SPI デバイス ノードに対して生成されます。 すべての HID SPI 互換デバイスは、一意のハードウェア ID に加えて、互換性 ID を公開する必要があります。
ACPI 5.0 仕様には、HID クラス デバイスのサポートが含まれています。 HID SPI の ACPI 定義は次のとおりです。
フィールド | 値 | ACPI オブジェクト | 形式 | Comments |
---|---|---|---|---|
ハードウェアID | ベンダー固有 | _HID | VVVVddddd 形式の文字列 (例: MSFT0011) | VendorID + DeviceID |
互換性 ID | PNP0C51 | _CID | ACPIxxxx または PNPxxxx 形式の文字列 | CompatibleID |
[サブシステム] | ベンダー固有 | _SUB | VVVVssss 形式の文字列 (例: MSFQ1234) | SubVendorID + SubSystemID |
ハードウェアのリビジョン | ベンダー固有 | _HRV | 0xRRRR (2 バイト リビジョン) | ハードウェア リビジョン番号 |
現在のリソース設定 | ベンダー固有 | _CRS | バイト ストリーム | - デバイスにアクセスするための SpiSerialBus。 - 割り込みの場合は GpioInt。 |
デバイス固有の方法 | GUID {6e2ac436-0fcf-41af-a265-b32a220dcfab} | _DSM | Package | デバイス固有の情報を含む構造体を定義します。 |
デバイスのリセット方法 | _RST | ACPI 6.0 7.3.25 準拠のデバイス リセット方法。ホスト OS によって ACPI FLDR として呼び出されます。 |
HID SPI デバイスごとに、次の必須フィールドを指定する必要があります。
- ハードウェアID
- 互換性 ID
- ハードウェアのリビジョン
- 現在のリソース設定
- デバイス固有の方法
- デバイスのリセット方法
詳細については、「Advanced Configuration and Power Interface (ACPI) 6.0 仕様」を参照してください。
ランダム HID SPI デバイスのハードウェア ID と互換性 ID の例を次に示します。 これらの詳細は、"ベンダー固有" クラスの 1 つの最上位コレクションを持つ HID として自身を報告するサンプル デバイスに基づいています。
Advanced Configuration and Power Interface (ACPI) では、HID SPI トランスポート ドライバーを読み込むために、次のハードウェア ID と互換性 ID が生成されます。
ハードウェア ID: 互換性 ID
ACPI\Vid_xxxx&Pid_yyyy&Rev_zzzz;: ACPI\PNP0C51
ACPI\Vid_xxxxPid_yyyy;:
ACPI\xxxxyyyy;:
前の例では、サンプル デバイスの _HID ACPI メソッドから抽出された値を使用してハードウェア ID が生成されました。 互換性 ID は、サンプル デバイスの _CID ACPI メソッドから抽出された値を使用して生成されます。 HID over SPI の互換性 ID は、バージョン 1.0 では常に PNP0C51 にする必要があります。
Note
INF を指定する場合は、前の表の左側の列にあるハードウェア ID のみを使用する必要があります (右側の列の互換性 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
ハードウェア ID は HIDClass.sys によって生成され、すべてのトランスポートで同じです。 この ID は、HIDSPI.SYS (ACPI から抽出) から HIDClass.sys に渡される値に基づいています。
デバイス列挙シーケンス
HID SPI デバイス ドライバー (HIDSPI.SYS) が読み込まれると、SPI バス経由でデバイスとの通信が開始されます。 ドライバーが実行する最初の操作は、デバイス列挙シーケンスです。
列挙シーケンスを次の一覧に示します。 この一覧の順序は、今後のバージョンの Windows で変更される可能性があります。
システム BIOS から HID SPI デバイスの ACPI ソース言語 (ASL) コードを取得します。
ホストによって開始されたリセットをデバイスに発行します。
- ACPI _RST メソッドを呼び出します
- デバイスが GPIO 割り込みをアサートします
- ホストがデバイスからリセット応答を読み取ります
デバイスから HID 記述子を取得します
- ホストが HID 記述子要求を書き込みます
- デバイスが GPIO 割り込みをアサートします
- ホストが HID 記述子応答を読み取ります
レポート記述子を取得します。
- ホストがレポート記述子要求を書き込みます
- デバイスが GPIO 割り込みをアサートします
- ホストがレポート記述子応答を読み取ります
ホストがデバイスでいずれかの手順を正常に完了できない場合、HIDSPI ドライバーがコード 10 のエラー値で読み込まれる可能性があります。 応答が受信されない場合、ホストはデバイスのリセットを再試行できますが、再試行ロジックは保証されません。
HID レポート操作
次の表は、HID SPI プロトコルでサポートされる HID レポート操作と、操作の実行に使用される入出力レポートの概要を示しています。
HID レポートの種類 | 操作 | 出力レポートの種類 | 入力レポートの種類 |
---|---|---|---|
入力レポート | GET | 0x06 (要求 - 空のコンテンツ) |
0x0B (応答) |
入力レポート | SET (サポートされていません) |
該当なし | 該当なし |
入力レポート | INTERRUPT IN | N/A - 要求なし | 0x01 |
機能レポート | GET | 0x04 (要求 - 空のコンテンツ) |
0x05 (応答) |
機能レポート | SET | 0x03 | 0x09 (受信確認 - 空のコンテンツ) |
出力レポート | GET (サポートされていません) |
該当なし | 該当なし |
出力レポート | SET | 0x05 | 0x0A (受信確認 - 空のコンテンツ) |
プロトコル操作
操作 | 要求レポートの種類 | 応答レポートの種類 |
---|---|---|
デバイス記述子要求 | 0x01 | 0x7 |
レポート記述子要求 | 0x02 | 0x8 |
コマンド要求 | 0x07 | 0x4 |
応答のリセット | 該当なし | 0x3 |