Trojaner-Board

Trojaner-Board (https://www.trojaner-board.de/)
-   Alles rund um Mac OSX & Linux (https://www.trojaner-board.de/alles-rund-um-mac-osx-linux/)
-   -   Daten vom GPS Empfänger nicht abrufbar (https://www.trojaner-board.de/32193-daten-gps-empfaenger-abrufbar.html)

Tueideg 14.09.2006 02:02

Daten vom GPS Empfänger nicht abrufbar
 
Hallo,

ich möchte mich kurz fassen.

Ich versuche seit Tagen NMEA Daten von meinem GPS Empfänger über den COM-Port abzufragen, aber es gelingt mir nicht.

Wie man die Serielle Schnittstelle unter Linux öffnet habe ich in diversen Howto's gelesen und das Öffnen an sich funktioniert einwandfrei. Das Programm kompiliert und greift auf die Schnittstelle zu!

Das Problem was ich habe liegt eher in der Konfiguration der flags in termios. Denn beim Abfragen der Daten bekomme ich irgendein kauderwelsch, obwohl ich für NMEA : B4800, onestopbit, CS8, noParity eingestellt habe.

Hierzu ein Ausschnitt der Konfigurationen:

GPS_Handle = open(portName, O_RDWR | O_NOCTTY );

if (tcgetattr(GPS_Handle, &oldtio) < 0)
std::cout<<"Aktuelle Konfiguration fehlerhaft\n";

bzero(&newtio, sizeof(newtio)); //erstmal alle werte auf null setzten

newtio.c_cflag &= ~( CSIZE | PARENB | CRTSCTS );
newtio.c_cflag |= ( CS8 | CLOCAL | CREAD );

newtio.c_iflag |= (IGNPAR );
newtio.c_iflag &= ~(IXOFF | IXON | IXANY | PARMRK | INPCK);

newtio.c_oflag &= ~OPOST;

newtio.c_lflag &= ~(ICANON | ECHO | ISIG);

newtio.c_cc[VINTR] = 0;
newtio.c_cc[VQUIT] = 0;
newtio.c_cc[VERASE] = 0;
newtio.c_cc[VKILL] = 0;
newtio.c_cc[VEOF] = 4;
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 1;
newtio.c_cc[VSWTC] = 0;
newtio.c_cc[VSTART] = 0;
newtio.c_cc[VSTOP] = 0;
newtio.c_cc[VSUSP] = 0;
newtio.c_cc[VEOL] = 0;
newtio.c_cc[VREPRINT] = 0;
newtio.c_cc[VDISCARD] = 0;
newtio.c_cc[VWERASE] = 0;
newtio.c_cc[VLNEXT] = 0;
newtio.c_cc[VEOL2] = 0;

cfsetispeed (&newtio, B4800);
cfsetospeed (&newtio, B4800);

tcflush(GPS_Handle, TCIFLUSH);

if (tcsetattr(GPS_Handle,TCSANOW,&newtio) < 0)
std::cout<<"Neue Konfiguration fehlerhaft\n";[/I][/I]

Einige diverese Umstellungen der Flags habe ich auch probiert, aber es tut sich alles nüx, bzw. ich bekomme keine NMEA Daten byteweise ausgelesen.

Dabei möchte ich die Daten nacheinander byteweise auslesen, die mir der Garmin über das NMEA Protokol schickt.

Eine Lösung von Kistbier habe ich mir ebenfalls angesehen, aber auch das hat nicht funktioniert.

Gibt es vielleicht ausser der termios flags noch andere Einstellungen, die ich berücksichtigen muss.

Ein Äquivalentes Windows -Programm habe ich auch geschrieben, und da tut alles ohne Prob. Allerdings kann ich die Einstellungen in der DCB - Datenstruktur nicht gleichermassen für Linux verwenden, oder ich finde keine äquivalente Einstellmöglichkeit. Auf windows musste man irgendwelche Timer einstellen und es gab auch noch "FlowControl" Konfigurationen. Gibt es sowas in Linux???

Für Eure Bemühungen im voraus besten Dank.

Tueideg 14.09.2006 18:22

Problem gelöst. Ich habe meinen Puffer umstellen müssen, der mir die Seriellen Daten abspeichert. Also war die Konfiguration doch richtig :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 Uhr.

Copyright ©2000-2025, Trojaner-Board


Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131