2010-11-19 16 views
0

Da ich Probleme mit dem GPS-Zwischentreiber habe, habe ich einen virtuellen seriellen Port zu unserer Kamera/GPS-Hardware hinzugefügt, um die rohen NMEA-Daten anzuzeigen Daten können sich mit COM8 verbinden und empfangen.Probleme mit dem GPS-Zwischentreiber

Wenn der GPS-Zwischentreiber beteiligt ist, d. H. "Einstellung | Externes GPS" hat den Hardware-Port auf COM8 und den Programm-Port auf COM7 eingestellt. Wenn dann Anwendungen Daten von COM7 anfordern, scheinen die Daten anders zu sein. Ich sage nur, dass ich nicht in der Lage bin, die physische Ausgabe zu überprüfen, siehe Hinweis A unten.

Der Unterschied scheint, dass es merklich langsamer zurückgegeben wird als die direkte Verbindung mit COM8, aber auch Anwendungen wie visualGPS, während sie auf 6 Satelliten gesperrt zeigen, zeigen kein 3D GPS-Update. Nur wenn ich mit COM8 verbunden bin, erhalte ich ein 3D GPS-Update, das bedeutet für mich, dass die Microsoft-Software die Daten ändert, anstatt sie einfach zu teilen und somit Probleme für Benutzer verursacht, die den Treiber für die gemeinsame Nutzung von Daten über mehrere Anwendungen verwenden möchten.

Jeder hat irgendwelche Ideen, warum der Microsoft Intermediate-Treiber mir solche Probleme verursacht, scheint es sehr wenig Informationen darüber zu geben.

Hinweis A) - Es scheint kein Diagnoseprogramm für WM6 Professional zu geben, das COM-Ports lesen oder zumindest den Datenverkehr an einen COM-Port umleiten kann, der an den PC angeschlossen ist. Wenn jemand ein Programm für WM6 empfehlen kann, um Daten von COM-Ports zu verbinden und anzuzeigen, idealerweise mit Zeitstempeln. Oder ein Programm zum Umleiten von Verkehr, d. H. Lesen von COM7, Öffnen von COM6 und Senden von Daten über COM6. Ich kann Daten in das System pushen, nur keine Programme, die ich finden kann, werden Daten rausschieben.

Antwort

0

Ich habe mit dem Hersteller der mobilen Geräte gearbeitet, um dies zu diagnostizieren. Sie mussten unser Gerät und eine Debug-Version des Betriebssystems verwenden, um es zu isolieren, und selbst dann ist es keine Codezeile auf beiden Seiten (Treiber und Betriebssystem), die das Problem darstellen. Unsere Lesemethode hat kein Timeout, da es sich um einen Software-Port handelt, spielt es keine Rolle, aber es ist erforderlich.

So etwas muss hinzugefügt werden.

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. 

Auch mit einer Zeitüberschreitung von 0 ermöglicht es dem Thread zu schlafen und andere Prozesse fortzusetzen. Das Problem war ohne, Anwendungen lasen den COM-Port so sehr, dass es einen Overhead im Zwischentreiber verursachte, der Aufrufe machte und Mutex-Sperren erzeugte. Anwendungen, die viele Lesevorgänge von 1 Byte wie Pocketputty durchführen, verursachen dieses Problem, aber die Software von SatNav wie der Kopilot, der 1024 einmal pro Sekunde liest, hat kein Problem.

1

Ändern der Gerätedaten ist, was der GPS Intermediate Driver tun soll. Es isoliert Ihre App von den Implementierungsdetails des GPS-Geräts, sodass Ihr Code mit jedem GPS-Gerät funktionieren kann. Ich kann das genaue Problem, das Sie von Ihrer Frage haben, nicht diagnostizieren, ich kann the docs nur empfehlen.

+0

Hallo, ich dachte das Problem über das Internet zu diagnostizieren. Ich habe die Dokumente noch einmal gelesen und es hat mir einige Ideen gegeben, was ich sonst noch dem Treiber/der Registry hinzufügen kann, um zu sehen, ob es hilft, das Problem zu lösen. – JonWillis

+0

http://stackoverflow.com/questions/4245971/gps-intermediate-driver-slowing-down-the-data-from-a-virtual-serial-port-driver Ich habe das Problem etwas eingegrenzt. – JonWillis