新式待机平台的 GNSS 接收器电源管理

本主题介绍了新式备用平台的全球导航卫星系统 (GNSS) 电源管理。

实现新式待机电源模型的 Windows 电脑还可能包含全球导航卫星系统 (GNSS) 设备。 GNSS 设备使用户可以从卫星导航系统(如全球定位系统 (GPS) 或全球轨道导航卫星系统 (GLONASS))获取高精度定位信息。 硬件平台进入新式待机后,GNSS 设备必须进入功耗不到 1 mW 的低功率操作模式。 GNSS 设备随后必须保持此模式,直到平台退出新式待机。

支持 GPS 和全球轨道导航卫星系统 (GLONASS) 的 GNSS 设备已推出了一段时间,不过较新 GNSS 设备支持北斗导航卫星系统 (BDS) 和 Galileo 这类卫星导航系统。

新式待机平台通常围绕片上系统 (SoC) 集成电路构建。 Windows 支持以下用于向此类平台添加 GNSS 设备的选项:

  • 包括含有集成 GNSS 设备的移动宽带 (MBB) 模块。 此方法在移动电话中很常见。
  • 选择包含集成 GNSS 设备的 SoC。
  • 使用低功率总线(例如 I2C、SPI 或 UART)将独立 GNSS 设备连接到 SoC。

如果可能,系统集成商选择的 GNSS 设备应实现设备功耗不超过 1 mW 的低功率睡眠模式。 GNSS 设备供应商必须提供将位置数据从 GNSS 设备转换为客户端应用程序所需形式的位置传感器驱动程序。 这些应用程序通过 Windows 位置 API 连接到 GNSS 设备。 GNSS 设备的位置传感器驱动程序会跟踪以下信息:

  • 当前通过位置 API 连接到 GNSS 设备的客户端数。
  • GNSS 设备的无线电打开/关闭开关状态。 用户通过 Windows 设置应用程序控制此开关。 有关详细信息,请参阅“集成无线电管理”。

位置传感器驱动程序使用此信息确定 GNSS 设备何时处于空闲状态,以便可以将它置于低功率模式。 仅当一个或多个客户端连接到设备时,才会主动使用 GNSS 设备。 否则,设备处于空闲状态。

为了延长系统电池寿命,在新式待机期间,对 GNSS 设备的访问会受到限制。 锁屏应用程序可以在新式待机期间访问地理围栏和位置信息。 不过,只有在显示器打开并且平台在与用户交互期间,非锁定屏幕应用程序才能使用位置 API 从 GNSS 设备获取位置数据。 在显示器关闭并且平台进入新式待机状态之后不久,任何连接到 GNSS 设备的非锁定屏幕应用程序都会由 Windows 自动断开连接,并且应用程序会挂起。

电源管理模式

GNSS 接收器应具有如下所述的 4 种电源管理模式。

GNSS 接收器电源模式

设备电源模式 说明 设备电源状态 (Dx) 无线电状态(向用户显示) 连接的客户端数 平均功耗 (mW) 转换机制

活动(采集)

GNSS 接收器在获取卫星定位。

D0

>=1

~200 mW

空值

活动(1 Hz 跟踪)

GNSS 接收器已获取卫星定位,并定期向一个或多个应用程序提供数据。

D0

>=1

~100 mW(特定于设备)

空值

睡眠状态

GNSS 接收器没有已连接的客户端。GNSS 接收器硬件仍应用了电源以保留设备上的上下文,并缩短转换为活动模式的恢复延迟时间。

D3(D3hot)

关或开

0

<1 mW(特定于设备)

软件已启动。 这是直接连接到通用串行总线 (USB) 总线或 USB 复合设备的 GNSS 无线电的选择性挂起状态。

电源移除

GNSS 接收器没有已连接的客户端,无线电关闭并且外部实体移除了 GNSS 接收器的所有电源。

D3(D3cold)

关或开

0

0 mW

软件已启动并且需要硬件协调以移除电源。

GNSS 接收器的软件驱动程序还需要处理无线电管理,如下所述。

平台实现要求

新式待机平台具有多个用于以物理方式集成 GNSS 接收器的选项。 GNSS 接收器可以是通过低功率通信总线连接到 SoC 的独立设备的一部分。 GNSS 接收器还可以集成到移动宽带 (MBB) 无线电中,因为 GNSS 接收器在移动电话中很常见。 最后,GNSS 接收器可以集成到 SoC 本身。

