GPS-Maus auslesen...COM-Port!

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
debeye
Beiträge: 12
Registriert: Mi 20. Mär 2013, 23:10

GPS-Maus auslesen...COM-Port!

Beitrag von debeye »

Hallo Community!

Ich habe ein äußert merkwürdiges Problem und hoffe auf eure Hilfe:

Ich habe vor mit Lazarus die NMEA-Strings einer GPS-Maus auszulesen. Die ist per USB verbunden und wird als virtueller COM-Port behandelt. Soweit so gut: Ich habe jetzt einen Ansatz mit SynaSer und zuvor einen mit der Behandlung des COM-Ports als Datei (AssignFile, Reset und der ganze Käse).
Das ganze läuft auch in beiden Versionen wunderbar, aber nur wenn vorher kurz die, bei der GPS-Maus beiliegende, China-Software gestartet und dort der Connect-Button gedrückt wurde. Wenn ich das mache laufen in diesem Tool bereits die NMEA Datensätze und in meinem Programm funktioniert dann auch alles wie am Schnürchen.

Wenn ich dieses Programm vorher nicht ausführe (oder nach Neustart oder GPS-Maus ausstöpseln und wieder einstecken), dann tut sich bei mir gar nix. Die Maus bleibt "stumm". Was ist das für ein Hexenwerk? Wie bekomme ich das Ding zum senden, auch ohne seine China-Software??

Hier mal ein Link zu der Software: Rom-agps.exe

Vielen Dank schonmal

Dennis

do-while
Beiträge: 6
Registriert: Sa 8. Sep 2012, 13:28
OS, Lazarus, FPC: Win7 (L 1.0, FPC 2.6.0)
CPU-Target: 64Bit & 32Bit
Wohnort: Berlin, Germany
Kontaktdaten:

Re: GPS-Maus auslesen...COM-Port!

Beitrag von do-while »

Die Software scheint die GPS-Maus auf das automatische Senden der GPS-Informationen zu programmieren.
Du musst einfach herausbekommen, was da zu Maus gesendet wird. Dazu brauchst Du einen COM-Port Monitor.
Für Windows kannst Du hier einen Monitor laden: http://www.serial-port-monitor.com/free ... loads.html
----
Gruß Hagen

debeye
Beiträge: 12
Registriert: Mi 20. Mär 2013, 23:10

Re: GPS-Maus auslesen...COM-Port!

Beitrag von debeye »

Danke, das war mal ne Idee...Leider funktionierte der angegebene Monitor nicht, daher hab ich mal nen anderen genommen. Aus den Daten werd ich leider nicht wirklich schlau, vlt kann hier jemand was damit anfangen.

Sceenshot vom COM-log
Sceenshot vom COM-log


Ich hätte gedacht die Datensätze unter 'Data' mit dem SynaSer and die Maus senden, jedoch weiß ich nicht mit welcher Methode. Es gibt ja mehr als eine Hand voll "send" Methoden und die, die einen String als Parameter haben führen nicht zum Gewünschten Effekt.

Jemand ne Idee? :idea:

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: GPS-Maus auslesen...COM-Port!

Beitrag von Christian »

Die Ansicht ist in diesem Fall Nutzlos. Du kannst verscheidene Ansichten einstellen ich glaube es gab da ne "Anfragenansicht" ??
Das Protokoll das die Maus warscheinlich benutzt heisst NMEA und ist ziemlich simpel zu parsen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

debeye
Beiträge: 12
Registriert: Mi 20. Mär 2013, 23:10

Re: GPS-Maus auslesen...COM-Port!

Beitrag von debeye »

Jop, die Maus nutzt NMEA. Der Parser und alles andere ist auch schon geschrieben und funzt auch sehr schön aber eben nur nach dem start von diesem Programm.

Hier mal das log aus dem "Request View" , kann damit jemand was anfangen?

000001: PnP Event (DOWN), 02.04.2013 20:24:44.651
The device has just been connected to the system.

000002: Create Request (DOWN), 02.04.2013 20:24:51.462 +6.811
Process 0x4a0 (<Unable to retrieve process name>) attempted to open the device

000003: Create Request (UP), 02.04.2013 20:24:51.544 +0.082
Process 0x4a0 (<Unable to retrieve process name>) create request status: 0x00000000

000004: Close Request (DOWN), 02.04.2013 20:24:51.544 +0.0
Buffer size: 0x0 bytes

