全球导航卫星系统 (GNSS) 驱动程序设计

讨论开发全局导航卫星系统 (GNSS) 驱动程序时要考虑的设计原则,包括数据结构、错误报告和驱动程序版本控制等Windows 10。

数据结构

为了获得后向兼容性和将来的扩展性,所有数据结构都以版本号和大小开始,以适应未来的扩展和向后兼容性问题。 作为额外的保障,每个结构还具有一个填充缓冲区,即使在添加新字段时,也保持静态结构大小相同。 这是为了防止任何旧的 GNSS 驱动程序错误地使用结构的静态编译时大小 (使用 size of) 而不是结构的动态大小。

除非另行指定,否则所有参数都将遵循国际单位制 (SI) :

参数 单元
距离、阈值或级别
超时或间隔 第 2 个
Speed 米/秒

错误报告

全球导航卫星系统 (GNSS) DDI 需要 NTSTATUS 作为驱动程序的返回值。 高级操作系统 (HLOS) 仅根据这些错误消息处理成功和失败情况,不查看特定错误消息。 不过,最好是驱动程序返回与相应的 NTSTATUS 错误消息紧密映射的错误。 GNSS 驱动程序可以发送自己的自定义 NTSTATUS 错误消息,这些错误消息可能有助于诊断目的。

驱动程序版本控制

为全局导航卫星系统 (GNSS) DDI 指定的每个结构都包含驱动程序版本字段,许多结构包含填充字段。 这两个组件都用于使用以下策略来缓解新版本的 GNSS DDI:

  • 框架和驱动程序使用功能交换过程来传达各自的版本。 这些 IOCTL 被认为是特殊的,因为它们使用版本字段来传达其版本。 因此,围绕设备和平台功能检查的实现应显式检查首先返回的版本,并存储它以供以后使用。 GNSS_DEVICE_CAPABILITY 结构的版本成员传达驱动程序的版本号。 GNSS_PLATFORM_CAPABILITY 结构的版本成员传达 GNSS 适配器的版本号。

  • 每当添加新字段时,如果结构具有填充字段,则应从填充中取出空间,而不是添加到结构,这将保持二进制兼容性

  • 每当添加新字段时,GNSS DDI 的版本将被视为递增。 这将反映在 GNSS DDI 标头本身的注释中,但不作为常量公开。 GNSS 适配器和 GNSS 驱动程序都将使用专用常量值来指示其当前版本。 这允许针对特定版本对 GNSS 适配器和驱动程序进行编码。

  • GNSS 适配器必须与旧版 GNSS 驱动程序向后兼容。 如果在新版本的 DDI 中引入了协议更改,则符合新 GNSS DDI 的 GNSS 适配器必须仅针对新版本的驱动程序实现新协议,并将旧协议用于较旧版本的驱动程序。

  • GNSS 驱动程序必须向前兼容较新版本的 GNSS 适配器,并且应按照与编码的当前版本相同的方式处理较新版本的 GNSS 适配器。

  • 较旧版本的 GNSS 适配器预期不会在较新版本的 GNSS 驱动程序中正常工作。 为了便于针对新版本的 DDI 共同开发 GNSS 适配器和 GNSS 驱动程序,GNSS 适配器中不存在用于阻止较新的 GNSS 驱动程序的严格版本检查。 但是,针对较新版本的 DDI 实现的 GNSS 驱动程序不会寄送到包含针对旧版 GNSS DDI 实现的 GNSS 适配器的零售设备。

  • GNSS 适配器不支持任何Windows 8.1或较旧的 GNSS 传感器驱动程序。 这些驱动程序将继续通过旧堆栈在Windows 10中运行。 如果存在另一个Windows 10 GNSS 驱动程序,则旧版 GNSS 传感器驱动程序的使用未定义。