在确定要为需要 GNSS 功能的平台选择哪种实现时,这些多个选项向系统集成商提出了挑战。 对于 Windows 新式待机平台,建议系统集成商按以下优先级顺序集成 GNSS:

  1. 如果系统配备了 MBB 无线电,请使用集成到 MBB 模块中的 GNSS 接收器。
  2. 如果系统配备了具有板载 GNSS 接收器的 SoC,请使用集成到 SoC 中的 GNSS 接收器。
  3. 集成通过低功率通信总线(如 UART、SPI 或 I2C)连接到 SoC 的独立 GNSS 接收器。

系统集成商不应向 Windows 公开任何外部 GNSS 接收器。 在向操作系统公开了多个 GNSS 接收器的情况下,Windows 不会聚合来自所有 GNSS 设备的位置信息。

软件电源管理机制

Windows 平台中的 GNSS 设备应由使用 Windows 传感器类扩展模型并实现 ISensorDriver 接口的用户模式驱动程序框架 (UMDF) 驱动程序进行管理。 此 GNSS 驱动程序称为位置传感器驱动程序,应对基础 GNSS 接收器进行电源管理并向针对位置信息的应用程序请求提供数据。

概述和应用程序模型

位置传感器驱动程序使用连接的应用程序客户端数作为主要机制,以确定 GNSS 设备可以进入睡眠或电源移除模式的时间。 位置传感器驱动程序还负责与 GNSS 供应商提供的无线电管理器库进行通信,该库使用户可以控制是启用还是禁用 GNSS 无线电。 位置传感器驱动程序可以同时使用连接的客户端数和用户的无线电状态首选项,以确保 GNSS 设备尽可能处于低功率睡眠或电源移除模式。

Microsoft Store 应用会管理前台和后台应用程序的生存期,因此对连接到位置传感器驱动程序的应用程序客户端数有重大影响。 前台应用程序通过 Windows 位置 API 请求位置信息。 当用户将前台应用程序切换到后台时,Microsoft Store 应用模型会确保客户端应用程序从 GNSS 接收器断开连接。

此应用程序模型机制使位置传感器驱动程序可以轻松跟踪连接的应用程序客户端数。 每当连接的应用程序客户端为零个时,位置传感器驱动程序都可以将 GNSS 设备转换为睡眠或电源移除模式。

当系统进入新式待机时,Windows 会自动挂起所有前台应用程序,从而使位置传感器驱动程序观察到连接的客户端数转换为零。

集成无线电管理

位置传感器驱动程序还必须实现用于与供应商提供的收音机管理器库进行通信的接口。 无线电管理器库允许 Windows 在 Windows 设置应用程序中公开 GNSS 设备无线电“开/关”控制。

位置传感器驱动程序实现要求

未使用 GNSS 设备时,位置传感器驱动程序必须将 GNSS 设备置于低功率 D3 状态。 如果当前没有连接的客户端,或者已通过无线电管理器禁用了 GNSS,则不使用 GNSS 设备。

通过无线电管理器禁用了 GNSS 设备后,位置传感器驱动程序必须将 GNSS 设备保持为 D3 状态。 此要求可防止驱动程序使用电源管理队列并且仅转发来自连接的客户端的请求。 位置传感器驱动程序必须将非电源管理队列用于 I/O,并使用 StopIdle 和 ResumeIdle 方法直接管理空闲。 位置传感器必须继续作为 GNSS 设备驱动程序堆栈的电源策略所有者。 在调用 IWDFDevice::CreateIoQueue 以创建 I/O 队列时,驱动程序必须将 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 会向位置传感器驱动程序发出信号,指出进入驱动程序的请求可以直接与 GNSS 设备硬件交互(包括来自 ISensorDriver:: 回调的请求)。 请注意,驱动程序框架保证可以在 OnD0Exit 和 OnD0Entry 方法中访问设备硬件

同样,当框架调用 IPnpCallbackSelfManagedIo::OnSelfManagedIoSuspend 方法时,驱动程序必须就在从 OnSelfManagedIoSuspend 返回之前完成所有 ISensorDriver 请求。 如果访问设备硬件可能会阻止其中任何请求在一秒内完成,那么驱动程序便无法这样做。 如果位置传感器驱动程序具有针对 GNSS 设备硬件的挂起请求,则当无法在不违反此时间约束的情况下以任何其他方式完成请求时,必须取消请求。

如果驱动程序不直接与硬件设备交互,或者保证所有未完成的硬件请求在一秒内完成,则驱动程序应该使用以下过程实现 OnSelfManagedIoSuspend 方法

  1. 设置指示设备处于非活动状态的全局标志。
  2. 对 Windows 驱动程序框架 (WDF) 队列调用 StopSynchronously 方法。
  3. 停止任何其他访问 GNSS 设备硬件的异步工作。
  4. 对 WDF 队列调用 Start 方法。
  5. 清除步骤 1 中设置的全局标志。

