Windows 高精度タッチパッド コレクション (touchpad-windows-precision-touchpad-collection)
このトピックでは、Windows 高精度タッチパッドの最上位レベルのコレクションについて説明し、このコレクションによって、Windows ホストに HID 準拠のタッチパッド レポートを提供する方法について説明します。
Windows 高精度タッチパッド デバイスでは、HID プロトコルを使用して、デジタイザー/タッチパッドとして表示される最上位レベルのコレクションを提供できます (ページ 0x0D、使用状況 0x05)。
Windows 高精度タッチパッド コレクションの目的は、ホストに豊富な複数接触レポートやボタン レポートを提供することと、それらのレポートに関連するデバイス情報を提供することです。 このコレクションでは、2 つの機能レポートがサポートされている必要があります。1 つはホストでデバイスの機能を取得できるレポート、もう 1 つはデバイスの認定のステータスを取得するレポートです。 必須の入力レポートの例については、サンプル レポート記述子に関するページを参照してください。
オプションの (ただし、強くお勧めする) 機能レポートを実装すると、スリープ モードで USB デバイスに必要な電力消費を実現するために、ホストから待機時間モードのヒントを取得できます。 次のセクションでは、Windows 高精度タッチパッドの最上位レベルのコレクションに含まれるレポートの詳細について説明します。
デバイスの機能レポート
デバイスの機能レポートは、デバイスの接触レポート機能とデバイス ボタンの種類に関する情報を取得するために、Windows 高精度タッチパッドのホストから要求されます。
デバイスの接触レポート機能は、レポート可能な同時表面接触の最大数で定義されます。 Windows 高精度タッチパッドでは、最小で 3 回の同時接触と最大で 5 回の同時接触がサポートされている必要があります。 タッチパッドでは、この値がデバイス機能レポートの最大接触数 (ページ 0x0D、使用状況 0x55) を使用してレポートする必要があります。 データのレポート時は、デバイスで最大接触数よりも多くの接触をレポートできません。 入力フレームに最大数を超える接触が含まれている場合、ホストは以前に報告された接触のデータを含むフレーム全体を破棄します。 最適なユーザー エクスペリエンスを得るには、既存の接触が消滅した場合でも、最大数に達した後に検出された新しい接触の有効期間中は、新しい接触の報告をデバイスで抑制する必要があります。 既存の接触は引き続き報告でき、いずれかが消滅した場合は、新たに届いた接触がその代わりを務めます。
デバイスのボタンの種類は、押下可能の実装 (クリックパッド型とも呼ばれます) または押下不可の実装 (プレッシャーパッドとも呼ばれます) として定義されます。 また、Windows 高精度タッチパッドでは、代わりにボタン以外のレポート デジタイザー サーフェスや外部ボタンを使用することもできます。
ボタン実装の種類は、デバイス機能レポートのボタンの種類 (ページ 0x0D、使用状況 0x59) の値を使用して指定する必要があります。 デバイスにボタン以外のレポート デジタイザー サーフェスが搭載され、代わりにマウスクリック専用の外部ボタンに依存している場合は、この使用状況をオプションでレポートできます。
次の表には、ボタンの種類の使用状況の値を示します。
ボタンの種類の値 | 実装 |
---|---|
0 | 押下可能 (クリックパッド) |
1 | 押下不可 (プレッシャーパッド) |
2 | クリック不可 (ディスクリートパッド) |
レポート記述子の読み取り後はいつでも、ホストから Windows 高精度タッチパッドのデバイス機能レポートを要求できます。
デバイスの認定のステータス機能レポート
デバイス認定状態機能レポートは、デバイスの 256 バイト BLOB に関する情報を取得するために、Windows 高精度タッチパッドのホストによって要求されます。
認定された有効な BLOB をホストにレポートすることは、Windows 10 ではオプションですが、Windows 8.1 との下位互換性を確保するために必要です。 署名された PTPHQA BLOB が通信されないデバイスでは、次のサンプル BLOB などの 256 バイト (任意) がレポートされる必要があります。 有効な認定 BLOB がレポートされないデバイスは、Windows 8.1 で動作しません。 Windows では、HID タッチパッドの使用状況が使用されるが、デバイス機能レポートで認定のステータスが公開されないデバイスとはやり取りされません。
256 バイトは、デバイスの認定のステータス機能レポートのベンダー固有の使用状況ページ (ページ 0xFF、使用状況 0xC5) で、ベンダー固有の使用状況を使用して指定する必要があります。
デバイスで認定のステータスを示す 256 バイトの BLOB を受信する前に、次のように既定の BLOB を実装する必要があります。
0xfc, 0x28, 0xfe, 0x84, 0x40, 0xcb, 0x9a, 0x87, 0x0d, 0xbe, 0x57, 0x3c, 0xb6, 0x70, 0x09, 0x88, 0x07,
0x97, 0x2d, 0x2b, 0xe3, 0x38, 0x34, 0xb6, 0x6c, 0xed, 0xb0, 0xf7, 0xe5, 0x9c, 0xf6, 0xc2, 0x2e, 0x84,
0x1b, 0xe8, 0xb4, 0x51, 0x78, 0x43, 0x1f, 0x28, 0x4b, 0x7c, 0x2d, 0x53, 0xaf, 0xfc, 0x47, 0x70, 0x1b,
0x59, 0x6f, 0x74, 0x43, 0xc4, 0xf3, 0x47, 0x18, 0x53, 0x1a, 0xa2, 0xa1, 0x71, 0xc7, 0x95, 0x0e, 0x31,
0x55, 0x21, 0xd3, 0xb5, 0x1e, 0xe9, 0x0c, 0xba, 0xec, 0xb8, 0x89, 0x19, 0x3e, 0xb3, 0xaf, 0x75, 0x81,
0x9d, 0x53, 0xb9, 0x41, 0x57, 0xf4, 0x6d, 0x39, 0x25, 0x29, 0x7c, 0x87, 0xd9, 0xb4, 0x98, 0x45, 0x7d,
0xa7, 0x26, 0x9c, 0x65, 0x3b, 0x85, 0x68, 0x89, 0xd7, 0x3b, 0xbd, 0xff, 0x14, 0x67, 0xf2, 0x2b, 0xf0,
0x2a, 0x41, 0x54, 0xf0, 0xfd, 0x2c, 0x66, 0x7c, 0xf8, 0xc0, 0x8f, 0x33, 0x13, 0x03, 0xf1, 0xd3, 0xc1, 0x0b,
0x89, 0xd9, 0x1b, 0x62, 0xcd, 0x51, 0xb7, 0x80, 0xb8, 0xaf, 0x3a, 0x10, 0xc1, 0x8a, 0x5b, 0xe8, 0x8a,
0x56, 0xf0, 0x8c, 0xaa, 0xfa, 0x35, 0xe9, 0x42, 0xc4, 0xd8, 0x55, 0xc3, 0x38, 0xcc, 0x2b, 0x53, 0x5c,
0x69, 0x52, 0xd5, 0xc8, 0x73, 0x02, 0x38, 0x7c, 0x73, 0xb6, 0x41, 0xe7, 0xff, 0x05, 0xd8, 0x2b, 0x79,
0x9a, 0xe2, 0x34, 0x60, 0x8f, 0xa3, 0x32, 0x1f, 0x09, 0x78, 0x62, 0xbc, 0x80, 0xe3, 0x0f, 0xbd, 0x65,
0x20, 0x08, 0x13, 0xc1, 0xe2, 0xee, 0x53, 0x2d, 0x86, 0x7e, 0xa7, 0x5a, 0xc5, 0xd3, 0x7d, 0x98, 0xbe,
0x31, 0x48, 0x1f, 0xfb, 0xda, 0xaf, 0xa2, 0xa8, 0x6a, 0x89, 0xd6, 0xbf, 0xf2, 0xd3, 0x32, 0x2a, 0x9a,
0xe4, 0xcf, 0x17, 0xb7, 0xb8, 0xf4, 0xe1, 0x33, 0x08, 0x24, 0x8b, 0xc4, 0x43, 0xa5, 0xe5, 0x24, 0xc2
レポート記述子の読み取り後はいつでも、ホストから Windows 高精度タッチパッドのデバイスの認定のステータス機能レポートを要求できます。
待機時間モード機能レポート
待機時間モード機能レポートは、高待機時間が省電力に望ましい場合と、逆に、操作に通常の待機時間が必要な場合を示すために、ホストから Windows 高精度タッチパッドに送信されます。 USB に接続された統合 Windows 高精度タッチパッド デバイスの場合、これにより、デバイスでは、非アクティブ (ランタイム IDLE) のために中断されているか、システムが S3 またはコネクト スタンバイに入っているために中断されているかを区別できます。
待機時間モードは、待機モード機能レポートの待機モードの使用状況 (ページ 0x0D、使用状況 0x60) の値を使用して示す必要があります。 次の表には、待機時間モードの使用状況値を示します。
待機時間モードの値 | 待機時間モード |
---|---|
0 | 通常の待ち時間 |
1 | 長い待ち時間 |
ハプティクス強度機能レポート (省略可能)
Windows 11 では、ハプティクス アクチュエータを使用して現在の PTP 上に構築される機能の詳細を提供するために、ハプティクス強度機能レポートが実装されました。 ハプティクス強度機能レポートは、タッチパッドへのハプティクス フィードバックの強度を設定するために、ホストによって Windows 高精度タッチパッドに送信されます。 このオプションの機能レポートでは、1 つのグローバル強度 (ページ 0x09、使用法 0x23) で SET_FEATURE を公開する SimpleHapticsController (ページ 0x09、使用法 0x01) をデバイスが報告する必要があります。
サンプルの記述子については、「サンプルのレポート記述子」を参照してください。
ボタン押下しきい値機能レポート (省略可能)
Windows 11 ビルド 26027 以降では、Windows タッチパッド設定を使用してユーザーが構成可能なクリック フォースのサポートが追加されました (タッチパッドに加えられ、クリック/ボタン押下を生成する力のしきい値であるボタン押下しきい値とも呼ばれています)。 高精度タッチパッドでこれをサポートするには、単一使用のボタン押下しきい値 (ページ 0x0D、使用法 0xB0) のための SET_FEATURE レポートの処理を含める必要があります。 列挙中、ホストでは、サポートされる論理および物理範囲を記述子から判断し、既定値を含む、設定 UI の公開オプションを計算します。 ユーザーが指定したボタン押下しきい値をデバイスに通知するため、ホストから SET_FEATURE が発行されます。この発行はいつでも発生する可能性がありますが、設定が変更されたとき、ユーザーが切り替えられたとき、デバイスが列挙されたか、リセットされたときは必ず発生します。
論理範囲は値の物理範囲に線形的にマッピングされ、既定値を中心に均等に間隔が取られます。 論理範囲を取得すると、次の式で既定値が計算されます。
論理最小、既定、論理最大は、Windows 設定 UI によってユーザーに公開される 3 つの異なるボタン押下の力レベルに対応します (それぞれ “低”、“中”、“高” がサポートされます)。
ボタン押下しきい値に推奨される物理範囲では、最大値と最小値にそれぞれ対応する、110g と 190g の間の範囲を少なくともカバーします。 190g の物理最大と 110g の物理最小 (そのため、上記の式に基づくと、既定値は 150g) を活用するサンプル記述子については、「サンプル レポート記述子」を参照してください。
Windows 精度タッチパッド入力レポート
ホストでは、高精度タッチパッド コレクションを使用して入力レポートから接触データを抽出する際に、次の表の使用状況が使用されます。 この表には、すべての必須の使用状況と、レポートされる一意の各デジタイザー接触に関連するサポートされているオプションの使用状況が含まれています。
メンバー | 説明 | ページ | id | 必須/省略可能 |
---|---|---|---|---|
接触 ID | 特定のフレーム内の接触を一意に識別します。 | 0x0D | 0x51 | Mandatory |
X | 接触位置の X 座標。 | 0x01 | 0x30 | Mandatory |
Y | 接触位置の Y 座標。 | 0x01 | 0x31 | Mandatory |
ヒント | 接触がデジタイザーの表面である場合に設定します。 | 0x0D | 0x42 | Mandatory |
Confidence | 1 本の指に対して接触が大きすぎる場合に設定します。 | 0x0D | 0x47 | Mandatory |
幅 | 接触を囲む境界ボックスの幅。 | 0x0D | 0x48 | オプション |
[高さ] | 接触を囲む境界ボックスの高さ。 | 0x0D | 0x49 | オプション |
気圧 | ユーザーが接触点に加えている圧力の大きさ。 | 0x0D | 0x30 | オプション |
アジマス | Z 軸を回転軸とした、接触の反時計回りの回転。 | 0x0D | 0x3F | 省略可能 |
次の表は、すべての Windows 高精度タッチパッド入力レポートに存在する必要があるすべてのトップレベルの使用状況を示しています。
メンバー | 説明 | ページ | id | 必須/省略可能 |
---|---|---|---|---|
スキャン時刻 | 相対スキャン時間。 | 0x0D | 0x56 | Mandatory |
接触の数 | 特定のレポートで報告される接触の総数。 | 0x0D | 0x54 | Mandatory |
機械力 | タッチパッド センサーに加えられる力の合計。 | 0x20 | 0x494 | 省略可能 |
ボタン 1 | デジタイザーに統合されたタッチパッド ボタンのボタンの状態を示します。 | 0x09 | 0x01 | オプション |
ボタン 2 | プライマリ (既定では左) クリックの外部ボタンのボタン状態を示します。 | 0x09 | 0x02 | オプション |
ボタン 3 | セカンダリ (既定では右) クリックの外部ボタンのボタン状態を示します。 | 0x09 | 0x03 | オプション |
接触レベルまたはレポート レベルですべての必須の使用状況がレポートされないデバイスは、高精度タッチパッドとして機能しません。 必須の使用状況は、Windows ホストで厳密に適用されます。 論理最大値が制限されていない場合は、値を最適化して記述子のサイズを小さくすることができます。
次のセクションでは、レポート内のメンバーに関する情報を示します。 ボタン メンバーの詳細については、ボタン、レポート レベルの使用状況に関するページを参照してください。
接触 ID
ライフサイクルに関するレポート内の接触を一意に識別します。 デバイスで接触が検出され、レポートされている間は、接触 ID が一定である必要があります。 各同時接触に一意の識別子が必要です。 以前に関連付けられた接触が検出またはレポートされなくなったら、識別子を再利用できます。 想定される数値範囲はありません。使用される値は、記述子で指定された論理最大値でのみ制限されます。
X/Y
X 値と Y 値では、指定された接触の座標がレポートされます。 Windows 高精度タッチパッドのレポートでは、接触ごとに 1 つのポイントがレポートされる必要があります。 X と Y の両方の使用状況に、次のグローバル項目を指定する必要があります。
論理最小値と論理最大値 (300 DPI 入力解像度以上を確保)。
注 論理座標範囲全体は、X 軸と Y 軸の両方でレポート可能である必要があります。
物理最小値と物理最大値 (「デバイス統合 - サイズ」を参照)。
単位と単位指数。
座標 0,0 (x、y 値) は、タッチパッドの左上隅を示します。
ヒント
接触の先端が表面に出ているか、またはデジタイザーの表面から離れているかを示すために使用されます。 これは、レポート サイズが 1 ビットのメイン アイテムによって示されます。 接触レポートを配信する場合は、接触がデジタイザーの表面にあるときにビットを設定し、接触が表面を離れたときにビットをクリアする必要があります。
先端スイッチをクリアすることで接触がレポートされている場合は、レポートされる (X、Y) 位置と、先端スイッチ セットでレポートされる最後の位置が同じである必要があります。
上記の図で説明した例を参照すると、Windows 高精度タッチパッドで 2 回の接触があり、後に 1 回目の接触が離れ、2 回目の接触はしばらくの間表面に残っています。 これは、次の表で説明されているようにレポートされます。
レポート | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
接触の数 | 2 | 2 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 1 |
接触 1: 先端スイッチ | 1 | 1 | 1 | 1 | 1 | 0 | NR | NR | NR | NR | NR |
接触 1: X、Y | X₁、Y₁ | X₂、Y₂ | X₃、Y₃ | X₄、Y₄ | X₅、Y₅ | X₆、Y₆ | NR | NR | NR | NR | NR |
接触 2: 先端スイッチ | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
接触 2: X、Y | X₁、Y₁ | X₂、Y₂ | X₃、Y₃ | X₄、Y₄ | X₅、Y₅ | X₆、Y₆ | X₇、Y₇ | X₈、Y₈ | X₉、Y₉ | X₁₀、Y₁₀ | X₁₁、Y₁₁ |
[信頼度]
接触が意図的であることを示すために使用されます。 互換性の要件テストでは、接触のディメンション (高さまたは幅) が 25 mm を超える場合に、このビットが意図的でない接触ではないことを表す "オフ" に設定されている必要があります。 Windows 高精度タッチパッド デバイスでは、ファームウェアの処理時に接触が非表示でない必要がありますが、すべての接触がホストに転送され、信頼度を示す必要があります。 その後、ホストでは信頼度を使用して、接触が偶発的として追跡されます。
接触が意図的でないとデバイスで判断されたら、その接触レポートとそれ以降のすべてのレポートの信頼度ビットがクリアされる必要があります。 接触が意図的でないとして分類されるまで、レポート内のその接触の信頼度ビットがデバイスで設定される必要があります。
Width と Height
幅と高さの使用法は、タッチパッドの接触を囲む境界ボックスの幅と高さを表します。 報告される値は、“UP” イベントが報告されている場合 (ゼロ (0) になる) を除き、必ずゼロ (0) 以外になります。
"圧力"
圧力は、指がデジタイザーの表面に加えた力の測定値です。 圧力に対して許容される範囲に関する制限はありません。
"アジマス"
アジマスは、Z 軸を回転軸とするカーソルの反時計回りの回転を、完全な円形の範囲で指定します。 物理範囲と論理範囲を指定する必要があります。 物理範囲は 0 ~ 360 または同等のラジアン単位である必要があります。ただし、デバイスはこの範囲全体を報告する場合と、半分の範囲を報告する場合 (ハードウェアの性能に基づき、接触の楕円が対称形である場合) があります。 論理範囲は、小数点以下 2 桁以上の正確なデータを配信するのに十分な大きさである必要があります。
スキャン時刻
スキャン時刻では、100 μs 単位で相対的なデジタイザー時刻がレポートされます。 スキャン時刻は、非アクティブの期間に続いて、デバイスでデータのレポートが開始された後にレポートされた最初のフレームからの差分を表します。 最初に受信されたスキャン時刻は、その後にレポートされる時刻の基準時間として処理されます。 報告されたスキャン時刻から次のスキャン時刻までの差分は、デジタイザーのスキャン頻度を反映している必要があります。 他の使用法とは異なり、ホストではスキャン時刻の使用法の単位に柔軟性がないことに注意してください。 100 µs 単位である必要があります。 カウンターに割り当てられるバイトは 2 バイトのみであるため、値はロール オーバーすると予想されます。
スキャン時刻の値は、フレーム内のすべての接触で同じである必要があります。
接触の数
これは、関連付けられているチップ スイッチに関係なく、特定のフレームでレポートされる接触の数を示すために使用されます。
機械力
これは、個々の指に関して報告可能な任意の圧力に関係なく、タッチパッド センサーに加えられる力の合計を報告する目的で使用されます。 圧力が個々の接触に関しても報告される場合、単位、単位指数、物理範囲、論理範囲は圧力と機械力について同じにする必要があり、機械力の値は、それらの各接触の信頼度ビットに関係なく、SUM (接触 1 の圧力 + 接触 2 の圧力 + ...) と等しくする必要があります。