如何判断一个GPS设备是否是内置接收器

How to determine if a GPS device is a built-in receiver

我们有一个用于 Windows 的 C# 应用程序,它使用来自 USB 连接的 GPS 接收器的数据。在过去一年左右的时间里,许多用户开始抱怨位置和速度数据的质量差。

经过一番调查,我们发现很多新的笔记本电脑都有一个内置的 GPS 接收器,似乎质量很差,而且天线的位置也不佳。

我们的应用程序会自动检查 GPS 接收器的 COMx 端口,select 是它找到的第一个端口。我们希望保持这种方式,但此外我们希望它永远不会 select 成为内置设备。

有没有什么方法可以以非常通用的方式找出这些信息?我们不知道用户的笔记本电脑是什么品牌,我们也不确定外接接收器是什么品牌。

内置 GPS 接收器通常是复合 WLAN/WWAN 设备的一部分。这是当您 select 按连接查看/设备时设备树的样子:

看到了吗? GPS COM 端口的父级是一个 USB 复合设备,它有很多子级,其中一个子级是网络适配器。您可以使用 setup API 以编程方式查询该层次结构:Get parent device 并且您可以查询设备接口 类 以区分网络适配器,检查 KSCATEGORY_NETWORK 和 GUID_DEVINTERFACE_NET

但是,这种方法不是很可靠。有外部 USB 设备也是 GPS + WWAN。所以最好显示所有 GPS 设备的列表,并允许用户 select 正确的一个。并使用我在上面描述的启发式方法来选择初始 selected 默认设备。