GPS-Maus auslesen...COM-Port!
GPS-Maus auslesen...COM-Port!
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
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
-
- 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!
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
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
Gruß Hagen
Re: GPS-Maus auslesen...COM-Port!
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.
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?
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?

-
- 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!
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.
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/
Re: GPS-Maus auslesen...COM-Port!
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
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
-
- 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!
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.
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
Gruß Hagen
Re: GPS-Maus auslesen...COM-Port!
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:
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');
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: GPS-Maus auslesen...COM-Port!
Hersteller-Datenblatt lesen?
EleLa - Elektronik Lagerverwaltung - www.elela.de
- af0815
- Lazarusforum e. V.
- Beiträge: 6780
- 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!
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).
-
- 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!
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/
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
Gruß Hagen
Re: GPS-Maus auslesen...COM-Port!
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!
"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!