Wake-on-Touch 実装ガイド
はじめに
Wake-on-Touch は、Windows 11 デバイスに導入された新しい "オプションの" 機能です。 この機能を使用すると、ユーザーはデバイスの画面に指でタッチすることで、デバイスをスリープ状態から解除できます。 ペンを使用した画面のスリープ解除はサポートされていません。 Wake on Touch は、以下のガイダンスに従って明示的にオプトインしているデバイスでのみ使用できます。
デバイスが Wake-on-Touch をオプトインしている場合、OEM は既定の状態を指定できます (有効または無効。追加情報は以下の「OEM の考慮事項」セクションにあります)。 また、ユーザーは、[Touch the screen to wake] \(画面をタッチしてスリープ解除\) オプションを使用して、下の図の新しい [Bluetooth & devices] (Bluetooth とデバイス) -> [タッチ] 設定ページの基本設定に基づいてオンとオフを切り替えることができます。
Note
この機能がデバイスでサポートされていない場合、この設定はこのページに表示されません。
このドキュメントでは、Windows と互換性のある HID ベースのタッチ デバイスが Wake-On-Touch をサポートする方法について説明します。さらに、USB、I2C、または SPI で使用可能なインボックス HID ミニポート ドライバーとインボックス ドライバー (つまり、Intel THC SPI) がないバス専用の 3P HID ミニポートのどちらを使用しているかどうかに応じて OEM または ODM およびタッチ IHV が行う必要があることについても説明します。
OEM の考慮事項
Wake-on-Touch には顕著な電力消費のトレードオフがあるため、OEM は各デザインと SKU にこの機能を実装するかどうかを検討する必要があります。 より電力消費を抑えてデバイスをスリープ解除する方法として、キーボードのキーの押下、タッチパッドの操作、ペアリングされたペンの Bluetooth ボタンのクリックのいずれかを使用できます。
スリープ解除ジェスチャ
Wake-on-Touch を有効にする場合、OEM は、タッチ IHV と連携して、スリープ解除ジェスチャをシングルタップまたはダブルタップのどちらかに指定できます。 どちらのジェスチャを選択した場合でも、ディスプレイのアクティブ領域のどこを使用してもデバイスをスリープ解除できるようにする必要があります。 タッチ コントローラーがシングル タップ ジェスチャまたはダブルタップ ジェスチャのどちらかに基づいてスリープ解除を検出した場合は、次のようになります。
- タッチ コントローラーは、スリープ解除を引き起こすために使用されたジェスチャに関係なく、1 本の指を上げ下げする動作を表す 2 つのフレーム (X、Y、TIP SET とそれに続く X、Y、TIP CLEAR) を送信する必要があります
- ホストは、これらの 2 つのフレームを、ディスプレイなどをオンにするユーザーの存在を示すものとしてのみ使用し、この入力をシェルまたはアプリケーションには渡しません
- 指を上げる動作を示すフレームと指を下げる動作を示すフレームはどちらも即座に送信できますが、スキャン時刻使用法が存在する場合は、これをフレーム間でインクリメントする必要があります
Note
タッチ コントローラーがスリープ解除ジェスチャを検出し、割り込みをアサートして入力レポートの準備ができていることをホストに示したにもかかわらず、ホストが実際に読み取りを発行しない場合、タッチ コントローラーは、ベンダーによって定義されたタイムアウト後に低電力状態に戻る必要があります。 これは異常なケースと見なされますが、スタンバイ時の不要な電力消費を最小限に抑えるために、タッチ IHV が考慮することが望ましい場合があります。
デバイス ポスチャ
この機能を利用する場合は、バッテリー寿命と信頼性の高い UX を最大限に最適化するために、さまざまなポスチャ、デバイスの種類、および電源状態をすべて考慮する必要があります。 たとえば、コンバーチブル デバイスでは、バッテリーを節約するために、“タブレット” 状態のときにのみ Wake-on-Touch を有効にし、“ラップトップ” 状態のときは無効にすることができます。
デバイスがスタンバイ状態になったとき、または特定のポスチャのときに常に Wake-on-Touch を利用できるようにするには、実装にさまざまなアプローチが必要です。
カバーのあるシステム (ラップトップ フォーム ファクター デバイスなど) の場合、HID スタックにより、カバーが閉じられると自動的にスリープ解除が無効化されます。 お使いのデバイスがこのフォーム ファクターと一致する場合、またはデバイス ポスチャに関係なく Wake-on-Touch を有効にすることが望ましい場合は、このセクションの残りのコンテンツをスキップし、このドキュメントの残りの部分のガイダンスに従ってください。
Wake-on-Touch を特定のポスチャでのみ有効にすることが望ましい場合は、デバイス ポスチャに基づいてタッチ コントローラーをスリープ解除用に設定するかどうかを制御するフィルター ドライバーを実装することをお勧めします。 この種類の実装では、フィルター ドライバーによって、IRP を ACPI に渡してデバイスを D2 (armed for wake) にするか、デバイスを D3 Cold (オフ) にするかが決定されます。
デバイスの設計により、ポスチャに基づく Wake-on-Touch が望ましくないときに ACPI がタッチ コントローラーから電力を得ることができない場合 (D3 Cold) は、ベンダー固有のメカニズムを実装して、タッチ コントローラーへの電力の供給を保ったまま (D3 Hot)、最低電力状態に移行するように通知し、内部的なゲーティングを行い、タッチをスキャンしないようにする必要があります。 このベンダー固有のメカニズムにより、タッチ コントローラーは、次の図に示すように、ユーザー入力をスキャン中か、または SLEEP/Armed for wake 状態ではないかを明確にすることができます。
Note
この図は HIDI2C 用です。 HIDUSB および HIDSPI を含む電力遷移の詳細については、タッチスクリーンの電源管理に関するページを参照してください。
最後に、ポスチャに基づいて異なる Wake-on-Touch 動作をデバイスに持たせたい場合は、ポスチャの変化が発生したときにデバイスをスリープ解除することをお勧めします。 ポスチャの変化は、ユーザー入力を明確に示すものであり、これにより、デバイスが新しいポスチャに切り替わったときにタッチ コントローラーの準備または準備解除を適切に行うこともできます。
Wake-On-Touch ユーザー設定の既定の状態
Wake On Touch 設定の既定値は、対応システムでは ON になっています。ただし、OEM は、既定値を OFF にするように指定するレジストリ値を追加できます。 この変更は既定のユーザーに適用する必要があり、デバイスの新しいユーザーごとに取得されます。 ユーザーが設定を変更すると、初期の OEM の既定値に関係なく、ユーザーの設定が常に優先されます。
これを行うには、次のレジストリ キーを作成し、既定のユーザーの NTUSER.DAT に保存します。
レジストリの場所: \HKEY_CURRENT_USER\Software\Microsoft\Input\WakeableInputTypes
レジストリ キー:
名前 | Type | Value |
---|---|---|
タッチ | REG_DWORD | 0 = 無効、1 = 有効 |
Wake-on-Touch を有効にするための要件
一般的な要件
一般には、デバイスが D2 状態からのスリープ解除のサポートを示すことをお勧めします。これにより、オペレーティング システム (OS) がスリープ状態になったときにデバイスを Wake On Touch 用に準備する必要がある場合に、そのデバイスを D2 に移行できます。 OS が Wake On Touch 用にデバイスを準備する必要がない場合、OS はデバイスを D3 に移行します。 これにより、デバイスは、電力を節約するために D3Cold に移行できるようになります。 これは、以下の ACPI セクションに関するセクションに記載されている _S0W 関連のガイダンスに従うことで実現できます。 デバイスによって開始される電力の最適化 (これはホストまたはオペレーティング システムによって開始されません) は、オペレーティング システムに対して透過的な方法で実行する必要があります。
このドキュメントで説明されているように、オペレーティング システム (またはホスト) によってデバイスが“Wake-On-Touch”が有効化される状態になると、OEM 要件やデバイスのフォーム ファクターに基づいて適切なタッチ ジェスチャでスリープ解除するように構成する操作はタッチ コントローラーに任せられます。 たとえば、カバーで遮られていないタッチ スクリーンを備えたデバイスでは、場合によっては偽のスリープ解除を引き起こさないようにする必要があります。
HID タッチ デバイスにベンダー定義のコレクションなど、他の最上位レベルの HID コレクションがある場合は、OEM ソフトウェアがデバイス I/O を実行するファイル ハンドルを開くことができます。OEM ソフトウェアが完了するとすぐにファイル ハンドルを閉じると、HID デバイスの電力消費量が削減されます。 Windows 11 22H2 が更新され、Wake-on-Touch デバイスの電源をオフにすることで、最新のスタンバイからの復帰を許可せずに電源をオフにすることで、より効率的に管理できるようになりました (たとえば、"画面をスリープ解除する画面にタッチする" 設定がオフになっている場合やノート PC の蓋が閉じている場合など)。 このような OEM ソフトウェアの場合、副作用は、このような最上位レベルの HID コレクションからの入力も、最新のスタンバイ中に抑制されます。
ACPI ファームウェアの要件
タッチ コントローラー デバイスが ACPI で定義されている場合は、そのスリープ解除機能とリソースを報告するために、次のものを実装する必要があります。
- _S0W メソッド。デバイスがスリープ解除を通知する可能性のあるデバイスの最低電力状態を返します。
- _CRS メソッド。スリープ解除対応の割り込みを定義します。
- _PRx メソッド。サポートされている各 D-state に関連付けられている電源リソースを定義します。
詳細については、スリープ解除対応の割り込み (_CRS) に関するドキュメントを参照してください。
Wake-on-Touch を有効にするためのドライバーの要件
インボックス ドライバー (HIDI2C、HIDSPI、および HIDUSB) またはカスタム ドライバー用に Wake-on-Touch を実装する方法の詳細については、以下の各ドキュメントを参照してください。
トピック | 説明 |
---|---|
このトピックでは、インボックス HIDI2C、HIDSPI、または HIDUSB ドライバーを使用して Wake-on-Touch を実装する方法について説明します。 |
|
このトピックでは、カスタム HID ミニ ドライバーを使用して Wake-on-Touch を実装する方法について説明します。 |
用語集
用語または省略形 | 定義 |
---|---|
HID | ヒューマン インターフェイス デバイス。 |
HIDClass | HID 用の Windows インボックス クラス ドライバー。 |
HID ミニドライバー | HIDClass と連携して動作する Windows HID トランスポート ドライバー。 詳細については、「ミニドライバーと HID クラス ドライバー」を参照してください。 |
D-State、D0、D2、D3hot、D3Cold | ACPI 仕様で定義されているデバイスの電源状態。 |
Dx | D-state の 1 つ。 “x” の実際の番号は、このドキュメントでは指定されていません。 |
DeviceNotInUse | オペレーティング システムが (タッチ) 入力を使用しない状態に移行したときに発生する状態。 たとえば、ラップトップのカバーが閉じられたときが該当します。 |
DeviceInUse | DeviceNotInUse とは逆の、オペレーティング システムが (タッチ) 入力を使用する状態に移行したときに発生する状態。 たとえば、ラップトップのカバーが開かれたときが該当します。 |
モニター、画面、ディスプレイ | これらは、同じ意味で使用される場合があります。 |
MonitorOn | オペレーティング システムがプライマリ モニターをオンにしたときに発生する状態。 |
MonitorOff | MonitorOn の逆。 オペレーティング システムがプライマリ モニターをオフにしたときに発生する状態。 |
IRP | I/O 要求パケット。 詳細については、「I/O 要求パケット」を参照してください。 |
D-IRP | デバイスの電源状態の設定を要求する IRP。 |
HIDI2C | Windows インボックス HID ミニドライバー HIDI2C.SYS。HIDI2C 仕様に従って HID デバイスの I2C トランスポート層を実装します。 |
HIDSPI | Windows インボックス HID ミニドライバー HIDSPI.SYS。HIDSPI 仕様に従って HID デバイスの SPI トランスポート層を実装します。 |
HIDUSB | Windows インボックス HID ミニドライバー HIDUSB.SYS。HID および USB 仕様に従って HID デバイスの USB トランスポート層を実装します。 |
ACPI ファームウェア | システム ファームウェア (BIOS) に実装されている ACPI コード。 |
拡張 INF | Windows 10 の新しい種類の Windows INF ファイル。 詳細については、「拡張 INF ファイルの使用」を参照してください。 |