全球导航卫星系统 (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 传感器驱动程序的使用未定义。