Поделиться через


Рекомендации по драйверам расположения для питания и производительности

В следующих разделах описаны рекомендации по экономии мощности драйвера расположения и эффективной обработке данных.

Отслеживание количества подключенных клиентов и состояния радио

Датчики расположения должны отслеживать количество подключенных приложений и отслеживать значение как SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY, так и SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL свойств для каждого подписанного приложения.

Если число подключенных клиентов равно нулю, датчик расположения должен ввести наименьшее возможное состояние питания, предпочтительно D3. Если событие указывает, что клиент подключен, датчик должен выйти из состояния низкой мощности и получить данные.

Кроме того, если устройство расположения содержит радио, например датчик расположения GPS, то состояние радио также должно отслеживаться с помощью радиоуправления. Модуль записи драйвера должен создать реализацию радиоуправления, которая взаимодействует с драйвером, чтобы задать состояние радио. Пример реализации службы "Управление радио" и взаимодействие с драйвером находится в примере драйвера геолокации датчиков.

При отслеживании подключенных клиентов и состояния радио датчик расположения должен ввести наименьшее возможное состояние питания, предпочтительно D3, в любое время нет подключенного клиента во время подключения радио. На схеме ниже показана машина состояния для подключенных клиентов, состояния радио и предлагаемого соответствующего состояния устройства.

конечный автомат.

В следующей таблице представлено другое представление различных сочетаний входных данных и полученных выходных данных (включая состояние питания).

Клиент существует (входные данные) Состояние радио (входные данные) CRI (входные данные) Позиция, сообщаемая (входные данные) Состояние ASIC (выходные данные) Состояние датчика (выходные данные) Состояние питания (выходные данные)
No Любой Любой Любой Выключено Н/П D3
Да Включено <=120 секунд No Включено Инициализация D0
Да Включено <=120 секунд Да Включено Ready D0
Да Выключено Любой Любой Выключено Недоступно D3
Да Включено >120 секунд Любое Выключено Ready D3
Да Включено >120 секунд Любое Включено Ready D0

Пример драйвера геолокации датчиков в WDK содержит пример драйвера, который отслеживает количество подключенных клиентов и состояние радиосвязи.

Отслеживание интервалов отчета

Приложения, использующие данные расположения, подписавшись на события, запрашивают максимальную частоту для событий, обновленных данными, задав свойство SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL. Чтобы сохранить мощность, драйвер должен отправлять отчеты данных не чаще, чем самый низкий запрошенный интервал отчета.

Дополнительные сведения о том, как отслеживать значения для каждого приложения, см. в разделе "Фильтрация данных". Также можно найти пример интервалов отчета отслеживания в примере драйвера географического расположения датчиков в WDK.

Отслеживание требуемой точности

Так же, как интервалы отчетов отслеживаются на каждого клиента, необходимо отслеживать уровень точности, запрошенный каждым клиентом.

Пример драйвера геолокации датчиков в WDK содержит пример драйвера, который отслеживает нужную точность, запрошенную клиентами.

Драйверы датчиков расположения должны поддерживать SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY в качестве свойства settable. Драйвер должен отслеживать требуемое свойство точности подключенных клиентов и задавать SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY на основе требуемой точности.

Если наивысшая точность, запрошенная приложением, DESIRED_ACCURACY_DEFAULT, датчик расположения должен оптимизировать мощность и другие рекомендации по затратам. API расположения не будет использовать датчики GPS, если данные о расположении доступны от других поставщиков в системе и точность данных составляет 500 м или лучше.

Если какие-либо запросы приложений DESIRED_ACCURACY_HIGH, датчик должен обеспечить максимально высокую точность отчета. API расположения всегда будет подключаться ко всем датчикам расположения (включая GPS), чтобы получить наиболее точное положение.

Обнаружение состояний простоя

Драйвер должен обнаружить состояние простоя и ввести состояние низкой мощности. Например, состояние простоя может произойти, если расположение gps-устройства не изменяется, нет ожидающих запросов ввода-вывода или данные недоступны. Если устройство GPS или глобальной навигационной спутниковой системы (GNSS) реализовано через USB, оно должно поддерживать выборочную приостановку. Дополнительные сведения см. в статье "Поддержка простоя power-Down" в драйверах на основе UMDF.

Внедрение позиций для GPS и глобальной спутниковой системы навигации (GNSS)

Датчики GPS или глобальной навигационной спутниковой системы (GNSS) могут использовать данные от датчиков триангуляции в системе, чтобы сократить время до первого исправления. Это называется внедрением позиций.

Это использование связи между датчиками поддерживается только на этапе приобретения. Драйвер глобальной спутниковой системы навигации (GNSS) может открыть подключение к любому датчику триангуляции, включая поставщика расположения Windows, через API датчика. Затем драйвер может получить грубое положение, если доступны данные о положении. Драйвер должен закрыть подключение сразу после получения позиции.

Если драйвер глобальной спутниковой системы навигации (GNSS) не получает позицию из API датчика в течение 15 секунд, он должен истекать и закрывать подключение к API датчика. Не продолжайте подписку на события.

Постоянное подключение к поставщику расположения Windows (или любому другому датчику через API датчика) не должно быть открыто.

Не создавайте экземпляр ILocation , чтобы получить данные из других датчиков расположения. Вместо этого используйте API датчика (ISensorManager).

Датчики не должны получать данные из датчиков расположения одного типа. Например, датчик триангуляции не должен использовать данные из других датчиков триангуляции.

Чтобы получить доступ к датчикам триангуляции, вызовите ISensorManager::GetSensorByType с типом SENSOR_TYPE_LOCATION_TRIANGULATION. При этом будут возвращены все датчики триангуляции, включая поставщика расположения Windows, встроенного в Windows 8. Ваш GPS-водитель должен иметь возможность обрабатывать в любом месте от нуля датчиков, возвращенных нескольким датчикам. Дополнительные сведения об использовании GetSensorsByType см. в статье "Получение объекта датчика".

Поставщик расположения Windows не предоставляет никакой гарантии точности или доступности.

Использование API датчика для связи между датчиками для включения слияния расположения (например, использование акселерометра или гиро магнитометра для оценки физического расположения) не поддерживается.

Написание драйвера датчика расположения

Пример драйвера геолокации датчиков