我遇到了GPS中间驱动程序的一些问题,我在我们的相机/ GPS硬件中添加了一个虚拟串口,以显示原始NMEA数据,这现在正常运行,任何需要原始NMEA数据的应用都可以连接到COM8并接收它。
如果涉及GPS中间驱动程序,即“设置|外部GPS”的硬件端口设置为COM8,程序端口设置为COM7。然后,当应用程序从COM7请求数据时,数据似乎不同。我只是说因为我无法检查物理输出,请参见下面的注释A.
差异似乎是它的返回速度明显慢于直接连接到COM8,但是像visualGPS这样的应用程序在锁定到6颗卫星时也不会显示3D GPS修复。只有连接到COM8才会收到3D GPS修复,这对我来说表明Microsoft软件正在更改数据而不是简单地共享它,从而导致想要使用驱动程序在多个应用程序之间共享数据的用户遇到问题。 p>
任何人都对微软中间驱动程序为什么会引起我这样的问题有任何想法,似乎关于它的信息很少。
注意A) - 似乎没有WM6专业人员的诊断程序,它将读取COM端口或至少将流量重定向到连接到PC的COM端口。如果有人可以推荐WM6的程序来连接和查看来自COM端口的数据,理想情况下是时间戳。或者是重定向流量的程序,即从COM7读取,打开COM6并通过COM6发送数据。我可以将数据推送到系统中,只有我找不到的程序才能将数据推出。
答案 0 :(得分:1)
改变设备数据是GPS中间驱动程序应该做的事情。它将您的应用程序与GPS设备的实施细节隔离开来,以便您的代码可以与任何GPS设备配合使用。我无法从您的问题中诊断出您遇到的确切问题,我只能推荐the docs。
答案 1 :(得分:0)
我曾与移动设备制造商合作进行诊断。他们必须使用我们的设备和操作系统的调试版本来隔离它,即使这样,它的任何一方(驱动程序与操作系统)都不是一行代码就是问题。我们的读取方法没有超时,作为软件端口并不重要,但它是必需的。
必须添加这样的东西。
if(WaitForSingleObject(driver->GPSDataAvailableThread, driver->GPSTimeouts.ReadTotalTimeoutConstant) != WAIT_OBJECT_0)
{
//debug message, no data to read
return 0; //return 0 bytes read
}
//otherwise carry on a normal read operation.
即使超时为0,它也允许线程休眠并继续其他进程。问题是没有它,应用程序正在读取COM端口,这导致中间驱动程序进行调用和创建互斥锁的开销。执行许多1字节读取的应用程序(例如pocketputty)导致此问题,但是像副驾驶每秒读取1024次的SatNav软件没有问题。