000006: Create Request (DOWN), 02.04.2013 20:24:51.546 +0.0
Process 0x4a0 (<Unable to retrieve process name>) attempted to open the device

000007: Create Request (UP), 02.04.2013 20:24:51.553 +0.007
Process 0x4a0 (<Unable to retrieve process name>) create request status: 0x00000000

000008: I/O Request (DOWN), 02.04.2013 20:24:51.553 +0.0
IOCTL_SERIAL_SET_TIMEOUTS: Set timeouts
ReadIntervalTimeout=500000
ReadTotalTimeoutMultiplier=0
ReadTotalTimeoutConstant=0
WriteTotalTimeoutMultiplier=0
WriteTotalTimeoutConstant=50000

000009: I/O Request (UP), 02.04.2013 20:24:51.553 +0.0
IOCTL_SERIAL_SET_TIMEOUTS: Set timeouts

000026: I/O Request (DOWN), 02.04.2013 20:24:51.553 +0.0
IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate
Baud Rate=4800

000027: I/O Request (UP), 02.04.2013 20:24:51.554 +0.001
IOCTL_SERIAL_SET_BAUD_RATE: Set baud rate

000028: I/O Request (DOWN), 02.04.2013 20:24:51.554 +0.0
IOCTL_SERIAL_CLR_RTS: Clear RTS

000029: I/O Request (UP), 02.04.2013 20:24:51.555 +0.001
IOCTL_SERIAL_CLR_RTS: Clear RTS

000030: I/O Request (DOWN), 02.04.2013 20:24:51.555 +0.0
IOCTL_SERIAL_CLR_DTR: Clear DTR

000031: I/O Request (UP), 02.04.2013 20:24:51.556 +0.001
IOCTL_SERIAL_CLR_DTR: Clear DTR

000032: I/O Request (DOWN), 02.04.2013 20:24:51.556 +0.0
IOCTL_SERIAL_SET_LINE_CONTROL: Set line control
WordLength=8
StopBits=1 stop bit
Parity=No parity

000033: I/O Request (UP), 02.04.2013 20:24:51.557 +0.001
IOCTL_SERIAL_SET_LINE_CONTROL: Set line control

000034: I/O Request (DOWN), 02.04.2013 20:24:51.557 +0.0
IOCTL_SERIAL_SET_CHARS: Set special characters
EofChar=0x0
ErrorChar=0x0
BreakChar=0x0
EventChar=0x0
XonChar=0x11
XoffChar=0x13
000035: I/O Request (UP), 02.04.2013 20:24:51.558 +0.001
IOCTL_SERIAL_SET_CHARS: Set special characters

000036: I/O Request (DOWN), 02.04.2013 20:24:51.558 +0.0
IOCTL_SERIAL_SET_HANDFLOW: Set handshake information
ControlHandShake=0
FlowReplace=0
XonLimit=32768
XoffLimit=8192

000037: I/O Request (UP), 02.04.2013 20:24:51.559 +0.001
IOCTL_SERIAL_SET_HANDFLOW: Set handshake information

000038: I/O Request (DOWN), 02.04.2013 20:24:51.559 +0.0
IOCTL_SERIAL_SET_QUEUE_SIZE: Set queue size
InSize=10000
OutSize=10000

000039: I/O Request (UP), 02.04.2013 20:24:51.559 +0.0
IOCTL_SERIAL_SET_QUEUE_SIZE: Set queue size

000040: I/O Request (DOWN), 02.04.2013 20:24:51.559 +0.0
IOCTL_SERIAL_SET_WAIT_MASK: Set current event mask
WaitMask=RXCHAR: Any Character received

000041: I/O Request (UP), 02.04.2013 20:24:51.559 +0.0
IOCTL_SERIAL_SET_WAIT_MASK: Set current event mask

000044: I/O Request (DOWN), 02.04.2013 20:24:51.559 +0.0
IOCTL_SERIAL_PURGE: Purge requests
Purge mask=RXCLEAR: Write buffer

000045: I/O Request (UP), 02.04.2013 20:24:51.560 +0.001
IOCTL_SERIAL_PURGE: Purge requests

000048: I/O Request (DOWN), 02.04.2013 20:24:51.562 +0.0
IOCTL_SERIAL_PURGE: Purge requests
Purge mask=RXCLEAR: Write buffer

