位置驱动程序功率和性能指南

以下部分介绍了确保位置驱动程序节能并高效提供数据的准则。

跟踪连接的客户端数和无线电状态

位置传感器必须跟踪已连接应用程序的数量,并且必须跟踪每个订阅应用程序的SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY和SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL属性的值。

当连接的客户端数为零时,位置传感器应进入尽可能低的电源状态,最好是 D3。 当事件指示客户端已连接时,传感器应退出低功耗状态并获取数据。

此外,如果定位设备包含无线电(如 GPS 位置传感器),则还必须使用无线电 管理跟踪无线电状态。 驱动程序编写器必须创建与驱动程序通信以设置无线电状态的无线电管理实现。 传感器地理位置驱动程序示例中提供了无线电管理实现以及如何与驱动程序通信的示例。

跟踪连接的客户端和无线电状态时,位置传感器应进入尽可能低的电源状态,最好是 D3,在无线电处于打开状态时,随时没有连接的客户端。 下图说明了连接的客户端的状态机、无线电状态以及建议的相应设备状态。

状态机。

下表提供了各种输入组合和结果输出的另一个视图, (包括电源状态) 。

客户端存在 (输入) 无线电状态 (输入) CRI (输入) 输入) (报告的位置 ASIC 状态 (输出) 传感器状态 (输出) 电源状态 (输出)
任意 任意 任意 空值 D3
<=120 秒 正在初始化 D0
<=120 秒 就绪 D0
任意 任意 不可用 D3
>120 秒 任意 就绪 D3
>120 秒 任意 就绪 D0

WDK 中的 传感器地理位置驱动程序示例 提供了跟踪已连接客户端数和无线电状态的驱动程序示例。

跟踪报告间隔

通过订阅事件来使用位置数据的应用程序通过设置 SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL 属性请求数据更新事件的最大频率。 为了节省电源,驱动程序发送数据报告的频率不应超过请求的最低报告间隔。

有关如何跟踪每个应用程序的值的详细信息,请参阅 筛选数据。 还可以在 WDK 的 传感器地理位置驱动程序示例中 找到跟踪报告间隔的示例。

跟踪所需准确性

正如跟踪每个客户端的报告间隔一样,必须跟踪每个客户端请求的准确性级别。

WDK 中的 传感器地理位置驱动程序示例 提供了跟踪客户端请求的所需准确性的驱动程序示例。

位置传感器驱动程序必须支持SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY作为可设置的属性。 驱动程序应监视连接的客户端的所需准确性属性,并根据请求的最高所需准确度设置SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY。

如果应用请求的最高准确度DESIRED_ACCURACY_DEFAULT,则位置传感器应优化电源和其他成本注意事项。 如果系统的其他提供程序提供位置数据,并且数据准确度为 500 米或更高,则位置 API 不会使用 GPS 传感器。

如果任何应用请求DESIRED_ACCURACY_HIGH,传感器应尽可能提供最准确的报告。 位置 API 将始终连接到所有位置传感器 (包括 GPS) ,以便尽可能获得最准确的位置。

检测空闲状态

驱动程序应检测到空闲状态并进入低功耗状态。 例如,当 GPS 设备的位置未更改、没有挂起的 I/O 请求或数据不可用时,可能会出现空闲状态。 如果 GPS 或全球导航卫星系统 (GNSS) 设备是通过 USB 实现的,则必须支持选择性挂起。 有关详细信息 ,请参阅支持基于 UMDF 的驱动程序中的空闲 Power-Down

GPS 和全球导航卫星系统的位置注入 (GNSS)

GPS 或全球导航卫星系统 (GNSS) 传感器可以使用系统上三角测量传感器的数据来缩短首次修复的时间。 这称为 位置注入

仅在获取阶段支持这种传感器到传感器通信的使用。 全局导航卫星系统 (GNSS) 驱动程序可以通过传感器 API 打开与任何三角测量传感器(包括 Windows 位置提供程序)的连接。 然后,如果位置数据可用,驱动程序可以获取粗略的位置。 驱动程序应在获取位置后立即关闭连接。

如果全球导航卫星系统 (GNSS) 驱动程序在 15 秒内未从传感器 API 获取位置,则应超时并关闭与传感器 API 的连接。 不要继续订阅事件。

不应通过传感器 API) 与 Windows 位置提供程序 (或任何其他传感器建立持久连接。

不要实例化 ILocation 以从其他位置传感器获取数据。 请改用传感器 API (ISensorManager) 。

传感器不应从相同类型的位置传感器获取数据。 例如,三角测量传感器不应使用来自其他三角测量传感器的数据。

若要访问三角测量传感器,请调用类型为 SENSOR_TYPE_LOCATION_TRIANGULATION 的 ISensorManager::GetSensorByType 。 这将返回所有三角测量传感器,包括内置于 Windows 8 中的 Windows 位置提供程序。 GPS 驱动程序需要能够处理从零个传感器返回到多个传感器的任意位置。 有关使用 GetSensorsByType 的详细信息,请参阅检索传感器对象

Windows 位置提供程序不提供任何准确性或可用性保证。

使用传感器 API 进行传感器到传感器通信来启用位置融合 (例如,不支持使用加速计或陀螺仪磁力计数据来估计物理位置) 。

编写位置传感器驱动程序

传感器地理位置驱动程序示例