Я тебя чувствую: использование платформы Sensor в Windows 7

Итак, мы вернулись. После длительного перерыва пришло время написать о замечательных новых API, используемые Windows 7 для определения местоположения и расширения возможностей приложений. Я еще должен две статьи о панели задач Windows 7, чтобы завершить серию публикаций, но платформа Sensor and Location слишком хороша, чтобы оставлять ее напоследок.

Прежде, чем мы погрузится в API, я должен объяснить, что двигало нами, когда мы разрабатывали платформу Sensor and Location для Windows 7. Про местоположение я расскажу в будущих публикациях.

Почему сенсоры?

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

Помимо очевидных причин, другим серьезным основанием создать «платформу» является тот факт, что она унифицирует API, снижая затраты на их использование и разработку ПО. В прошлом использование сенсоров было исключительно отраслевым решением. Не было однозначного определения типа применяемых сенсоров, используемых данных и способов обращения к ним. Отсутствие стандартизации делала программирование для сенсоров трудной задачей. Используя сенсор, например сенсор местоположения GPS, вы должны были выбрать устройство из широкого ряда производителей, у каждого из которых был определенный набор драйверов и API, которые требовалось изучить для работы с этим устройством. Если вы хотели сменить устройство или вендора, то часто приходилось изучать новые API.

В Windows 7 мы начали решать эту проблему с самого основания, обеспечив встроенную поддержку для сенсоров. Платформа Sensor and Location в Windows 7 обеспечивает ряд стандартных интерфейсов, которые освободили разработчиков от необходимости изучать устройства различных производителей и позволили сосредоточиться на приложении, используя сенсоры в качестве еще одного канала ввода данных. Предоставляя эти стандартные интерфейсы, платформа Sensor and Location в Windows 7 предлагает значительные преимущества разработчикам, упростив им обнаружение, доступ и получение информации от сенсоров и предоставляя больше возможностей для адаптации приложений к изменениям окружающих условий. В свою очередь, это создает спрос на устройства с сенсорами и если вы относитесь к вендорам аппаратного обеспечения, к вашим услугам стандартизированный способ использования единого API, который интегрирован в Windows. Что еще более важно, конечные пользователи получат в свое распоряжение приложения, способные чувствовать окружающую среду.

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

Сенсоры изнутри

Чтобы лучше понять API платформы Sensor, я сделаю краткий обзор ее архитектуры, объяснив роль главных компонентов. Следующее изображение иллюстрирует главные компоненты в системе. Обратите внимание, что эта схема охватывает не всю платформу – на ней отсутствует часть, отвечающая за местоположение, но пока этого более чем достаточно.

sensor_Arch1

Первый компонент в платформе – сам сенсор – отмечен цифрой 1 на рисунке. Обычно это – реальное физическое устройство, которое измеряет такие физические явления, как количество света, температура, влажность, относительная сила тяжести и т.д. Однако, сенсор может быть и логическим (или виртуальным) устройством. Виртуальный сенсор – это программный сенсор, который имитирует функциональные возможности физического сенсора, предоставляя данные платформе. Виртуальные сенсоры могут использоваться для эмуляции реальных сенсоров, помогая процессу разработки, поскольку вы можете сразу видеть результат.

Каждому сенсору требуется драйвер, обеспечивающий взаимодействие между Windows 7 и устройством. Эта интеграция достигается через драйвер User-mode Device (UMD), отмеченный на рисунке номером 2.

Для облегчения процесса написания драйвера устройства, который обеспечивает общение сенсора с Windows 7, в платформе предусмотрено расширение класса сенсоров, отмеченное номером 3. По сути, это библиотека драйвера, в которой реализован общий код, необходимый для драйверов сенсора. Хотя в сегодняшней статье мы не будем говорить об устройствах или драйверах, у нас есть два превосходных видео (Windows 7 Sensor and Location – Разработка драйверов (ч.1) и Windows 7 Sensor and Location – Разработка драйверов (ч.2) ) с Гэвином Гиром (Gavin Gear), объясняющим, как написать драйвер для сенсора.

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

Одно из главных преимуществ платформы Sensor and Location в Windows 7 состоит в том, что она позволяет различным приложениям получать данные от одного и того же сенсора в одно и то же время – эта возможность обозначена номером 5. В предыдущих версиях Windows для взаимодействия с системой устройства использовали виртуальные COM-порты. Одной из проблем работы с виртуальными COM-портами было то, что они не масштабировались и не поддерживали работу с несколькими приложениями одновременно, поэтому наличие платформы, поддерживающей параллельную работу нескольких приложений, является большим преимуществом.

Последний компонент платформы – это диалог «Location and Other Sensors», который является частью панели управления Windows. Этот диалог, отмеченный номером 6, позволяет пользователям управлять настройками разрешений и другими параметрами, которыми обладают сенсоры. Ниже расположен снимок этой панели управления. Как вы видите, в настоящее время у меня установлен два сенсора – Sensor Development Kit и виртуальный датчик освещенности, при этом оба они разрешены для использования.

Последним пунктом перед переходом к API, является объяснение того, каким образом сенсоры представлены в платформе.

Как мы видели выше, сенсор может быть как физическим так и логическим (виртуальным) устройством. Независимо от типа, все сенсоры имеют схожие свойства, представленные в списке:

  • Категория (Category) – набор сенсоров, определенным образом связанных между собой. Например, погодная станция могла бы измерять температуру, атмосферное давление, скорость ветра и другие сенсоры, имеющие отношение к погоде.
  • Тип (Type) – определение физических явлений, которые могут измеряться, например, скорость ветра или количество света.
  • Свойства (Properties) – метаданные, которые может содержать сенсор, например, дружелюбное для сенсора название. Они могут быть «только для чтения» или для «чтения-записи». Название сенсора и его серийный номер являются примеров свойств «только для чтения», а интервал опроса сенсора – пример свойства «чтения – записи».
  • Типы данных (Data Types) – фактические типы данных, которые сенсор передает после измерения. Например, освещенность измеряется в люксах, которые сенсор передает в качестве переменной с плавающей точкой. Информация о местоположении включает широту и долготу, и при этом обе характеристики – переменные с плавающей точкой. Однако, как вы скоро узнаете, информация о местоположении может включать и адрес, являющийся набором из нескольких строк. Типы данных меняются от сенсора к сенсору и предполагается, что вы знаете, какие типы данных возвращает используемый тип сенсора.
  • События (Events) – основной способ взаимодействия платформы Sensor and Location с приложением, благодаря которому приложение знает, что приняты новые данные или состояние сенсора изменилось.
  • Состояние (State) – определение возможных рабочих состояний для сенсоров, отвечающих на вопросы: «действительно ли сенсор готов к использованию» или «активировал ли пользователь сенсор?"

Вооруженные этой информацией, мы готовы начать работу с сенсорами и погрузиться в API. Но прежде еще нужно прочитать следующую статью о платформе Sensor and Location.