summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/logfilepositionsource/logfilepositionsource.cpp5
-rw-r--r--examples/logfilepositionsource/logfilepositionsource.h1
-rw-r--r--src/imports/location/qdeclarativepositionsource.cpp38
-rw-r--r--src/imports/location/qdeclarativepositionsource_p.h15
-rw-r--r--src/location/qgeopositioninfosource.cpp33
-rw-r--r--src/location/qgeopositioninfosource.h9
-rw-r--r--src/location/qgeopositioninfosource_npe_backend.cpp31
-rw-r--r--src/location/qgeopositioninfosource_npe_backend_p.h4
-rw-r--r--src/location/qgeopositioninfosource_simulator.cpp13
-rw-r--r--src/location/qgeopositioninfosource_simulator_p.h3
-rw-r--r--src/location/qgeosatelliteinfosource.cpp26
-rw-r--r--src/location/qgeosatelliteinfosource.h9
-rw-r--r--src/location/qgeosatelliteinfosource_npe_backend.cpp31
-rw-r--r--src/location/qgeosatelliteinfosource_npe_backend_p.h4
-rw-r--r--src/location/qgeosatelliteinfosource_simulator_p.h2
-rw-r--r--src/location/qnmeapositioninfosource.cpp12
-rw-r--r--src/location/qnmeapositioninfosource.h3
-rw-r--r--src/location/qnmeapositioninfosource_p.h1
-rw-r--r--tests/auto/positionplugin/plugin.cpp7
-rw-r--r--tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp2
-rw-r--r--tests/auto/qgeosatelliteinfosource/testqgeosatelliteinfosource.cpp1
21 files changed, 240 insertions, 10 deletions
diff --git a/examples/logfilepositionsource/logfilepositionsource.cpp b/examples/logfilepositionsource/logfilepositionsource.cpp
index 0dae43f2..ab8a1ac5 100644
--- a/examples/logfilepositionsource/logfilepositionsource.cpp
+++ b/examples/logfilepositionsource/logfilepositionsource.cpp
@@ -116,3 +116,8 @@ void LogFilePositionSource::readNextPosition()
}
}
}
+
+QGeoPositionInfoSource::Error LogFilePositionSource::error() const
+{
+ return QGeoPositionInfoSource::UnknownSourceError;
+}
diff --git a/examples/logfilepositionsource/logfilepositionsource.h b/examples/logfilepositionsource/logfilepositionsource.h
index b01e88e5..9bb83576 100644
--- a/examples/logfilepositionsource/logfilepositionsource.h
+++ b/examples/logfilepositionsource/logfilepositionsource.h
@@ -57,6 +57,7 @@ public:
PositioningMethods supportedPositioningMethods() const;
int minimumUpdateInterval() const;
+ Error error() const;
public slots:
virtual void startUpdates();
diff --git a/src/imports/location/qdeclarativepositionsource.cpp b/src/imports/location/qdeclarativepositionsource.cpp
index cc44a0fd..5219068b 100644
--- a/src/imports/location/qdeclarativepositionsource.cpp
+++ b/src/imports/location/qdeclarativepositionsource.cpp
@@ -112,12 +112,15 @@ QT_BEGIN_NAMESPACE
QDeclarativePositionSource::QDeclarativePositionSource()
: m_positionSource(0), m_positioningMethod(QDeclarativePositionSource::NoPositioningMethod),
- m_nmeaFile(0), m_active(false), m_singleUpdate(false), m_updateInterval(0)
+ m_nmeaFile(0), m_active(false), m_singleUpdate(false), m_updateInterval(0),
+ m_sourceError(UnknownSourceError)
{
m_positionSource = QGeoPositionInfoSource::createDefaultSource(this);
if (m_positionSource) {
connect(m_positionSource, SIGNAL(positionUpdated(QGeoPositionInfo)),
this, SLOT(positionUpdateReceived(QGeoPositionInfo)));
+ connect(m_positionSource, SIGNAL(error(QGeoPositionInfoSource::Error)),
+ this, SLOT(sourceErrorReceived(QGeoPositionInfoSource::Error)));
m_positioningMethod = supportedPositioningMethods();
#if defined(Q_OS_SYMBIAN)
} else {
@@ -470,6 +473,39 @@ void QDeclarativePositionSource::positionUpdateReceived(const QGeoPositionInfo&
}
}
+QDeclarativePositionSource::SourceError QDeclarativePositionSource::sourceError() const
+{
+ return m_sourceError;
+}
+
+/*!
+ \qmlproperty enumeration PositionSource::sourceError
+
+ This property holds the error which last occured with the PositionSource.
+
+ \list
+ \o AccessError - The connection setup to the remote positioning backend failed because the
+ application lacked the required privileges.
+ \o ClosedError - The remote positioning backend closed the connection, which happens e.g. in case
+ the user is switching location services to off. This object becomes invalid and should be deleted.
+ A new source can be declared later on to check whether the positioning backend is up again.
+ \o UnknownSourceError - An unidentified error occurred.
+ \endlist
+
+*/
+
+void QDeclarativePositionSource::sourceErrorReceived(const QGeoPositionInfoSource::Error error)
+{
+ if (error == QGeoPositionInfoSource::AccessError) {
+ m_sourceError = QDeclarativePositionSource::AccessError;
+ } else if (error == QGeoPositionInfoSource::ClosedError) {
+ m_sourceError = QDeclarativePositionSource::ClosedError;
+ } else {
+ m_sourceError = QDeclarativePositionSource::UnknownSourceError;
+ }
+ emit sourceErrorChanged();
+}
+
#include "moc_qdeclarativepositionsource_p.cpp"
QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativepositionsource_p.h b/src/imports/location/qdeclarativepositionsource_p.h
index 949830cd..02a8fdcd 100644
--- a/src/imports/location/qdeclarativepositionsource_p.h
+++ b/src/imports/location/qdeclarativepositionsource_p.h
@@ -63,6 +63,7 @@ class QDeclarativePositionSource : public QObject
Q_PROPERTY(int updateInterval READ updateInterval WRITE setUpdateInterval NOTIFY updateIntervalChanged)
Q_PROPERTY(PositioningMethods supportedPositioningMethods READ supportedPositioningMethods NOTIFY supportedPositioningMethodsChanged)
Q_PROPERTY(PositioningMethods preferredPositioningMethods READ preferredPositioningMethods WRITE setPreferredPositioningMethods NOTIFY preferredPositioningMethodsChanged)
+ Q_PROPERTY(SourceError sourceError READ sourceError NOTIFY sourceErrorChanged)
Q_ENUMS(PositioningMethod)
public:
@@ -76,6 +77,14 @@ public:
Q_DECLARE_FLAGS(PositioningMethods, PositioningMethod)
Q_FLAGS(PositioningMethods)
+ enum SourceError {
+ AccessError = QGeoPositionInfoSource::AccessError,
+ ClosedError = QGeoPositionInfoSource::ClosedError,
+ UnknownSourceError = QGeoPositionInfoSource::UnknownSourceError
+ };
+ Q_ENUMS(SourceError)
+
+
QDeclarativePositionSource();
~QDeclarativePositionSource();
void setNmeaSource(const QUrl& nmeaSource);
@@ -89,7 +98,7 @@ public:
QDeclarativePosition* position();
PositioningMethods supportedPositioningMethods() const;
PositioningMethods preferredPositioningMethods() const;
-
+ SourceError sourceError() const;
public Q_SLOTS:
void update();
@@ -103,11 +112,12 @@ Q_SIGNALS:
void updateIntervalChanged();
void supportedPositioningMethodsChanged();
void preferredPositioningMethodsChanged();
+ void sourceErrorChanged();
private Q_SLOTS:
void positionUpdateReceived(const QGeoPositionInfo& update);
-
+ void sourceErrorReceived(const QGeoPositionInfoSource::Error error);
private:
QGeoPositionInfoSource* m_positionSource;
PositioningMethods m_positioningMethod;
@@ -118,6 +128,7 @@ private:
bool m_active;
bool m_singleUpdate;
int m_updateInterval;
+ SourceError m_sourceError;
};
QT_END_NAMESPACE
diff --git a/src/location/qgeopositioninfosource.cpp b/src/location/qgeopositioninfosource.cpp
index 78d38832..61bdda15 100644
--- a/src/location/qgeopositioninfosource.cpp
+++ b/src/location/qgeopositioninfosource.cpp
@@ -360,10 +360,9 @@ QGeoPositionInfoSource::PositioningMethods QGeoPositionInfoSource::preferredPosi
reads from the system's default sources of location data, or the plugin
with the highest available priority.
- Returns 0 if the system has no default position source and no valid plugins
- could be found.
+ Returns 0 if the system has no default position source, no valid plugins
+ could be found or the user does not have the permission to access the current position.
*/
-
QGeoPositionInfoSource *QGeoPositionInfoSource::createDefaultSource(QObject *parent)
{
QSettings pluginSettings(QSettings::SystemScope, QLatin1String("Nokia"), QLatin1String("QtLocationPosAndSat"));
@@ -525,6 +524,13 @@ QStringList QGeoPositionInfoSource::availableSources()
*/
/*!
+ \fn virtual QGeoPositionInfoSource::Error QGeoPositionInfoSource::error() const;
+
+ Returns the type of error that last occurred.
+
+*/
+
+/*!
\fn void QGeoPositionInfoSource::positionUpdated(const QGeoPositionInfo &update);
If startUpdates() or requestUpdate() is called, this signal is emitted
@@ -544,6 +550,27 @@ QStringList QGeoPositionInfoSource::availableSources()
will not be emitted again until after the regular updates resume.
*/
+/*!
+ \fn void QGeoPositionInfoSource::error(QGeoPositionInfoSource::Error positioningError)
+
+ This signal is emitted after an error occurred. The \a positioningError
+ parameter describes the type of error that occurred.
+
+*/
+
+/*!
+ \enum QGeoPositionInfoSource::Error
+
+ The Error enumeration represents the errors which can occur.
+
+ \value AccessError The connection setup to the remote positioning backend failed because the
+ application lacked the required privileges.
+ \value ClosedError The remote positioning backend closed the connection, which happens e.g. in case
+ the user is switching location services to off. This object becomes invalid and should be deleted.
+ A call to createDefaultSource() can be used to create a new source later on.
+ \value UnknownSourceError An unidentified error occurred.
+ */
+
#include "moc_qgeopositioninfosource.cpp"
QT_END_NAMESPACE
diff --git a/src/location/qgeopositioninfosource.h b/src/location/qgeopositioninfosource.h
index 561f7a86..986db830 100644
--- a/src/location/qgeopositioninfosource.h
+++ b/src/location/qgeopositioninfosource.h
@@ -59,6 +59,13 @@ class Q_LOCATION_EXPORT QGeoPositionInfoSource : public QObject
Q_PROPERTY(int minimumUpdateInterval READ minimumUpdateInterval)
public:
+ enum Error {
+ AccessError,
+ ClosedError, /* 1 */
+ UnknownSourceError = -1
+ };
+ Q_ENUMS(Error)
+
enum PositioningMethod {
SatellitePositioningMethods = 0x000000ff,
NonSatellitePositioningMethods = 0xffffff00,
@@ -83,6 +90,7 @@ public:
static QGeoPositionInfoSource *createDefaultSource(QObject *parent);
static QGeoPositionInfoSource *createSource(const QString &sourceName, QObject *parent);
static QStringList availableSources();
+ virtual Error error() const = 0;
public Q_SLOTS:
virtual void startUpdates() = 0;
@@ -93,6 +101,7 @@ public Q_SLOTS:
Q_SIGNALS:
void positionUpdated(const QGeoPositionInfo &update);
void updateTimeout();
+ void error(QGeoPositionInfoSource::Error);
private:
Q_DISABLE_COPY(QGeoPositionInfoSource)
diff --git a/src/location/qgeopositioninfosource_npe_backend.cpp b/src/location/qgeopositioninfosource_npe_backend.cpp
index c3a5e72f..278ace1e 100644
--- a/src/location/qgeopositioninfosource_npe_backend.cpp
+++ b/src/location/qgeopositioninfosource_npe_backend.cpp
@@ -78,7 +78,7 @@ const QString kvalid = QLatin1String("valid");
const char* klocationdSocketName = "/var/run/locationd/locationd.socket";
QGeoPositionInfoSourceNpeBackend::QGeoPositionInfoSourceNpeBackend(QObject *parent):
- QGeoPositionInfoSource(parent), locationOngoing(false), timeoutSent(false)
+ QGeoPositionInfoSource(parent), locationOngoing(false), timeoutSent(false), mPositionError(QGeoPositionInfoSource::UnknownSourceError)
{
requestTimer = new QTimer(this);
QObject::connect(requestTimer, SIGNAL(timeout()), this, SLOT(requestTimerExpired()));
@@ -94,6 +94,7 @@ bool QGeoPositionInfoSourceNpeBackend::init()
if (mSocket) {
connect(mSocket, SIGNAL(connected()), this, SLOT(onSocketConnected()));
connect(mSocket, SIGNAL(disconnected()), this, SLOT(onSocketDisconnected()));
+ connect(mSocket, SIGNAL(error(QLocalSocket::LocalSocketError)), this, SLOT(onSocketError(QLocalSocket::LocalSocketError)));
mStream = new JsonStream(mSocket);
if (mStream) {
connect(mStream, SIGNAL(messageReceived(const QJsonObject&)), this, SLOT(onStreamReceived(const QJsonObject&)), Qt::QueuedConnection);
@@ -349,6 +350,34 @@ void QGeoPositionInfoSourceNpeBackend::onStreamReceived(const QJsonObject& jsonO
}
+QGeoPositionInfoSource::Error QGeoPositionInfoSourceNpeBackend::error() const
+{
+ return mPositionError;
+}
+
+
+void QGeoPositionInfoSourceNpeBackend::setError(QGeoPositionInfoSource::Error positionError)
+{
+ mPositionError = positionError;
+ emit QGeoPositionInfoSource::error(positionError);
+}
+
+
+void QGeoPositionInfoSourceNpeBackend::onSocketError(QLocalSocket::LocalSocketError mError)
+{
+ switch (mError) {
+ case QLocalSocket::PeerClosedError:
+ setError(ClosedError);
+ break;
+ case QLocalSocket::SocketAccessError:
+ setError(AccessError);
+ break;
+ default:
+ setError(UnknownSourceError);
+ }
+}
+
+
void QGeoPositionInfoSourceNpeBackend::onSocketConnected()
{
}
diff --git a/src/location/qgeopositioninfosource_npe_backend_p.h b/src/location/qgeopositioninfosource_npe_backend_p.h
index 64146016..5b72fedb 100644
--- a/src/location/qgeopositioninfosource_npe_backend_p.h
+++ b/src/location/qgeopositioninfosource_npe_backend_p.h
@@ -78,6 +78,7 @@ public:
QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const;
PositioningMethods supportedPositioningMethods() const;
int minimumUpdateInterval() const;
+ Error error() const;
public Q_SLOTS:
void startUpdates();
@@ -93,6 +94,8 @@ private:
bool locationOngoing;
bool timeoutSent;
QTimer* requestTimer;
+ QGeoPositionInfoSource::Error mPositionError;
+ void setError(QGeoPositionInfoSource::Error positionError);
void shutdownRequestSession();
Q_SIGNALS:
@@ -104,6 +107,7 @@ private Q_SLOTS:
void onStreamReceived(const QJsonObject &jsonObject);
void onSocketConnected();
void onSocketDisconnected();
+ void onSocketError(QLocalSocket::LocalSocketError);
void requestTimerExpired();
};
diff --git a/src/location/qgeopositioninfosource_simulator.cpp b/src/location/qgeopositioninfosource_simulator.cpp
index 2f3d450f..f1b213d0 100644
--- a/src/location/qgeopositioninfosource_simulator.cpp
+++ b/src/location/qgeopositioninfosource_simulator.cpp
@@ -78,6 +78,7 @@ QGeoPositionInfoSourceSimulator::QGeoPositionInfoSourceSimulator(QObject *parent
: QGeoPositionInfoSource(parent)
, timer(new QTimer(this))
, requestTimer(new QTimer(this))
+ , m_positionError(QGeoPositionInfoSource::UnknownSourceError)
{
Simulator::LocationConnection::ensureSimulatorConnection();
@@ -156,6 +157,18 @@ void QGeoPositionInfoSourceSimulator::updatePosition()
}
}
+QGeoPositionInfoSource::Error QGeoPositionInfoSourceSimulator::error() const
+{
+ return m_positionError;
+}
+
+
+void QGeoPositionInfoSourceSimulator::setError(QGeoPositionInfoSource::Error positionError)
+{
+ m_positionError = positionError;
+ emit QGeoPositionInfoSource::error(positionError);
+}
+
#include "moc_qgeopositioninfosource_simulator_p.cpp"
QT_END_NAMESPACE
diff --git a/src/location/qgeopositioninfosource_simulator_p.h b/src/location/qgeopositioninfosource_simulator_p.h
index f019ad32..f696ac8a 100644
--- a/src/location/qgeopositioninfosource_simulator_p.h
+++ b/src/location/qgeopositioninfosource_simulator_p.h
@@ -63,6 +63,7 @@ public:
void setUpdateInterval(int msec);
int minimumUpdateInterval() const;
+ Error error() const;
public Q_SLOTS:
void startUpdates();
@@ -77,6 +78,8 @@ private:
QTimer *timer;
QTimer *requestTimer;
QGeoPositionInfo lastPosition;
+ QGeoPositionInfoSource::Error m_positionError;
+ void setError(QGeoPositionInfoSource::Error positionError);
};
QT_END_NAMESPACE
diff --git a/src/location/qgeosatelliteinfosource.cpp b/src/location/qgeosatelliteinfosource.cpp
index ecdd353a..739ff1af 100644
--- a/src/location/qgeosatelliteinfosource.cpp
+++ b/src/location/qgeosatelliteinfosource.cpp
@@ -318,8 +318,8 @@ int QGeoSatelliteInfoSource::updateInterval() const
from the system's default source of satellite update information, or the
highest priority available plugin.
- Returns 0 if the system has no default source and no valid plugins
- could be found.
+ Returns 0 if the system has no default position source, no valid plugins
+ could be found or the user does not have the permission to access the satellite data.
*/
QGeoSatelliteInfoSource *QGeoSatelliteInfoSource::createDefaultSource(QObject *parent)
{
@@ -481,6 +481,28 @@ QStringList QGeoSatelliteInfoSource::availableSources()
information could not be retrieved within the specified timeout.
*/
+/*!
+ \fn void QGeoSatelliteInfoSource::error(QGeoSatelliteInfoSource::Error satelliteError)
+
+ This signal is emitted after an error occurred. The \a satelliteError
+ parameter describes the type of error that occurred.
+
+*/
+
+/*!
+ \enum QGeoSatelliteInfoSource::Error
+
+ The Error enumeration represents the errors which can occur.
+
+ \value AccessError The connection setup to the remote positioning backend failed because the
+ application lacked the required privileges.
+ \value ClosedError The remote satellite backend closed the connection, which happens e.g. in case
+ the user is switching location services to off. This object becomes invalid and should be deleted.
+ A new satellite source can be created by calling createDefaultSource() later on.
+ \value UnknownSourceError An unidentified error occurred.
+ */
+
+
#include "moc_qgeosatelliteinfosource.cpp"
QT_END_NAMESPACE
diff --git a/src/location/qgeosatelliteinfosource.h b/src/location/qgeosatelliteinfosource.h
index 79bf67f5..e4f4c3a5 100644
--- a/src/location/qgeosatelliteinfosource.h
+++ b/src/location/qgeosatelliteinfosource.h
@@ -59,6 +59,13 @@ class Q_LOCATION_EXPORT QGeoSatelliteInfoSource : public QObject
Q_PROPERTY(int minimumUpdateInterval READ minimumUpdateInterval)
public:
+ enum Error {
+ AccessError,
+ ClosedError, /* 1 */
+ UnknownSourceError = -1
+ };
+ Q_ENUMS(Error)
+
explicit QGeoSatelliteInfoSource(QObject *parent);
virtual ~QGeoSatelliteInfoSource();
@@ -69,6 +76,7 @@ public:
virtual void setUpdateInterval(int msec);
int updateInterval() const;
virtual int minimumUpdateInterval() const = 0;
+ virtual Error error() const = 0;
public Q_SLOTS:
virtual void startUpdates() = 0;
@@ -80,6 +88,7 @@ Q_SIGNALS:
void satellitesInViewUpdated(const QList<QGeoSatelliteInfo> &satellites);
void satellitesInUseUpdated(const QList<QGeoSatelliteInfo> &satellites);
void requestTimeout();
+ void error(QGeoSatelliteInfoSource::Error);
private:
Q_DISABLE_COPY(QGeoSatelliteInfoSource)
diff --git a/src/location/qgeosatelliteinfosource_npe_backend.cpp b/src/location/qgeosatelliteinfosource_npe_backend.cpp
index ac99ffa0..dfac72c6 100644
--- a/src/location/qgeosatelliteinfosource_npe_backend.cpp
+++ b/src/location/qgeosatelliteinfosource_npe_backend.cpp
@@ -74,7 +74,7 @@ const QString kinterval = QLatin1String("interval");
QGeoSatelliteInfoSourceNpeBackend::QGeoSatelliteInfoSourceNpeBackend(QObject *parent): QGeoSatelliteInfoSource(parent),
- satOngoing(false)
+ satOngoing(false), mSatelliteError(QGeoSatelliteInfoSource::UnknownSourceError)
{
requestTimer = new QTimer(this);
QObject::connect(requestTimer, SIGNAL(timeout()), this, SLOT(requestTimerExpired()));
@@ -90,6 +90,7 @@ bool QGeoSatelliteInfoSourceNpeBackend::init()
if (mSocket) {
connect(mSocket, SIGNAL(connected()), this, SLOT(onSocketConnected()));
connect(mSocket, SIGNAL(disconnected()), this, SLOT(onSocketDisconnected()));
+ connect(mSocket, SIGNAL(error(QLocalSocket::LocalSocketError)), this, SLOT(onSocketError(QLocalSocket::LocalSocketError)));
mStream = new JsonStream(mSocket);
if (mStream) {
connect(mStream, SIGNAL(messageReceived(const QJsonObject&)), this, SLOT(onStreamReceived(const QJsonObject&)), Qt::QueuedConnection);
@@ -266,6 +267,34 @@ void QGeoSatelliteInfoSourceNpeBackend::onStreamReceived(const QJsonObject& json
}
+QGeoSatelliteInfoSource::Error QGeoSatelliteInfoSourceNpeBackend::error() const
+{
+ return mSatelliteError;
+}
+
+
+void QGeoSatelliteInfoSourceNpeBackend::setError(QGeoSatelliteInfoSource::Error satelliteError)
+{
+ mSatelliteError = satelliteError;
+ emit QGeoSatelliteInfoSource::error(satelliteError);
+}
+
+
+void QGeoSatelliteInfoSourceNpeBackend::onSocketError(QLocalSocket::LocalSocketError mError)
+{
+ switch (mError) {
+ case QLocalSocket::PeerClosedError:
+ setError(ClosedError);
+ break;
+ case QLocalSocket::SocketAccessError:
+ setError(AccessError);
+ break;
+ default:
+ setError(UnknownSourceError);
+ }
+}
+
+
void QGeoSatelliteInfoSourceNpeBackend::onSocketConnected()
{
}
diff --git a/src/location/qgeosatelliteinfosource_npe_backend_p.h b/src/location/qgeosatelliteinfosource_npe_backend_p.h
index a1d6aafe..a5e9b4c5 100644
--- a/src/location/qgeosatelliteinfosource_npe_backend_p.h
+++ b/src/location/qgeosatelliteinfosource_npe_backend_p.h
@@ -76,6 +76,7 @@ public:
bool init();
void setUpdateInterval(int interval);
int minimumUpdateInterval() const;
+ Error error() const;
public Q_SLOTS:
void startUpdates();
@@ -92,6 +93,7 @@ private Q_SLOTS:
void onSocketDisconnected();
void requestTimerExpired();
void shutdownRequestSession();
+ void onSocketError(QLocalSocket::LocalSocketError);
private:
QLocalSocket* mSocket;
@@ -99,6 +101,8 @@ private:
bool satOngoing;
QTimer* requestTimer;
int minInterval;
+ QGeoSatelliteInfoSource::Error mSatelliteError;
+ void setError(QGeoSatelliteInfoSource::Error satelliteError);
};
#endif // QGEOSATELLITEINFOSOURCE_NPE_BACKEND_H
diff --git a/src/location/qgeosatelliteinfosource_simulator_p.h b/src/location/qgeosatelliteinfosource_simulator_p.h
index 3022b5e0..0d76a375 100644
--- a/src/location/qgeosatelliteinfosource_simulator_p.h
+++ b/src/location/qgeosatelliteinfosource_simulator_p.h
@@ -63,6 +63,8 @@ public:
virtual void setUpdateInterval(int msec);
virtual int minimumUpdateInterval() const;
+ // Default implementation for error()
+ Error error() const { return QGeoSatelliteInfoSource::UnknownSourceError; }
public slots:
virtual void startUpdates();
virtual void stopUpdates();
diff --git a/src/location/qnmeapositioninfosource.cpp b/src/location/qnmeapositioninfosource.cpp
index fb02c417..760a06d4 100644
--- a/src/location/qnmeapositioninfosource.cpp
+++ b/src/location/qnmeapositioninfosource.cpp
@@ -198,6 +198,7 @@ void QNmeaSimulatedReader::processNextSentence()
QNmeaPositionInfoSourcePrivate::QNmeaPositionInfoSourcePrivate(QNmeaPositionInfoSource *parent)
: QObject(parent),
m_invokedStart(false),
+ m_positionError(QGeoPositionInfoSource::UnknownSourceError),
m_source(parent),
m_nmeaReader(0),
m_updateTimer(0),
@@ -604,6 +605,17 @@ int QNmeaPositionInfoSource::minimumUpdateInterval() const
return 100;
}
+QGeoPositionInfoSource::Error QNmeaPositionInfoSource::error() const
+{
+ return d->m_positionError;
+}
+
+void QNmeaPositionInfoSource::setError(QGeoPositionInfoSource::Error positionError)
+{
+ d->m_positionError = positionError;
+ emit QGeoPositionInfoSource::error(positionError);
+}
+
#include "moc_qnmeapositioninfosource.cpp"
#include "moc_qnmeapositioninfosource_p.cpp"
diff --git a/src/location/qnmeapositioninfosource.h b/src/location/qnmeapositioninfosource.h
index 0e711052..cd1ca227 100644
--- a/src/location/qnmeapositioninfosource.h
+++ b/src/location/qnmeapositioninfosource.h
@@ -74,6 +74,8 @@ public:
QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const;
PositioningMethods supportedPositioningMethods() const;
int minimumUpdateInterval() const;
+ Error error() const;
+
public Q_SLOTS:
void startUpdates();
@@ -90,6 +92,7 @@ private:
Q_DISABLE_COPY(QNmeaPositionInfoSource)
friend class QNmeaPositionInfoSourcePrivate;
QNmeaPositionInfoSourcePrivate *d;
+ void setError(QGeoPositionInfoSource::Error positionError);
};
QT_END_NAMESPACE
diff --git a/src/location/qnmeapositioninfosource_p.h b/src/location/qnmeapositioninfosource_p.h
index 1e6ed221..9094ce80 100644
--- a/src/location/qnmeapositioninfosource_p.h
+++ b/src/location/qnmeapositioninfosource_p.h
@@ -95,6 +95,7 @@ public:
QPointer<QIODevice> m_device;
QGeoPositionInfo m_lastUpdate;
bool m_invokedStart;
+ QGeoPositionInfoSource::Error m_positionError;
public Q_SLOTS:
void readyRead();
diff --git a/tests/auto/positionplugin/plugin.cpp b/tests/auto/positionplugin/plugin.cpp
index 5ff882f4..b2457acc 100644
--- a/tests/auto/positionplugin/plugin.cpp
+++ b/tests/auto/positionplugin/plugin.cpp
@@ -64,6 +64,7 @@ public:
void setUpdateInterval(int msec);
int minimumUpdateInterval() const;
+ Error error() const;
private:
QTimer *timer;
@@ -92,6 +93,12 @@ DummySource::DummySource(QObject *parent) :
this, SLOT(doTimeout()));
}
+QGeoPositionInfoSource::Error DummySource::error() const
+{
+ return QGeoPositionInfoSource::UnknownSourceError;
+}
+
+
void DummySource::setUpdateInterval(int msec)
{
if (msec == 0) {
diff --git a/tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp b/tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp
index 64dbd9be..62132b5d 100644
--- a/tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp
+++ b/tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp
@@ -102,6 +102,8 @@ public:
virtual void requestUpdate(int) {}
+ Error error() const { return QGeoPositionInfoSource::UnknownSourceError; }
+
private:
PositioningMethods m_methods;
};
diff --git a/tests/auto/qgeosatelliteinfosource/testqgeosatelliteinfosource.cpp b/tests/auto/qgeosatelliteinfosource/testqgeosatelliteinfosource.cpp
index 933205f5..90c15332 100644
--- a/tests/auto/qgeosatelliteinfosource/testqgeosatelliteinfosource.cpp
+++ b/tests/auto/qgeosatelliteinfosource/testqgeosatelliteinfosource.cpp
@@ -82,6 +82,7 @@ public:
virtual int minimumUpdateInterval() const {
return 0;
}
+ Error error() const { return QGeoSatelliteInfoSource::UnknownSourceError; }
};