Directrices sobre energía y rendimiento para controladores de ubicación
En las secciones siguientes se describen las instrucciones para asegurarse de que el controlador de ubicación ahorra energía y proporciona datos de forma eficaz.
Seguimiento del número de clientes conectados y estado de radio
Los sensores de ubicación deben realizar un seguimiento del número de aplicaciones conectadas y deben realizar un seguimiento del valor de las propiedades SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY y SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL para cada aplicación suscrita.
Cuando el número de clientes conectados es cero, el sensor de ubicación debe entrar en el estado de energía más bajo posible, preferiblemente D3. Cuando un evento indica que un cliente está conectado, el sensor debe salir del estado de baja energía y adquirir datos.
Además, si el dispositivo de ubicación contiene una radio, como un sensor de ubicación GPS, también se debe realizar un seguimiento del estado de la radio mediante la administración de radios. El escritor de controladores debe crear una implementación de la administración de radios que se comunique con el controlador para establecer el estado de la radio. Un ejemplo de la implementación de la administración de radios y cómo comunicarse con el controlador se encuentra en el Ejemplo de controlador de geolocalización de sensores.
Al realizar el seguimiento de los clientes conectados y el estado de radio, el sensor de ubicación debe entrar en el estado de energía más bajo posible, preferiblemente D3, siempre que no haya un cliente conectado mientras la radio esté encendida. En el diagrama siguiente se muestra una máquina de estado para los clientes conectados, el estado de la radio y el estado del dispositivo correspondiente sugerido.
En la tabla siguiente se proporciona otra vista de las distintas combinaciones de entrada y las salidas resultantes (incluido el estado de energía).
El cliente existe (entrada) | Estado de la radio (entrada) | CRI (entrada) | Posición notificada (entrada) | Estado ASIC (salida) | Estado del sensor (salida) | Estado de energía (salida) |
---|---|---|---|---|---|---|
No | Any | Any | Any | Desactivado | N/D | D3 |
Sí | Activado | <=120 segundos | No | Activado | Inicializando | D0 |
Sí | Activado | <=120 segundos | Sí | Activado | Ready | D0 |
Sí | Desactivado | Any | Any | Desactivado | No disponible | D3 |
Sí | Activado | >120 segundos | Any | Desactivado | Ready | D3 |
Sí | Activado | >120 segundos | Any | Activado | Ready | D0 |
El Ejemplo de controlador de geolocalización de sensores en el WDK proporciona un ejemplo de un controlador que realiza un seguimiento del número de clientes conectados y el estado de la radio.
Intervalos de informe de seguimiento
Las aplicaciones que consumen datos de ubicación mediante la suscripción a eventos solicitan la frecuencia máxima de los eventos actualizados mediante el establecimiento de la propiedad SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL. Para ahorrar energía, el controlador debe enviar informes de datos con más frecuencia que el intervalo de informe solicitado más bajo.
Para obtener más información sobre cómo realizar un seguimiento de los valores de cada aplicación, consulte Filtrado de datos. También puede encontrar un ejemplo de intervalos de informe de seguimiento en el Ejemplo de controlador de geolocalización de sensores en el WDK.
Seguimiento de la precisión deseada
Al igual que se realiza un seguimiento de los intervalos de informe por cliente, se debe realizar un seguimiento del nivel de precisión solicitado por cada cliente.
El Ejemplo de controlador de geolocalización de sensores en el WDK proporciona un ejemplo de un controlador que realiza un seguimiento de la precisión deseada solicitada por los clientes.
Los controladores del sensor de ubicación deben admitir SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY como una propiedad configurable. El controlador debe supervisar la propiedad de precisión deseada de los clientes conectados y establecer SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY en función de la precisión deseada más alta solicitada.
Si la precisión más alta solicitada por una aplicación es DESIRED_ACCURACY_DEFAULT, el sensor de ubicación debe optimizar la energía y otras consideraciones sobre los costes. La API de ubicación no usará sensores GPS si los datos de ubicación están disponibles en otros proveedores del sistema y la precisión de los datos es de 500 m o superior.
Si alguna aplicación solicita DESIRED_ACCURACY_HIGH, el sensor debe proporcionar el informe de precisión más alto posible. La API de ubicación siempre se conectará a todos los sensores de ubicación (incluido GPS) para adquirir la posición más precisa posible.
Detección de estados inactivos
El controlador debe detectar un estado inactivo y entrar en un estado de baja energía. Por ejemplo, un estado inactivo puede producirse cuando la ubicación de un dispositivo GPS no cambia, no hay solicitudes de E/S pendientes o los datos no están disponibles. Si su dispositivo GPS o sistema de navegación global por satélite (GNSS) se implementa a través de USB, debe admitir la suspensión selectiva. Consulte Compatibilidad con el apagado por inactividad en controladores basados en UMDF para obtener más información.
Inserción de posición para GPS y sistema de navegación global por satélite (GNSS)
Los sensores GPS o de sistema de navegación global por satélite (GNSS) pueden usar datos de sensores de triangulación en el sistema para acortar el tiempo de la primera corrección. Esto se conoce como inyección de posición.
Este uso de la comunicación de sensor a sensor solo se admite durante la fase de adquisición. Un sistema de navegación global por satélite (GNSS) puede abrir una conexión a cualquier sensor de triangulación, incluido el proveedor de ubicación de Windows, a través de la API de sensor. Después, el controlador puede obtener una posición general, si los datos de posición están disponibles. El controlador debe cerrar la conexión inmediatamente después de obtener la posición.
Si el controlador del sistema de navegación global por satélite (GNSS) no obtiene una posición de la API del sensor en un plazo de 15 segundos, debe agotar el tiempo de espera y cerrar la conexión a la API de sensor. No continúe suscribiéndose a eventos.
No se debe mantener abierta una conexión persistente con el proveedor de ubicación de Windows (o cualquier otro sensor a través de la API de sensor).
No cree una instancia de ILocation para obtener datos de otros sensores de ubicación. En su lugar, use la API del sensor (ISensorManager).
Los sensores no deben obtener datos de los sensores de ubicación del mismo tipo. Por ejemplo, un sensor de triangulación no debe usar datos de otros sensores de triangulación.
Para acceder a los sensores de triangulación, llame a ISensorManager::GetSensorByType con el tipo SENSOR_TYPE_LOCATION_TRIANGULATION. Esto devolverá todos los sensores de triangulación, incluido el proveedor de ubicación de Windows integrado en Windows 8. El controlador GPS debe ser capaz de manejar en cualquier lugar desde cero sensores devueltos a varios sensores. Consulte Recuperación de un objeto de sensor para obtener más información sobre el uso de GetSensorsByType.
El proveedor de ubicación de Windows no proporciona ninguna garantía de precisión ni disponibilidad.
No se admite el uso de la API del sensor para la comunicación de sensor a sensor para habilitar la fusión de ubicación (por ejemplo, el uso de acelerómetros o datos del giroscopio magnetómetro de giro para calcular la ubicación física).