2010-11-19 100 views
0

林具有与该GPS中间驱动程序的一些问题,我添加了一个虚拟串口到我们的相机/ GPS硬件,露出原始NMEA数据,这是现在的工作没有问题,需要原始NMEA任何应用程序数据可以连接到COM8并接收它。GPS中间驱动程序的问题

如果GPS中间层驱动程序所涉及,即“设置|外部GPS”有硬件端口设置为COM8和程序端口COM7。然后,当应用程序从COM7请求数据时,数据看起来不同。我只说出现,因为我无法检查物理输出,请参阅下面的注释A.

的差异似乎是比直接连接到COM8恢复明显慢了,又像是获取VisualGPS,而他们表现出锁定到6颗卫星将无法显示3D GPS定位应用。只有当连接到COM8时,我才会收到一个3D GPS修复程序,这对我来说,表示Microsoft软件正在更改数据,而不是简单地共享数据,从而导致希望使用该驱动程序的用户在多个应用程序之间共享数据时出现问题。

任何人有,为什么微软中间驱动程序导致我这样的问题的任何想法,似​​乎有关于它的信息非常少。

注意A) - 似乎没有WM6专业版的诊断程序,它将读取COM端口或至少将流量重定向到连接到PC的COM端口。如果任何人都可以推荐一个WM6的程序来连接和查看来自COM端口的数据,理想情况下有时间戳。或者一个程序来重定向通信,即从COM7读取,打开COM6并通过COM6发送数据。我可以将数据推送到系统中,只要我找不到可以将数据推出的程序。

回答

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端口,导致中间层驱动程序进行调用并创建互斥锁造成开销。像pocketputty一样读取1个字节的应用程序会导致此问题,但SatNav软件(例如copilot每秒读取1024次)没有问题。

1

改变设备的数据是什么GPS中间层驱动程序是应该做的。它将您的应用程序与GPS设备的实施细节隔离开来,以便您的代码可以与任何GPS设备一起使用。我无法诊断您的问题所具有的确切问题,我只能推荐the docs

+0

嗨,我认为在互联网上诊断这个问题可能很困难。我已经给了文档另一个阅读,它给了我一些想法,我还可以添加到驱动程序/注册表,看看它是否有助于解决问题。 – JonWillis 2010-11-21 11:33:40

+0

http://stackoverflow.com/questions/4245971/gps-intermediate-driver-slowing-down-the-data-from-a-virtual-serial-port-driver我有点缩小了这个问题。 – JonWillis 2010-11-22 13:49:26