Проектирование драйвера глобальной навигационной спутниковой системы (GNSS)
Рассматриваются принципы проектирования, которые следует учитывать при разработке драйвера глобальной навигационной спутниковой системы (GNSS) для Windows 10 включая структуры данных, отчеты об ошибках и управление версиями драйверов.
Структуры данных
Для обеспечения обратной совместимости и расширяемости в будущем все структуры данных начинаются с номера версии и размера в соответствии с будущими расширениями и проблемами обратной совместимости. В качестве дополнительной защиты каждая структура также имеет буфер заполнения, чтобы сохранить размер статической структуры неизменным даже при добавлении новых полей. Это необходимо для защиты от любых старых драйверов GNSS, ошибочно использующих статический размер структуры во время компиляции (с помощью sizeof) вместо динамического размера структуры.
Если не указано иное, все параметры будут соответствовать Международной системе единиц (SI):
Параметры | единиц(ы) |
---|---|
Расстояние, пороговое значение или уровень | метр |
Время ожидания или интервал | second |
Speed | метр в секунду |
Отчеты об ошибках
Глобальная навигационная спутниковая система (GNSS) DDI ожидает NTSTATUS в качестве возвращаемого значения от драйвера. Высокоуровневая операционная система (HLOS) работает только с успешными и неудачными случаями на основе этих сообщений об ошибках и не просматривает конкретное сообщение об ошибке. Тем не менее предпочтительно, чтобы драйвер возвращал ошибки, тесно сопоставленные с соответствующим сообщением об ошибке NTSTATUS . Драйвер GNSS может отправлять собственные пользовательские сообщения об ошибках NTSTATUS , которые могут быть полезны в целях диагностики.
Управление версиями драйверов
Каждая структура, указанная для DDI глобальной навигационной спутниковой системы (GNSS), содержит поле версии драйвера, а многие структуры содержат поле заполнения. Оба этих компонента используются для устранения рисков в новых версиях GNSS DDI, используя следующие политики:
Платформа и драйвер обмениваются соответствующими версиями с помощью процесса обмена возможностями. Эти ioCTL считаются особыми тем, что они сообщают свои версии с помощью поля версии. Поэтому реализации, связанные с проверкой возможностей устройства и платформы, должны явно проверка версии, возвращенные первыми, и сохранить их для последующего использования. Член версии структуры GNSS_DEVICE_CAPABILITY сообщает номер версии драйвера. Член версии структуры GNSS_PLATFORM_CAPABILITY сообщает номер версии адаптера GNSS.
Каждый раз при добавлении нового поля, если в структуре есть поле заполнения, пространство должно быть удалено из заполнения, а не добавляется в структуру, которая будет поддерживать совместимость с двоичными файлами.
При каждом добавлении нового поля версия DDI GNSS считается увеличенной. Это будет отражено в комментарии в самом заголовке DDI GNSS, но не будет отображаться в качестве константы. Адаптер GNSS и драйвер GNSS будут использовать значения частных констант для указания текущей версии. Это позволяет закодировать адаптер GNSS и драйвер для определенной версии.
Адаптер GNSS должен быть обратно совместим со старыми версиями драйвера GNSS. Если в новой версии DDI появилось изменение протокола, адаптер GNSS, совместимый с новым GNSS DDI, должен реализовать новый протокол только для новой версии драйвера и использовать старый протокол для старой версии драйвера.
Драйвер GNSS должен быть совместим с более новыми версиями адаптера GNSS и обрабатывать новые версии адаптера GNSS так же, как и текущую версию, для которую он закодирован.
Более старая версия адаптера GNSS не должна правильно работать с более новой версией драйвера GNSS. Чтобы упростить совместную разработку адаптера GNSS и драйвера GNSS для новой версии DDI, в адаптере GNSS не будет существовать никаких строгих версий проверка для блокировки новых драйверов GNSS. Однако драйвер GNSS, реализованный в более новой версии DDI, не будет поставляться на розничные устройства, содержащие адаптер GNSS, реализованный в более старой версии DDI GNSS.
Адаптер GNSS не поддерживает все драйверы датчиков GNSS Windows 8.1 или более ранних версий. Эти драйверы будут по-прежнему работать в Windows 10 через устаревший стек. При наличии другого Windows 10 драйвера GNSS использование устаревшего драйвера датчика GNSS не определено.