このトピックでは、Windows 10 バージョン 1607 以降のオペレーティング システムで放射型コントローラーの触覚フィードバックのサポートに使用される HID 入力レポートについて説明します。
ホストは、入力レポートからデータを抽出するときに、次の使用状況を利用します。
| メンバー | 説明 | ページ | id | 必須/省略可能 |
|---|---|---|---|---|
| Button | 放射状コントローラー上にあるボタンの状態 | 0x09 | 0x01 | Mandatory |
| Dial | 放射状コントローラーの相対回転量 | 0x01 | 0x37 | Mandatory |
| X | 接触位置の X 座標 | 0x01 | 0x30 | オプション |
| Y | 接触位置の Y 座標 | 0x01 | 0x31 | オプション |
| 幅 | 接触を囲む境界ボックスの幅 | 0x0D | 0x48 | オプション |
| [高さ] | 接触を囲む境界ボックスの高さ | 0x0D | 0x49 | オプション |
必須と Windows でサポートされているオプションの使用状況
必須の使用状況のすべてを報告しないデバイスは、Windows 放射状コントローラーとして機能しません。 必須の使用状況は、Windows ホストで厳密に適用されます。 論理最大値が制限されていない場合は、記述子のサイズを小さくするように最適化できます。
次のセクションでは、上の表に示した必須と Windows でサポートされているオプションの使用状況について詳しく説明します。
Button
放射状コントローラー デバイスの主ボタンが押されたことを示すために使用されます。 これは、レポート サイズが 1 ビットのメイン アイテムによって示されます。 入力レポートを配信するときは、このボタンを押したときにビットを設定し、ボタンを離したときにビットをクリアする必要があります。
Dial
放射状コントローラー自体の主軸を中心とした時計回りの回転量を示すために使用されます。 入力レポートを配信するときは、前のレポートからの相対的な回転の大きさの値を報告する必要があります。 この値は、放射状コントローラーが時計回り方向に回転した場合は正の値に、放射状コントローラーが反時計回りに回転した場合は負の値になります。
物理範囲と論理範囲を指定する必要があります。 物理範囲には度数またはラジアンを使用できます。 いずれの場合にも、論理範囲は、小数点以下 1 桁以上の精度で値を報告するのに十分な大きさである必要があります。
X/Y
X と Y は、放射状コントローラーの画面上での接触部分の座標を報告します。 この座標は、ディスプレイを基準とする相対的な接触部分の中心を表します。
X と Y を報告するデバイスは、幅または高さの使用状況も報告する必要があります。 ホストは、報告された座標を使用して、接触部分を囲む四角形を作成します。
X と Y の使用状況に、次のグローバル アイテムを指定する必要があります。
- 論理最小値
- 論理最大値
- 物理最小値
- 物理最大値
- ユニット
- 単位指数
デバイスの物理範囲とこれらの単位を正確に報告する必要があります。 情報が不正確な場合、デバイスは正しく動作しません。 また、デバイスが報告するデータは、レポート記述子で指定された論理範囲内にある必要があります。
X と Y では、報告される論理範囲外の値を指定し、使用状況の入力レポートに Null サポートを追加する (Bit 6 {No Null position (0) | Null state(1)}). ことで、システムに NULL 値を指定できます。これは、デバイスが現在ディスプレイを基準とした相対的な位置を持たないことを示します。
幅と高さ
幅と高さの使用状況は、タッチの接触部分を囲む境界ボックスの幅と高さを表します。 幅と高さは、レポート記述子の定数として定義する必要があります。
Windows 放射状コントローラー デバイスは、システムからは円形であるとみなされています。 このため、画面上の接触部分の幅と高さの両方を報告する必要はありません。 高さと幅のいずれかがサポートされている場合は、接触部分の境界がシステムによって正しく解釈されます。 Windows では、幅と高さの値が異なる放射状コントローラー デバイスをサポートしません。