000049: I/O Request (UP), 02.04.2013 20:24:51.563 +0.001
IOCTL_SERIAL_PURGE: Purge requests

000053: Read Request (UP), 02.04.2013 20:24:51.564 +0.0
Buffer size: 0x8d5 bytes
Status: 0x00000000

017978: Close Request (DOWN), 02.04.2013 20:25:01.664 +0.100
Buffer size: 0x0 bytes

do-while
Beiträge: 6
Registriert: Sa 8. Sep 2012, 13:28
OS, Lazarus, FPC: Win7 (L 1.0, FPC 2.6.0)
CPU-Target: 64Bit & 32Bit
Wohnort: Berlin, Germany
Kontaktdaten:

Re: GPS-Maus auslesen...COM-Port!

Beitrag von do-while »

Ohne dass ich mir das jetzt alles durchgelesen habe würde ich denken, dass Du doch den Datenstream suchst, den das andere Programm als Initialisierung zur Maus sendet. Dazu brauchst Du die richtige Baudrate und das richtige Datenformat (was in NMEA festgelegt sein wird) und dann die Datenbytes, die da hin- und hergehen.

Wenn Du das alles hast, kannst Du es in Deinem Programm einsetzen um die Maus in Betreib zu setzen.

Erst danach tritt der Parser in Aktion, der die regelmäßigen Burst-Frames interpretiert.
----
Gruß Hagen

debeye
Beiträge: 12
Registriert: Mi 20. Mär 2013, 23:10

Re: GPS-Maus auslesen...COM-Port!

Beitrag von debeye »

Okay ... Datenformat ist NMEA, die richtige baud ist 4800 (laut dem GPS-Programm)
Fein soweit so gut.

Wie (mit welcher Methode) bekomm ich das jetzt an die Maus gesendet bzw. woher weiß ich was isch genau senden muss?

Das steht ja so schon im Code:

Code: Alles auswählen

SYN:=TBlockSerial.Create;
SYN.config(4800,8,'N',1,true,false);
SYN.Connect('COM3');         

MmVisual
Beiträge: 1469
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: GPS-Maus auslesen...COM-Port!

Beitrag von MmVisual »

Hersteller-Datenblatt lesen?
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6214
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: GPS-Maus auslesen...COM-Port!

Beitrag von af0815 »

Schon mal nach NMEA Protokoll gesucht ? Hier wird das NMEA 0183 Format beschrieben http://www.kowoma.de/gps/zusatzerklaerungen/NMEA.htm
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

do-while
Beiträge: 6
Registriert: Sa 8. Sep 2012, 13:28
OS, Lazarus, FPC: Win7 (L 1.0, FPC 2.6.0)
CPU-Target: 64Bit & 32Bit
Wohnort: Berlin, Germany
Kontaktdaten:

Re: GPS-Maus auslesen...COM-Port!

Beitrag von do-while »

Mit dem Comport-Monitor (URL siehe oben) kann man die Kommunikation des PC mit der Maus beobachten. Wenn es bei Dir nicht funktioniert hat, hast Du ggf. den Monitor erst nach Programmaufruf gestartet?
1) Monitor auf dem richtigen COM-Port aufsetzen, als Ansicht wählst Du "Request View".
2) Dann die Anwendung starten, Du siehst dann schon, dass der Monitor meldet "COMx geöffnet"
3) Initialisierung der Maus auslösen
4) Im Monitor siehst Du jetzt in Blau die Daten vom PC und in Rot die Antworten der Maus (oder umgekehrt).
5) Alle Bytes, die das Programm an die Maus sendet, musst Du dann zum Auftakt auch aus Deinem Lazarus-Programm senden. Auch hier kannst Du mit dem Monitor kontrollieren, ob alles gleich abläuft.

Ich verwende nicht SynaSer für COM-Ports, sondern die Erweiterung CPort für Lazarus, die ist zwar etwas komplizierter, kann aber per Eventsteuerung Datenbytes empfangen (auch binäre).
http://sourceforge.net/projects/cportlaz/
----
Gruß Hagen

debeye
Beiträge: 12
Registriert: Mi 20. Mär 2013, 23:10

Re: GPS-Maus auslesen...COM-Port!

Beitrag von debeye »

Problem gelöst!

"Invalid Parameter" in der COM-Port configuration - Manchmal ist die Lösung naheliegend das man Sie gar nicht in Erwägung zieht.

Danke für die Hilfe!

Antworten