summaryrefslogtreecommitdiff
path: root/noncore/net/wellenreiter/gui/gps.cpp
Unidiff
Diffstat (limited to 'noncore/net/wellenreiter/gui/gps.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/gui/gps.cpp34
1 files changed, 15 insertions, 19 deletions
diff --git a/noncore/net/wellenreiter/gui/gps.cpp b/noncore/net/wellenreiter/gui/gps.cpp
index b814427..5b1b4a4 100644
--- a/noncore/net/wellenreiter/gui/gps.cpp
+++ b/noncore/net/wellenreiter/gui/gps.cpp
@@ -45,6 +45,8 @@ bool GPS::open( const QString& host, int port )
45GpsLocation GPS::position() const 45GpsLocation GPS::position() const
46{ 46{
47 char buf[256]; 47 char buf[256];
48 double lat = -111.0;
49 double lon = -111.0;
48 50
49 int result = _socket->writeBlock( "p\r\n", 3 ); 51 int result = _socket->writeBlock( "p\r\n", 3 );
50 _socket->flush(); 52 _socket->flush();
@@ -53,19 +55,19 @@ GpsLocation GPS::position() const
53 int numAvail = _socket->bytesAvailable(); 55 int numAvail = _socket->bytesAvailable();
54 qDebug( "GPS write succeeded, %d bytes available for reading...", numAvail ); 56 qDebug( "GPS write succeeded, %d bytes available for reading...", numAvail );
55 if ( numAvail ) 57 if ( numAvail )
56 { 58 {
57 QTextStream stream( _socket ); 59 int numRead = _socket->readBlock( &buf[0], sizeof buf );
58 60 int numScan = sscanf( &buf[0], "GPSD,P=%lg %lg", &lat, &lon);
59 QString str; 61
60 stream.readRawBytes( &buf[0], 7 ); 62 if ( numRead < 7 || numScan != 2 )
61 float lat = -111; 63 {
62 stream >> lat; 64 qDebug( "GPS read %d bytes succeeded, invalid response: '%s'", numRead, &buf[0] );
63 stream.skipWhiteSpace(); 65 return GpsLocation( -111, -111 );
64 float lon = -111; 66 }
65 stream >> lon; 67 else
66 stream.readRawBytes( &buf[0], 200 ); // read and discard the stuff until EOF 68 {
67 69 return GpsLocation( lat, lon );
68 return GpsLocation( lat, lon ); 70 }
69 } 71 }
70 } 72 }
71 return GpsLocation( -111, -111 ); 73 return GpsLocation( -111, -111 );
@@ -123,9 +125,3 @@ QString GpsLocation::dmsPosition() const
123 125
124 return dms; 126 return dms;
125} 127}
126
127
128
129
130
131