summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/TODO2
-rw-r--r--noncore/net/wellenreiter/gui/gps.cpp34
-rw-r--r--noncore/net/wellenreiter/gui/mainwindow.cpp15
-rw-r--r--noncore/net/wellenreiter/gui/mainwindow.h1
4 files changed, 32 insertions, 20 deletions
diff --git a/noncore/net/wellenreiter/TODO b/noncore/net/wellenreiter/TODO
index fd70fc7..b6ec617 100644
--- a/noncore/net/wellenreiter/TODO
+++ b/noncore/net/wellenreiter/TODO
@@ -32,2 +32,4 @@ ENGINE
+- fix autodetection (interface name)
+
---------
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
@@ -47,2 +47,4 @@ GpsLocation GPS::position() const
char buf[256];
+ double lat = -111.0;
+ double lon = -111.0;
@@ -55,15 +57,15 @@ GpsLocation GPS::position() const
if ( numAvail )
- {
- QTextStream stream( _socket );
-
- QString str;
- stream.readRawBytes( &buf[0], 7 );
- float lat = -111;
- stream >> lat;
- stream.skipWhiteSpace();
- float lon = -111;
- stream >> lon;
- stream.readRawBytes( &buf[0], 200 ); // read and discard the stuff until EOF
-
- return GpsLocation( lat, lon );
+ {
+ int numRead = _socket->readBlock( &buf[0], sizeof buf );
+ int numScan = sscanf( &buf[0], "GPSD,P=%lg %lg", &lat, &lon);
+
+ if ( numRead < 7 || numScan != 2 )
+ {
+ qDebug( "GPS read %d bytes succeeded, invalid response: '%s'", numRead, &buf[0] );
+ return GpsLocation( -111, -111 );
+ }
+ else
+ {
+ return GpsLocation( lat, lon );
+ }
}
@@ -125,7 +127 @@ QString GpsLocation::dmsPosition() const
}
-
-
-
-
-
-
diff --git a/noncore/net/wellenreiter/gui/mainwindow.cpp b/noncore/net/wellenreiter/gui/mainwindow.cpp
index 05a8913..b462afd 100644
--- a/noncore/net/wellenreiter/gui/mainwindow.cpp
+++ b/noncore/net/wellenreiter/gui/mainwindow.cpp
@@ -36,2 +36,3 @@
#include <qstatusbar.h>
+#include <qspinbox.h>
#include <qtextstream.h>
@@ -135,2 +136,3 @@ WellenreiterMainWindow::WellenreiterMainWindow( QWidget * parent, const char * n
demo->insertItem( tr( "&Add something" ), this, SLOT( demoAddStations() ) );
+ demo->insertItem( tr( "&Read from GPSd" ), this, SLOT( demoReadFromGps() ) );
@@ -225,3 +227,3 @@ void WellenreiterMainWindow::demoAddStations()
{
- //mw = 0; // test SIGSGV handling
+ //mw = 0; // test SIGSEGV handling
@@ -235,2 +237,13 @@ void WellenreiterMainWindow::demoAddStations()
+void WellenreiterMainWindow::demoReadFromGps()
+{
+ WellenreiterConfigWindow* configwindow = WellenreiterConfigWindow::instance();
+ GPS* gps = new GPS( this );
+ gps->open( configwindow->gpsdHost->currentText(), configwindow->gpsdPort->value() );
+ GpsLocation loc = gps->position();
+
+ QMessageBox::information( this, "Wellenreiter/Opie", tr( "GPS said:\n$1" ).arg( loc.dmsPosition() ) );
+}
+
+
QString WellenreiterMainWindow::getFileName( bool save )
diff --git a/noncore/net/wellenreiter/gui/mainwindow.h b/noncore/net/wellenreiter/gui/mainwindow.h
index 8d4e768..a5cb7a5 100644
--- a/noncore/net/wellenreiter/gui/mainwindow.h
+++ b/noncore/net/wellenreiter/gui/mainwindow.h
@@ -52,2 +52,3 @@ class WellenreiterMainWindow: public QMainWindow
void demoAddStations();
+ void demoReadFromGps();
void fileSaveLog();