有关执行这些操作的代码示例,请参阅传感器地理位置示例驱动程序(UMDF 版本 1)中的 OnSelfManagedIoSuspend 实现。

如果驱动程序直接与硬件设备交互,则必须在刷新 I/O 队列之前取消针对硬件的任何未完成请求。 驱动程序应使用以下过程实现 OnSelfManagedIoSuspend 方法:

  1. 设置指示设备处于非活动状态的全局标志。
  2. 对 WDF 队列调用 Stop 方法。
  3. 取消所有挂起的硬件请求,以允许所有 ISensorDriver 回调线程完成。
  4. 对 WDF 队列调用 StopSynchronously 方法。
  5. 停止任何其他访问 GNSS 设备硬件的异步工作。
  6. 对 WDF 队列调用 Start 方法。
  7. 清除步骤 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 设备支持四种物理硬件配置。 连接总线会区分每种硬件配置。

GNSS 通过 UART 连接到 SoC

在此配置中,GNSS 无线电是连接到 SoC 上的 UART 的独立设备。 GNSS 无线电可能在无线电与 SoC 之间具有一个或多个 GPIO,用于活动模式与睡眠电源模式之间的转换,或者用于处理重置和通电排序条件。

如果 GNSS 无线电在其睡眠电源模式下的功耗小于 1 mW,则 GNSS 无线电可能连接到满足设备规格的任何系统电源轨。

GNSS 设备必须在 ACPI 命名空间中声明,用于电源管理的 GPIO 应通过 ACPI 命名空间中设备下的 _PS3 和 _PS0 控制方法进行控制。 _PS3 和 _PS0 方法由 ACPI 驱动程序执行,以响应位置传感器驱动程序启动的 D3 和 D0 转换。 系统集成商必须在 ACPI 命名空间中将 GPIO 声明为 GPIO 操作区域的一部分。

如果 GNSS 接收器在其睡眠电源模式下的功耗超过 1 mW,则 GNSS 接收器必须连接到可以使用由 SoC 上的 ACPI 固件控制的 GPIO 来打开和关闭的电源轨。 在此配置中,位置传感器驱动程序必须启用 D3cold。 用于控制可切换电源轨的 GPIO 必须在 ACPI GPIO 操作区域中公开。 系统集成商必须在命名空间中的 GNSS 设备下描述可切换电源轨的电源资源(包括 _OFF 和 _ON 方法),以及对电源资源的引用。

当位置传感器驱动程序转换为 D3 时,Windows ACPI 驱动程序会计算 _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 连接的 MBB 无线电(作为 USB 复合设备)

系统设计人员可以选择集成包含嵌入式 GNSS 接收器的 USB 连接的 MBB 模块。 在此硬件配置中,位置传感器驱动程序直接通过 USB 总线与嵌入式 GNSS 接收器通信(作为 USB 复合设备中的一种功能)。

注意 在 MBB 模块中包含 GNSS 设备的系统需要仔细考虑集成。 请与 Microsoft 代表联系,以查看这些解决方案的硬件、软件和固件设计。

在此配置中,GNSS 设备是 MBB 模块的集成部分。 GNSS 无线电可能会与 MBB 无线电共享处理、电源和 RF 天线组件。 GNSS 无线电作为 USB 复合设备上的一个接口直接向软件公开。 位置传感器驱动程序使用在位置传感器驱动程序内实现的 USB 驱动程序接口,直接通过 USB 总线与 GNSS 无线电通信。

GNSS 硬件的电源管理通过与 GNSS 模块的带内通信进行驱动。 GNSS 模块和位置传感器驱动程序必须支持带内机制以打开和关闭 GNSS 无线电。 此机制不得依赖于使用从 SoC 到 MBB+GNSS 模块的任何 GPIO。

同样,GNSS 模块和位置传感器驱动程序必须支持将设备转换为 D3 状态,以便 USB 复合设备可以进入 USB 挂起(选择性挂起)状态。 USB 复合设备上的所有功能都必须挂起,以便挂起复合设备。 GNSS 设备必须处于睡眠 (D3) 模式,以便 GNSS 功能和整个 USB 复合设备都处于挂起状态。

注意 GNSS 设备和驱动程序必须支持选择性挂起,否则 SoC 上的 USB 主机控制器无法进入低功率模式,并且会阻止新式待机期间节省电源。

