このトピックでは、Windows 高精度タッチパッドの最上位レベルのコレクションについて説明し、このコレクションによって、Windows ホストに HID 準拠のタッチパッド レポートを提供する方法について説明します。
Windows 高精度タッチパッド デバイスでは、HID プロトコルを使用して、デジタイザー/タッチパッドとして表示される最上位レベルのコレクションを提供できます (ページ 0x0D、使用状況 0x05)。
Windows 高精度タッチパッド コレクションの目的は、ホストに豊富な複数接触レポートやボタン レポートを提供することと、それらのレポートに関連するデバイス情報を提供することです。 このコレクションでは、2 つの機能レポートがサポートされている必要があります。1 つはホストでデバイスの機能を取得できるレポート、もう 1 つはデバイスの認定のステータスを取得するレポートです。 必須の入力レポートの例については、サンプル レポート記述子に関するページを参照してください。
オプションの (ただし、強くお勧めする) 機能レポートを実装すると、スリープ モードで USB デバイスに必要な電力消費を実現するために、ホストから待機時間モードのヒントを取得できます。 次のセクションでは、Windows 高精度タッチパッドの最上位レベルのコレクションに含まれるレポートの詳細について説明します。
触覚タッチパッド
触覚タッチパッドは、物理的に動くヒンジ 機構に依存するのではなく、触覚アクチュエータ (線形共振アクチュエータや圧電モーターなど) を使用して機械的なクリックの感覚をシミュレートするWindows精密タッチパッドです。 機械的なダイビングボードやヒンジ付きボタンアセンブリがないため、タッチパッドの表面は静止したままです。クリックフィードバックは、正確に制御された振動によって完全に配信されます。
メカニカル タッチパッドとの主な違い:
- 可動部なし:メカニカルタッチパッドは、ユーザーがクリックしたときに物理的に押し下げされるヒンジ付きの表面またはドームスイッチを使用します。 触覚タッチパッドは、剛性の非移動面を持ち、振動を介してクリックフィードバックを生成します。
- 均一なクリック感:メカニカルタッチパッドでは、クリック力と感じは、ユーザーが押す場所によって異なります(通常、上部のヒンジの近くで硬くなります)。 触覚タッチパッドは、プレス位置に関係なく一貫したフィードバックを提供します。
- ソフトウェアで構成可能なフィードバック: 触覚クリック応答の強度と特性をホストで調整できるため、ユーザーが構成可能なクリック強度と、さまざまな波形パターンのサポートが可能になります。
- 薄いフォームファクター:機械的ヒンジアセンブリを排除することで、デバイスの設計を薄くすることができます。
触覚タッチパッドは、触覚フィードバックの 2 つのモードをサポートします。
- デバイスによって開始される触覚フィードバック: タッチパッドは、ユーザーがサーフェス ボタンを押すか離したと判断すると、触覚フィードバックを自律的にトリガーします。 これにより、メカニカル タッチパッドの物理的なクリック感覚が置き換えられます。 デバイスは必要に応じて、ホストからのSET_FEATUREレポートを受け入れて、ユーザーがフィードバックの強度と、ボタンの押下をトリガーするために必要な強制をカスタマイズできるようにします。
- Host によって開始される触覚フィードバック: 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 高精度タッチパッド入力レポート
ホストでは、高精度タッチパッド コレクションを使用して入力レポートから接触データを抽出する際に、次の表の使用状況が使用されます。 この表には、すべての必須の使用状況と、レポートされる一意の各デジタイザー接触に関連するサポートされているオプションの使用状況が含まれています。
| メンバー | 説明 | ページ | ID | 必須/任意 |
|---|---|---|---|---|
| コンタクトID | 特定のフレーム内の接触を一意に識別します。 | 0x0D | 0x51 | 必須 |
| X | 接触位置の X 座標。 | 0x01 | 0x30 | 必須 |
| Y | 接触位置の Y 座標。 | 0x01 | 0x31 | 必須 |
| ヒント | 接触がデジタイザーの表面である場合に設定します。 | 0x0D | 0x42 | 必須 |
| 信頼度 | 指ではないほど大きな接触面がある場合に設定する。 | 0x0D | 0x47 | 必須 |
| 幅 | 接触を囲む境界ボックスの幅。 | 0x0D | 0x48 | オプション |
| 高さ | 接触を囲む境界ボックスの高さ。 | 0x0D | 0x49 | オプション |
| 気圧 | ユーザーが接触点に加えている圧力の大きさ。 | 0x0D | 0x30 | オプション |
| アジマス | 接触が Z 軸を回転軸として反時計回りに回転すること。 | 0x0D | 0x3F | オプション |
次の表は、すべての Windows 高精度タッチパッド入力レポートに存在する必要があるすべてのトップレベルの使用状況を示しています。
| メンバー | 説明 | ページ | ID | 必須/任意 |
|---|---|---|---|---|
| スキャン時刻 | 相対スキャン時間。 | 0x0D | 0x56 | 必須 |
| 接触の数 | 特定のレポートで報告される接触の総数。 | 0x0D | 0x54 | 必須 |
| 機械力 | タッチパッド センサーに加えられる力の合計。 | 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 高精度タッチパッド デバイスでは、ファームウェアの処理時に接触が非表示でない必要がありますが、すべての接触がホストに転送され、信頼度を示す必要があります。 その後、ホストは確信度を用いて、偶発的な接触として追跡します。
接触が意図的でないとデバイスで判断されたら、その接触レポートとそれ以降のすべてのレポートの信頼度ビットがクリアされる必要があります。 接触が意図的でないとして分類されるまで、レポート内のその接触の信頼度ビットがデバイスで設定される必要があります。
幅と高さ
幅と高さの使用法は、タッチパッドの接触を囲む境界ボックスの幅と高さを表します。 報告される値は、“UP” イベントが報告されている場合 (ゼロ (0) になる) を除き、必ずゼロ (0) 以外になります。
"圧力"
圧力は、指がデジタイザーの表面に加えた力の測定値です。 圧力に対して許容される範囲に関する制限はありません。
"アジマス"
アジマスは、Z 軸を回転軸とするカーソルの反時計回りの回転を、完全な円形の範囲で指定します。 物理範囲と論理範囲を指定する必要があります。 物理範囲は 0 ~ 360 または同等のラジアン単位である必要があります。ただし、デバイスはこの範囲全体を報告する場合と、半分の範囲を報告する場合 (ハードウェアの性能に基づき、接触の楕円が対称形である場合) があります。 論理範囲は、小数点以下 2 桁以上の正確なデータを配信するのに十分な大きさである必要があります。
スキャン時刻
スキャン時刻では、100 μs 単位で相対的なデジタイザー時刻がレポートされます。 スキャン時間は、非活動期間の後にデバイスがデータのレポートを開始した後、最初に報告されたフレームからの時間差を表します。 最初に受信されたスキャン時刻は、その後にレポートされる時刻の基準時間として処理されます。 報告されたスキャン時刻から次のスキャン時刻までの差分は、デジタイザーのスキャン頻度を反映している必要があります。 他の用途とは異なり、ホストではスキャン時間の使用における単位の柔軟性が認められていないことに注意してください。 100 µs 単位である必要があります。 カウンターに割り当てられるバイトは 2 バイトのみであるため、値はロール オーバーすると予想されます。
スキャン時刻の値は、フレーム内のすべての接触で同じである必要があります。
接触回数
これは、関連付けられているチップ スイッチに関係なく、特定のフレームでレポートされる接触の数を示すために使用されます。
機械力
これは、個々の指に関して報告可能な任意の圧力に関係なく、タッチパッド センサーに加えられる力の合計を報告する目的で使用されます。 圧力が個々の接触に関しても報告される場合、単位、単位指数、物理範囲、論理範囲は圧力と機械力について同じにする必要があり、機械力の値は、それらの各接触の信頼度ビットに関係なく、SUM (接触 1 の圧力 + 接触 2 の圧力 + ...) と等しくする必要があります。