モダン スタンバイ プラットフォームに対する GNSS 受信機の電源管理
このトピックでは、モダン スタンバイ対応プラットフォームのグローバル ナビゲーション サテライト システム (GNSS) の電源管理について説明します。
モダン スタンバイ電源モデルを実装する Windows PC には、グローバル ナビゲーション サテライト システム (GNSS) デバイスを含めることもできます。 GNSS デバイスを使用すると、ユーザーは、Global Positioning System (GPS) や Global Orbiting Navigation Satellite System (GLONASS) などの衛星ナビゲーション システムから高精度の位置情報を取得できます。 ハードウェア プラットフォームがモダン スタンバイに入った後、GNSS デバイスは 1mW 以下の電力を消費する低電力モードの操作に入る必要があります。 その後、プラットフォームでがモダン スタンバイが終了するまで、GNSS デバイスはこのモードのままである必要があります。
GPS と Global Orbiting Navigation Satellite System (GLONASS) をサポートする GNSS デバイスは以前から利用可能でしたが、新しい GNSS デバイスでは BeiDou Navigation Satellite System (BDS) や Galileo などのサテライト ナビゲーション システムがサポートされています。
通常、モダン スタンバイ プラットフォームは、System on a Chip (SoC) 統合回線を中心に構築されます。 Windows は、このようなプラットフォームに GNSS デバイスを追加するために次のオプションをサポートしています。
- 統合された GNSS デバイスを含むモバイル ブロードバンド (MBB) モジュールを組み込みます。 この方法は携帯電話では一般的です。
- 統合された GNSS デバイスを含む SoC を選択します。
- I2C、SPI、UART などの低電力バスを使用して、スタンドアロン GNSS デバイスを SoC に接続します。
可能であれば、システム インテグレーターは、デバイスが 1 mW 以下の電力を消費する低電力スリープ モードを実装する GNSS デバイスを選択する必要があります。 GNSS デバイス ベンダーは、位置データを GNSS デバイスからクライアント アプリケーションに必要な形式に変換する位置センサー ドライバーを提供する必要があります。 これらのアプリケーションは、Windows Location API を使用して、GNSS デバイスに接続します。 GNSS デバイスの位置センサー ドライバーは、次の情報を記録します。
- Location API を介して、現在の GNSS デバイスに接続されているクライアントの数。
- GNSS デバイスの無線オン/オフ スイッチの状態。 ユーザーは、このスイッチを Windows 設定アプリケーションでコントロールします。 詳細については、「無線管理の統合」を参照してください。
位置センサー ドライバーは、この情報を使用して GNSS デバイスがアイドル状態になったことを判断し、低電力モードにできるようにします。 GNSS デバイスは、1つまたは複数のクライアントがデバイスに接続されている場合にのみ、アクティブに使用されます。 それ以外の場合、デバイスはアイドル状態になります。
システム バッテリの寿命を延ばすために、モダン スタンバイ中は GNSS デバイスへのアクセスが制限されます。 ロック画面アプリケーションは、モダン スタンバイ中にジオフェンスにアクセスし、情報を配置できます。 ただし、非ロック画面アプリケーションは、Location API を使用して、画面がオンになっていてプラットフォームがユーザーと対話しているときにのみ、GNSS デバイスから位置データを取得できます。 ディスプレイがオフになり、プラットフォームが最新のスタンバイに入るとすぐに、GNSS デバイスに接続している非ロック画面アプリケーションは Windows によって自動的に切断され、アプリケーションは中断されます。
電源管理モード
GNSS 受信機には、以下に示す 4 つの電源管理モードが必要です。
GNSS 受信機の電源モード
デバイスの電源モード | 説明 | デバイスの電源状態 (Dx) | 無線状態 (ユーザーに表示) | 接続されているクライアントの数 | 平均電力消費量 (mW) | 移行メカニズム |
---|---|---|---|---|---|---|
アクティブ (取得) |
GNSS 受信機は、サテライト修正プログラムを取得しています。 |
D0 |
オン |
>= 1 |
~200 mW |
該当なし |
アクティブ (1 Hz 追跡) |
GNSS 受信機はサテライト測位システムを取得し、定期的に 1 つ以上のアプリケーションにデータを提供しています。 |
D0 |
オン |
>= 1 |
~100 mW (デバイス固有) |
該当なし |
Sleep |
GNSS 受信機には接続されているクライアントがありません。GNSS 受信機ハードウェアには、デバイスのコンテキストを維持し、アクティブ モードへの再開待機時間を短縮するために電力がまだ適用されています。 |
D3(D3hot) |
オフまたはオン |
0 |
<1 mW (デバイス固有) |
ソフトウェアによる開始。 これは、ユニバーサル シリアル バス (USB) バスまたは USB 複合デバイスに直接接続された GNSS 無線のセレクティブ サスペンド状態です。 |
電源切断 |
GNSS 受信機には接続されたクライアントがなく、無線の電源がオフになっており、GNSS 受信機からのすべての電力が外部エンティティによって削除されています。 |
D3(D3cold) |
オフまたはオン |
0 |
0 mW |
ソフトウェアによって開始され、電源を切るためにハードウェアの調整が必要です。 |
GNSS 受信機のソフトウェア ドライバーも、以下に説明するように無線管理を処理する必要があります。
プラットフォームの実装要件
モダン スタンバイ プラットフォームには、GNSS 受信機を物理的に統合するための複数のオプションがあります。 GNSS 受信機は、低電力通信バスによって SoC に接続されているスタンドアロン デバイスの一部である場合があります。 GNSS 受信機は携帯電話で一般的であるため、GNSS 受信機をモバイル ブロードバンド (MBB) ラジオに統合することもできます。 最後に、GNSS 受信機を SoC 自体に統合することができます。
これらの複数のオプションは、GNSS 機能を必要とするプラットフォームにどの実装を選択するかを決定する際にシステム インテグレーターに課題を提示します。 Windows のモダン スタンバイ プラットフォームの場合、システム インテグレーターは、次の優先順位で GNSS を統合することをお勧めします。
- システムに MBB ラジオが装備されている場合は、MBB モジュールに統合されている GNSS 受信機を使用してください。
- システムに GNSS 受信機が搭載された SoC が装備されている場合は、SoC に統合された GNSS 受信機を使用してください。
- SoC に接続されているスタンドアロンの GNSS 受信機を低電力通信バス (UART、SPI、I2C など) に統合します。
システム インテグレーターは、無関係な GNSS 受信機を Windows に公開しないでください。 オペレーティング システムに公開されている複数の GNSS 受信機が存在する場合、Windows はすべての GNSS デバイスからの位置情報を集約しません。
ソフトウェア電源管理のメカニズム
Windows プラットフォームの GNSS デバイスは、Windows センサー クラス拡張モデルを使用し、ISensorDriver インターフェイスを実装するユーザー モード ドライバー フレームワーク (UMDF) ドライバーによって管理されることが期待されています。 この GNSS ドライバーは、位置センサー ドライバーと呼ばれ、基盤となる GNSS 受信機の電力を管理し、位置情報のアプリケーション要求にデータを提供することが期待されています。
概要とアプリケーション モデル
位置センサー ドライバーは、接続されているアプリケーション クライアントの数を主要なメカニズムとして使用し、GNSS デバイスがスリープ モードまたは電源切断モードに入るタイミングを決定します。 位置センサー ドライバーは、GNSS ベンダーが提供する無線マネージャー ライブラリとの通信も担当します。これにより、ユーザーは GNSS 無線を有効にするか無効にするかを制御できます。 位置センサー ドライバーでは、接続されているクライアントの数と無線状態のユーザー設定の両方を使用できます。これにより、可能な限り、GNSS デバイスが省電力スリープまたは電源削除モードになっていることを確認できます。
Microsoft Store アプリでは、フォアグラウンドおよびバックグラウンドアプリケーションの有効期間を管理するため、位置センサー ドライバーに接続されているアプリケーション クライアントの数に大きな影響を与えます。 フォアグラウンド アプリケーションは、Windows Location API を使用して位置情報を要求します。 ユーザーがフォアグラウンド アプリケーションをバックグラウンドに切り替えると、Microsoft Store アプリ モデルによって、クライアント アプリケーションが GNSS 受信機から切断されます。
このアプリケーションモデルのメカニズムにより、位置センサー ドライバーは接続されているアプリケーション クライアントの数を簡単に追跡できます。 接続されているアプリケーション クライアントがゼロの場合、場所センサー ドライバーは、GNSS デバイスをスリープ モードまたは電源切断モードに切り替えることができます。
システムがモダン スタンバイ状態になると、Windows はすべてのフォアグラウンド アプリケーションを自動的に中断します。これにより、接続されているクライアントの数がゼロに移行するのを監視する位置センサー ドライバーが作成されます。
無線管理のサポート
また、位置センサー ドライバーは、ベンダー提供の無線マネージャー ライブラリと通信するためのインターフェイスも実装する必要があります。 無線マネージャライブラリを使用すると、Windows は Windows 設定アプリケーションで GNSS デバイスの無線の [オン/オフ] コントロールを公開できます。
位置センサー ドライバーの実装要件
位置センサー ドライバーでは、GNSS デバイスが使用されていないときに、GNSS デバイスを低電力の D3 状態にする必要があります。 現在接続されているクライアントがない場合、または無線マネージャーを介して GNSS が無効になっている場合、GNSS デバイスは使用されていません。
無線マネージャーで GNSS デバイスが無効になっている場合、位置センサー ドライバーは、常に GNSS デバイスを D3 状態のまま保持する必要があります。 この要件により、ドライバーが電源管理キューを使用したり、接続されたクライアントからの要求を転送したりするのを防ぐことができます。 位置センサー ドライバーは、I/O に電力管理されていないキューを使用し、StopIdle および ResumeIdle メソッドを使用してアイドル状態を直接管理する必要があります。 位置センサーは、引き続き GNSS デバイスのドライバースタックの電源ポリシーの所有者である必要があります。 I/O キューを作成するために IWDFDevice::CreateIoQueue を呼び出す場合、ドライバーで bPowerManaged の値を FALSE に設定する必要があります。
前述のように、ドライバーでは、接続されているクライアントの数と無線マネージャーからの無線の状態を使用して、GNSS デバイスがアイドル状態かどうかを判断します。 GNSS デバイスがアイドル状態のとき、ドライバーは ResumeIdle メソッドを呼び出します。これにより、ドライバー フレームワークは D3 への移行を開始します。 ドライバー フレームワークは、ドライバーによる OnD0Exit メソッドの実装を実行します。
新しく接続されたクライアントまたは無線の電源オンが原因で GNSS デバイスを再アクティブ化する必要がある場合、ドライバーは StopIdle メソッドを呼び出します。 ドライバー フレームワークは、ドライバーによる OnD0Entry メソッドの実装を実行します。 ドライバーは、WaitForD0 パラメーターを FALSE に設定して StopIdle メソッドを実行する必要があることに注意してください。
以下に示す状態図は、この関係を示しており、ドライバー開発者が StopIdle および ResumeIdle メソッドをいつ呼び出すかについてのガイドの働きをします。
ドライバーは、デバイスがアイドル状態であるかどうかを追跡する責任があるため、I/O キューおよび結果として生じるハードウェア デバイスへのアクセスを直接管理する必要があります。
位置センサー ドライバーは、IPnpCallbackSelfManagedIo::OnSelfManagedIoSuspend メソッドと IPnpCallbackSelfManagedIo::OnSelfManagedIoRestart メソッドの両方を実装する必要があります。 ドライバー フレームワークは、システムの起動時を含め、デバイスの起動時に IPnpCallbackSelfManagedIo::OnSelfManagedIoInit を呼び出すことに注意してください。 後続の呼び出しは、IPnpCallbackSelfManagedIo::OnSelfManagedIoRestart コールバックに対して行われます。 これらのインターフェイスは、ドライバー フレームワークが CreateDevice メソッドを呼び出すときに登録する必要があります。
IPnpCallbackSelfManagedIo::OnSelfManagedIoRestart は、ISensorDriver:: コールバックからの要求を含め、ドライバーへの要求が GNSS デバイス ハードウェアと直接対話する可能性があることを位置センサー ドライバーに通知します。 ドライバー フレームワークによって、OnD0Exit メソッドと OnD0Entry メソッドの両方でデバイス ハードウェアにアクセスできることが保証されることに注意してください。
同様に、IPnpCallbackSelfManagedIo::OnSelfManagedIoSuspend メソッドがフレームワークによって呼び出された場合、ドライバーは OnSelfManagedIoSuspend から戻る直前にすべての ISensorDriver 要求を完了する必要があります。 これらの要求のいずれかが 1 秒以内に完了できない可能性がある場合、ドライバーはデバイス ハードウェアにアクセスできません。 位置センサー ドライバーに GNSS デバイス ハードウェアへの保留中の要求がある場合、この時間の制約に違反せずに他の方法で要求を完了できない場合は、要求をキャンセルする必要があります。
ドライバーがハードウェア デバイスと直接通信していない場合、またはすべての未処理のハードウェア要求が 1 秒以内に完了することが保証されている場合、ドライバーは次の手順を使用して OnSelfManagedIoSuspend メソッドを実装する必要があります。
- デバイスが非アクティブであることを示すグローバル フラグを設定します。
- Windows Driver Frameworks (WDF) キューで StopSynchronously メソッドを呼び出します。
- GNSS デバイス ハードウェアにアクセスするその他の非同期処理を停止します。
- WDF キューで Start メソッドを呼び出します。
- 手順 1 で設定されたグローバル フラグをクリアします。
これらの操作を実行するコード例については、「Sensors Geolocation Sample Driver (UMDF バージョン 1) での OnSelfManagedIoSuspend の実装」を参照してください。
ドライバーがハードウェア デバイスと直接通信する場合は、ハードウェアに対する未処理の要求をすべてキャンセルしてから、I/Oキューをフラッシュする必要があります。 ドライバーは、次の手順を使用して、OnSelfManagedIoSuspend メソッドを実装する必要があります。
- デバイスが非アクティブであることを示すグローバル フラグを設定します。
- WDF キューで Stop メソッドを呼び出します。
- 保留中のすべてのハードウェア要求をキャンセルして、すべての ISensorDriver コールバック スレッドを完了できるようにします。
- WDF キューで StopSynchronously メソッドを呼び出します。
- GNSS デバイス ハードウェアにアクセスするその他の非同期処理を停止します。
- WDF キューで Start メソッドを呼び出します。
- 手順 1 で設定されたグローバル フラグをクリアします。
すべての位置センサー ドライバーでは、OnSelfManagedIoFlush メソッドの実装内で I/O キューを同期的に消去する必要があります。
スリープ モードと電源切断モード
GNSS デバイスは、デバイスのローカル コンテキストが保持されていて、外部シグナリングなしで通信バスを介して要求に応答できる場合、スリープ モードと電源切断モードの両方をサポートする場合があります。 (通常、電源除去モードのデバイスはバス要求に応答できません。)基になるデバイスが電源削除モードに対応しているかどうかを理解するには、場所センサードライバーを記述する必要があります。 位置センサー ドライバーは、基になるデバイスが電源切断モードに対応しており、ドライバーがコンテキストの保存/復元とデバイスの再初期化に対応している場合にのみ、D3cold を有効にする必要があります。 そうしないと、位置センサーは引き続き D3 をアイドル状態として使用する必要がありますが、D3cold を有効にすることができなくなります。 これにより、基になるバス ドライバーとフィルター ドライバーは、デバイスを電源切断モードではなく、スリープ低電力モードにすることができます。
位置センサー ドライバーが D3cold をサポートし、D3 への移行を開始することを示した場合、基になるバス ドライバーとフィルター ドライバーがデバイスからの電力の切断を実行します。 このメカニズムは、UART 接続の GNSS デバイスの場合は ACPI によって実装できます。 または、USB 列挙型 GNSS デバイスの場合は、USB ハブ ドライバーと ACPI ドライバーの組み合わせによってメカニズムを有効にすることができます。
GNSS デバイスが SoC 上にある場合、基になるドライバーに実装されている SoC ベンダーの独自のドライバーとファームウェアが GNSS デバイスから電力を切断します。 GNSS デバイスがスリープ電源モードで 1 mW を超えて使用される場合、すべてのクライアントが切断されたときにデバイスを電力切断モードにするように、GNSS ドライバー、プラットフォーム ファームウェア、およびハードウェアを設計する必要があります。
アイドル状態の検出
GNSS デバイス用の位置センサードライバーは、可能な場合は常にデバイスをスリープ電源モードに切り替える必要があります。 アプリが長いレポート間隔を要求した場合、位置センサー ドライバーは、次の修正が要求されるまで GNSS デバイスをスリープ電源モードに切り替える必要があります。 位置センサードライバーでは、修正を三角測量してアプリに位置データを提供するのに十分な時間を使用して、GNSS デバイスをアクティブな電源モードに切り替える必要があります。
たとえば、要求された最短のレポート間隔が 30 分であり、デバイスがウォームアップして位置修正を取得するのに 1 分かかるとします。 このシナリオでは、位置センサー ドライバーは次の操作を行う必要があります。
- 位置情報を提供した直後に、ResumeIdle を呼び出します。これにより、GNSS デバイスがスリープ モード (D3) に移行します。
- タイマーを作動させて、28 分後に切れるようにします。 (TimerExpiration = ReportInterval – WarmUpTime).
- タイマーの有効期限が切れたら、StopIdle を呼び出します。これにより、GNSS デバイスが D0 に移行します。
- デバイスが修正プログラムを取得したら、アプリケーションに位置情報を提供します。 注 位置センサー ドライバーは、D3cold を慎重に構成する必要があります。
WarmUpTime の再開待機時間を実現するために、デバイスに継続的な電源が必要な場合は、D3cold を有効にしないでください。 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 構造体の ExcludeD3Cold の値を変更することにより、実行時に D3cold を動的に有効にすることができます。
USB 接続の GNSS デバイスが D3cold を無効にしてスリープ モード (D3) に移行すると、デバイスは USB 中断状態に移行し、チップセットとプロセッサの電力を大幅に節約します。 場所センサードライバーで D3cold が有効になっていて、スリープモード (D3) に移行した場合、基になるプラットフォームは USB バス経由で接続されている場合でも、デバイスから電源が切断される可能性があります。
サポートされるハードウェア構成
Windows では、GNSS デバイス用に 4 つの物理ハードウェア構成がサポートされています。 接続バスは、各ハードウェア構成を区別します。
GNSS が UART 経由で SoC に接続されている
この構成では、GNSS 無線は、SoC 上の UART に接続されているスタンドアロン デバイスです。 GNSS 無線は、アクティブ電源モードとスリープ電源モードの間で切り替えられるため、またはリセットと電源投入のシーケンス条件を処理するために、無線と SoC の間に 1 つ以上の GPIO を持っている場合があります。
GNSS 無線のスリープ電源モードでの消費量が 1mW 未満の場合、GNSS 無線はデバイスの仕様を満たす任意のシステム電源レールに接続できます。
GNSS デバイスは、ACPI 名前空間で宣言する必要があり、電力管理用の GPIO は、ACPI 名前空間のデバイスの下にある _PS3 および _PS0 制御メソッドによって制御する必要があります。 _PS3 メソッドと _PS0 メソッドは、位置センサー ドライバーによって開始された D3 および D0 の切り替えに応答して、ACPI ドライバーによって実行されます。 システム インテグレーターは、ACPI 名前空間の GPIO 操作領域の一部として GPIO を宣言する必要があります。
GNSS 受信機がスリープ電源モードで 1mW 以上を消費する場合、GNSS 受信機は電源レールに接続する必要があります。電源レールは、SoC の ACPI ファームウェアによって制御される GPIO を使用してオンとオフを切り替えることができます。 この構成では、位置センサー ドライバーで D3cold を有効にする必要があります。 切り替え可能な電源レールを制御するための GPIO は、ACPI GPIO 操作地域で公開されている必要があります。 システム インテグレーターは、_OFF および _ON メソッドを含む、切り替え可能な電源レールの電源リソース、および名前空間内の GNSS デバイスの下の電源リソースへの参照を記述する必要があります。
Windows ACPI ドライバーは、位置センサー ドライバーが D3 に移行するときに、_OFF メソッドを評価します。 位置センサー ドライバーが D0 に切り替わると、Windows ACPI ドライバーは、電源リソースの下にある _ON メソッドを評価します。 _OFF メソッドと _ON メソッドの実装では、切り替え可能な電源レールを制御する GPIO を切り替え、必要な電源シーケンス遅延を実装する必要があります。
GNSS が SoC に統合されている
GNSS デバイスが SoC に物理的に統合されている場合、通信と電源管理の実装は SoC 自体に固有のものです。
GNSS デバイスは ACPI を介して列挙する必要がありますが、基となる GNSS 受信機への通信は、SoC ベンダーが提供するトランスポート ドライバーを介して行われる場合があります。 この構成では、すべてのクライアントが切断されたときに、スリープ状態モードまたは電源切断モードに移行するために、位置センサー ドライバーが引き続き D3 の切り替えを実装する必要があります。 D3 移行により、Windows OS の電源管理ツールと診断で GNSS デバイスの電源状態を簡単に監視できるようになります。
システム SoC に統合された GNSS 無線を利用する予定のシステムインテグレーターは、ファームウェア、ドライバー、および電源管理のサポートについて SoC ベンダーと密接に相談する必要があります。
GNSS が USB 複合デバイスとして USB 接続された MBB 無線に統合されている
システム デザイナーは、埋め込みの GNSS 受信機を含む USB 接続の MBB モジュールを統合することができます。 このハードウェア構成では、位置センサー ドライバーは、USB 複合デバイスの 1 つの機能として、USB バスを介して埋め込みの GNSS 受信機と直接通信します。
注 MBB モジュール上の GNSS デバイスを使用するシステムでは、統合を慎重に検討する必要があります。 これらのソリューションのハードウェア、ソフトウェア、ファームウェアの設計を確認するには、Microsoft の担当者にお問い合わせください。
この構成では、GNSS デバイスは MBB モジュールの一部として統合されています。 GNSS 無線は、MBB 無線を使用して、処理、電源、RF アンテナ コンポーネントを共有できます。 GNSS 無線は、USB 複合デバイス上で 1 つのインターフェイスとしてソフトウェアに直接公開されます。 位置センサー ドライバーは、位置センサー ドライバー内に実装されている USB ドライバー インターフェイスを使用して、USB バス経由で GNSS 無線と直接通信します。
GNSS ハードウェアの電源管理は、GNSS モジュールとの通信によって行われます。 GNSS モジュールと位置センサー ドライバーは、GNSS 無線をオンまたはオフにするための帯域内メカニズムをサポートする必要があります。 このメカニズムは、SoC から MBB + GNSS モジュールへの GPIO の使用に依存しないようにする必要があります。
同様に、GNSS モジュールと位置センサー ドライバーは、USB 複合デバイスが USB 中断 (セレクティブ サスペンド) 状態に入ることができるように、デバイスを D3 状態に切り替えることをサポートしている必要があります。 複合デバイスを中断するには、USB 複合デバイスのすべての機能を中断する必要があります。 GNSS 機能と USB 複合デバイス全体を中断状態にするには、GNSS デバイスをスリープ (D3) モードにする必要があります。
注 GNSS デバイスとドライバーは、セレクティブ サスペンドをサポートしている必要があります。そうしないと、SoC の USB ホスト コントローラーは低電力モードに入ることができず、モダン スタンバイ時に電力が節約されません。
この構成では、GNSS デバイスは USB および USB 複合ドライバーを使用して列挙されていますが、ACPI 名前空間で記述されています。 この構成では、MBB モジュール上の GNSS デバイスと SoC 間の GPIO 通信はサポートされていません。 GNSS デバイスは、ユーザーが無線を無効にした場合でも、プラットフォームが S0 システムの電源状態にある間、ACPI を介して Windows に列挙されたままである必要があります。 GNSS デバイスは、システムのどの部分でも時間どおりに USB バスから消失しないようにする必要があります。
GNSS がデバイス サービスを使用して USB 接続の MBB 無線に統合されている
システム デザイナーは、埋め込みの GNSS 受信機を含む USB 接続の MBB モジュールを統合することができます。 このハードウェア構成では、位置センサー ドライバーは、MBB モジュール全体を表す複合デバイスの一部としてスタンドアロン USB 機能として公開される GNSS デバイスとは対照的に、モバイル ブロードバンド デバイス サービス インターフェイスを介して埋め込み GNSS 受信機と通信します。
注 この構成は推奨されていません。 GNSS デバイス統合のこの方法を選択するシステム インテグレーターは、Microsoft の担当者に連絡して、正しい実装を検証する必要があります。 MBB モジュールを表す USB 複合デバイスの一部として GNSS デバイスを公開することをお勧めします。
この構成では、GNSS デバイスは MBB モジュールの一部として統合されています。 GNSS 無線は、MBB 無線を使用して、処理、電源、RF アンテナ コンポーネントを共有できます。 GNSS 無線は、WindowsIMbnDeviceServices COM インターフェイスを使用してアクセスできるデバイスサービスインターフェイス経由でソフトウェアに間接的に公開されます。 位置センサー ドライバーは、IMbnDeviceServices インターフェイスを使用して、GNSS 無線と通信します。
GNSS ハードウェアの電源管理は、MBB モジュールへのデバイス サービス インターフェイスを介した帯域内通信によって行われます。 GNSS ハードウェアは、無線をオフにして GNSS デバイスを低電力モードにするために、デバイス サービス インターフェイスを介した帯域内メカニズムをサポートしている必要があります。 これらのメカニズムには、デバイス サービス インターフェイスを介して位置センサー ドライバーからアクセスできる必要があります。
この構成では、GNSS デバイスを ACPI で列挙し、モバイル ブロードバンド モジュールの子として ACPI 名前空間で記述する必要があります。 GNSS デバイスでは、ACPI 名前空間のデバイスの下にはハードウェア リソースが記述されません。
位置センサー ドライバーでは、前の「ドライバーの実装要件」セクションで説明したのと同じ一連の電源管理実装ガイダンスを引き続き実行する必要があります。
この構成では、MBB モジュール上の GNSS デバイスと SoC 間の GPIO 通信はサポートされていません。 すべての電源管理と無線通信は、USB バス上で物理的に実行され、デバイス サービス インターフェイスを介して位置センサー ドライバーに公開されます。 GNSS デバイスは、ユーザーが無線を無効にしている場合でも、すべてのシステムで ACPI を介して Windows に列挙されたままである必要があります。
このハードウェア構成を実装する場合、システム インテグレーターは MBB モジュールベンダーと緊密に連携して、GNSS デバイスが ACPI 名前空間で正しく公開されるようにすることをお勧めします。
スリープ解除に関する懸念事項
GNSS デバイスのスリープ解除に関する懸念事項はありません。 GNSS デバイスでは、低電力状態から SoC のスリープ解除をサポートすることは想定されていません。
テストおよび検証
GNSS デバイス ベンダー、MBB モジュール ベンダー、およびシステム インテグレーターは、これらの推奨事項に従って、GNSS デバイスとその関連ソフトウェア コンポーネントの電源管理実装をテストおよび検証する必要があります。 詳細については、「全地球航法衛星システム (GNSS) テストのガイダンス」を参照してください。
位置センサーの電源管理
システム インテグレーターは、GNSS デバイスの位置センサー ドライバーが電源管理の切り替えを実行し、すべてのクライアントが切断されたか、ラジオが無効になったときに D3 状態になることを検証する必要があります。
基本的なテスト ケースは次のとおりです。
- モダン スタンバイで画面がオフになっている 10 秒以内に、センサー ドライバーが D3 に切り替わることを確認します。
- Windows 設定アプリケーションで無線がオフになっている 10秒以内に、センサー ドライバーが D3 に切り替わることを確認します。
- 最新のスタンバイを終了し、Location API を使用するアプリケーションを起動した直後に、位置センサー ドライバーが D0 に切り替わることを確認します。
位置センサー ドライバーの Dx 状態切り替えを観察する最も簡単な方法は、Windows Performance Toolkit を使用して、他の Windows センサー デバイスと比較することです。 このメソッドでは、Windows インストルメンテーションを使用して、D3IRP が GNSS デバイスを構成するデバイス ドライバー スタックを介して切り替わることを検証します。 Windows 電源マネージャーには、デバイス電力 (Dx) IRP のインストルメンテーションを含む組み込みの Windows イベント トレーシング (ETW) インストルメンテーションが含まれています。 この情報を手動モードで表示するには、Windows Performance Toolkit (WPT) を入手し、テスト中のシステムにインストールします。
次のコマンドを使用して、ユーザー モードの XPerf トレースを開始します。
管理者のコマンド プロンプトを開きます。
\%ProgramFiles%\Windows Kits\8.0\Windows Performance Toolkit\ フォルダーを参照します。
Xperf の開始:
xperf.exe -start power_session -on Microsoft-Windows-Kernel-Power
電源ボタンを使用して、システムをモダン スタンバイに切り替えます。
120 秒待機します。
電源ボタンを使用して、システムをモダン スタンバイに切り替えます。
60 秒待機します。
次のコマンドを実行して、イベント ログを停止します。
xperf.exe -stop power_session
バイナリ トレース ファイルを .csv と人間が判読できる形式
xperf.exe –i \user.etl > power.txt
に変換します。テキスト エディターで power.txt ファイルを開き、GNSS デバイスのハードウェア ID を検索します。 GNSS デバイスのハードウェア ID は、[デバイス インスタンス パス] の下の [デバイス マネージャー] にあるデバイス プロパティの [詳細] タブで判別できます。 次の例では、GNSS デバイスのデバイス インスタンス パスは ACPI\MST0731\2&daba3ff&0 です。
GNSS デバイスの D3IRP は、GNSS デバイスのデバイス インスタンス パスがあり、D3 状態の最後のイベント値が 3 である、Microsoft-Windows-Kernel-Power/IRP/Stop 型のイベントで示されます。 power.txt ファイルからの次の出力イベントは、D3 IRP の先頭を示しています。
Microsoft-Windows-Kernel-Power/Irp/Start , 7605393, "Unknown" ( 4), 256, 0, , , , , 0x868e2728, 1, 2, 0x85fb56e0, 25, "ACPI\MSFT0731\2&daba3ff&0", 3
このイベントは、power.txt 出力ファイルの先頭近くに記録されている必要があります。 上の例の 0x868e2728 パラメーターは、D3 IRP 構造体へのポインターです。 この同じ IRP ポインターを使用して後続のイベントを見つけることにより、GNSS デバイスを構成するドライバー スタックを流れる D3 IRP のビューを見つけることができます。 IRP ポインターは、システムおよびブートの有効期間に固有であることに注意してください。
Microsoft-Windows-Kernel-Power/Irp/Start , 7605393, "Unknown" ( 4), 256, 0, , , , , 0x868e2728, 1, 2, 0x85fb56e0, 25, "ACPI\ATML1000\2&daba3ff&0", 3
Microsoft-Windows-Kernel-Power/Driver/Start , 7605416, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x85fb56e0, "\Driver\gpsdrv"
Microsoft-Windows-Kernel-Power/Driver/Stop , 7605515, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x85fb56e0
Microsoft-Windows-Kernel-Power/Driver/Start , 7608351, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x857ffb90, "\Driver\ACPI"
Microsoft-Windows-Kernel-Power/Driver/Stop , 7608416, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x857ffb90
Microsoft-Windows-Kernel-Power/Driver/Start , 7608424, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x85fb56e0, "\Driver\sensdrv"
画面がオンになったときに GNSS デバイスが D0 に戻っていることを確認することも、同様のプロセスです。 GNSS デバイスの Microsoft-Windows-Kernel-Power/IRP/Start イベントは、0 (D0) ターゲット状態でログに記録されます。 D0 IRP は、D3 IRP と同様の方法で、GNSS デバイス スタックを構成するドライバーを通過します。
GNSS 電源管理チェックリスト
システム インテグレーター、GNSS 無線のベンダー、SoC のベンダーは、次のチェックリストを使用して、システムの電源管理設計に Windows 8 以上との互換性があることを確認する必要があります。
次の構成設定順序で、GNSS デバイスを最新のスタンバイ対応プラットフォームに統合します。
- USB 経由で接続された MBB モジュール (MBB を搭載したシステムの場合) と統合します。
- SoC に統合します (SoC に GNSS が含まれるシステムの場合)。
- UART、I2C、または別の低電力バスに接続された SoC の外部のスタンドアロン。
バス接続インターフェイスを含め、スリープ (無線オフ) の平均電力消費が 1 mW 未満の GNSS デバイスを選択します。
GNSS デバイスで、スリープ (無線オフ) の平均電力消費が 1 mW を超える場合、システム インテグレーターと GNSS デバイス ベンダーは、接続されているアプリケーション クライアントがない場合、またはユーザーが無線をオフにしている場合に、GNSS デバイスから電源を完全に切断することをサポートしている必要があります。
GNSS デバイス ベンダーが、接続されているクライアントの数と GNSS 無線の状態に基づいてランタイム電力管理を実装する位置センサー ドライバーを提供していることを確認します。
GNSS デバイス ベンダーが、Windows 設定アプリケーションで GNSS 無線を公開する無線マネージャー ライブラリを提供していることを確認します。
位置センサー ドライバーは、ベンダーが提供する無線マネージャー ライブラリとベンダー提供の位置センサー ドライバーの間で無線オン/オフ状態を通信するためのプライベート インターフェイスを実装する必要があります。
GNSS が UART、I2C、またはその他の低電力バスを介して接続された SoC の外部のスタンドアロンデバイスである場合、システム インテグレーターと GNSS デバイス ベンダーは次のことを行う必要があります。
- GNSS デバイスと SoC 自体の間にある GPIO をドキュメント化します。
- ACPI 名前空間の GPIO 操作領域の一部として、電源管理用の GPIO を公開します。
GNSSが、UART、I2C、またはその他の低電力バスを介して接続された SoC の外部のスタンドアロン デバイスであり、スリープ電力モードでの GNSS デバイスの平均消費電力が 1 mW を超える場合、システム インテグレーターと GNSS デバイス ベンダーは次のことを行う必要があります。
- ACPI 電源リソースと _ON/_OFF 制御メソッドを提供して、GNSS の電源ドメインについて説明します。
- 説明されている ACPI 電源リソースを参照する、ACPI 名前空間の GNSS デバイスの下に _PR0 および _PR3 メソッドを指定します。
- 位置センサー ドライバーが D3 への切り替えを実行し、ドライバーで D3cold が有効になっていることを確認します。
GNSS が MBB モジュールの一部である場合、システム インテグレーターと GNSS デバイス ベンダーは次のことを行う必要があります。
- USB 複合デバイスの一部として GNSS デバイスを公開します。
- USB バスを介して GNSS デバイスと直接通信する位置センサー ドライバーを提供します。
- 無線のオン/オフおよび GNSS デバイスのすべての電源管理が USB バスを介して帯域内で実行される可能性があることを確認します。 このハードウェア構成では、GPIO を使用して GNSS 無線または電源の状態を変更することはできません。
- MBB モジュールを記述する USB デバイス、または MBB 無線と GNSS 無線の両方について記述する USB 複合デバイスが、最新のスタンバイ中に USB 中断状態になることを確認します。
- 位置センサー ドライバーは、デバイス サービス インターフェイスを介してデバイスと通信している場合でも、すべてのクライアントが切断されているか、無線がオフになっている場合、D3 (スリープ) モードに入る必要があります。
- GNSS デバイスがモバイル ブロードバンド デバイス サービス インターフェイスを介して制御されている場合 (これは推奨されません)、GNSS デバイスはハードウェア リソースのないシステム ACPI 名前空間で記述されている必要があります。 GNSS デバイスは、ACPI 名前空間のモバイル ブロードバンド モジュールの子として記述されている必要があります。
GNSS デバイスと位置センサー ドライバーが電源管理を正しく実行していることをテストして検証します。 少なくとも次のテスト ケースを検証してください。
- モダン スタンバイで画面がオフになっている 10 秒以内に、センサー ドライバーが D3 に切り替わることを確認します。
- Windows 設定アプリケーションで無線がオフになっている 10秒以内に、センサー ドライバーが D3 に切り替わることを確認します。
- 最新のスタンバイを終了し、Location API を使用するアプリケーションを起動した直後に、位置センサー ドライバーが D0 に切り替わることを確認します。
GNSS デバイスの電力消費をスリープ (D3) 状態で検証し、平均で 1 mW 未満であることを確認します。