在此配置中,GNSS 设备通过 USB 和 USB 复合驱动程序进行枚举,但在 ACPI 命名空间中进行描述。 在此配置中,不支持 MBB 模块上的 GNSS 设备和 SoC 之间进行 GPIO 通信。 在平台保持 S0 系统电源状态的整个时间内,GNSS 设备都必须保持通过 ACPI 向 Windows 进行枚举,即使用户禁用了无线电也是如此。 在系统开启时间的任何时段内,GNSS 设备都不得在 USB 总线上消失。

GNSS 使用设备服务集成到 USB 连接的 MBB 无线电

系统设计人员可以选择集成包含嵌入式 GNSS 接收器的 USB 连接的 MBB 模块。 在此硬件配置中,与作为表示整个 MBB 模块的复合设备一部分的独立 USB 功能进行公开的 GNSS 设备相反,位置传感器驱动程序通过移动宽带设备服务接口与嵌入式 GNSS 接收器通信。

注意 不建议使用此配置。 选择此 GNSS 设备集成方法的系统集成商应联系其 Microsoft 代表来验证正确实现。 首选将 GNSS 设备作为表示 MBB 模块的 USB 复合设备的一部分进行公开。

在此配置中,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 模块供应商密切合作,以确保在 ACPI 命名空间中正确公开 GNSS 设备。

唤醒问题

GNSS 设备没有唤醒问题。 GNSS 设备不应支持将 SoC 从低功率状态唤醒。

测试和验证

GNSS 设备供应商、MBB 模块供应商和系统集成商应遵循这些建议来测试和验证 GNSS 设备的电源管理实现及其相关软件组件。 有关详细信息,请参阅“全局导航卫星系统 (GNSS) 测试指南”。

位置传感器电源管理

系统集成商应验证当所有客户端都已断开连接或无线电已禁用时,GNSS 设备的位置传感器驱动程序是否执行电源管理转换并进入 D3 状态。

基本测试用例包括:

  • 观察位置传感器驱动程序在屏幕关闭后 10 秒内转换为 D3,以实现新式待机。
  • 观察位置传感器驱动程序在 Windows 设置应用程序中关闭无线电后 10 秒内转换为 D3。
  • 观察位置传感器驱动程序在退出新式待机并启动使用位置 API 的应用程序后立即转换为 D0。

观察位置传感器驱动程序的 Dx 状态转换的最简单方法是使用 Windows Performance Toolkit 与其他 Windows 传感器设备进行比较。 此方法使用 Windows 检测验证 D3 IRP 是否在通过包含 GNSS 设备的设备驱动程序堆栈进行转换。 Windows 电源管理器包含内置 Windows 事件跟踪 (ETW) 检测,包括用于设备电源 (Dx) IRP 的检测。 若要在手动模式下查看此信息,请获取 Windows Performance Toolkit (WPT) 并将其安装在受测系统上。

