• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

marble

  • sources
  • kde-4.14
  • kdeedu
  • marble
  • src
  • plugins
  • positionprovider
  • gpsd
GpsdPositionProviderPlugin.cpp
Go to the documentation of this file.
1 //
2 // This file is part of the Marble Virtual Globe.
3 //
4 // This program is free software licensed under the GNU LGPL. You can
5 // find a copy of this license in LICENSE.txt in the top directory of
6 // the source code.
7 //
8 // Copyright 2009 Eckhart Wörner <ewoerner@kde.org>
9 //
10 
11 #include "GpsdPositionProviderPlugin.h"
12 
13 #include "GpsdThread.h"
14 #include "MarbleDebug.h"
15 #include <math.h>
16 
17 using namespace Marble;
18 /* TRANSLATOR Marble::GpsdPositionProviderPlugin */
19 
20 QString GpsdPositionProviderPlugin::name() const
21 {
22  return tr( "Gpsd position provider Plugin" );
23 }
24 
25 QString GpsdPositionProviderPlugin::nameId() const
26 {
27  return QString::fromLatin1( "Gpsd" );
28 }
29 
30 QString GpsdPositionProviderPlugin::guiString() const
31 {
32  return tr( "gpsd" );
33 }
34 
35 QString GpsdPositionProviderPlugin::version() const
36 {
37  return "1.0";
38 }
39 
40 QString GpsdPositionProviderPlugin::description() const
41 {
42  return tr( "Reports the position of a GPS device." );
43 }
44 
45 QString GpsdPositionProviderPlugin::copyrightYears() const
46 {
47  return "2009";
48 }
49 
50 QList<PluginAuthor> GpsdPositionProviderPlugin::pluginAuthors() const
51 {
52  return QList<PluginAuthor>()
53  << PluginAuthor( QString::fromUtf8( "Eckhart Wörner" ), "ewoerner@kde.org" );
54 
55 }
56 
57 QIcon GpsdPositionProviderPlugin::icon() const
58 {
59  return QIcon();
60 }
61 
62 void GpsdPositionProviderPlugin::initialize()
63 {
64  m_status = PositionProviderStatusAcquiring;
65  emit statusChanged( m_status );
66 
67  m_thread = new GpsdThread;
68  connect( m_thread, SIGNAL(gpsdInfo(gps_data_t)),
69  this, SLOT(update(gps_data_t)) );
70  connect( m_thread, SIGNAL(statusChanged(PositionProviderStatus)),
71  this, SIGNAL(statusChanged(PositionProviderStatus)) );
72  m_thread->start();
73 }
74 
75 void GpsdPositionProviderPlugin::update( gps_data_t data )
76 {
77  PositionProviderStatus oldStatus = m_status;
78  GeoDataCoordinates oldPosition = m_position;
79  if ( data.status == STATUS_NO_FIX || isnan( data.fix.longitude ) || isnan( data.fix.latitude ) )
80  m_status = PositionProviderStatusUnavailable;
81  else {
82  m_status = PositionProviderStatusAvailable;
83  m_position.set( data.fix.longitude, data.fix.latitude,
84  data.fix.altitude, GeoDataCoordinates::Degree );
85  if (data.fix.mode == MODE_2D) {
86  m_position.setAltitude(0);
87  }
88 
89  m_accuracy.level = GeoDataAccuracy::Detailed;
90 #if defined( GPSD_API_MAJOR_VERSION ) && ( GPSD_API_MAJOR_VERSION >= 3 )
91  if ( !isnan( data.fix.epx ) && !isnan( data.fix.epy ) ) {
92  m_accuracy.horizontal = qMax( data.fix.epx, data.fix.epy );
93  }
94 #else
95  if ( !isnan( data.fix.eph ) ) {
96  m_accuracy.horizontal = data.fix.eph;
97  }
98 #endif
99  if ( !isnan( data.fix.epv ) ) {
100  m_accuracy.vertical = data.fix.epv;
101  }
102 
103  if( !isnan(data.fix.speed ) )
104  {
105  m_speed = data.fix.speed;
106  }
107 
108  if( !isnan( data.fix.track ) )
109  {
110  m_track = data.fix.track;
111  }
112 
113  if ( !isnan( data.fix.time ) )
114  {
115  m_timestamp = QDateTime::fromMSecsSinceEpoch( data.fix.time * 1000 );
116  }
117  }
118  if (m_status != oldStatus)
119  emit statusChanged( m_status );
120  if (!(oldPosition == m_position)) {
121  emit positionChanged( m_position, m_accuracy );
122  }
123 }
124 
125 bool GpsdPositionProviderPlugin::isInitialized() const
126 {
127  return m_thread;
128 }
129 
130 PositionProviderPlugin* GpsdPositionProviderPlugin::newInstance() const
131 {
132  return new GpsdPositionProviderPlugin;
133 }
134 
135 PositionProviderStatus GpsdPositionProviderPlugin::status() const
136 {
137  return m_status;
138 }
139 
140 GeoDataCoordinates GpsdPositionProviderPlugin::position() const
141 {
142  return m_position;
143 }
144 
145 GeoDataAccuracy GpsdPositionProviderPlugin::accuracy() const
146 {
147  return m_accuracy;
148 }
149 
150 GpsdPositionProviderPlugin::GpsdPositionProviderPlugin() : m_thread( 0 ),
151  m_speed( 0.0 ),
152  m_track( 0.0 )
153 {
154 }
155 
156 GpsdPositionProviderPlugin::~GpsdPositionProviderPlugin()
157 {
158  if ( m_thread ) {
159  m_thread->exit();
160 
161  if ( !m_thread->wait( 5000 ) ) {
162  mDebug() << "Failed to stop GpsdThread";
163  }
164  else {
165  delete m_thread;
166  }
167  }
168 }
169 
170 qreal GpsdPositionProviderPlugin::speed() const
171 {
172  return m_speed;
173 }
174 
175 qreal GpsdPositionProviderPlugin::direction() const
176 {
177  return m_track;
178 }
179 
180 QDateTime GpsdPositionProviderPlugin::timestamp() const
181 {
182  return m_timestamp;
183 }
184 
185 
186 QString GpsdPositionProviderPlugin::error() const
187 {
188  return m_thread->error();
189 }
190 
191 
192 Q_EXPORT_PLUGIN2( GpsdPositionProviderPlugin, Marble::GpsdPositionProviderPlugin )
193 
194 
195 
196 #include "GpsdPositionProviderPlugin.moc"
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Marble::GpsdPositionProviderPlugin::newInstance
virtual PositionProviderPlugin * newInstance() const
Create a new PositionProvider Plugin and return it.
Definition: GpsdPositionProviderPlugin.cpp:130
Marble::GpsdPositionProviderPlugin::nameId
virtual QString nameId() const
Returns the unique name of the plugin.
Definition: GpsdPositionProviderPlugin.cpp:25
Marble::GeoDataCoordinates::setAltitude
void setAltitude(const qreal altitude)
set the altitude of the Point in meters
Definition: GeoDataCoordinates.cpp:1191
Marble::GpsdPositionProviderPlugin::copyrightYears
virtual QString copyrightYears() const
Definition: GpsdPositionProviderPlugin.cpp:45
Marble::GpsdPositionProviderPlugin::pluginAuthors
virtual QList< PluginAuthor > pluginAuthors() const
Definition: GpsdPositionProviderPlugin.cpp:50
Marble::PositionProviderPlugin::statusChanged
void statusChanged(PositionProviderStatus status) const
Marble::GpsdPositionProviderPlugin::timestamp
virtual QDateTime timestamp() const
Definition: GpsdPositionProviderPlugin.cpp:180
Marble::PluginAuthor
Definition: PluginInterface.h:28
Marble::GpsdPositionProviderPlugin::initialize
virtual void initialize()
Definition: GpsdPositionProviderPlugin.cpp:62
Marble::GpsdThread
Definition: GpsdThread.h:27
MarbleDebug.h
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
Marble::PositionProviderStatusUnavailable
Definition: PositionProviderPluginInterface.h:27
QDateTime::fromMSecsSinceEpoch
QDateTime fromMSecsSinceEpoch(qint64 msecs)
Marble::GeoDataCoordinates::Degree
Definition: GeoDataCoordinates.h:66
Marble::PositionProviderPlugin
The abstract class that provides position information.
Definition: PositionProviderPlugin.h:26
Marble::GeoDataAccuracy::vertical
qreal vertical
Vertical accuracy in meters.
Definition: GeoDataAccuracy.h:54
QThread::start
void start(Priority priority)
Marble::GpsdPositionProviderPlugin::icon
virtual QIcon icon() const
Returns an icon for the plugin.
Definition: GpsdPositionProviderPlugin.cpp:57
Marble::GpsdPositionProviderPlugin
Definition: GpsdPositionProviderPlugin.h:25
Marble::GpsdPositionProviderPlugin::error
virtual QString error() const
Returns an error string to be presented to the user if the status is PositionProviderStatusError.
Definition: GpsdPositionProviderPlugin.cpp:186
QString::fromUtf8
QString fromUtf8(const char *str, int size)
Marble::GpsdPositionProviderPlugin::description
virtual QString description() const
Returns a user description of the plugin.
Definition: GpsdPositionProviderPlugin.cpp:40
Marble::GpsdPositionProviderPlugin::isInitialized
virtual bool isInitialized() const
Definition: GpsdPositionProviderPlugin.cpp:125
Marble::GpsdPositionProviderPlugin::speed
virtual qreal speed() const
Returns the speed of the gps device in meters per second.
Definition: GpsdPositionProviderPlugin.cpp:170
Marble::PositionProviderPlugin::positionChanged
void positionChanged(GeoDataCoordinates position, GeoDataAccuracy accuracy) const
Marble::GeoDataAccuracy::horizontal
qreal horizontal
Horizontal accuracy in meters.
Definition: GeoDataAccuracy.h:49
Marble::GpsdPositionProviderPlugin::GpsdPositionProviderPlugin
GpsdPositionProviderPlugin()
Definition: GpsdPositionProviderPlugin.cpp:150
QString
QList
Marble::GpsdPositionProviderPlugin::direction
virtual qreal direction() const
Returns the direction in which the gps device is moving.
Definition: GpsdPositionProviderPlugin.cpp:175
Marble::GeoDataCoordinates::set
void set(qreal lon, qreal lat, qreal alt=0, GeoDataCoordinates::Unit unit=GeoDataCoordinates::Radian)
(re)set the coordinates in a GeoDataCoordinates object
Definition: GeoDataCoordinates.cpp:657
Marble::GpsdThread::error
QString error() const
Definition: GpsdThread.cpp:43
Marble::PositionProviderStatus
PositionProviderStatus
Definition: PositionProviderPluginInterface.h:25
Q_EXPORT_PLUGIN2
#define Q_EXPORT_PLUGIN2(a, b)
Definition: marble_export.h:34
Marble::GpsdPositionProviderPlugin::position
virtual GeoDataCoordinates position() const
Definition: GpsdPositionProviderPlugin.cpp:140
Marble::GpsdPositionProviderPlugin::accuracy
virtual GeoDataAccuracy accuracy() const
Definition: GpsdPositionProviderPlugin.cpp:145
Marble::GpsdPositionProviderPlugin::version
virtual QString version() const
Definition: GpsdPositionProviderPlugin.cpp:35
Marble::GpsdPositionProviderPlugin::guiString
virtual QString guiString() const
Returns the string that should appear in the user interface.
Definition: GpsdPositionProviderPlugin.cpp:30
Marble::GpsdPositionProviderPlugin::~GpsdPositionProviderPlugin
virtual ~GpsdPositionProviderPlugin()
Definition: GpsdPositionProviderPlugin.cpp:156
Marble::GeoDataAccuracy::Detailed
Definition: GeoDataAccuracy.h:32
QThread::wait
bool wait(unsigned long time)
Marble::GeoDataAccuracy::level
Level level
Approximate descriptive accuracy.
Definition: GeoDataAccuracy.h:44
QString::fromLatin1
QString fromLatin1(const char *str, int size)
GpsdThread.h
Marble::PositionProviderStatusAvailable
Definition: PositionProviderPluginInterface.h:29
GpsdPositionProviderPlugin.h
Marble::GpsdPositionProviderPlugin::name
virtual QString name() const
Returns the user-visible name of the plugin.
Definition: GpsdPositionProviderPlugin.cpp:20
Marble::GeoDataAccuracy
Definition: GeoDataAccuracy.h:22
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Marble::mDebug
QDebug mDebug()
a function to replace qDebug() in Marble library code
Definition: MarbleDebug.cpp:36
Marble::PositionProviderStatusAcquiring
Definition: PositionProviderPluginInterface.h:28
QThread::exit
void exit(int returnCode)
QIcon
QDateTime
Marble::GpsdPositionProviderPlugin::status
virtual PositionProviderStatus status() const
Definition: GpsdPositionProviderPlugin.cpp:135
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:39 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

marble

Skip menu "marble"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal