• 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
  • maemo
MaemoPositionProviderPlugin.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 2010 Dennis Nienhüser <earthwings@gentoo.org>
9 //
10 
11 #include "MaemoPositionProviderPlugin.h"
12 
13 #include <QTimer>
14 
15 #include <location/location-gps-device.h>
16 #include <location/location-gpsd-control.h>
17 
18 namespace Marble {
19 
20 class MaemoPositionProviderPluginPrivate
21 {
22 public:
23  LocationGPSDControl *m_control;
24  LocationGPSDevice *m_device;
25  PositionProviderStatus m_status;
26  QTimer m_timer;
27  qreal m_speed;
28  qreal m_direction;
29  QDateTime m_timestamp;
30 
31  MaemoPositionProviderPluginPrivate();
32 
33  ~MaemoPositionProviderPluginPrivate();
34 };
35 
36 MaemoPositionProviderPluginPrivate::MaemoPositionProviderPluginPrivate() :
37  m_control( 0 ), m_device( 0 ), m_status( PositionProviderStatusAcquiring ),
38  m_speed( 0 ), m_direction( 0 )
39 {
40  m_timer.setInterval( 1000 );
41 }
42 
43 MaemoPositionProviderPluginPrivate::~MaemoPositionProviderPluginPrivate()
44 {
45  g_object_unref( m_device );
46  g_object_unref( m_control );
47 }
48 
49 QString MaemoPositionProviderPlugin::name() const
50 {
51  return tr( "Maemo Position Provider Plugin" );
52 }
53 
54 QString MaemoPositionProviderPlugin::nameId() const
55 {
56  return "MaemoPositionProvider";
57 }
58 
59 QString MaemoPositionProviderPlugin::guiString() const
60 {
61  return tr( "Maemo" );
62 }
63 
64 QString MaemoPositionProviderPlugin::version() const
65 {
66  return "1.0";
67 }
68 
69 QString MaemoPositionProviderPlugin::description() const
70 {
71  return tr( "Reports the GPS position of a Maemo device (e.g. Nokia N900)." );
72 }
73 
74 QString MaemoPositionProviderPlugin::copyrightYears() const
75 {
76  return "2010";
77 }
78 
79 QList<PluginAuthor> MaemoPositionProviderPlugin::pluginAuthors() const
80 {
81  return QList<PluginAuthor>()
82  << PluginAuthor( QString::fromUtf8( "Dennis Nienhüser" ), "earthwings@gentoo.org" );
83 }
84 
85 QIcon MaemoPositionProviderPlugin::icon() const
86 {
87  return QIcon();
88 }
89 
90 PositionProviderPlugin* MaemoPositionProviderPlugin::newInstance() const
91 {
92  return new MaemoPositionProviderPlugin;
93 }
94 
95 PositionProviderStatus MaemoPositionProviderPlugin::status() const
96 {
97  return d->m_status;
98 }
99 
100 GeoDataCoordinates MaemoPositionProviderPlugin::position() const
101 {
102  if ( status() == PositionProviderStatusAvailable &&
103  d->m_device->fix->fields & LOCATION_GPS_DEVICE_LATLONG_SET ) {
104  qreal alt = 0.0;
105  if ( d->m_device->fix->fields & LOCATION_GPS_DEVICE_ALTITUDE_SET ) {
106  alt = d->m_device->fix->altitude;
107  }
108  if ( d->m_device->fix->fields & LOCATION_GPS_DEVICE_SPEED_SET ) {
109  d->m_speed = d->m_device->fix->speed;
110  }
111  if ( d->m_device->fix->fields & LOCATION_GPS_DEVICE_TRACK_SET ) {
112  d->m_direction = d->m_device->fix->track;
113  }
114  if ( d->m_device->fix->fields & LOCATION_GPS_DEVICE_TIME_SET ) {
115  d->m_timestamp = QDateTime::fromMSecsSinceEpoch( d->m_device->fix->time * 1000 );
116  }
117 
118  return GeoDataCoordinates( d->m_device->fix->longitude,
119  d->m_device->fix->latitude,
120  alt, GeoDataCoordinates::Degree );
121  }
122 
123  return GeoDataCoordinates();
124 }
125 
126 qreal MaemoPositionProviderPlugin::speed() const
127 {
128  return d->m_speed * KM2METER / HOUR2SEC;
129 }
130 
131 qreal MaemoPositionProviderPlugin::direction() const
132 {
133  return d->m_direction;
134 }
135 
136 GeoDataAccuracy MaemoPositionProviderPlugin::accuracy() const
137 {
138  GeoDataAccuracy result;
139 
140  if ( status() == PositionProviderStatusAvailable ) {
141  result.level = GeoDataAccuracy::Detailed;
142  result.horizontal = d->m_device->fix->eph / 100.0; // cm => meter
143  result.vertical = d->m_device->fix->epv; // meter
144  }
145  else {
146  result.level = GeoDataAccuracy::none;
147  result.horizontal = 0;
148  result.vertical = 0;
149  }
150 
151  return result;
152 }
153 
154 QDateTime MaemoPositionProviderPlugin::timestamp() const
155 {
156  return d->m_timestamp;
157 }
158 
159 MaemoPositionProviderPlugin::MaemoPositionProviderPlugin() :
160  d( new MaemoPositionProviderPluginPrivate )
161 {
162  connect( &d->m_timer, SIGNAL(timeout()), this, SLOT(update()) );
163 }
164 
165 MaemoPositionProviderPlugin::~MaemoPositionProviderPlugin()
166 {
167  delete d;
168 }
169 
170 void MaemoPositionProviderPlugin::initialize()
171 {
172  // See http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Using_Connectivity_Components/Using_Location_API
173  d->m_control = location_gpsd_control_get_default();
174  d->m_device = reinterpret_cast<LocationGPSDevice*>( g_object_new( LOCATION_TYPE_GPS_DEVICE, NULL ) );
175  g_object_set( G_OBJECT( d->m_control ),
176  "preferred-method", LOCATION_METHOD_USER_SELECTED,
177  "preferred-interval", LOCATION_INTERVAL_1S,
178  NULL);
179  location_gpsd_control_start( d->m_control );
180 
181  // Poll and report the GPS position each second.
182  d->m_timer.start();
183 }
184 
185 bool MaemoPositionProviderPlugin::isInitialized() const
186 {
187  return d->m_control != 0;
188 }
189 
190 void MaemoPositionProviderPlugin::update()
191 {
192  PositionProviderStatus newStatus = PositionProviderStatusAcquiring;
193  if ( d->m_device ) {
194  if ( d->m_device->status == LOCATION_GPS_DEVICE_STATUS_FIX && d->m_device->fix )
195  newStatus = PositionProviderStatusAvailable;
196  else
197  newStatus = PositionProviderStatusUnavailable;
198  }
199 
200  if ( newStatus != d->m_status ) {
201  d->m_status = newStatus;
202  emit statusChanged( newStatus );
203  }
204 
205  if ( newStatus == PositionProviderStatusAvailable ) {
206  emit positionChanged( position(), accuracy() );
207  }
208 }
209 
210 } // namespace Marble
211 
212 Q_EXPORT_PLUGIN2( Marble::MaemoPositionProviderPlugin, Marble::MaemoPositionProviderPlugin )
213 
214 #include "MaemoPositionProviderPlugin.moc"
Marble::MaemoPositionProviderPlugin::accuracy
virtual GeoDataAccuracy accuracy() const
Definition: MaemoPositionProviderPlugin.cpp:136
Marble::GeoDataCoordinates
A 3d point representation.
Definition: GeoDataCoordinates.h:52
Marble::MaemoPositionProviderPlugin::timestamp
virtual QDateTime timestamp() const
Definition: MaemoPositionProviderPlugin.cpp:154
Marble::MaemoPositionProviderPlugin::description
virtual QString description() const
Returns a user description of the plugin.
Definition: MaemoPositionProviderPlugin.cpp:69
Marble::MaemoPositionProviderPlugin::name
virtual QString name() const
Returns the user-visible name of the plugin.
Definition: MaemoPositionProviderPlugin.cpp:49
Marble::PositionProviderPlugin::statusChanged
void statusChanged(PositionProviderStatus status) const
Marble::KM2METER
const qreal KM2METER
Definition: MarbleGlobal.h:223
Marble::PluginAuthor
Definition: PluginInterface.h:28
Marble::HOUR2SEC
const qreal HOUR2SEC
Definition: MarbleGlobal.h:235
MaemoPositionProviderPlugin.h
Marble::MaemoPositionProviderPlugin::~MaemoPositionProviderPlugin
virtual ~MaemoPositionProviderPlugin()
Definition: MaemoPositionProviderPlugin.cpp:165
Marble::MaemoPositionProviderPlugin::newInstance
virtual PositionProviderPlugin * newInstance() const
Create a new PositionProvider Plugin and return it.
Definition: MaemoPositionProviderPlugin.cpp:90
Marble::MaemoPositionProviderPlugin::position
virtual GeoDataCoordinates position() const
Definition: MaemoPositionProviderPlugin.cpp:100
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
Marble::MaemoPositionProviderPlugin::direction
virtual qreal direction() const
Returns the direction in which the gps device is moving.
Definition: MaemoPositionProviderPlugin.cpp:131
QString::fromUtf8
QString fromUtf8(const char *str, int size)
Marble::MaemoPositionProviderPlugin
Definition: MaemoPositionProviderPlugin.h:21
Marble::MaemoPositionProviderPlugin::pluginAuthors
virtual QList< PluginAuthor > pluginAuthors() const
Definition: MaemoPositionProviderPlugin.cpp:79
QTimer
Marble::MaemoPositionProviderPlugin::initialize
virtual void initialize()
Definition: MaemoPositionProviderPlugin.cpp:170
Marble::MaemoPositionProviderPlugin::speed
virtual qreal speed() const
Returns the speed of the gps device in meters per second.
Definition: MaemoPositionProviderPlugin.cpp:126
Marble::PositionProviderPlugin::positionChanged
void positionChanged(GeoDataCoordinates position, GeoDataAccuracy accuracy) const
Marble::GeoDataAccuracy::horizontal
qreal horizontal
Horizontal accuracy in meters.
Definition: GeoDataAccuracy.h:49
Marble::MaemoPositionProviderPlugin::isInitialized
virtual bool isInitialized() const
Definition: MaemoPositionProviderPlugin.cpp:185
QString
QList
Marble::MaemoPositionProviderPlugin::status
virtual PositionProviderStatus status() const
Definition: MaemoPositionProviderPlugin.cpp:95
Marble::MaemoPositionProviderPlugin::MaemoPositionProviderPlugin
MaemoPositionProviderPlugin()
Definition: MaemoPositionProviderPlugin.cpp:159
Marble::MaemoPositionProviderPlugin::copyrightYears
virtual QString copyrightYears() const
Definition: MaemoPositionProviderPlugin.cpp:74
Marble::PositionProviderStatus
PositionProviderStatus
Definition: PositionProviderPluginInterface.h:25
Q_EXPORT_PLUGIN2
#define Q_EXPORT_PLUGIN2(a, b)
Definition: marble_export.h:34
Marble::GeoDataAccuracy::none
Definition: GeoDataAccuracy.h:26
Marble::MaemoPositionProviderPlugin::guiString
virtual QString guiString() const
Returns the string that should appear in the user interface.
Definition: MaemoPositionProviderPlugin.cpp:59
Marble::GeoDataAccuracy::Detailed
Definition: GeoDataAccuracy.h:32
Marble::MaemoPositionProviderPlugin::nameId
virtual QString nameId() const
Returns the unique name of the plugin.
Definition: MaemoPositionProviderPlugin.cpp:54
Marble::GeoDataAccuracy::level
Level level
Approximate descriptive accuracy.
Definition: GeoDataAccuracy.h:44
Marble::MaemoPositionProviderPlugin::icon
virtual QIcon icon() const
Returns an icon for the plugin.
Definition: MaemoPositionProviderPlugin.cpp:85
Marble::PositionProviderStatusAvailable
Definition: PositionProviderPluginInterface.h:29
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
Marble::GeoDataAccuracy
Definition: GeoDataAccuracy.h:22
Marble::PositionProviderStatusAcquiring
Definition: PositionProviderPluginInterface.h:28
QIcon
QDateTime
Marble::MaemoPositionProviderPlugin::version
virtual QString version() const
Definition: MaemoPositionProviderPlugin.cpp:64
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:13:40 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