使用以下命令开始用户模式 XPerf 跟踪:

  1. 打开管理员命令提示符。

  2. 浏览到 \%ProgramFiles%\Windows Kits\8.0\Windows Performance Toolkit\ 文件夹。

  3. 启动 Xperf:xperf.exe -start power_session -on Microsoft-Windows-Kernel-Power

  4. 使用电源按钮将系统转换为新式待机。

  5. 等待 120 秒。

  6. 使用电源按钮将系统转换退出新式待机。

  7. 等待 60 秒。

  8. 运行以下命令以停止事件记录:xperf.exe -stop power_session

  9. 将二进制跟踪文件转换为 .csv 和人类可读的格式:xperf.exe –i \user.etl > power.txt

  10. 在文本编辑器中打开 power.txt 文件并搜索 GNSS 设备的硬件 ID。 可以在设备管理器中“设备实例路径”下设备属性的“详细信息”选项卡中查找 GNSS 设备的硬件 ID。 在以下示例中,GNSS 设备的设备实例路径为 ACPI\MST0731\2&daba3ff&0

  11. GNSS 设备的 D3 IRP 通过 Microsoft-Windows-Kernel-Power/IRP/Stop 类型的事件进行指示,其中包含 GNSS 设备的设备实例路径,并且最后一个事件值为 3 以表示 D3 状态。 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

  12. 此事件应记录在 power.txt 输出文件的开头附近。 上面示例中的参数 0x868e2728 是指向 D3 IRP 结构的指针。 通过查找具有此相同 IRP 指针的后续事件,可以发现流过包含 GNSS 设备的驱动程序堆栈的 D3 IRP 视图。 请注意,IRP 指针会特定于系统和启动生存期。

  13. Microsoft-Windows-Kernel-Power/Irp/Start , 7605393, "Unknown" ( 4), 256, 0, , , , , 0x868e2728, 1, 2, 0x85fb56e0, 25, "ACPI\ATML1000\2&daba3ff&0", 3

  14. Microsoft-Windows-Kernel-Power/Driver/Start , 7605416, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x85fb56e0, "\Driver\gpsdrv"

  15. Microsoft-Windows-Kernel-Power/Driver/Stop , 7605515, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x85fb56e0

  16. Microsoft-Windows-Kernel-Power/Driver/Start , 7608351, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x857ffb90, "\Driver\ACPI"

  17. Microsoft-Windows-Kernel-Power/Driver/Stop , 7608416, "Unknown" ( 4), 20, 0, , , , , 0x868e2728, 0x857ffb90

  18. 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 设备集成到支持新式待机的平台中:

    1. 与 MBB 模块集成在一起(适用于配备 MBB 的系统),通过 USB 连接。
    2. 集成到 SoC(适用于 SoC 上具有 GNSS 的系统)。
    3. 在 SoC 外部独立,连接到 UART、I2C 或其他低功率总线。
  • 选择睡眠(无线电关闭)平均功耗小于 1 mW(包括任何总线连接接口)的 GNSS 设备。

  • 如果 GNSS 设备的睡眠(无线电关闭)平均功耗大于 1 mW,则系统集成商和 GNSS 设备供应商必须支持在没有连接的应用程序客户端或用户关闭了无线电时从 GNSS 设备完全移除电源。

  • 确保 GNSS 设备供应商提供基于连接的客户端数和 GNSS 无线电状态来实现运行时电源管理的位置传感器驱动程序。

  • 确保 GNSS 设备供应商提供在 Windows 设置应用程序中公开 GNSS 无线电的无线电管理器库。

    位置传感器驱动程序必须实现专用接口,以在供应商提供的无线电管理器库与供应商提供的位置传感器驱动程序之间传达无线电打开/关闭状态。

  • 如果 GNSS 是通过 UART、I2C 或其他低功率总线连接的 SoC 外部独立设备,则系统集成商和 GNSS 设备供应商必须:

    1. 记录 GNSS 设备与 SoC 本身之间的任何 GPIO。
    2. 将任何用于电源管理的 GPIO 在 ACPI 命名空间中作为 GPIO 操作区域的一部分进行公开。
  • 如果 GNSS 是通过 UART、I2C 或其他低功率总线连接的 SoC 外部独立设备,并且睡眠电源模式下的 GNSS 设备平均功耗大于 1 mW,则系统集成商和 GNSS 设备供应商必须:

    1. 提供 ACPI 电源资源和 _ON/_OFF 控制方法来描述 GNSS 电源域。
    2. 在 ACPI 命名空间中的 GNSS 设备下提供引用所述 ACPI 电源资源的 _PR0 和 _PR3 方法。
    3. 确保位置传感器驱动程序进行 D3 转换并在驱动程序中启用 D3cold。
  • 如果 GNSS 是 MBB 模块的一部分,则系统集成商和 GNSS 设备供应商必须:

    1. 将 GNSS 设备作为 USB 复合设备的一部分进行公开。
    2. 提供通过 USB 总线直接与 GNSS 设备通信的位置传感器驱动程序。
    3. 确保可以通过 USB 总线在带内执行 GNSS 设备的无线电打开/关闭以及所有电源管理。 在此硬件配置中,没有 GPIO 可以用于更改 GNSS 无线电或电源状态。
    4. 确保描述 MBB 模块的 USB 设备或是描述 MBB 和 GNSS 无线电的 USB 复合设备在新式待机期间进入 USB 挂起状态。
    5. 当所有客户端都断开连接或无线电已关闭时,位置传感器驱动程序必须进入 D3(睡眠)模式,即使通过设备服务接口与设备通信。
    6. 如果 GNSS 设备通过移动宽带设备服务接口进行控制(不建议这样做),则必须在系统 ACPI 命名空间中描述 GNSS 设备而不使用硬件资源。 GNSS 设备必须在 ACPI 命名空间中描述为移动宽带模块的子级。
  • 测试并验证 GNSS 设备和位置传感器驱动程序是否正确执行电源管理。 请至少验证以下测试用例:

    • 观察位置传感器驱动程序在屏幕关闭后 10 秒内转换为 D3,以实现新式待机。
    • 观察位置传感器驱动程序在 Windows 设置应用程序中关闭无线电后 10 秒内转换为 D3。
    • 观察位置传感器驱动程序在退出新式待机并启动使用位置 API 的应用程序后立即转换为 D0。
  • 验证 GNSS 设备在睡眠 (D3) 状态下的功耗,并确保其平均值小于 1 mW。