-rw-r--r-- | noncore/net/wellenreiter/TODO | 2 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/gps.cpp | 34 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/mainwindow.cpp | 15 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/mainwindow.h | 1 |
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(); |