このトピックでは、Windows 10 以降のオペレーティング システムでタッチスクリーン レポートに使用される必須の HID 最上位レベルのコレクションについて説明します。
Windows タッチスクリーン デバイスは、少なくとも、タッチ レポート用の単一の必須の最上位レベルのコレクションを公開する必要があります。 ファームウェア更新用のオプションの (ただし、推奨される) コレクションも実装できます。
次の図は、Windows タッチスクリーン デバイスの HID コレクションを示しています。
Windows タッチスクリーン コレクション
Windows 10 では、タッチスクリーン デバイスは、HID プロトコルを使用して、デジタイザーまたはタッチスクリーンとして表示される最上位レベルのコレクションを提供できます (ページ 0x0D、使用法 0x04)。
Windows タッチスクリーン コレクションは、ホストへの複数接触レポートと、それらのレポートに関連するデバイス情報を提供します。 コレクションでは、接触情報を含む 1 つの必須の入力レポートと、デジタイザーがサポートする接触の最大数を含む 1 つの機能レポートがサポートする必要があります。 オプションの (ただし強く推奨される) 機能レポートを実装すると、ホストから待ち時間モードのヒントを取得し、スリープ モードで USB デバイスの電力消費を削減できます。 最後に、オプションの (ただし推奨される) 機能レポートを実装して、認定ステータスを伝達できます。
Windows タッチスクリーン入力レポート
接触レベルの使用法には、報告される一意のデジタイザー接触のそれぞれに関連するすべての必須の使用法と、サポートされているオプションの使用法が含まれます。 ホストは、(Windows タッチスクリーン コレクション経由で) 次の使用法を使用して、入力レポートから接触データを抽出します。
メンバー | 説明 | ページ | id | 必須/省略可能 |
---|---|---|---|---|
接触 ID | 特定のフレーム内の接触を一意に識別します。 | 0x0D | 0x51 | Mandatory |
X | 接触位置の X 座標。 | 0x01 | 0x30 | T の場合は必須 C の場合は省略可能 |
Y | 接触位置の Y 座標。 | 0x01 | 0x31 | T の場合は必須 C の場合は省略可能 |
ヒント | 接触がデジタイザーの表面に触れている場合に設定します。 | 0x0D | 0x42 | Mandatory |
Confidence | 1 本の指に対して接触が大きすぎる場合に設定します。 | 0x0D | 0x47 | オプション |
幅 | 接触を囲む境界ボックスの幅。 | 0x0D | 0x48 | オプション |
[高さ] | 接触を囲む境界ボックスの高さ。 | 0x0D | 0x49 | オプション |
気圧 | ユーザーが接触点に加えている圧力の大きさ。 | 0x0D | 0x30 | オプション |
アジマス | Z 軸を回転軸とした、カーソルの反時計回りの回転。 | 0x0D | 0x3F | オプション |
次の表は、Windows タッチスクリーン デバイスのすべての入力レポートに含まれている必要があるすべての必須のレポート レベルの使用法を示しています。
メンバー | 説明 | ページ | id | 必須/省略可能 |
---|---|---|---|---|
レポート ID | Windows タッチスクリーン レポート ID。 | 0x0D | 0x05 | Mandatory |
スキャン時刻 | フレームあたりの相対スキャン時刻。 | 0x0D | 0x56 | オプション |
接触の数 | 特定のレポートで報告される接触の総数。 | 0x0D | 0x54 | Mandatory |
接触レベルまたはレポート レベルですべての必須の使用法が報告されないデバイスは、Windows タッチスクリーン デバイスとして動作しません。 必須の使用法は、Windows ホストによって厳密に適用されます。 論理最大値が制限されていない場合は、記述子のサイズを小さくするように最適化できます。
"接触 ID"
接触 ID は、ライフサイクルに関するレポートで接触を一意に識別します。 デバイスで接触が検出され、報告されている間は、接触 ID が一定である必要があります。 同時接触のそれぞれに一意識別子が必要です。 以前に関連付けられた接触が検出または報告されなくなったら、識別子を再利用できます。 想定される数値範囲はありません。使用される値は、記述子で指定された論理最大値でのみ制限されます。
"X、Y"
X と Y は、特定の接触の座標を報告します。 デバイスは、接触ごとに 2 つのポイントを報告できます。 最初のポイント (T と呼ばれます) はユーザーがタッチすることを意図したポイントと見なされ、2 番目のポイント (C と呼ばれます) は接触の中心と見なされます。 デバイスが T と C を報告するには、2 つの X 値と 2 つの Y 値が含まれる使用法配列が必要です。 配列内の最初の位置の値は T の座標として解釈され、2 番目の位置の値は C の座標として解釈されます。使用法配列の存在を示すため、両方の使用法のレポート数は 2 となります。
C を報告するデバイスは、幅と高さの使用法も報告する必要があります。 ホストは C を使用して、接触を囲む四角形を作成します。 デバイスが X と Y のペアを 1 つだけ報告した場合、ホストは T と C に対してそのペアを使用します。サンプルのタッチ記述子では、X と Y の両方について、使用法配列が使用されています。
T のみを報告するデバイスでは、X と Y のプロパティの使用法配列を使用してはいけません。 つまり、サンプル記述子からの次の抜粋に示されているように、各使用法のレポート数は 1 となります。 この抜粋には、T のみをサポートするデバイスと、T と C をサポートするデバイスの違いも示されています。
0x05, 0x01, // USAGE_PAGE (Generic Desk..
0x26, 0xff, 0x0f, // LOGICAL_MAXIMUM (4095)
0x75, 0x10, // REPORT_SIZE (16)
0x55, 0x0e, // UNIT_EXPONENT (-2)
0x65, 0x13, // UNIT(Inch,EngLinear)
0x09, 0x30, // USAGE (X)
0x35, 0x00, // PHYSICAL_MINIMUM (0)
0x46, 0xb5, 0x04, // PHYSICAL_MAXIMUM (1205)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x46, 0x8a, 0x03, // PHYSICAL_MAXIMUM (906)
0x09, 0x31, // USAGE (Y)
0x81, 0x02, // INPUT (Data,Var,Abs)
T と C をサポートするデバイスでは、X と Y の値を報告するために使用法配列を使用します。 X と Y の両方で、レポート数は 2 となります。
0x05, 0x01, // USAGE_PAGE (Generic Desk..
0x26, 0xff, 0x0f, // LOGICAL_MAXIMUM (4095)
0x75, 0x10, // REPORT_SIZE (16)
0x55, 0x0e, // UNIT_EXPONENT (-2)
0x65, 0x13, // UNIT(Inch,EngLinear)
0x09, 0x30, // USAGE (X)
0x35, 0x00, // PHYSICAL_MINIMUM (0)
0x46, 0xb5, 0x04, // PHYSICAL_MAXIMUM (1205)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x46, 0x8a, 0x03, // PHYSICAL_MAXIMUM (906)
0x09, 0x31, // USAGE (Y)
0x81, 0x02,
注 これらの例では、グローバル アイテムが変更されるまですべてのメイン アイテムで同じ値を使用する HID 規則を利用しています。 これにより、X と Y の両方の使用法で、レポート数としてただ 1 つのエントリを共有できます。
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₁₁ |
前の表は、表面から離れるタイミングが異なる 2 つの接触 (2 本指ハイブリッド) のレポート シーケンスを示しています。
[信頼度]
信頼度とは、タッチの接触が意図的なタッチか偶発的なタッチかをデバイスが推定した値です。 意図的なタッチであることが確実な場合は、指を離す動作 (先端スイッチがクリアされたとき) を含む対話式操作の期間中、信頼度使用法を 1 (true) に設定します。 待ち時間が必要な範囲内にある間、デバイスは偶発的なタッチを可能な限り完全に拒否する必要があります。 意図的なタッチであることが確実ではなく、デバイスがタッチを偶発的なものとして拒否しなかった場合は、信頼度使用法を 0 (false) に変更して、オペレーティング システムが必要に応じてタッチ接触を取り消すことができるようにします。 デバイスが偶発的なタッチを常に拒否する場合は、信頼度使用法を含める必要はありません。
Width と Height
幅と高さの使用法は、タッチの接触を囲む境界ボックスの幅と高さを表します。 報告される値は、“UP” イベントが報告されている場合 (ゼロ (0) になる) を除き、必ずゼロ (0) 以外になります。
"圧力"
圧力は、指がデジタイザーの表面に加えた力の測定値です。 圧力に対して許容される範囲に関する制限はありません。
"アジマス"
アジマスは、Z 軸を回転軸とするカーソルの反時計回りの回転を、完全な円形の範囲で指定します。 物理範囲と論理範囲を指定する必要があります。 物理範囲は 0 ~ 360 または同等のラジアン単位である必要があります。ただし、デバイスはこの範囲全体を報告する場合と、半分の範囲を報告する場合 (ハードウェアの性能に基づき、タッチの楕円が対称形である場合) があります。 論理範囲は、小数点以下 2 桁以上の正確なデータを配信するのに十分な大きさである必要があります。
"スキャン時刻"
スキャン時刻では、100 マイクロ秒単位で相対的なデジタイザー時刻が報告されます。 この値は、非アクティブの期間に続いて、デバイスでデータのレポートが開始された後に報告された最初のフレームからの差分を表します。 最初に受信されたスキャン時刻は、その後に報告される時刻の基準時間として処理されます。 報告されたスキャン時刻から次のスキャン時刻までの差分は、デジタイザーのスキャン頻度を反映している必要があります。 他の使用法とは異なり、ホストでは、スキャン時刻使用法の単位について柔軟性がないことに注意することが重要です (実装されている場合)。 100 マイクロ秒単位である必要があります。 カウンターに割り当てられるバイトは 2 バイトのみであるため、値はロール オーバーすると予想されます。
スキャン時刻の値は、フレーム内のすべての接触で同じである必要があります。
"接触の数"
接触の数は、接触が関連付けられている先端スイッチに関係なく、特定のフレームで報告されている接触の数を示すために使用されます。
Windows タッチスクリーン機能レポート
ホストは、(Windows タッチスクリーン コレクション経由で) 次の使用法を使用して、入力レポートから接触データを抽出します。
"最大接触数機能レポート"
このレポートは、マルチタッチ デバイスがサポートする合計接触数を指定します。 Windows タッチスクリーン デバイスは、最大接触数機能レポートで最大接触数機 (ページ 0x0D、使用法 0x55) を指定して、この値を報告する必要があります。 データの報告中、デバイスは最大接触数よりも多くの接触を報告してはいけません。 データのレポート時は、デバイスで最大接触数よりも多くの接触をレポートできません。 入力フレームに最大数を超える接触が含まれている場合、ホストは以前に報告された接触のデータを含むフレーム全体を破棄します。 最適なユーザー エクスペリエンスを得るには、既存の接触が消滅した場合でも、最大数に達した後に検出された新しい接触の有効期間中は、新しい接触の報告をデバイスで抑制する必要があります。 既存の接触は引き続き報告でき、いずれかが消滅した場合は、新たに届いた接触がその代わりを務めます。
"デバイス認定ステータス機能レポート"
デバイスが互換性の要件を満たしている場合、Microsoft は、デバイスの製造元に暗号署名された (THQA BLOB と呼ばれます) バイナリ BLOB を発行します。 製造元は、製造前にこの BLOB をデバイスのファームウェアに配置します。 タッチ デバイスが接続しようとすると、Windows オペレーティング システムによって署名が検証されます。 Windows は、その記述子で THQA 機能レポートを公開するデバイスに対してのみ、この操作を行います。
注 認定された有効な BLOB をホストに報告することは、Windows 10 ではオプションですが、Windows 8.1 および Windows 8.1 との下位互換性を保つために必要です。 THQA BLOB があるデバイスの場合、コントロール パネルに “フル Windows タッチのサポート" という語句が含まれます。 認定された THQA BLOB のないデバイスの場合、コントロール パネルに “Windows Touch Support (Windows タッチのサポート)” という語句が示されます。
BLOB 自体は 256 バイトのバイナリ データで構成され、次の HID 記述子で示されているように報告される必要があります。 デバイスの製造元は、Microsoft から署名付きバイナリ BLOB を発行する前に、以下に示すサンプル BLOB が代わりに Windows に提示されるようにする必要があります。
0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined)
0x09, 0xC5, // USAGE (Vendor Usage 0xC5)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (0xff)
0x75, 0x08, // REPORT_SIZE (8)
0x96, 0x00, 0x01, // REPORT_COUNT (0x100 (256
以下は、クリア テキストのサンプル 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 10 バージョン 1511 以前のオペレーティング システムでは、現在、この HID 機能レポートは、サポートを提供するペン デバイスまたはタッチ スクリーン デバイスに発行されていません。 ただし、"待ち時間モード機能レポート" のサポートをデバイスに追加すると、Windows がペン デバイスとタッチ スクリーン デバイスでデバイスをサポートする将来の日付にデバイスが対応できるようになります。
待ち時間モード機能レポートは、省電力のために長い待ち時間が望ましい場合と、逆に、操作に通常の待ち時間が望ましい場合を示すために、ホストから Windows タッチスクリーン デバイスに送信されます。 USB 接続の Windows タッチスクリーン デバイスの場合、これにより、デバイスでは、非アクティブ (ランタイム IDLE) のために中断されているか、システムが S3 またはコネクト スタンバイに入っているために中断されているかを区別できます。
待ち時間モードは、待ち時間モード機能レポートの待ち時間モード使用法 (ページ 0x0D、使用法 0x60) の値で示す必要があります。
待機時間モードの値 | 待機時間モード |
---|---|
0 | 通常の待ち時間 |
1 | 長い待ち時間 |
ファームウェア更新コレクション (省略可能)
Windows タッチスクリーン デバイスは、HID プロトコルを使用してベンダー固有の最上位レベルのコレクションを提供し、デバイス ファームウェアやベンダー構成の更新を行うことができます。
ベンダー固有のファームウェア更新コレクションは、ファームウェア ペイロードをホストからデバイスに転送するための出力レポートを提供できます。
これは、ホスト上のドライバーを必要とせずにファームウェアの更新を実行できる点で非常に便利です。 wVersionID デバイス属性をファームウェアのアップグレード後にインクリメントする必要があります。
Windows タッチスクリーン デバイスは、電源障害 (または他のエラー) によりファームウェア更新が失敗しても、いったんシャット ダウンしてから電源を再投入すれば回復できるようになっています。 ファームウェアの更新に失敗した後も、基本的な機能を使用できるようにすることを強くお勧めします。