summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex <qt-info@nokia.com>2009-08-31 14:10:25 +1000
committerAlex <qt-info@nokia.com>2009-08-31 14:10:25 +1000
commitca09f9d8e1ff3d7537e877e5f65c3f92dd9ca8d0 (patch)
treedcc1c2816c02cd3308a45ca85ae90a9c877f6eea
parenta650adf66badffb45a94256b66b69c144a771520 (diff)
parentdb356fd60bf54d9f7f31af03d4a349fc51ac449c (diff)
Merge branch 'master' of ../location
Conflicts: README bin/rununittests.sh common.pri doc/html/index.html doc/src/index.qdoc examples/examples.pro tests/auto/auto.pro tests/tests.pro
-rw-r--r--README51
-rwxr-xr-xbin/purge.sh2
-rwxr-xr-xbin/rununittests.sh8
-rw-r--r--common.pri7
-rw-r--r--doc/html/index.html175
-rw-r--r--doc/html/qgeoareamonitor-members.html81
-rw-r--r--doc/html/qgeoareamonitor.html118
-rw-r--r--doc/html/qgeocoordinate-members.html49
-rw-r--r--doc/html/qgeocoordinate.html156
-rw-r--r--doc/html/qgeopositioninfo-members.html45
-rw-r--r--doc/html/qgeopositioninfo.html117
-rw-r--r--doc/html/qgeopositioninfosource-members.html90
-rw-r--r--doc/html/qgeopositioninfosource.html160
-rw-r--r--doc/html/qnmeapositioninfosource-members.html94
-rw-r--r--doc/html/qnmeapositioninfosource.html125
-rw-r--r--doc/html/qsatelliteinfo-members.html39
-rw-r--r--doc/html/qsatelliteinfo.html102
-rw-r--r--doc/html/qsatelliteinfosource-members.html81
-rw-r--r--doc/html/qsatelliteinfosource.html103
-rw-r--r--doc/html/qservicefilter.html8
-rw-r--r--doc/html/qserviceinterfacedescriptor.html8
-rw-r--r--doc/html/qt-mobility-library.dcf134
-rw-r--r--doc/html/qt-mobility-library.index719
-rw-r--r--doc/src/index.qdoc132
-rw-r--r--doc/src/qtmobility.qdocconf3
-rw-r--r--examples/examples.pro8
-rw-r--r--examples/fetchgooglemaps/fetchgooglemaps.pro15
-rw-r--r--examples/fetchgooglemaps/main.cpp46
-rw-r--r--examples/fetchgooglemaps/mapwindow.cpp116
-rw-r--r--examples/fetchgooglemaps/mapwindow.h65
-rw-r--r--examples/fetchgooglemaps/nmealog.txt1403
-rw-r--r--examples/logfilepositionsource/clientapplication.cpp52
-rw-r--r--examples/logfilepositionsource/clientapplication.h51
-rw-r--r--examples/logfilepositionsource/logfilepositionsource.cpp111
-rw-r--r--examples/logfilepositionsource/logfilepositionsource.h67
-rw-r--r--examples/logfilepositionsource/logfilepositionsource.pro17
-rw-r--r--examples/logfilepositionsource/main.cpp44
-rw-r--r--examples/logfilepositionsource/simplelog.txt156
-rw-r--r--location.pro3
-rw-r--r--location/location.pro56
-rw-r--r--location/notificationcallback_s60_p.h50
-rw-r--r--location/qgeoareamonitor.cpp160
-rw-r--r--location/qgeoareamonitor.h74
-rw-r--r--location/qgeocoordinate.cpp550
-rw-r--r--location/qgeocoordinate.h111
-rw-r--r--location/qgeopositioninfo.cpp292
-rw-r--r--location/qgeopositioninfo.h109
-rw-r--r--location/qgeopositioninfosource.cpp255
-rw-r--r--location/qgeopositioninfosource.h96
-rw-r--r--location/qgeopositioninfosource_s60.cpp947
-rw-r--r--location/qgeopositioninfosource_s60_p.h274
-rw-r--r--location/qlocationglobal.h65
-rw-r--r--location/qlocationutils.cpp353
-rw-r--r--location/qlocationutils_p.h96
-rw-r--r--location/qmlbackendao_s60.cpp426
-rw-r--r--location/qmlbackendao_s60_p.h145
-rw-r--r--location/qnmeapositioninfosource.cpp555
-rw-r--r--location/qnmeapositioninfosource.h92
-rw-r--r--location/qnmeapositioninfosource_p.h174
-rw-r--r--location/qsatelliteinfo.cpp220
-rw-r--r--location/qsatelliteinfo.h89
-rw-r--r--location/qsatelliteinfosource.cpp128
-rw-r--r--location/qsatelliteinfosource.h76
-rw-r--r--tests/auto/auto.pro12
-rw-r--r--tests/auto/qgeopositioninfosourcesubclasstest.cpp409
-rw-r--r--tests/auto/qgeopositioninfosourcesubclasstest_p.h110
-rw-r--r--tests/auto/qlocationtestutils.cpp88
-rw-r--r--tests/auto/qlocationtestutils_p.h60
-rw-r--r--tests/auto/qnmeapositioninfosourceproxyfactory.cpp93
-rw-r--r--tests/auto/qnmeapositioninfosourceproxyfactory.h75
-rw-r--r--tests/auto/tst_qgeoareamonitor/tst_qgeoareamonitor.cpp100
-rw-r--r--tests/auto/tst_qgeoareamonitor/tst_qgeoareamonitor.pro17
-rw-r--r--tests/auto/tst_qgeocoordinate/tst_qgeocoordinate.cpp828
-rw-r--r--tests/auto/tst_qgeocoordinate/tst_qgeocoordinate.pro19
-rw-r--r--tests/auto/tst_qgeopositioninfo/tst_qgeopositioninfo.cpp375
-rw-r--r--tests/auto/tst_qgeopositioninfo/tst_qgeopositioninfo.pro17
-rw-r--r--tests/auto/tst_qgeopositioninfosource/tst_qgeopositioninfosource.cpp127
-rw-r--r--tests/auto/tst_qgeopositioninfosource/tst_qgeopositioninfosource.pro17
-rw-r--r--tests/auto/tst_qlocationutils/tst_qlocationutils.cpp407
-rw-r--r--tests/auto/tst_qlocationutils/tst_qlocationutils.pro17
-rw-r--r--tests/auto/tst_qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp349
-rw-r--r--tests/auto/tst_qnmeapositioninfosource/tst_qnmeapositioninfosource.pro21
-rw-r--r--tests/auto/tst_qnmeapositioninfosource_realtime/tst_qnmeapositioninfosource_realtime.cpp56
-rw-r--r--tests/auto/tst_qnmeapositioninfosource_realtime/tst_qnmeapositioninfosource_realtime.pro23
-rw-r--r--tests/auto/tst_qnmeapositioninfosource_sim/tst_qnmeapositioninfosource_sim.cpp56
-rw-r--r--tests/auto/tst_qnmeapositioninfosource_sim/tst_qnmeapositioninfosource_sim.pro23
-rw-r--r--tests/auto/tst_qsatelliteinfo/tst_qsatelliteinfo.cpp339
-rw-r--r--tests/auto/tst_qsatelliteinfo/tst_qsatelliteinfo.pro17
-rw-r--r--tests/auto/tst_qsatelliteinfosource/tst_qsatelliteinfosource.cpp49
-rw-r--r--tests/auto/tst_qsatelliteinfosource/tst_qsatelliteinfosource.pro17
90 files changed, 13575 insertions, 300 deletions
diff --git a/README b/README
deleted file mode 100644
index a4f706add5..0000000000
--- a/README
+++ /dev/null
@@ -1,51 +0,0 @@
-The Qt Mobility project provides Qt API's for mobile development environments such as
-mobile phones and laptops. Unless stated otherwise Qt 4.5 is the minimal requirement
-to compile this library.
-
-1. Qt ServiceFramework
-
-The API provides a framework for the registration, discovery and
-invocation of arbitrary services. Currently services are plug-in based.
-
-Supported Platforms:
- Windows
- Windows Mobile
- Unix/Linux
- Mac
- S6O (version 3.1+)
- Maemo
-
-2. Bearer Management
-
-This API enables control of a systems connectivity state.
-
-Supported Platforms:
- Linux/NetworkManager
- -uses NetworkManager (http://projects.gnome.org/NetworkManager/)
- -no polling
- -start/stop of interfaces
- Windows XP
-        -QNetworkInterface + NLA (i.e no polling)
-        -Simple Wifi monitoring
- Windows XP SP2+Hotfixes
- Windows XP SP3
- Windows Vista
- Windows 7
-        -QNetworkInterface + NLA (i.e. no polling)
-        -Wifi with bearer management (only works when Windows manages wifi, otherwise)
-        -Simple Wifi monitoring
- Windows CE 6
-        -QNetworkInterface + Polling
-        -Work in progress
- Symbian/S60 3.1
- -RConnection
- -no roaming or ServiceNetwork support
- Symbian/S60 3.2
- Symbian/S60 5.0
- -RConnection
- -complete feature set
- -Roaming (requires OpenC 1.5+)
- Generic
- -QNetworkInterface + Polling
- -Work in progress
-
diff --git a/bin/purge.sh b/bin/purge.sh
index 80790f319f..bc8f92ad9f 100755
--- a/bin/purge.sh
+++ b/bin/purge.sh
@@ -2,4 +2,4 @@
make clean
find . -name "Makefile*" |xargs rm
-rm -rf build
+rm -rf build include
diff --git a/bin/rununittests.sh b/bin/rununittests.sh
index 982619789d..14fb7049e1 100755
--- a/bin/rununittests.sh
+++ b/bin/rununittests.sh
@@ -19,6 +19,14 @@ LD_LIBRARY_PATH=$shell_path/../build/Debug/bin:$LD_LIBRARY_PATH
./tst_qnetworkconfiguration
./tst_qnetworkconfigurationmanager
./tst_qnetworksession
+./tst_qgeocoordinate
+./tst_qgeopositioninfo
+./tst_qsatelliteinfo
+./tst_qsatelliteinfosource
+./tst_qgeopositioninfosource
+./tst_qgeoareamonitor
+./tst_qlocationutils
+./tst_qnmeapositioninfosource
cd $SAVED_PWD
diff --git a/common.pri b/common.pri
index e3d50c84e3..75c959e2d5 100644
--- a/common.pri
+++ b/common.pri
@@ -44,14 +44,12 @@ SOURCE_DIR = $$PWD
RCC_DIR = $$OUTPUT_DIR/build/tests/$$SUBDIRPART/$$TARGET/rcc
UI_DIR = $$OUTPUT_DIR/build/tests/$$SUBDIRPART/$$TARGET/ui
LIBS += -L$$OUTPUT_DIR/build/$$SUBDIRPART/bin #link against library that we test
-
symbian {
#The default include path doesn't include MOC_DIR on symbian
INCLUDEPATH += $$MOC_DIR
}
}
-#TODO
wince* {
BEARERLIB.sources = $$OUTPUT_DIR/build/$$SUBDIRPART/bin/bearer.dll
BEARERLIB.path = .
@@ -63,8 +61,3 @@ LIBS += -L$$DESTDIR
DEPENDPATH += . $$SOURCE_DIR
INCLUDEPATH += . $$SOURCE_DIR
-
-#For some reason the default include path doesn't include MOC_DIR on symbian
-symbian {
- INCLUDEPATH += $$MOC_DIR
-}
diff --git a/doc/html/index.html b/doc/html/index.html
index b058c6b2ea..3a979ee73e 100644
--- a/doc/html/index.html
+++ b/doc/html/index.html
@@ -4,7 +4,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<!-- ./index.qdoc -->
<head>
- <title></title>
+ <title>Qt Mobility Developer Resources</title>
<link href="classic.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -12,7 +12,7 @@
<tr>
<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
-<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title"><br /><span class="subtitle"></span>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">Qt Mobility Developer Resources<br /><span class="subtitle"></span>
</h1>
<ul><li><a href="#qt-service-framework">Qt Service Framework</a></li>
<ul><li><a href="#introduction">Introduction</a></li>
@@ -42,6 +42,14 @@
<li><a href="#platform-capabilities">Platform capabilities</a></li>
</ul>
</ul>
+<li><a href="#location">Location</a></li>
+<ul><li><a href="#introduction">Introduction</a></li>
+<li><a href="#requesting-location-data-from-data-sources">Requesting location data from data sources</a></li>
+<ul><li><a href="#controlling-aspects-of-data-sources">Controlling aspects of data sources</a></li>
+<li><a href="#reading-nmea-data">Reading NMEA data</a></li>
+</ul>
+<li><a href="#creating-a-custom-location-data-source">Creating a custom location data source</a></li>
+</ul>
<li><a href="#building-and-compiling">Building and compiling</a></li>
<li><a href="#reference-documentation">Reference documentation</a></li>
<ul><li><a href="#main-classes">Main classes</a></li>
@@ -243,6 +251,160 @@
<tr valign="top" class="odd"><td>Symbian Platform &amp; S60 3.2+</td><td>This platform enjoys the most comprehensive feature set. In addition to the features support by the S60 3.1 Network roaming is supported.</td></tr>
<tr valign="top" class="even"><td>All other platforms (*nix, Mac OS&#xae;, Windows Mobile)</td><td>This backend is the fallback for all platforms supports network interface notifications via active polling only.</td></tr>
</table></p>
+<a name="location"></a>
+<h2>Location</h2>
+<a name="introduction"></a>
+<h3>Introduction</h3>
+<p>The Location API provides a library for distributing and receiving location data using arbitrary data sources.</p>
+<p>Location data involves a precisely specified position on the Earth's surface &#x2014; as provided by a latitude-longitude coordinate &#x2014; along with associated data, such as:</p>
+<ul>
+<li>The date and time at which the position was reported</li>
+<li>The velocity of the device that reported the position</li>
+<li>The altitude of the reported position (height above sea level)</li>
+<li>The bearing of the device in degrees, relative to true north</li>
+</ul>
+<p>This data can be extracted through a variety of methods. One of the most well known methods of positioning is GPS (Global Positioning System), a publicly available system that uses radiowave signals received from Earth-orbiting satellites to calculate the precise position and time of the receiver. Another popular method is Cell ID positioning, which uses the cell ID of the cell site that is currently serving the receiving device to calculate its approximate location. These and other positioning methods can all be used with the Location API; the only requirement for a location data source within the API is that it provides a latitude-longitude coordinate with a date/time value, with the option of providing the other attributes listed above.</p>
+<p>Location data sources are created by subclassing <a href="qgeopositioninfosource.html">QGeoPositionInfoSource</a> and providing <a href="qgeopositioninfo.html">QGeoPositionInfo</a> objects through the <a href="qgeopositioninfosource.html#positionUpdated">QGeoPositionInfoSource::positionUpdated</a>() signal. Clients that require location data can connect to the <a href="qgeopositioninfosource.html#positionUpdated">positionUpdated()</a> signal and call <a href="qgeopositioninfosource.html#startUpdates">startUpdates()</a> or <a href="qgeopositioninfosource.html#requestUpdate">requestUpdate()</a> to trigger the distribution of location data.</p>
+<p>A default position source may be available on some platforms. Call <a href="qgeopositioninfosource.html#createSource">QGeoPositionInfoSource::createSource</a>() to create an instance of the default position source; the method returns 0 if no default source is available for the platform.</p>
+<p>The <a href="qgeoareamonitor.html">QGeoAreaMonitor</a> class enables client applications to be notified when the receiving device has moved in or out of a particular area, as specified by a coordinate and radius. If the platform provides built-in support for area monitoring, <a href="qgeoareamonitor.html#createMonitor">QGeoAreaMonitor::createMonitor</a>() returns an instance of the default area monitor.</p>
+<p>Satellite information can also be distributed through the <a href="qsatelliteinfosource.html">QSatelliteInfoSource</a> class. Call <a href="qsatelliteinfosource.html#createSource">QSatelliteInfoSource::createSource</a>() to create an instance of the default satellite data source for the platform, if one is available. Alternatively, clients can subclass it to provide a custom satellite data source.</p>
+<a name="requesting-location-data-from-data-sources"></a>
+<h3>Requesting location data from data sources</h3>
+<p>To receive data from a source, connect to its <a href="qgeopositioninfosource.html#positionUpdated">positionUpdated()</a> signal, then call either <a href="qgeopositioninfosource.html#startUpdates">startUpdates()</a> or <a href="qgeopositioninfosource.html#requestUpdate">requestUpdate()</a> to begin.</p>
+<p>Here is an example of a client that receives data from the default location data source, as returned by <a href="qgeopositioninfosource.html#createSource">QGeoPositionInfoSource::createSource</a>():</p>
+<pre> class MyClass : public QObject
+ {
+ Q_OBJECT
+ public:
+ MyClass(QObject *parent = 0)
+ : QObject(parent)
+ {
+ QGeoPositionInfoSource *source = QGeoPositionInfoSource::createSource();
+ if (source) {
+ connect(source, SIGNAL(positionUpdated(QGeoPositionInfo)),
+ this, SLOT(positionUpdated(QGeoPositionInfo)));
+ source-&gt;startUpdates();
+ }
+ }
+
+ private slots:
+ void positionUpdated(const QGeoPositionInfo &amp;info)
+ {
+ qDebug() &lt;&lt; &quot;Position updated:&quot; &lt;&lt; info;
+ }
+ };</pre>
+<a name="controlling-aspects-of-data-sources"></a>
+<h4>Controlling aspects of data sources</h4>
+<p>The <a href="qgeopositioninfosource.html#setUpdateInterval">QGeoPositionInfoSource::setUpdateInterval</a>() method can be used to control the rate at which position updates are received. For example, if the client application only requires updates once every 30 seconds, it can call <tt>setUpdateInterval(30000)</tt>. (If no update interval is set, or setUpdateInterval() is called with a value of 0, the source uses a default interval or some other internal logic to determine when updates should be provided.)</p>
+<p><a href="qgeopositioninfosource.html#setPreferredPositioningMethods">QGeoPositionInfoSource::setPreferredPositioningMethods</a>() enables client applications to request that a certain type of positioning method be used. For example, if the application prefers to use only satellite positioning, which offers fairly precise outdoor positioning but can be a heavy user of power resources, it can call this method with the <a href="qgeopositioninfosource.html#PositioningMethod-enum">QGeoPositionInfoSource::SatellitePositioningMethods</a> value. However, this method should only be used in specialized client applications; in most cases, the default positioning methods should not be changed, as a source may internally use a variety of positioning methods that can be useful to the application.</p>
+<a name="reading-nmea-data"></a>
+<h4>Reading NMEA data</h4>
+<p><a href="http://en.wikipedia.org/wiki/NMEA_0183">NMEA</a> is a common text-based protocol for specifying navigational data. For convenience, the <a href="qnmeapositioninfosource.html">QNmeaPositionInfoSource</a> is provided to enable client applications to read and distribute NMEA data in either real-time mode (for example, when streaming from a GPS device) or simulation mode (for example, when reading from a NMEA log file). In simulation mode, the source will emit updates according to the time stamp of each NMEA sentence to produce a &quot;replay&quot; of the recorded data.</p>
+<a name="creating-a-custom-location-data-source"></a>
+<h3>Creating a custom location data source</h3>
+<p>Generally, the capabilities provided by the default position source as returned by <a href="qgeopositioninfosource.html#createSource">QGeoPositionInfoSource::createSource</a>(), along with the <a href="qnmeapositioninfosource.html">QNmeaPositionInfoSource</a> class, are sufficient for retrieving location data. However, in some cases developers may wish to write their own custom location data sources.</p>
+<p>The <tt>LogFilePositionSource</tt> class in <tt>examples/logfilepositionsource</tt> shows how to subclass <a href="qgeopositioninfosource.html">QGeoPositionInfoSource</a> to create a custom location data source.</p>
+<p>This example class reads location data from a text file, <i>log.txt</i>. The file specifies location data using a simple text format: it contains one location update per line, where each line contains a date/time, a latitude and a longitude, separated by spaces. The date/time is in ISO 8601 format and the latitude and longitude are in degrees decimal format. Here is an excerpt from <i>log.txt</i>:</p>
+<pre> 2009-08-24T22:25:01 -27.576082 153.092415
+ 2009-08-24T22:25:02 -27.576223 153.092530
+ 2009-08-24T22:25:03 -27.576364 153.092648</pre>
+<p>The class reads this data and distributes it via the <a href="qgeopositioninfosource.html#positionUpdated">positionUpdated()</a> signal.</p>
+<p>Here is the definition of the <tt>LogFilePositionSource</tt> class:</p>
+<pre> class LogFilePositionSource : public QGeoPositionInfoSource
+ {
+ Q_OBJECT
+ public:
+ LogFilePositionSource(QObject *parent = 0);
+
+ QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const;
+
+ PositioningMethods supportedPositioningMethods() const;
+ int minimumUpdateInterval() const;
+
+ public slots:
+ virtual void startUpdates();
+ virtual void stopUpdates();
+
+ virtual void requestUpdate(int timeout = 5000);
+
+ private slots:
+ void readNextPosition();
+
+ private:
+ QFile *logFile;
+ QTimer *timer;
+ QGeoPositionInfo lastPosition;
+ };</pre>
+<p>The main methods overrided by the subclass are:</p>
+<ul>
+<li><a href="qgeopositioninfosource.html#startUpdates">startUpdates()</a>: called by client applications to start regular position updates</li>
+<li><a href="qgeopositioninfosource.html#stopUpdates">stopUpdates()</a>: called by client applications to stop regular position updates</li>
+<li><a href="qgeopositioninfosource.html#requestUpdate">requestUpdate()</a>: called by client applications to request a single update, with a specified timeout</li>
+</ul>
+<p>When a position update is available, the subclass emits the <a href="qgeopositioninfosource.html#positionUpdated">positionUpdated()</a> signal.</p>
+<p>Here are the key methods in the class implementation:</p>
+<pre> LogFilePositionSource::LogFilePositionSource(QObject *parent)
+ : QGeoPositionInfoSource(parent),
+ logFile(new QFile(this)),
+ timer(new QTimer(this))
+ {
+ connect(timer, SIGNAL(timeout()), this, SLOT(readNextPosition()));
+
+ logFile-&gt;setFileName(QCoreApplication::applicationDirPath()
+ + QDir::separator() + &quot;simplelog.txt&quot;);
+ if (!logFile-&gt;open(QIODevice::ReadOnly))
+ qWarning() &lt;&lt; &quot;Error: cannot open source file&quot; &lt;&lt; logFile-&gt;fileName();
+ }
+
+ void LogFilePositionSource::startUpdates()
+ {
+ int interval = updateInterval();
+ if (interval &lt; minimumUpdateInterval())
+ interval = minimumUpdateInterval();
+
+ timer-&gt;start(interval);
+ }
+
+ void LogFilePositionSource::stopUpdates()
+ {
+ timer-&gt;stop();
+ }
+
+ void LogFilePositionSource::requestUpdate(int <span class="comment">/*timeout*/</span>)
+ {
+ <span class="comment">// For simplicity, ignore timeout - assume that if data is not available</span>
+ <span class="comment">// now, no data will be added to the file later</span>
+ if (logFile-&gt;canReadLine())
+ readNextPosition();
+ else
+ emit requestTimeout();
+ }
+
+ void LogFilePositionSource::readNextPosition()
+ {
+ QByteArray line = logFile-&gt;readLine().trimmed();
+ if (!line.isEmpty()) {
+ QList&lt;QByteArray&gt; data = line.split(' ');
+ double latitude;
+ double longitude;
+ bool hasLatitude = false;
+ bool hasLongitude = false;
+ QDateTime dateTime = QDateTime::fromString(QString(data.value(0)), Qt::ISODate);
+ latitude = data.value(1).toDouble(&amp;hasLatitude);
+ longitude = data.value(2).toDouble(&amp;hasLongitude);
+
+ if (hasLatitude &amp;&amp; hasLongitude &amp;&amp; dateTime.isValid()) {
+ QGeoCoordinate coordinate(latitude, longitude);
+ QGeoPositionInfo info(coordinate, dateTime);
+ if (info.isValid()) {
+ lastPosition = info;
+ emit positionUpdated(info);
+ }
+ }
+ }
+ }</pre>
+<p>The example includes a <tt>ClientApplication</tt> class that requests updates from the <tt>LogFilePositionSource</tt> class. Run the exaple to see the data that is received by <tt>ClientApplication</tt>.</p>
+<p>Before running the example, make sure you have done both <tt>make</tt> and <tt>make install</tt>.</p>
<a name="building-and-compiling"></a>
<h2>Building and compiling</h2>
<p>This library requires Qt 4.5 to be installed.</p>
@@ -270,6 +432,15 @@
<li><a href="qnetworksession.html">QNetworkSession</a></li>
</ul>
</li>
+<li>Location<ul>
+<li><a href="qgeocoordinate.html">QGeoCoordinate</a></li>
+<li><a href="qgeopositioninfo.html">QGeoPositionInfo</a></li>
+<li><a href="qgeopositioninfosource.html">QGeoPositionInfoSource</a></li>
+<li><a href="qgeoareamonitor.html">QGeoAreaMonitor</a></li>
+<li><a href="qsatelliteinfo.html">QSatelliteInfo</a></li>
+<li><a href="qsatelliteinfosource.html">QSatelliteInfoSource</a></li>
+</ul>
+</li>
</ul>
<a name="examples"></a>
<h3>Examples</h3>
diff --git a/doc/html/qgeoareamonitor-members.html b/doc/html/qgeoareamonitor-members.html
new file mode 100644
index 0000000000..cc28d6b197
--- /dev/null
+++ b/doc/html/qgeoareamonitor-members.html
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- ../../location/qgeoareamonitor.cpp -->
+<head>
+ <title>List of All Members for QGeoAreaMonitor</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">List of All Members for QGeoAreaMonitor</h1>
+<p>This is the complete list of members for <a href="qgeoareamonitor.html">QGeoAreaMonitor</a>, including inherited members.</p>
+<p><table class="propsummary" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr><td width="45%" valign="top"><ul>
+<li><div class="fn"><b><a href="qgeoareamonitor.html#QGeoAreaMonitor">QGeoAreaMonitor</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="qgeoareamonitor.html#dtor.QGeoAreaMonitor">~QGeoAreaMonitor</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qgeoareamonitor.html#areaEntered">areaEntered</a></b> ( const QGeoPositionInfo &amp; )</div></li>
+<li><div class="fn"><b><a href="qgeoareamonitor.html#areaExited">areaExited</a></b> ( const QGeoPositionInfo &amp; )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#blockSignals">blockSignals</a></b> ( bool )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#childEvent">childEvent</a></b> ( QChildEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#children">children</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#connect">connect</a></b> ( const QObject *, const char *, const QObject *, const char *, Qt::ConnectionType )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#connect-2">connect</a></b> ( const QObject *, const char *, const char *, Qt::ConnectionType ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#connectNotify">connectNotify</a></b> ( const char * )</div></li>
+<li><div class="fn"><b><a href="qgeoareamonitor.html#coordinate">coordinate</a></b> () const : QGeoCoordinate</div></li>
+<li><div class="fn"><b><a href="qgeoareamonitor.html#createMonitor">createMonitor</a></b> ( QObject * ) : QGeoAreaMonitor *</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#customEvent">customEvent</a></b> ( QEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#d_ptr-var">d_ptr</a></b> : </div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#deleteLater">deleteLater</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#destroyed">destroyed</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect">disconnect</a></b> ( const QObject *, const char *, const QObject *, const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect-2">disconnect</a></b> ( const char *, const QObject *, const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect-3">disconnect</a></b> ( const QObject *, const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnectNotify">disconnectNotify</a></b> ( const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#dumpObjectInfo">dumpObjectInfo</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#dumpObjectTree">dumpObjectTree</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#dynamicPropertyNames">dynamicPropertyNames</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#event">event</a></b> ( QEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#eventFilter">eventFilter</a></b> ( QObject *, QEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChild">findChild</a></b> ( const QString &amp; ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChildren">findChildren</a></b> ( const QString &amp; ) const</div></li>
+</ul></td><td valign="top"><ul>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChildren-2">findChildren</a></b> ( const QRegExp &amp; ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#inherits">inherits</a></b> ( const char * ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#installEventFilter">installEventFilter</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#isWidgetType">isWidgetType</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#killTimer">killTimer</a></b> ( int )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#metaObject">metaObject</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#moveToThread">moveToThread</a></b> ( QThread * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#objectName-prop">objectName</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#parent">parent</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#property">property</a></b> ( const char * ) const</div></li>
+<li><div class="fn"><b><a href="qgeoareamonitor.html#radius">radius</a></b> () const : int</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#receivers">receivers</a></b> ( const char * ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#removeEventFilter">removeEventFilter</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#sender">sender</a></b> () const</div></li>
+<li><div class="fn"><b><a href="qgeoareamonitor.html#setMonitoredArea">setMonitoredArea</a></b> ( const QGeoCoordinate &amp;, int )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#objectName-prop">setObjectName</a></b> ( const QString &amp; )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#setParent">setParent</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#setProperty">setProperty</a></b> ( const char *, const QVariant &amp; )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#signalsBlocked">signalsBlocked</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#startTimer">startTimer</a></b> ( int )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#staticMetaObject-var">staticMetaObject</a></b> : </div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#staticQtMetaObject-var">staticQtMetaObject</a></b> : </div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#thread">thread</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#timerEvent">timerEvent</a></b> ( QTimerEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#tr">tr</a></b> ( const char *, const char *, int )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#trUtf8">trUtf8</a></b> ( const char *, const char *, int )</div></li>
+</ul>
+</td></tr>
+</table></p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td align="left">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td align="right"><div align="right">Qt Mobility API</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/doc/html/qgeoareamonitor.html b/doc/html/qgeoareamonitor.html
new file mode 100644
index 0000000000..65eb8714ca
--- /dev/null
+++ b/doc/html/qgeoareamonitor.html
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- ../../location/qgeoareamonitor.cpp -->
+<head>
+ <title>QGeoAreaMonitor Class Reference</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">QGeoAreaMonitor Class Reference</h1>
+<p>The QGeoAreaMonitor class enables the detection of proximity changes for a specified set of coordinates. <a href="#details">More...</a></p>
+<pre> #include &lt;QGeoAreaMonitor&gt;</pre><p>Inherits <a href="http://qt.nokia.com/doc/4.5/qobject.html">QObject</a>.</p>
+<ul>
+<li><a href="qgeoareamonitor-members.html">List of all members, including inherited members</a></li>
+</ul>
+<hr />
+<a name="public-functions"></a>
+<h2>Public Functions</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qgeoareamonitor.html#QGeoAreaMonitor">QGeoAreaMonitor</a></b> ( QObject * <i>parent</i> = 0 )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><b><a href="qgeoareamonitor.html#dtor.QGeoAreaMonitor">~QGeoAreaMonitor</a></b> () = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QGeoCoordinate </td><td class="memItemRight" valign="bottom"><b><a href="qgeoareamonitor.html#coordinate">coordinate</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><b><a href="qgeoareamonitor.html#radius">radius</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><b><a href="qgeoareamonitor.html#setMonitoredArea">setMonitoredArea</a></b> ( const QGeoCoordinate &amp; <i>coordinate</i>, int <i>radius</i> )</td></tr>
+</table>
+<ul>
+<li><div bar="2" class="fn"></div>29 public functions inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-functions">QObject</a></li>
+</ul>
+<hr />
+<a name="signals"></a>
+<h2>Signals</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qgeoareamonitor.html#areaEntered">areaEntered</a></b> ( const QGeoPositionInfo &amp; <i>update</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qgeoareamonitor.html#areaExited">areaExited</a></b> ( const QGeoPositionInfo &amp; <i>update</i> )</td></tr>
+</table>
+<ul>
+<li><div bar="2" class="fn"></div>1 signal inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#signals">QObject</a></li>
+</ul>
+<hr />
+<a name="static-public-members"></a>
+<h2>Static Public Members</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">QGeoAreaMonitor * </td><td class="memItemRight" valign="bottom"><b><a href="qgeoareamonitor.html#createMonitor">createMonitor</a></b> ( QObject * <i>parent</i> = 0 )</td></tr>
+</table>
+<ul>
+<li><div bar="2" class="fn"></div>4 static public members inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#static-public-members">QObject</a></li>
+</ul>
+<h3>Additional Inherited Members</h3>
+<ul>
+<li><div class="fn"></div>1 property inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#properties">QObject</a></li>
+<li><div class="fn"></div>1 public slot inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-slots">QObject</a></li>
+<li><div class="fn"></div>1 public type inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-variables">QObject</a></li>
+<li><div class="fn"></div>7 protected functions inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#protected-functions">QObject</a></li>
+<li><div class="fn"></div>2 protected variables inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#protected-variables">QObject</a></li>
+</ul>
+<a name="details"></a>
+<hr />
+<h2>Detailed Description</h2>
+<p>The QGeoAreaMonitor class enables the detection of proximity changes for a specified set of coordinates.</p>
+<p>A QGeoAreaMonitor emits signals when the current position is in range, or has moved out of range, of a specified area.</p>
+<p>For example:</p>
+<pre> public:
+ MyClass::MyClass()
+ {
+ QGeoAreaMonitor *monitor = QGeoAreaMonitor::createMonitor();
+ connect(monitor, SIGNAL(areaEntered(QGeoPositionInfo)),
+ this, SLOT(areaEntered(QGeoPositionInfo)));
+ connect(monitor, SIGNAL(areaExited(QGeoPositionInfo)),
+ this, SLOT(areaExited(QGeoPositionInfo)));
+
+ QGeoCoordinate bigBenLocation(51.50104, -0.124632);
+ monitor-&gt;setMonitoredArea(bigBenLocation, 100);
+ }
+
+ public slots:
+ void areaEntered(const QGeoPositionInfo &amp;update)
+ {
+ qDebug() &lt;&lt; &quot;Now within 100 meters, current position is&quot; &lt;&lt; update.coordinate();
+ }
+
+ void areaExited(const QGeoPositionInfo &amp;update)
+ {
+ qDebug() &lt;&lt; &quot;No longer within 100 meters, current position is&quot; &lt;&lt; update.coordinate();
+ }</pre>
+<hr />
+<h2>Member Function Documentation</h2>
+<h3 class="fn"><a name="QGeoAreaMonitor"></a>QGeoAreaMonitor::QGeoAreaMonitor ( <a href="http://qt.nokia.com/doc/4.5/qobject.html">QObject</a> * <i>parent</i> = 0 )</h3>
+<p>Creates a monitor with the given <i>parent</i>.</p>
+<h3 class="fn"><a name="dtor.QGeoAreaMonitor"></a>QGeoAreaMonitor::~QGeoAreaMonitor ()&nbsp;&nbsp;<tt> [pure virtual]</tt></h3>
+<p>Destroys the monitor.</p>
+<h3 class="fn"><a name="areaEntered"></a>void QGeoAreaMonitor::areaEntered ( const <a href="qgeopositioninfo.html">QGeoPositionInfo</a> &amp; <i>update</i> )&nbsp;&nbsp;<tt> [signal]</tt></h3>
+<p>Emitted when the current position has moved from a position outside the monitored area to a position within the monitored area.</p>
+<p>The <i>update</i> holds the new position.</p>
+<h3 class="fn"><a name="areaExited"></a>void QGeoAreaMonitor::areaExited ( const <a href="qgeopositioninfo.html">QGeoPositionInfo</a> &amp; <i>update</i> )&nbsp;&nbsp;<tt> [signal]</tt></h3>
+<p>Emitted when the current position has moved from a position within the monitored area to a position outside the monitored area.</p>
+<p>The <i>update</i> holds the new position.</p>
+<h3 class="fn"><a name="coordinate"></a><a href="qgeocoordinate.html">QGeoCoordinate</a> QGeoAreaMonitor::coordinate () const</h3>
+<p>Returns the coordinate set with <a href="qgeoareamonitor.html#setMonitoredArea">setMonitoredArea</a>(), or an invalid coordinate if no area has been set.</p>
+<h3 class="fn"><a name="createMonitor"></a>QGeoAreaMonitor * QGeoAreaMonitor::createMonitor ( <a href="http://qt.nokia.com/doc/4.5/qobject.html">QObject</a> * <i>parent</i> = 0 )&nbsp;&nbsp;<tt> [static]</tt></h3>
+<p>Creates and returns a monitor with the given <i>parent</i> that monitors areas using resources on the underlying system.</p>
+<p>Returns 0 if the system has no support for position monitoring.</p>
+<h3 class="fn"><a name="radius"></a>int QGeoAreaMonitor::radius () const</h3>
+<p>Returns the radius set with <a href="qgeoareamonitor.html#setMonitoredArea">setMonitoredArea</a>(), or 0 if no area has been set.</p>
+<h3 class="fn"><a name="setMonitoredArea"></a>void QGeoAreaMonitor::setMonitoredArea ( const <a href="qgeocoordinate.html">QGeoCoordinate</a> &amp; <i>coordinate</i>, int <i>radius</i> )&nbsp;&nbsp;<tt> [virtual]</tt></h3>
+<p>Sets the area to be monitored to the area specified by <i>coordinate</i> with a radius of <i>radius</i>.</p>
+<p>If the current position is within the specified area, <a href="qgeoareamonitor.html#areaEntered">areaEntered</a>() is emitted immediately.</p>
+<p>Note: Subclass implementations of this method should call the base implementation to ensure <a href="qgeoareamonitor.html#coordinate">coordinate</a>() and <a href="qgeoareamonitor.html#radius">radius</a>() return the correct values.</p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td align="left">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td align="right"><div align="right">Qt Mobility API</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/doc/html/qgeocoordinate-members.html b/doc/html/qgeocoordinate-members.html
new file mode 100644
index 0000000000..a22e2b298c
--- /dev/null
+++ b/doc/html/qgeocoordinate-members.html
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- ../../location/qgeocoordinate.cpp -->
+<head>
+ <title>List of All Members for QGeoCoordinate</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">List of All Members for QGeoCoordinate</h1>
+<p>This is the complete list of members for <a href="qgeocoordinate.html">QGeoCoordinate</a>, including inherited members.</p>
+<p><table class="propsummary" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr><td width="45%" valign="top"><ul>
+<li><div class="fn">enum <b><a href="qgeocoordinate.html#CoordinateFormat-enum">CoordinateFormat</a></b></div></li>
+<li><div class="fn">enum <b><a href="qgeocoordinate.html#CoordinateType-enum">CoordinateType</a></b></div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#QGeoCoordinate">QGeoCoordinate</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#QGeoCoordinate-2">QGeoCoordinate</a></b> ( double, double )</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#QGeoCoordinate-3">QGeoCoordinate</a></b> ( double, double, double )</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#QGeoCoordinate-4">QGeoCoordinate</a></b> ( const QGeoCoordinate &amp; )</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#dtor.QGeoCoordinate">~QGeoCoordinate</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#altitude">altitude</a></b> () const : double</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#azimuthTo">azimuthTo</a></b> ( const QGeoCoordinate &amp; ) const : qreal</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#distanceTo">distanceTo</a></b> ( const QGeoCoordinate &amp; ) const : qreal</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#isValid">isValid</a></b> () const : bool</div></li>
+</ul></td><td valign="top"><ul>
+<li><div class="fn"><b><a href="qgeocoordinate.html#latitude">latitude</a></b> () const : double</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#longitude">longitude</a></b> () const : double</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#setAltitude">setAltitude</a></b> ( double )</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#setLatitude">setLatitude</a></b> ( double )</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#setLongitude">setLongitude</a></b> ( double )</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#toString">toString</a></b> ( CoordinateFormat ) const : QString</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#type">type</a></b> () const : CoordinateType</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#operator-not-eq">operator!=</a></b> ( const QGeoCoordinate &amp; ) const : bool</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#operator-eq">operator=</a></b> ( const QGeoCoordinate &amp; ) : QGeoCoordinate &amp;</div></li>
+<li><div class="fn"><b><a href="qgeocoordinate.html#operator-eq-eq">operator==</a></b> ( const QGeoCoordinate &amp; ) const : bool</div></li>
+</ul>
+</td></tr>
+</table></p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td align="left">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td align="right"><div align="right">Qt Mobility API</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/doc/html/qgeocoordinate.html b/doc/html/qgeocoordinate.html
new file mode 100644
index 0000000000..60a5e8118b
--- /dev/null
+++ b/doc/html/qgeocoordinate.html
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- ../../location/qgeocoordinate.cpp -->
+<head>
+ <title>QGeoCoordinate Class Reference</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">QGeoCoordinate Class Reference</h1>
+<p>The QGeoCoordinate class defines a geographical position on the surface of the Earth. <a href="#details">More...</a></p>
+<pre> #include &lt;QGeoCoordinate&gt;</pre><ul>
+<li><a href="qgeocoordinate-members.html">List of all members, including inherited members</a></li>
+</ul>
+<hr />
+<a name="public-types"></a>
+<h2>Public Types</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#CoordinateFormat-enum">CoordinateFormat</a></b> { DecimalDegrees, DecimalDegreesWithHemisphere, DegreesMinutes, DegreesMinutesWithHemisphere, DegreesMinutesSeconds, DegreesMinutesSecondsWithHemisphere }</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#CoordinateType-enum">CoordinateType</a></b> { InvalidCoordinate, Coordinate2D, Coordinate3D }</td></tr>
+</table>
+<hr />
+<a name="public-functions"></a>
+<h2>Public Functions</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#QGeoCoordinate">QGeoCoordinate</a></b> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#QGeoCoordinate-2">QGeoCoordinate</a></b> ( double <i>latitude</i>, double <i>longitude</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#QGeoCoordinate-3">QGeoCoordinate</a></b> ( double <i>latitude</i>, double <i>longitude</i>, double <i>altitude</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#QGeoCoordinate-4">QGeoCoordinate</a></b> ( const QGeoCoordinate &amp; <i>other</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#dtor.QGeoCoordinate">~QGeoCoordinate</a></b> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#altitude">altitude</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">qreal </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#azimuthTo">azimuthTo</a></b> ( const QGeoCoordinate &amp; <i>other</i> ) const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">qreal </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#distanceTo">distanceTo</a></b> ( const QGeoCoordinate &amp; <i>other</i> ) const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#isValid">isValid</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#latitude">latitude</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#longitude">longitude</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#setAltitude">setAltitude</a></b> ( double <i>altitude</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#setLatitude">setLatitude</a></b> ( double <i>latitude</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#setLongitude">setLongitude</a></b> ( double <i>longitude</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QString </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#toString">toString</a></b> ( CoordinateFormat <i>format</i> = DegreesMinutesSecondsWithHemisphere ) const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CoordinateType </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#type">type</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#operator-not-eq">operator!=</a></b> ( const QGeoCoordinate &amp; <i>other</i> ) const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QGeoCoordinate &amp; </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#operator-eq">operator=</a></b> ( const QGeoCoordinate &amp; <i>other</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><b><a href="qgeocoordinate.html#operator-eq-eq">operator==</a></b> ( const QGeoCoordinate &amp; <i>other</i> ) const</td></tr>
+</table>
+<a name="details"></a>
+<hr />
+<h2>Detailed Description</h2>
+<p>The QGeoCoordinate class defines a geographical position on the surface of the Earth.</p>
+<p>A QGeoCoordinate is defined by latitude, longitude, and optionally, altitude.</p>
+<p>Use <a href="qgeocoordinate.html#type">type</a>() to determine whether a coordinate is a 2D coordinate (has latitude and longitude only) or 3D coordinate (has latitude, longitude and altitude). Use <a href="qgeocoordinate.html#distanceTo">distanceTo</a>() and <a href="qgeocoordinate.html#azimuthTo">azimuthTo</a>() to calculate the distance and bearing between coordinates.</p>
+<p>The coordinate values should be specified using the WGS84 datum.</p>
+<hr />
+<h2>Member Type Documentation</h2>
+<h3 class="fn"><a name="CoordinateFormat-enum"></a>enum QGeoCoordinate::CoordinateFormat</h3>
+<p>Defines the possible formatting options for <a href="qgeocoordinate.html#toString">toString</a>().</p>
+<p><table class="valuelist" border="1" cellpadding="2" cellspacing="1" width="100%">
+<tr><th width="25%">Constant</th><th width="15%">Value</th><th width="60%">Description</th></tr>
+<tr><td valign="top"><tt>QGeoCoordinate::DecimalDegrees</tt></td><td align="center" valign="top"><tt>0</tt></td><td valign="top">Returns a string representation of the coordinates in decimal degrees format.</td></tr>
+<tr><td valign="top"><tt>QGeoCoordinate::DecimalDegreesWithHemisphere</tt></td><td align="center" valign="top"><tt>1</tt></td><td valign="top">Returns a string representation of the coordinates in decimal degrees format, using 'N', 'S', 'E' or 'W' to indicate the hemispheres of the coordinates.</td></tr>
+<tr><td valign="top"><tt>QGeoCoordinate::DegreesMinutes</tt></td><td align="center" valign="top"><tt>2</tt></td><td valign="top">Returns a string representation of the coordinates in degrees-minutes format.</td></tr>
+<tr><td valign="top"><tt>QGeoCoordinate::DegreesMinutesWithHemisphere</tt></td><td align="center" valign="top"><tt>3</tt></td><td valign="top">Returns a string representation of the coordinates in degrees-minutes format, using 'N', 'S', 'E' or 'W' to indicate the hemispheres of the coordinates.</td></tr>
+<tr><td valign="top"><tt>QGeoCoordinate::DegreesMinutesSeconds</tt></td><td align="center" valign="top"><tt>4</tt></td><td valign="top">Returns a string representation of the coordinates in degrees-minutes-seconds format.</td></tr>
+<tr><td valign="top"><tt>QGeoCoordinate::DegreesMinutesSecondsWithHemisphere</tt></td><td align="center" valign="top"><tt>5</tt></td><td valign="top">Returns a string representation of the coordinates in degrees-minutes-seconds format, using 'N', 'S', 'E' or 'W' to indicate the hemispheres of the coordinates.</td></tr>
+</table></p>
+<p>See also <a href="qgeocoordinate.html#toString">toString</a>().</p>
+<h3 class="fn"><a name="CoordinateType-enum"></a>enum QGeoCoordinate::CoordinateType</h3>
+<p>Defines the types of a coordinate.</p>
+<p><table class="valuelist" border="1" cellpadding="2" cellspacing="1" width="100%">
+<tr><th width="25%">Constant</th><th width="15%">Value</th><th width="60%">Description</th></tr>
+<tr><td valign="top"><tt>QGeoCoordinate::InvalidCoordinate</tt></td><td align="center" valign="top"><tt>0</tt></td><td valign="top">An invalid coordinate. A coordinate is invalid if its latitude or longitude values are invalid.</td></tr>
+<tr><td valign="top"><tt>QGeoCoordinate::Coordinate2D</tt></td><td align="center" valign="top"><tt>1</tt></td><td valign="top">A coordinate with valid latitude and longitude values.</td></tr>
+<tr><td valign="top"><tt>QGeoCoordinate::Coordinate3D</tt></td><td align="center" valign="top"><tt>2</tt></td><td valign="top">A coordinate with valid latitude and longitude values, and also an altitude value.</td></tr>
+</table></p>
+<hr />
+<h2>Member Function Documentation</h2>
+<h3 class="fn"><a name="QGeoCoordinate"></a>QGeoCoordinate::QGeoCoordinate ()</h3>
+<p>Constructs a coordinate. The coordinate will be invalid until <a href="qgeocoordinate.html#setLatitude">setLatitude</a>() and <a href="qgeocoordinate.html#setLongitude">setLongitude</a>() have been called.</p>
+<h3 class="fn"><a name="QGeoCoordinate-2"></a>QGeoCoordinate::QGeoCoordinate ( double <i>latitude</i>, double <i>longitude</i> )</h3>
+<p>Constructs a coordinate with the given <i>latitude</i> and <i>longitude</i>.</p>
+<p>If the latitude is not between -90 to 90 inclusive, or the longitude is not between -180 to 180 inclusive, none of the values are set and the <a href="qgeocoordinate.html#type">type</a>() will be <a href="qgeocoordinate.html#CoordinateType-enum">QGeoCoordinate::InvalidCoordinate</a>.</p>
+<p>See also <a href="qgeocoordinate.html#isValid">isValid</a>().</p>
+<h3 class="fn"><a name="QGeoCoordinate-3"></a>QGeoCoordinate::QGeoCoordinate ( double <i>latitude</i>, double <i>longitude</i>, double <i>altitude</i> )</h3>
+<p>Constructs a coordinate with the given <i>latitude</i>, <i>longitude</i> and <i>altitude</i>.</p>
+<p>If the latitude is not between -90 to 90 inclusive, or the longitude is not between -180 to 180 inclusive, none of the values are set and the <a href="qgeocoordinate.html#type">type</a>() will be <a href="qgeocoordinate.html#CoordinateType-enum">QGeoCoordinate::InvalidCoordinate</a>.</p>
+<p>See also <a href="qgeocoordinate.html#isValid">isValid</a>().</p>
+<h3 class="fn"><a name="QGeoCoordinate-4"></a>QGeoCoordinate::QGeoCoordinate ( const QGeoCoordinate &amp; <i>other</i> )</h3>
+<p>Constructs a coordinate from the contents of <i>other</i>.</p>
+<h3 class="fn"><a name="dtor.QGeoCoordinate"></a>QGeoCoordinate::~QGeoCoordinate ()</h3>
+<p>Destroys the coordinate object.</p>
+<h3 class="fn"><a name="altitude"></a>double QGeoCoordinate::altitude () const</h3>
+<p>Returns the altitude (meters above sea level).</p>
+<p>The return value is undefined if the altitude has not been set.</p>
+<p>See also <a href="qgeocoordinate.html#setAltitude">setAltitude</a>() and <a href="qgeocoordinate.html#type">type</a>().</p>
+<h3 class="fn"><a name="azimuthTo"></a><a href="http://qt.nokia.com/doc/4.5/qtglobal.html#qreal-typedef">qreal</a> QGeoCoordinate::azimuthTo ( const QGeoCoordinate &amp; <i>other</i> ) const</h3>
+<p>Returns the azimuth (or bearing) in degrees from this coordinate to the coordinate specified by <i>other</i>. Altitude is not used in the calculation.</p>
+<p>There is an assumption that the Earth is spherical for the purpose of this calculation.</p>
+<p>Returns 0 if the type of this coordinate or the type of <i>other</i> is <a href="qgeocoordinate.html#CoordinateType-enum">QGeoCoordinate::InvalidCoordinate</a>.</p>
+<h3 class="fn"><a name="distanceTo"></a><a href="http://qt.nokia.com/doc/4.5/qtglobal.html#qreal-typedef">qreal</a> QGeoCoordinate::distanceTo ( const QGeoCoordinate &amp; <i>other</i> ) const</h3>
+<p>Returns the distance (in meters) from this coordinate to the coordinate specified by <i>other</i>. Altitude is not used in the calculation.</p>
+<p>This calculation returns the great-circle distance between the two coordinates, with an assumption that the Earth is spherical for the purpose of this calculation.</p>
+<p>Returns 0 if the type of this coordinate or the type of <i>other</i> is <a href="qgeocoordinate.html#CoordinateType-enum">QGeoCoordinate::InvalidCoordinate</a>.</p>
+<h3 class="fn"><a name="isValid"></a>bool QGeoCoordinate::isValid () const</h3>
+<p>Returns true if the <a href="qgeocoordinate.html#type">type</a>() is <a href="qgeocoordinate.html#CoordinateType-enum">Coordinate2D</a> or <a href="qgeocoordinate.html#CoordinateType-enum">Coordinate3D</a>.</p>
+<h3 class="fn"><a name="latitude"></a>double QGeoCoordinate::latitude () const</h3>
+<p>Returns the latitude, in decimal degrees. The return value is undefined if the latitude has not been set.</p>
+<p>A positive latitude indicates the Northern Hemisphere, and a negative latitude indicates the Southern Hemisphere.</p>
+<p>See also <a href="qgeocoordinate.html#setLatitude">setLatitude</a>() and <a href="qgeocoordinate.html#type">type</a>().</p>
+<h3 class="fn"><a name="longitude"></a>double QGeoCoordinate::longitude () const</h3>
+<p>Returns the longitude, in decimal degrees. The return value is undefined if the longitude has not been set.</p>
+<p>A positive longitude indicates the Eastern Hemisphere, and a negative longitude indicates the Western Hemisphere.</p>
+<p>See also <a href="qgeocoordinate.html#setLongitude">setLongitude</a>() and <a href="qgeocoordinate.html#type">type</a>().</p>
+<h3 class="fn"><a name="setAltitude"></a>void QGeoCoordinate::setAltitude ( double <i>altitude</i> )</h3>
+<p>Sets the altitude (meters above sea level) to <i>altitude</i>.</p>
+<p>See also <a href="qgeocoordinate.html#altitude">altitude</a>().</p>
+<h3 class="fn"><a name="setLatitude"></a>void QGeoCoordinate::setLatitude ( double <i>latitude</i> )</h3>
+<p>Sets the latitude (in decimal degrees) to <i>latitude</i>. The value should be in the WGS84 datum.</p>
+<p>To be valid, the latitude must be between -90 to 90 inclusive.</p>
+<p>See also <a href="qgeocoordinate.html#latitude">latitude</a>().</p>
+<h3 class="fn"><a name="setLongitude"></a>void QGeoCoordinate::setLongitude ( double <i>longitude</i> )</h3>
+<p>Sets the longitude (in decimal degrees) to <i>longitude</i>. The value should be in the WGS84 datum.</p>
+<p>To be valid, the longitude must be between -180 to 180 inclusive.</p>
+<p>See also <a href="qgeocoordinate.html#longitude">longitude</a>().</p>
+<h3 class="fn"><a name="toString"></a><a href="http://qt.nokia.com/doc/4.5/qstring.html">QString</a> QGeoCoordinate::toString ( <a href="qgeocoordinate.html#CoordinateFormat-enum">CoordinateFormat</a> <i>format</i> = DegreesMinutesSecondsWithHemisphere ) const</h3>
+<p>Returns this coordinate as a string in the specified <i>format</i>.</p>
+<p>For example, if this coordinate has a latitude of -27.46758, a longitude of 153.027892 and an altitude of 28.1, these are the strings returned depending on <i>format</i>:</p>
+<p><table class="generic" align="center" cellpadding="2" cellspacing="1" border="0">
+<thead><tr valign="top" class="qt-style"><th><i>format</i> value</th><th>Returned string</th></tr></thead>
+<tr valign="top" class="odd"><td><a href="qgeocoordinate.html#CoordinateFormat-enum">DecimalDegrees</a></td><td>-27.46758&#xb0;, 153.02789&#xb0;, 28.1m</td></tr>
+<tr valign="top" class="even"><td><a href="qgeocoordinate.html#CoordinateFormat-enum">DecimalDegreesWithHemisphere</a></td><td>27.46758&#xb0; S, 153.02789&#xb0; E, 28.1m</td></tr>
+<tr valign="top" class="odd"><td><a href="qgeocoordinate.html#CoordinateFormat-enum">DegreesMinutes</a></td><td>-27&#xb0; 28.054', 153&#xb0; 1.673', 28.1m</td></tr>
+<tr valign="top" class="even"><td><a href="qgeocoordinate.html#CoordinateFormat-enum">DegreesMinutesWithHemisphere</a></td><td>27&#xb0; 28.054 S', 153&#xb0; 1.673' E, 28.1m</td></tr>
+<tr valign="top" class="odd"><td><a href="qgeocoordinate.html#CoordinateFormat-enum">DegreesMinutesSeconds</a></td><td>-27&#xb0; 28' 3.2&quot;, 153&#xb0; 1' 40.4&quot;, 28.1m</td></tr>
+<tr valign="top" class="even"><td><a href="qgeocoordinate.html#CoordinateFormat-enum">DegreesMinutesSecondsWithHemisphere</a></td><td>27&#xb0; 28' 3.2&quot; S, 153&#xb0; 1' 40.4&quot; E, 28.1m</td></tr>
+</table></p>
+<p>The altitude field is omitted if no altitude is set.</p>
+<p>If the coordinate is invalid, an empty string is returned.</p>
+<h3 class="fn"><a name="type"></a><a href="qgeocoordinate.html#CoordinateType-enum">CoordinateType</a> QGeoCoordinate::type () const</h3>
+<p>Returns the type of this coordinate.</p>
+<h3 class="fn"><a name="operator-not-eq"></a>bool QGeoCoordinate::operator!= ( const QGeoCoordinate &amp; <i>other</i> ) const</h3>
+<p>Returns true if the latitude, longitude or altitude of this coordinate are not the same as those of <i>other</i>.</p>
+<h3 class="fn"><a name="operator-eq"></a>QGeoCoordinate &amp; QGeoCoordinate::operator= ( const QGeoCoordinate &amp; <i>other</i> )</h3>
+<p>Assigns <i>other</i> to this coordinate and returns a reference to this coordinate.</p>
+<h3 class="fn"><a name="operator-eq-eq"></a>bool QGeoCoordinate::operator== ( const QGeoCoordinate &amp; <i>other</i> ) const</h3>
+<p>Returns true if the latitude, longitude and altitude of this coordinate are the same as those of <i>other</i>.</p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td align="left">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td align="right"><div align="right">Qt Mobility API</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/doc/html/qgeopositioninfo-members.html b/doc/html/qgeopositioninfo-members.html
new file mode 100644
index 0000000000..3bf878b9bf
--- /dev/null
+++ b/doc/html/qgeopositioninfo-members.html
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- ../../location/qgeopositioninfo.cpp -->
+<head>
+ <title>List of All Members for QGeoPositionInfo</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">List of All Members for QGeoPositionInfo</h1>
+<p>This is the complete list of members for <a href="qgeopositioninfo.html">QGeoPositionInfo</a>, including inherited members.</p>
+<p><table class="propsummary" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr><td width="45%" valign="top"><ul>
+<li><div class="fn">enum <b><a href="qgeopositioninfo.html#Property-enum">Property</a></b></div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#QGeoPositionInfo">QGeoPositionInfo</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#QGeoPositionInfo-2">QGeoPositionInfo</a></b> ( const QGeoCoordinate &amp;, const QDateTime &amp; )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#QGeoPositionInfo-3">QGeoPositionInfo</a></b> ( const QGeoPositionInfo &amp; )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#dtor.QGeoPositionInfo">~QGeoPositionInfo</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#coordinate">coordinate</a></b> () const : QGeoCoordinate</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#dateTime">dateTime</a></b> () const : QDateTime</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#hasProperty">hasProperty</a></b> ( Property ) const : bool</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#isValid">isValid</a></b> () const : bool</div></li>
+</ul></td><td valign="top"><ul>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#property">property</a></b> ( Property ) const : qreal</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#removeProperty">removeProperty</a></b> ( Property )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#setCoordinate">setCoordinate</a></b> ( const QGeoCoordinate &amp; )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#setDateTime">setDateTime</a></b> ( const QDateTime &amp; )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#setProperty">setProperty</a></b> ( Property, qreal )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#operator-not-eq">operator!=</a></b> ( const QGeoPositionInfo &amp; ) const : bool</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#operator-eq">operator=</a></b> ( const QGeoPositionInfo &amp; ) : QGeoPositionInfo &amp;</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfo.html#operator-eq-eq">operator==</a></b> ( const QGeoPositionInfo &amp; ) const : bool</div></li>
+</ul>
+</td></tr>
+</table></p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td align="left">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td align="right"><div align="right">Qt Mobility API</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/doc/html/qgeopositioninfo.html b/doc/html/qgeopositioninfo.html
new file mode 100644
index 0000000000..1b88355d6a
--- /dev/null
+++ b/doc/html/qgeopositioninfo.html
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- ../../location/qgeopositioninfo.cpp -->
+<head>
+ <title>QGeoPositionInfo Class Reference</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">QGeoPositionInfo Class Reference</h1>
+<p>The QGeoPositionInfo class contains information gathered on a global position, direction and velocity at a particular point in time. <a href="#details">More...</a></p>
+<pre> #include &lt;QGeoPositionInfo&gt;</pre><ul>
+<li><a href="qgeopositioninfo-members.html">List of all members, including inherited members</a></li>
+</ul>
+<hr />
+<a name="public-types"></a>
+<h2>Public Types</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#Property-enum">Property</a></b> { Heading, GroundSpeed, VerticalSpeed, MagneticVariation, HorizontalAccuracy, VerticalAccuracy }</td></tr>
+</table>
+<hr />
+<a name="public-functions"></a>
+<h2>Public Functions</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#QGeoPositionInfo">QGeoPositionInfo</a></b> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#QGeoPositionInfo-2">QGeoPositionInfo</a></b> ( const QGeoCoordinate &amp; <i>coordinate</i>, const QDateTime &amp; <i>dateTime</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#QGeoPositionInfo-3">QGeoPositionInfo</a></b> ( const QGeoPositionInfo &amp; <i>other</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#dtor.QGeoPositionInfo">~QGeoPositionInfo</a></b> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QGeoCoordinate </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#coordinate">coordinate</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QDateTime </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#dateTime">dateTime</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#hasProperty">hasProperty</a></b> ( Property <i>property</i> ) const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#isValid">isValid</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">qreal </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#property">property</a></b> ( Property <i>property</i> ) const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#removeProperty">removeProperty</a></b> ( Property <i>property</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#setCoordinate">setCoordinate</a></b> ( const QGeoCoordinate &amp; <i>coordinate</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#setDateTime">setDateTime</a></b> ( const QDateTime &amp; <i>dateTime</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#setProperty">setProperty</a></b> ( Property <i>property</i>, qreal <i>value</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#operator-not-eq">operator!=</a></b> ( const QGeoPositionInfo &amp; <i>other</i> ) const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QGeoPositionInfo &amp; </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#operator-eq">operator=</a></b> ( const QGeoPositionInfo &amp; <i>other</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfo.html#operator-eq-eq">operator==</a></b> ( const QGeoPositionInfo &amp; <i>other</i> ) const</td></tr>
+</table>
+<a name="details"></a>
+<hr />
+<h2>Detailed Description</h2>
+<p>The QGeoPositionInfo class contains information gathered on a global position, direction and velocity at a particular point in time.</p>
+<p>A QGeoPositionInfo contains, at a minimum, a geographical coordinate and a timestamp. It may also have heading and speed measurements as well as estimates of the accuracy of the provided data.</p>
+<p>See also <a href="qgeopositioninfosource.html">QGeoPositionInfoSource</a>.</p>
+<hr />
+<h2>Member Type Documentation</h2>
+<h3 class="fn"><a name="Property-enum"></a>enum QGeoPositionInfo::Property</h3>
+<p>Defines the properties for positional information.</p>
+<p><table class="valuelist" border="1" cellpadding="2" cellspacing="1" width="100%">
+<tr><th width="25%">Constant</th><th width="15%">Value</th><th width="60%">Description</th></tr>
+<tr><td valign="top"><tt>QGeoPositionInfo::Heading</tt></td><td align="center" valign="top"><tt>0</tt></td><td valign="top">The bearing to true north, in degrees.</td></tr>
+<tr><td valign="top"><tt>QGeoPositionInfo::GroundSpeed</tt></td><td align="center" valign="top"><tt>1</tt></td><td valign="top">The ground speed, in metres/sec.</td></tr>
+<tr><td valign="top"><tt>QGeoPositionInfo::VerticalSpeed</tt></td><td align="center" valign="top"><tt>2</tt></td><td valign="top">The vertical speed, in metres/sec.</td></tr>
+<tr><td valign="top"><tt>QGeoPositionInfo::MagneticVariation</tt></td><td align="center" valign="top"><tt>3</tt></td><td valign="top">The angle between the horizontal component of the magnetic field and true north, in degrees. Also known as magnetic declination. A positive value indicates a clockwise direction from true north and a negative value indicates a counter-clockwise direction.</td></tr>
+<tr><td valign="top"><tt>QGeoPositionInfo::HorizontalAccuracy</tt></td><td align="center" valign="top"><tt>4</tt></td><td valign="top">The accuracy of the provided latitude-longitude value, in metres.</td></tr>
+<tr><td valign="top"><tt>QGeoPositionInfo::VerticalAccuracy</tt></td><td align="center" valign="top"><tt>5</tt></td><td valign="top">The accuracy of the provided altitude value, in metres.</td></tr>
+</table></p>
+<hr />
+<h2>Member Function Documentation</h2>
+<h3 class="fn"><a name="QGeoPositionInfo"></a>QGeoPositionInfo::QGeoPositionInfo ()</h3>
+<p>Creates an invalid <a href="qgeopositioninfo.html">QGeoPositionInfo</a> object.</p>
+<p>See also <a href="qgeopositioninfo.html#isValid">isValid</a>().</p>
+<h3 class="fn"><a name="QGeoPositionInfo-2"></a>QGeoPositionInfo::QGeoPositionInfo ( const <a href="qgeocoordinate.html">QGeoCoordinate</a> &amp; <i>coordinate</i>, const <a href="http://qt.nokia.com/doc/4.5/qdatetime.html">QDateTime</a> &amp; <i>dateTime</i> )</h3>
+<p>Creates a <a href="qgeopositioninfo.html">QGeoPositionInfo</a> for the given <i>coordinate</i> and <i>dateTime</i>.</p>
+<h3 class="fn"><a name="QGeoPositionInfo-3"></a>QGeoPositionInfo::QGeoPositionInfo ( const QGeoPositionInfo &amp; <i>other</i> )</h3>
+<p>Creates a <a href="qgeopositioninfo.html">QGeoPositionInfo</a> with the values of <i>other</i>.</p>
+<h3 class="fn"><a name="dtor.QGeoPositionInfo"></a>QGeoPositionInfo::~QGeoPositionInfo ()</h3>
+<p>Destroys a <a href="qgeopositioninfo.html">QGeoPositionInfo</a> object.</p>
+<h3 class="fn"><a name="coordinate"></a><a href="qgeocoordinate.html">QGeoCoordinate</a> QGeoPositionInfo::coordinate () const</h3>
+<p>Returns the coordinate for this position.</p>
+<p>Returns an invalid coordinate if no coordinate has been set.</p>
+<p>See also <a href="qgeopositioninfo.html#setCoordinate">setCoordinate</a>().</p>
+<h3 class="fn"><a name="dateTime"></a><a href="http://qt.nokia.com/doc/4.5/qdatetime.html">QDateTime</a> QGeoPositionInfo::dateTime () const</h3>
+<p>Returns the date and time at which this position was reported, in UTC time.</p>
+<p>Returns an invalid <a href="http://qt.nokia.com/doc/4.5/qdatetime.html">QDateTime</a> if no date/time value has been set.</p>
+<p>See also <a href="qgeopositioninfo.html#setDateTime">setDateTime</a>().</p>
+<h3 class="fn"><a name="hasProperty"></a>bool QGeoPositionInfo::hasProperty ( <a href="qgeopositioninfo.html#Property-enum">Property</a> <i>property</i> ) const</h3>
+<p>Returns true if the specified <i>property</i> is present for this <a href="qgeopositioninfo.html">QGeoPositionInfo</a> object.</p>
+<h3 class="fn"><a name="isValid"></a>bool QGeoPositionInfo::isValid () const</h3>
+<p>Returns true if the <a href="qgeopositioninfo.html#dateTime">dateTime</a>() and <a href="qgeopositioninfo.html#coordinate">coordinate</a>() values are both valid.</p>
+<p>See also <a href="qgeocoordinate.html#isValid">QGeoCoordinate::isValid</a>() and <a href="http://qt.nokia.com/doc/4.5/qdatetime.html#isValid">QDateTime::isValid</a>().</p>
+<h3 class="fn"><a name="property"></a><a href="http://qt.nokia.com/doc/4.5/qtglobal.html#qreal-typedef">qreal</a> QGeoPositionInfo::property ( <a href="qgeopositioninfo.html#Property-enum">Property</a> <i>property</i> ) const</h3>
+<p>Returns the value of the specified <i>property</i> as a qreal value.</p>
+<p>Returns -1 if the value has not been set.</p>
+<p>See also <a href="qgeopositioninfo.html#hasProperty">hasProperty</a>() and <a href="qgeopositioninfo.html#setProperty">setProperty</a>().</p>
+<h3 class="fn"><a name="removeProperty"></a>void QGeoPositionInfo::removeProperty ( <a href="qgeopositioninfo.html#Property-enum">Property</a> <i>property</i> )</h3>
+<p>Removes the specified <i>property</i> and its value.</p>
+<h3 class="fn"><a name="setCoordinate"></a>void QGeoPositionInfo::setCoordinate ( const <a href="qgeocoordinate.html">QGeoCoordinate</a> &amp; <i>coordinate</i> )</h3>
+<p>Sets the coordinate for this position to <i>coordinate</i>.</p>
+<p>See also <a href="qgeopositioninfo.html#coordinate">coordinate</a>().</p>
+<h3 class="fn"><a name="setDateTime"></a>void QGeoPositionInfo::setDateTime ( const <a href="http://qt.nokia.com/doc/4.5/qdatetime.html">QDateTime</a> &amp; <i>dateTime</i> )</h3>
+<p>Sets the date and time at which this position was reported to <i>dateTime</i>.</p>
+<p>The <i>dateTime</i> must be in UTC time.</p>
+<p>See also <a href="qgeopositioninfo.html#dateTime">dateTime</a>().</p>
+<h3 class="fn"><a name="setProperty"></a>void QGeoPositionInfo::setProperty ( <a href="qgeopositioninfo.html#Property-enum">Property</a> <i>property</i>, <a href="http://qt.nokia.com/doc/4.5/qtglobal.html#qreal-typedef">qreal</a> <i>value</i> )</h3>
+<p>Sets the value for <i>property</i> to <i>value</i>.</p>
+<p>See also <a href="qgeopositioninfo.html#property">property</a>().</p>
+<h3 class="fn"><a name="operator-not-eq"></a>bool QGeoPositionInfo::operator!= ( const QGeoPositionInfo &amp; <i>other</i> ) const</h3>
+<p>Returns true if any of this object's values are not the same as those of <i>other</i>.</p>
+<h3 class="fn"><a name="operator-eq"></a>QGeoPositionInfo &amp; QGeoPositionInfo::operator= ( const QGeoPositionInfo &amp; <i>other</i> )</h3>
+<p>Assigns the values from <i>other</i> to this <a href="qgeopositioninfo.html">QGeoPositionInfo</a>.</p>
+<h3 class="fn"><a name="operator-eq-eq"></a>bool QGeoPositionInfo::operator== ( const QGeoPositionInfo &amp; <i>other</i> ) const</h3>
+<p>Returns true if all of this object's values are the same as those of <i>other</i>.</p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td align="left">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td align="right"><div align="right">Qt Mobility API</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/doc/html/qgeopositioninfosource-members.html b/doc/html/qgeopositioninfosource-members.html
new file mode 100644
index 0000000000..6bd02d6e28
--- /dev/null
+++ b/doc/html/qgeopositioninfosource-members.html
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- ../../location/qgeopositioninfosource.cpp -->
+<head>
+ <title>List of All Members for QGeoPositionInfoSource</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">List of All Members for QGeoPositionInfoSource</h1>
+<p>This is the complete list of members for <a href="qgeopositioninfosource.html">QGeoPositionInfoSource</a>, including inherited members.</p>
+<p><table class="propsummary" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr><td width="45%" valign="top"><ul>
+<li><div class="fn">enum <b><a href="qgeopositioninfosource.html#PositioningMethod-enum">PositioningMethod</a></b></div></li>
+<li><div class="fn">flags <b><a href="qgeopositioninfosource.html#PositioningMethod-enum">PositioningMethods</a></b></div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#QGeoPositionInfoSource">QGeoPositionInfoSource</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#dtor.QGeoPositionInfoSource">~QGeoPositionInfoSource</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#blockSignals">blockSignals</a></b> ( bool )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#childEvent">childEvent</a></b> ( QChildEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#children">children</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#connect">connect</a></b> ( const QObject *, const char *, const QObject *, const char *, Qt::ConnectionType )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#connect-2">connect</a></b> ( const QObject *, const char *, const char *, Qt::ConnectionType ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#connectNotify">connectNotify</a></b> ( const char * )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#createSource">createSource</a></b> ( QObject * ) : QGeoPositionInfoSource *</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#customEvent">customEvent</a></b> ( QEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#d_ptr-var">d_ptr</a></b> : </div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#deleteLater">deleteLater</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#destroyed">destroyed</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect">disconnect</a></b> ( const QObject *, const char *, const QObject *, const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect-2">disconnect</a></b> ( const char *, const QObject *, const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect-3">disconnect</a></b> ( const QObject *, const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnectNotify">disconnectNotify</a></b> ( const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#dumpObjectInfo">dumpObjectInfo</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#dumpObjectTree">dumpObjectTree</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#dynamicPropertyNames">dynamicPropertyNames</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#event">event</a></b> ( QEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#eventFilter">eventFilter</a></b> ( QObject *, QEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChild">findChild</a></b> ( const QString &amp; ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChildren">findChildren</a></b> ( const QString &amp; ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChildren-2">findChildren</a></b> ( const QRegExp &amp; ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#inherits">inherits</a></b> ( const char * ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#installEventFilter">installEventFilter</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#isWidgetType">isWidgetType</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#killTimer">killTimer</a></b> ( int )</div></li>
+</ul></td><td valign="top"><ul>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#lastKnownPosition">lastKnownPosition</a></b> ( bool ) const : QGeoPositionInfo</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#metaObject">metaObject</a></b> () const</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#minimumUpdateInterval">minimumUpdateInterval</a></b> () const : int</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#moveToThread">moveToThread</a></b> ( QThread * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#objectName-prop">objectName</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#parent">parent</a></b> () const</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#positionUpdated">positionUpdated</a></b> ( const QGeoPositionInfo &amp; )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#preferredPositioningMethods">preferredPositioningMethods</a></b> () const : PositioningMethods</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#property">property</a></b> ( const char * ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#receivers">receivers</a></b> ( const char * ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#removeEventFilter">removeEventFilter</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#requestTimeout">requestTimeout</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#requestUpdate">requestUpdate</a></b> ( int )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#sender">sender</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#objectName-prop">setObjectName</a></b> ( const QString &amp; )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#setParent">setParent</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#setPreferredPositioningMethods">setPreferredPositioningMethods</a></b> ( PositioningMethods )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#setProperty">setProperty</a></b> ( const char *, const QVariant &amp; )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#setUpdateInterval">setUpdateInterval</a></b> ( int )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#signalsBlocked">signalsBlocked</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#startTimer">startTimer</a></b> ( int )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#startUpdates">startUpdates</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#staticMetaObject-var">staticMetaObject</a></b> : </div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#staticQtMetaObject-var">staticQtMetaObject</a></b> : </div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#stopUpdates">stopUpdates</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#supportedPositioningMethods">supportedPositioningMethods</a></b> () const : PositioningMethods</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#thread">thread</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#timerEvent">timerEvent</a></b> ( QTimerEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#tr">tr</a></b> ( const char *, const char *, int )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#trUtf8">trUtf8</a></b> ( const char *, const char *, int )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#updateInterval">updateInterval</a></b> () const : int</div></li>
+</ul>
+</td></tr>
+</table></p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td align="left">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td align="right"><div align="right">Qt Mobility API</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/doc/html/qgeopositioninfosource.html b/doc/html/qgeopositioninfosource.html
new file mode 100644
index 0000000000..dc1b2a9905
--- /dev/null
+++ b/doc/html/qgeopositioninfosource.html
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- ../../location/qgeopositioninfosource.cpp -->
+<head>
+ <title>QGeoPositionInfoSource Class Reference</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">QGeoPositionInfoSource Class Reference</h1>
+<p>The QGeoPositionInfoSource class is an abstract base class for the distribution of positional updates. <a href="#details">More...</a></p>
+<pre> #include &lt;QGeoPositionInfoSource&gt;</pre><p>Inherits <a href="http://qt.nokia.com/doc/4.5/qobject.html">QObject</a>.</p>
+<p>Inherited by <a href="qnmeapositioninfosource.html">QNmeaPositionInfoSource</a>.</p>
+<ul>
+<li><a href="qgeopositioninfosource-members.html">List of all members, including inherited members</a></li>
+</ul>
+<hr />
+<a name="public-types"></a>
+<h2>Public Types</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#PositioningMethod-enum">PositioningMethod</a></b> { SatellitePositioningMethods, NonSatellitePositioningMethods, AllPositioningMethods }</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">flags </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#PositioningMethod-enum">PositioningMethods</a></b></td></tr>
+</table>
+<hr />
+<a name="public-functions"></a>
+<h2>Public Functions</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#QGeoPositionInfoSource">QGeoPositionInfoSource</a></b> ( QObject * <i>parent</i> = 0 )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#dtor.QGeoPositionInfoSource">~QGeoPositionInfoSource</a></b> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual QGeoPositionInfo </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#lastKnownPosition">lastKnownPosition</a></b> ( bool <i>fromSatellitePositioningMethodsOnly</i> = false ) const = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual int </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#minimumUpdateInterval">minimumUpdateInterval</a></b> () const = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">PositioningMethods </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#preferredPositioningMethods">preferredPositioningMethods</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#setPreferredPositioningMethods">setPreferredPositioningMethods</a></b> ( PositioningMethods <i>methods</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#setUpdateInterval">setUpdateInterval</a></b> ( int <i>msec</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual PositioningMethods </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#supportedPositioningMethods">supportedPositioningMethods</a></b> () const = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#updateInterval">updateInterval</a></b> () const</td></tr>
+</table>
+<ul>
+<li><div bar="2" class="fn"></div>29 public functions inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-functions">QObject</a></li>
+</ul>
+<hr />
+<a name="public-slots"></a>
+<h2>Public Slots</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#requestUpdate">requestUpdate</a></b> ( int <i>timeout</i> = 5000 ) = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#startUpdates">startUpdates</a></b> () = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#stopUpdates">stopUpdates</a></b> () = 0</td></tr>
+</table>
+<ul>
+<li><div bar="2" class="fn"></div>1 public slot inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-slots">QObject</a></li>
+</ul>
+<hr />
+<a name="signals"></a>
+<h2>Signals</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#positionUpdated">positionUpdated</a></b> ( const QGeoPositionInfo &amp; <i>update</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#requestTimeout">requestTimeout</a></b> ()</td></tr>
+</table>
+<ul>
+<li><div bar="2" class="fn"></div>1 signal inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#signals">QObject</a></li>
+</ul>
+<hr />
+<a name="static-public-members"></a>
+<h2>Static Public Members</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">QGeoPositionInfoSource * </td><td class="memItemRight" valign="bottom"><b><a href="qgeopositioninfosource.html#createSource">createSource</a></b> ( QObject * <i>parent</i> = 0 )</td></tr>
+</table>
+<ul>
+<li><div bar="2" class="fn"></div>4 static public members inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#static-public-members">QObject</a></li>
+</ul>
+<h3>Additional Inherited Members</h3>
+<ul>
+<li><div class="fn"></div>1 property inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#properties">QObject</a></li>
+<li><div class="fn"></div>1 public type inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-variables">QObject</a></li>
+<li><div class="fn"></div>7 protected functions inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#protected-functions">QObject</a></li>
+<li><div class="fn"></div>2 protected variables inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#protected-variables">QObject</a></li>
+</ul>
+<a name="details"></a>
+<hr />
+<h2>Detailed Description</h2>
+<p>The QGeoPositionInfoSource class is an abstract base class for the distribution of positional updates.</p>
+<p>The static function <a href="qgeopositioninfosource.html#createSource">QGeoPositionInfoSource::createSource</a>() creates a default position source that is appropriate for the platform, if one is available. Otherwise, QGeoPositionInfoSource can be subclassed to create an appropriate custom source of position data.</p>
+<p>Users of a QGeoPositionInfoSource subclass can request the current position using <a href="qgeopositioninfosource.html#requestUpdate">requestUpdate</a>(), or start and stop regular position updates using <a href="qgeopositioninfosource.html#startUpdates">startUpdates</a>() and <a href="qgeopositioninfosource.html#stopUpdates">stopUpdates</a>(). When an update is available, positionUpdate() is emitted. The last known position can be accessed with lastUpdate().</p>
+<p>If regular position updates are required, <a href="qgeopositioninfosource.html#setUpdateInterval">setUpdateInterval</a>() can be used to specify how often these updates should be emitted. (If no interval is specified, updates are simply provided whenever they are available.) For example:</p>
+<pre><span class="comment"> // Emit updates every 10 seconds if available</span>
+ QGeoPositionInfoSource *source = QGeoPositionInfoSource::createSource();
+ source-&gt;setUpdateInterval(10000);</pre>
+<p>To remove an update interval that was previously set, call <a href="qgeopositioninfosource.html#setUpdateInterval">setUpdateInterval</a>() with a value of 0.</p>
+<p>Note that the position source may have a minimum value requirement for update intervals, as returned by minimumIntervalForType().</p>
+<hr />
+<h2>Member Type Documentation</h2>
+<h3 class="flags"><a name="PositioningMethod-enum"></a>enum QGeoPositionInfoSource::PositioningMethod<br />flags QGeoPositionInfoSource::PositioningMethods</h3>
+<p>Defines the types of positioning methods.</p>
+<p><table class="valuelist" border="1" cellpadding="2" cellspacing="1" width="100%">
+<tr><th width="25%">Constant</th><th width="15%">Value</th><th width="60%">Description</th></tr>
+<tr><td valign="top"><tt>QGeoPositionInfoSource::SatellitePositioningMethods</tt></td><td align="center" valign="top"><tt>0x000000ff</tt></td><td valign="top">Satellite-based positioning methods such as GPS.</td></tr>
+<tr><td valign="top"><tt>QGeoPositionInfoSource::NonSatellitePositioningMethods</tt></td><td align="center" valign="top"><tt>0xffffff00</tt></td><td valign="top">Other positioning methods.</td></tr>
+<tr><td valign="top"><tt>QGeoPositionInfoSource::AllPositioningMethods</tt></td><td align="center" valign="top"><tt>0xffffffff</tt></td><td valign="top">A flag that matches all positioning methods.</td></tr>
+</table></p>
+<p>The PositioningMethods type is a typedef for <a href="qflags.html">QFlags</a>&lt;PositioningMethod&gt;. It stores an OR combination of PositioningMethod values.</p>
+<hr />
+<h2>Member Function Documentation</h2>
+<h3 class="fn"><a name="QGeoPositionInfoSource"></a>QGeoPositionInfoSource::QGeoPositionInfoSource ( <a href="http://qt.nokia.com/doc/4.5/qobject.html">QObject</a> * <i>parent</i> = 0 )</h3>
+<p>Creates a position source with the specified <i>parent</i>.</p>
+<h3 class="fn"><a name="dtor.QGeoPositionInfoSource"></a>QGeoPositionInfoSource::~QGeoPositionInfoSource ()&nbsp;&nbsp;<tt> [virtual]</tt></h3>
+<p>Destroys the position source.</p>
+<h3 class="fn"><a name="createSource"></a>QGeoPositionInfoSource * QGeoPositionInfoSource::createSource ( <a href="http://qt.nokia.com/doc/4.5/qobject.html">QObject</a> * <i>parent</i> = 0 )&nbsp;&nbsp;<tt> [static]</tt></h3>
+<p>Creates and returns a position source with the given <i>parent</i> that reads from the system's default sources of location data.</p>
+<p>Returns 0 if the system has no default position source.</p>
+<h3 class="fn"><a name="lastKnownPosition"></a><a href="qgeopositioninfo.html">QGeoPositionInfo</a> QGeoPositionInfoSource::lastKnownPosition ( bool <i>fromSatellitePositioningMethodsOnly</i> = false ) const&nbsp;&nbsp;<tt> [pure virtual]</tt></h3>
+<p>Returns an update containing the last known position, or a null update if none is available.</p>
+<p>If <i>fromSatellitePositioningMethodsOnly</i> is true, this returns the last known position received from a satellite positioning method; if none is available, a null update is returned.</p>
+<h3 class="fn"><a name="minimumUpdateInterval"></a>int QGeoPositionInfoSource::minimumUpdateInterval () const&nbsp;&nbsp;<tt> [pure virtual]</tt></h3>
+<p>Returns the minimum value accepted by <a href="qgeopositioninfosource.html#setUpdateInterval">setUpdateInterval</a>().</p>
+<h3 class="fn"><a name="positionUpdated"></a>void QGeoPositionInfoSource::positionUpdated ( const <a href="qgeopositioninfo.html">QGeoPositionInfo</a> &amp; <i>update</i> )&nbsp;&nbsp;<tt> [signal]</tt></h3>
+<p>If <a href="qgeopositioninfosource.html#startUpdates">startUpdates</a>() or <a href="qgeopositioninfosource.html#requestUpdate">requestUpdate</a>() is called, this signal is emitted when an update becomes available.</p>
+<p>The <i>update</i> value holds the value of the new update.</p>
+<h3 class="fn"><a name="preferredPositioningMethods"></a><a href="qgeopositioninfosource.html#PositioningMethod-enum">PositioningMethods</a> QGeoPositionInfoSource::preferredPositioningMethods () const</h3>
+<p>Returns the positioning methods set by <a href="qgeopositioninfosource.html#setPreferredPositioningMethods">setPreferredPositioningMethods</a>().</p>
+<p>See also <a href="qgeopositioninfosource.html#setPreferredPositioningMethods">setPreferredPositioningMethods</a>().</p>
+<h3 class="fn"><a name="requestTimeout"></a>void QGeoPositionInfoSource::requestTimeout ()&nbsp;&nbsp;<tt> [signal]</tt></h3>
+<p>Emitted if <a href="qgeopositioninfosource.html#requestUpdate">requestUpdate</a>() was called and the current position could not be retrieved within the specified timeout.</p>
+<h3 class="fn"><a name="requestUpdate"></a>void QGeoPositionInfoSource::requestUpdate ( int <i>timeout</i> = 5000 )&nbsp;&nbsp;<tt> [pure virtual slot]</tt></h3>
+<p>Attempts to get the current position and emit <a href="qgeopositioninfosource.html#positionUpdated">positionUpdated</a>() with this information. This is useful if you do not need the regular updates provided by <a href="qgeopositioninfosource.html#startUpdates">startUpdates</a>(). If the current position cannot be found within the given <i>timeout</i> (in milliseconds), <a href="qgeopositioninfosource.html#requestTimeout">requestTimeout</a>() is emitted.</p>
+<p>This does nothing if another update request is in progress. However it can be called even if <a href="qgeopositioninfosource.html#startUpdates">startUpdates</a>() has already been called and regular updates are in progress.</p>
+<p>If the source uses multiple positioning methods, it tries to gets the current position from the most accurate positioning method within the given timeout.</p>
+<h3 class="fn"><a name="setPreferredPositioningMethods"></a>void QGeoPositionInfoSource::setPreferredPositioningMethods ( <a href="qgeopositioninfosource.html#PositioningMethod-enum">PositioningMethods</a> <i>methods</i> )&nbsp;&nbsp;<tt> [virtual]</tt></h3>
+<p>Sets the preferred positioning methods for this source to <i>methods</i>.</p>
+<p>If <i>methods</i> includes a method that is not supported by the source, the unsupported method will be ignored.</p>
+<p><b>Note:</b> When reimplementing this method, subclasses must call the base method implementation to ensure <a href="qgeopositioninfosource.html#preferredPositioningMethods">preferredPositioningMethods</a>() returns the correct value.</p>
+<p>See also <a href="qgeopositioninfosource.html#preferredPositioningMethods">preferredPositioningMethods</a>() and <a href="qgeopositioninfosource.html#supportedPositioningMethods">supportedPositioningMethods</a>().</p>
+<h3 class="fn"><a name="setUpdateInterval"></a>void QGeoPositionInfoSource::setUpdateInterval ( int <i>msec</i> )&nbsp;&nbsp;<tt> [virtual]</tt></h3>
+<p>Sets the source to emit updates every <i>msec</i> milliseconds. If <i>msec</i> is 0, the source will provide updates using a default interval or some internal logic that determines when an update should be provided.</p>
+<p>If <i>msec</i> is not 0 and is less than the value returned by <a href="qgeopositioninfosource.html#minimumUpdateInterval">minimumUpdateInterval</a>(), the interval will be set to the minimum interval.</p>
+<p>Note that implementations may not provide updates at the exact interval specified. For example, a given millisecond interval value may be rounded to the nearest second if the implementation does not support intervals specified to millisecond precision.</p>
+<p><b>Note:</b> When reimplementing this method, subclasses must call the base method implementation to ensure <a href="qgeopositioninfosource.html#updateInterval">updateInterval</a>() returns the correct value.</p>
+<p>See also <a href="qgeopositioninfosource.html#updateInterval">updateInterval</a>().</p>
+<h3 class="fn"><a name="startUpdates"></a>void QGeoPositionInfoSource::startUpdates ()&nbsp;&nbsp;<tt> [pure virtual slot]</tt></h3>
+<p>Starts emitting updates at regular intervals as specified by <a href="qgeopositioninfosource.html#setUpdateInterval">setUpdateInterval</a>().</p>
+<p>If <a href="qgeopositioninfosource.html#setUpdateInterval">setUpdateInterval</a>() has not been called, the source will emit updates as soon as they become available.</p>
+<h3 class="fn"><a name="stopUpdates"></a>void QGeoPositionInfoSource::stopUpdates ()&nbsp;&nbsp;<tt> [pure virtual slot]</tt></h3>
+<p>Stops emitting updates at regular intervals.</p>
+<h3 class="fn"><a name="supportedPositioningMethods"></a><a href="qgeopositioninfosource.html#PositioningMethod-enum">PositioningMethods</a> QGeoPositionInfoSource::supportedPositioningMethods () const&nbsp;&nbsp;<tt> [pure virtual]</tt></h3>
+<p>Returns the positioning methods available to this source.</p>
+<p>See also <a href="qgeopositioninfosource.html#setPreferredPositioningMethods">setPreferredPositioningMethods</a>().</p>
+<h3 class="fn"><a name="updateInterval"></a>int QGeoPositionInfoSource::updateInterval () const</h3>
+<p>Returns the interval value set by <a href="qgeopositioninfosource.html#setUpdateInterval">setUpdateInterval</a>().</p>
+<p>Returns 0 if no interval has been set.</p>
+<p>See also <a href="qgeopositioninfosource.html#setUpdateInterval">setUpdateInterval</a>().</p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td align="left">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td align="right"><div align="right">Qt Mobility API</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/doc/html/qnmeapositioninfosource-members.html b/doc/html/qnmeapositioninfosource-members.html
new file mode 100644
index 0000000000..ea9fd17f81
--- /dev/null
+++ b/doc/html/qnmeapositioninfosource-members.html
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- ../../location/qnmeapositioninfosource.cpp -->
+<head>
+ <title>List of All Members for QNmeaPositionInfoSource</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">List of All Members for QNmeaPositionInfoSource</h1>
+<p>This is the complete list of members for <a href="qnmeapositioninfosource.html">QNmeaPositionInfoSource</a>, including inherited members.</p>
+<p><table class="propsummary" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr><td width="45%" valign="top"><ul>
+<li><div class="fn">enum <b><a href="qgeopositioninfosource.html#PositioningMethod-enum">PositioningMethod</a></b></div></li>
+<li><div class="fn">flags <b><a href="qgeopositioninfosource.html#PositioningMethod-enum">PositioningMethods</a></b></div></li>
+<li><div class="fn">enum <b><a href="qnmeapositioninfosource.html#UpdateMode-enum">UpdateMode</a></b></div></li>
+<li><div class="fn"><b><a href="qnmeapositioninfosource.html#QNmeaPositionInfoSource">QNmeaPositionInfoSource</a></b> ( UpdateMode, QObject * )</div></li>
+<li><div class="fn"><b><a href="qnmeapositioninfosource.html#dtor.QNmeaPositionInfoSource">~QNmeaPositionInfoSource</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#blockSignals">blockSignals</a></b> ( bool )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#childEvent">childEvent</a></b> ( QChildEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#children">children</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#connect">connect</a></b> ( const QObject *, const char *, const QObject *, const char *, Qt::ConnectionType )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#connect-2">connect</a></b> ( const QObject *, const char *, const char *, Qt::ConnectionType ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#connectNotify">connectNotify</a></b> ( const char * )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#createSource">createSource</a></b> ( QObject * ) : QGeoPositionInfoSource *</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#customEvent">customEvent</a></b> ( QEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#d_ptr-var">d_ptr</a></b> : </div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#deleteLater">deleteLater</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#destroyed">destroyed</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="qnmeapositioninfosource.html#device">device</a></b> () const : QIODevice *</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect">disconnect</a></b> ( const QObject *, const char *, const QObject *, const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect-2">disconnect</a></b> ( const char *, const QObject *, const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect-3">disconnect</a></b> ( const QObject *, const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnectNotify">disconnectNotify</a></b> ( const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#dumpObjectInfo">dumpObjectInfo</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#dumpObjectTree">dumpObjectTree</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#dynamicPropertyNames">dynamicPropertyNames</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#event">event</a></b> ( QEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#eventFilter">eventFilter</a></b> ( QObject *, QEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChild">findChild</a></b> ( const QString &amp; ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChildren">findChildren</a></b> ( const QString &amp; ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChildren-2">findChildren</a></b> ( const QRegExp &amp; ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#inherits">inherits</a></b> ( const char * ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#installEventFilter">installEventFilter</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#isWidgetType">isWidgetType</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#killTimer">killTimer</a></b> ( int )</div></li>
+</ul></td><td valign="top"><ul>
+<li><div class="fn"><b><a href="qnmeapositioninfosource.html#lastKnownPosition">lastKnownPosition</a></b> ( bool ) const : QGeoPositionInfo</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#metaObject">metaObject</a></b> () const</div></li>
+<li><div class="fn"><b><a href="qnmeapositioninfosource.html#minimumUpdateInterval">minimumUpdateInterval</a></b> () const : int</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#moveToThread">moveToThread</a></b> ( QThread * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#objectName-prop">objectName</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#parent">parent</a></b> () const</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#positionUpdated">positionUpdated</a></b> ( const QGeoPositionInfo &amp; )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#preferredPositioningMethods">preferredPositioningMethods</a></b> () const : PositioningMethods</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#property">property</a></b> ( const char * ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#receivers">receivers</a></b> ( const char * ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#removeEventFilter">removeEventFilter</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#requestTimeout">requestTimeout</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qnmeapositioninfosource.html#requestUpdate">requestUpdate</a></b> ( int )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#sender">sender</a></b> () const</div></li>
+<li><div class="fn"><b><a href="qnmeapositioninfosource.html#setDevice">setDevice</a></b> ( QIODevice * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#objectName-prop">setObjectName</a></b> ( const QString &amp; )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#setParent">setParent</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#setPreferredPositioningMethods">setPreferredPositioningMethods</a></b> ( PositioningMethods )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#setProperty">setProperty</a></b> ( const char *, const QVariant &amp; )</div></li>
+<li><div class="fn"><b><a href="qnmeapositioninfosource.html#setUpdateInterval">setUpdateInterval</a></b> ( int )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#signalsBlocked">signalsBlocked</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#startTimer">startTimer</a></b> ( int )</div></li>
+<li><div class="fn"><b><a href="qnmeapositioninfosource.html#startUpdates">startUpdates</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#staticMetaObject-var">staticMetaObject</a></b> : </div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#staticQtMetaObject-var">staticQtMetaObject</a></b> : </div></li>
+<li><div class="fn"><b><a href="qnmeapositioninfosource.html#stopUpdates">stopUpdates</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qnmeapositioninfosource.html#supportedPositioningMethods">supportedPositioningMethods</a></b> () const : PositioningMethods</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#thread">thread</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#timerEvent">timerEvent</a></b> ( QTimerEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#tr">tr</a></b> ( const char *, const char *, int )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#trUtf8">trUtf8</a></b> ( const char *, const char *, int )</div></li>
+<li><div class="fn"><b><a href="qgeopositioninfosource.html#updateInterval">updateInterval</a></b> () const : int</div></li>
+<li><div class="fn"><b><a href="qnmeapositioninfosource.html#updateMode">updateMode</a></b> () const : UpdateMode</div></li>
+</ul>
+</td></tr>
+</table></p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td align="left">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td align="right"><div align="right">Qt Mobility API</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/doc/html/qnmeapositioninfosource.html b/doc/html/qnmeapositioninfosource.html
new file mode 100644
index 0000000000..6daab434c2
--- /dev/null
+++ b/doc/html/qnmeapositioninfosource.html
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- ../../location/qnmeapositioninfosource.cpp -->
+<head>
+ <title>QNmeaPositionInfoSource Class Reference</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">QNmeaPositionInfoSource Class Reference</h1>
+<p>The QNmeaPositionInfoSource class provides positional information using a NMEA data source. <a href="#details">More...</a></p>
+<pre> #include &lt;QNmeaPositionInfoSource&gt;</pre><p>Inherits <a href="qgeopositioninfosource.html">QGeoPositionInfoSource</a>.</p>
+<ul>
+<li><a href="qnmeapositioninfosource-members.html">List of all members, including inherited members</a></li>
+</ul>
+<hr />
+<a name="public-types"></a>
+<h2>Public Types</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><b><a href="qnmeapositioninfosource.html#UpdateMode-enum">UpdateMode</a></b> { RealTimeMode, SimulationMode }</td></tr>
+</table>
+<hr />
+<a name="public-functions"></a>
+<h2>Public Functions</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qnmeapositioninfosource.html#QNmeaPositionInfoSource">QNmeaPositionInfoSource</a></b> ( UpdateMode <i>updateMode</i>, QObject * <i>parent</i> = 0 )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qnmeapositioninfosource.html#dtor.QNmeaPositionInfoSource">~QNmeaPositionInfoSource</a></b> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QIODevice * </td><td class="memItemRight" valign="bottom"><b><a href="qnmeapositioninfosource.html#device">device</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qnmeapositioninfosource.html#setDevice">setDevice</a></b> ( QIODevice * <i>device</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">UpdateMode </td><td class="memItemRight" valign="bottom"><b><a href="qnmeapositioninfosource.html#updateMode">updateMode</a></b> () const</td></tr>
+</table>
+<hr />
+<a name="reimplemented-public-functions"></a>
+<h2>Reimplemented Public Functions</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">virtual QGeoPositionInfo </td><td class="memItemRight" valign="bottom"><b><a href="qnmeapositioninfosource.html#lastKnownPosition">lastKnownPosition</a></b> ( bool <i>fromSatellitePositioningMethodsOnly</i> = false ) const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual int </td><td class="memItemRight" valign="bottom"><b><a href="qnmeapositioninfosource.html#minimumUpdateInterval">minimumUpdateInterval</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><b><a href="qnmeapositioninfosource.html#setUpdateInterval">setUpdateInterval</a></b> ( int <i>msec</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual PositioningMethods </td><td class="memItemRight" valign="bottom"><b><a href="qnmeapositioninfosource.html#supportedPositioningMethods">supportedPositioningMethods</a></b> () const</td></tr>
+</table>
+<ul>
+<li><div bar="2" class="fn"></div>7 public functions inherited from <a href="qgeopositioninfosource.html#public-functions">QGeoPositionInfoSource</a></li>
+<li><div bar="2" class="fn"></div>29 public functions inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-functions">QObject</a></li>
+</ul>
+<hr />
+<a name="public-slots"></a>
+<h2>Public Slots</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><b><a href="qnmeapositioninfosource.html#requestUpdate">requestUpdate</a></b> ( int <i>msec</i> = 5000 )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><b><a href="qnmeapositioninfosource.html#startUpdates">startUpdates</a></b> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><b><a href="qnmeapositioninfosource.html#stopUpdates">stopUpdates</a></b> ()</td></tr>
+</table>
+<ul>
+<li><div bar="2" class="fn"></div>3 public slots inherited from <a href="qgeopositioninfosource.html#public-slots">QGeoPositionInfoSource</a></li>
+<li><div bar="2" class="fn"></div>1 public slot inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-slots">QObject</a></li>
+</ul>
+<h3>Additional Inherited Members</h3>
+<ul>
+<li><div class="fn"></div>1 property inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#properties">QObject</a></li>
+<li><div class="fn"></div>2 signals inherited from <a href="qgeopositioninfosource.html#signals">QGeoPositionInfoSource</a></li>
+<li><div class="fn"></div>1 signal inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#signals">QObject</a></li>
+<li><div class="fn"></div>1 public type inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-variables">QObject</a></li>
+<li><div class="fn"></div>1 static public member inherited from <a href="qgeopositioninfosource.html#static-public-members">QGeoPositionInfoSource</a></li>
+<li><div class="fn"></div>4 static public members inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#static-public-members">QObject</a></li>
+<li><div class="fn"></div>7 protected functions inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#protected-functions">QObject</a></li>
+<li><div class="fn"></div>2 protected variables inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#protected-variables">QObject</a></li>
+</ul>
+<a name="details"></a>
+<hr />
+<h2>Detailed Description</h2>
+<p>The QNmeaPositionInfoSource class provides positional information using a NMEA data source.</p>
+<p>NMEA is a commonly used protocol for the specification of one's global position at a certain point in time. The QNmeaPositionInfoSource class reads NMEA data and uses it to provide positional data in the form of <a href="qgeopositioninfo.html">QGeoPositionInfo</a> objects.</p>
+<p>A QNmeaPositionInfoSource instance operates in either <a href="qnmeapositioninfosource.html#UpdateMode-enum">RealTimeMode</a> or <a href="qnmeapositioninfosource.html#UpdateMode-enum">SimulationMode</a>. These modes allow NMEA data to be read from either a live source of positional data, or replayed for simulation purposes from previously recorded NMEA data.</p>
+<p>Use setUpdateMode() to define the update mode, and <a href="qnmeapositioninfosource.html#setDevice">setDevice</a>() to set the source of NMEA data.</p>
+<p>Use <a href="qnmeapositioninfosource.html#startUpdates">startUpdates</a>() to receive regular position updates through the updated() signal, and <a href="qnmeapositioninfosource.html#stopUpdates">stopUpdates</a>() to stop these updates. If you only require updates occasionally, you can call <a href="qnmeapositioninfosource.html#requestUpdate">requestUpdate</a>() as required, instead of <a href="qnmeapositioninfosource.html#startUpdates">startUpdates</a>() and <a href="qnmeapositioninfosource.html#stopUpdates">stopUpdates</a>().</p>
+<hr />
+<h2>Member Type Documentation</h2>
+<h3 class="fn"><a name="UpdateMode-enum"></a>enum QNmeaPositionInfoSource::UpdateMode</h3>
+<p>Defines the available update modes.</p>
+<p><table class="valuelist" border="1" cellpadding="2" cellspacing="1" width="100%">
+<tr><th width="25%">Constant</th><th width="15%">Value</th><th width="60%">Description</th></tr>
+<tr><td valign="top"><tt>QNmeaPositionInfoSource::RealTimeMode</tt></td><td align="center" valign="top"><tt>1</tt></td><td valign="top">Positional data is read and distributed from the data source as it becomes available. Use this mode if you are using a live source of positional data (for example, a GPS hardware device).</td></tr>
+<tr><td valign="top"><tt>QNmeaPositionInfoSource::SimulationMode</tt></td><td align="center" valign="top"><tt>2</tt></td><td valign="top">The data and time information in the NMEA source data is used to provide positional updates at the rate at which the data was originally recorded. if the data source contains previously recorded NMEA data and you want to replay the data for simulation purposes.</td></tr>
+</table></p>
+<hr />
+<h2>Member Function Documentation</h2>
+<h3 class="fn"><a name="QNmeaPositionInfoSource"></a>QNmeaPositionInfoSource::QNmeaPositionInfoSource ( <a href="qnmeapositioninfosource.html#UpdateMode-enum">UpdateMode</a> <i>updateMode</i>, <a href="http://qt.nokia.com/doc/4.5/qobject.html">QObject</a> * <i>parent</i> = 0 )</h3>
+<p>Constructs a <a href="qnmeapositioninfosource.html">QNmeaPositionInfoSource</a> instance with the given <i>parent</i> and <i>updateMode</i>.</p>
+<h3 class="fn"><a name="dtor.QNmeaPositionInfoSource"></a>QNmeaPositionInfoSource::~QNmeaPositionInfoSource ()</h3>
+<p>Destroys the position source.</p>
+<h3 class="fn"><a name="device"></a><a href="http://qt.nokia.com/doc/4.5/qiodevice.html">QIODevice</a> * QNmeaPositionInfoSource::device () const</h3>
+<p>Returns the NMEA data source.</p>
+<p>See also <a href="qnmeapositioninfosource.html#setDevice">setDevice</a>().</p>
+<h3 class="fn"><a name="lastKnownPosition"></a><a href="qgeopositioninfo.html">QGeoPositionInfo</a> QNmeaPositionInfoSource::lastKnownPosition ( bool <i>fromSatellitePositioningMethodsOnly</i> = false ) const&nbsp;&nbsp;<tt> [virtual]</tt></h3>
+<p>Reimplemented from <a href="qgeopositioninfosource.html#lastKnownPosition">QGeoPositionInfoSource::lastKnownPosition</a>().</p>
+<h3 class="fn"><a name="minimumUpdateInterval"></a>int QNmeaPositionInfoSource::minimumUpdateInterval () const&nbsp;&nbsp;<tt> [virtual]</tt></h3>
+<p>Reimplemented from <a href="qgeopositioninfosource.html#minimumUpdateInterval">QGeoPositionInfoSource::minimumUpdateInterval</a>().</p>
+<h3 class="fn"><a name="requestUpdate"></a>void QNmeaPositionInfoSource::requestUpdate ( int <i>msec</i> = 5000 )&nbsp;&nbsp;<tt> [virtual slot]</tt></h3>
+<p>Reimplemented from <a href="qgeopositioninfosource.html#requestUpdate">QGeoPositionInfoSource::requestUpdate</a>().</p>
+<h3 class="fn"><a name="setDevice"></a>void QNmeaPositionInfoSource::setDevice ( <a href="http://qt.nokia.com/doc/4.5/qiodevice.html">QIODevice</a> * <i>device</i> )</h3>
+<p>Sets the NMEA data source to <i>device</i>. If the device is not open, it will be opened in <a href="http://qt.nokia.com/doc/4.5/qiodevice.html#OpenModeFlag-enum">QIODevice::ReadOnly</a> mode.</p>
+<p>The source device can only be set once and must be set before calling <a href="qnmeapositioninfosource.html#startUpdates">startUpdates</a>() or <a href="qnmeapositioninfosource.html#requestUpdate">requestUpdate</a>().</p>
+<p><b>Note:</b> The <i>device</i> must emit <a href="http://qt.nokia.com/doc/4.5/qiodevice.html#readyRead">QIODevice::readyRead</a>() for the source to be notified when data is available for reading.</p>
+<p>See also <a href="qnmeapositioninfosource.html#device">device</a>().</p>
+<h3 class="fn"><a name="setUpdateInterval"></a>void QNmeaPositionInfoSource::setUpdateInterval ( int <i>msec</i> )&nbsp;&nbsp;<tt> [virtual]</tt></h3>
+<p>Reimplemented from <a href="qgeopositioninfosource.html#setUpdateInterval">QGeoPositionInfoSource::setUpdateInterval</a>().</p>
+<h3 class="fn"><a name="startUpdates"></a>void QNmeaPositionInfoSource::startUpdates ()&nbsp;&nbsp;<tt> [virtual slot]</tt></h3>
+<p>Reimplemented from <a href="qgeopositioninfosource.html#startUpdates">QGeoPositionInfoSource::startUpdates</a>().</p>
+<h3 class="fn"><a name="stopUpdates"></a>void QNmeaPositionInfoSource::stopUpdates ()&nbsp;&nbsp;<tt> [virtual slot]</tt></h3>
+<p>Reimplemented from <a href="qgeopositioninfosource.html#stopUpdates">QGeoPositionInfoSource::stopUpdates</a>().</p>
+<h3 class="fn"><a name="supportedPositioningMethods"></a><a href="qgeopositioninfosource.html#PositioningMethod-enum">PositioningMethods</a> QNmeaPositionInfoSource::supportedPositioningMethods () const&nbsp;&nbsp;<tt> [virtual]</tt></h3>
+<p>Reimplemented from <a href="qgeopositioninfosource.html#supportedPositioningMethods">QGeoPositionInfoSource::supportedPositioningMethods</a>().</p>
+<h3 class="fn"><a name="updateMode"></a><a href="qnmeapositioninfosource.html#UpdateMode-enum">UpdateMode</a> QNmeaPositionInfoSource::updateMode () const</h3>
+<p>Returns the update mode. The default mode is QNmeaPositionInfoSource::InvalidMode.</p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td align="left">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td align="right"><div align="right">Qt Mobility API</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/doc/html/qsatelliteinfo-members.html b/doc/html/qsatelliteinfo-members.html
new file mode 100644
index 0000000000..8cafee8e1b
--- /dev/null
+++ b/doc/html/qsatelliteinfo-members.html
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- ../../location/qsatelliteinfo.cpp -->
+<head>
+ <title>List of All Members for QSatelliteInfo</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">List of All Members for QSatelliteInfo</h1>
+<p>This is the complete list of members for <a href="qsatelliteinfo.html">QSatelliteInfo</a>, including inherited members.</p>
+<ul>
+<li><div class="fn">enum <b><a href="qsatelliteinfo.html#Property-enum">Property</a></b></div></li>
+<li><div class="fn"><b><a href="qsatelliteinfo.html#QSatelliteInfo">QSatelliteInfo</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfo.html#QSatelliteInfo-2">QSatelliteInfo</a></b> ( const QSatelliteInfo &amp; )</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfo.html#dtor.QSatelliteInfo">~QSatelliteInfo</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfo.html#hasProperty">hasProperty</a></b> ( Property ) const : bool</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfo.html#prnNumber">prnNumber</a></b> () const : int</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfo.html#property">property</a></b> ( Property ) const : qreal</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfo.html#removeProperty">removeProperty</a></b> ( Property )</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfo.html#setPrnNumber">setPrnNumber</a></b> ( int )</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfo.html#setProperty">setProperty</a></b> ( Property, qreal )</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfo.html#setSignalStrength">setSignalStrength</a></b> ( int )</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfo.html#signalStrength">signalStrength</a></b> () const : int</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfo.html#operator-not-eq">operator!=</a></b> ( const QSatelliteInfo &amp; ) const : bool</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfo.html#operator-eq">operator=</a></b> ( const QSatelliteInfo &amp; ) : QSatelliteInfo &amp;</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfo.html#operator-eq-eq">operator==</a></b> ( const QSatelliteInfo &amp; ) const : bool</div></li>
+</ul>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td align="left">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td align="right"><div align="right">Qt Mobility API</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/doc/html/qsatelliteinfo.html b/doc/html/qsatelliteinfo.html
new file mode 100644
index 0000000000..e505d3f0e1
--- /dev/null
+++ b/doc/html/qsatelliteinfo.html
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- ../../location/qsatelliteinfo.cpp -->
+<head>
+ <title>QSatelliteInfo Class Reference</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">QSatelliteInfo Class Reference</h1>
+<p>The QSatelliteInfo class contains basic information about a satellite. <a href="#details">More...</a></p>
+<pre> #include &lt;QSatelliteInfo&gt;</pre><ul>
+<li><a href="qsatelliteinfo-members.html">List of all members, including inherited members</a></li>
+</ul>
+<hr />
+<a name="public-types"></a>
+<h2>Public Types</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#Property-enum">Property</a></b> { Elevation, Azimuth }</td></tr>
+</table>
+<hr />
+<a name="public-functions"></a>
+<h2>Public Functions</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#QSatelliteInfo">QSatelliteInfo</a></b> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#QSatelliteInfo-2">QSatelliteInfo</a></b> ( const QSatelliteInfo &amp; <i>other</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#dtor.QSatelliteInfo">~QSatelliteInfo</a></b> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#hasProperty">hasProperty</a></b> ( Property <i>property</i> ) const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#prnNumber">prnNumber</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">qreal </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#property">property</a></b> ( Property <i>property</i> ) const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#removeProperty">removeProperty</a></b> ( Property <i>property</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#setPrnNumber">setPrnNumber</a></b> ( int <i>prn</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#setProperty">setProperty</a></b> ( Property <i>property</i>, qreal <i>value</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#setSignalStrength">setSignalStrength</a></b> ( int <i>signalStrength</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#signalStrength">signalStrength</a></b> () const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#operator-not-eq">operator!=</a></b> ( const QSatelliteInfo &amp; <i>other</i> ) const</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QSatelliteInfo &amp; </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#operator-eq">operator=</a></b> ( const QSatelliteInfo &amp; <i>other</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfo.html#operator-eq-eq">operator==</a></b> ( const QSatelliteInfo &amp; <i>other</i> ) const</td></tr>
+</table>
+<a name="details"></a>
+<hr />
+<h2>Detailed Description</h2>
+<p>The QSatelliteInfo class contains basic information about a satellite.</p>
+<p>See also <a href="qsatelliteinfosource.html">QSatelliteInfoSource</a>.</p>
+<hr />
+<h2>Member Type Documentation</h2>
+<h3 class="fn"><a name="Property-enum"></a>enum QSatelliteInfo::Property</h3>
+<p>Defines the properties for the satellite information.</p>
+<p><table class="valuelist" border="1" cellpadding="2" cellspacing="1" width="100%">
+<tr><th width="25%">Constant</th><th width="15%">Value</th><th width="60%">Description</th></tr>
+<tr><td valign="top"><tt>QSatelliteInfo::Elevation</tt></td><td align="center" valign="top"><tt>0</tt></td><td valign="top">The elevation of the satellite, in degrees.</td></tr>
+<tr><td valign="top"><tt>QSatelliteInfo::Azimuth</tt></td><td align="center" valign="top"><tt>1</tt></td><td valign="top">The azimuth to true north, in degrees.</td></tr>
+</table></p>
+<hr />
+<h2>Member Function Documentation</h2>
+<h3 class="fn"><a name="QSatelliteInfo"></a>QSatelliteInfo::QSatelliteInfo ()</h3>
+<p>Creates a satellite information object.</p>
+<h3 class="fn"><a name="QSatelliteInfo-2"></a>QSatelliteInfo::QSatelliteInfo ( const QSatelliteInfo &amp; <i>other</i> )</h3>
+<p>Creates a satellite information object with the values of <i>other</i>.</p>
+<h3 class="fn"><a name="dtor.QSatelliteInfo"></a>QSatelliteInfo::~QSatelliteInfo ()</h3>
+<p>Destroys a satellite information object.</p>
+<h3 class="fn"><a name="hasProperty"></a>bool QSatelliteInfo::hasProperty ( <a href="qsatelliteinfo.html#Property-enum">Property</a> <i>property</i> ) const</h3>
+<p>Returns true if the specified <i>property</i> is present in this update.</p>
+<h3 class="fn"><a name="prnNumber"></a>int QSatelliteInfo::prnNumber () const</h3>
+<p>Returns the PRN (Pseudo-random noise) number, or -1 if the value has not been set.</p>
+<p>See also <a href="qsatelliteinfo.html#setPrnNumber">setPrnNumber</a>().</p>
+<h3 class="fn"><a name="property"></a><a href="http://qt.nokia.com/doc/4.5/qtglobal.html#qreal-typedef">qreal</a> QSatelliteInfo::property ( <a href="qsatelliteinfo.html#Property-enum">Property</a> <i>property</i> ) const</h3>
+<p>Returns the value of the specified <i>property</i> as a qreal value.</p>
+<p>Returns -1 if the value has not been set.</p>
+<p>See also <a href="qsatelliteinfo.html#hasProperty">hasProperty</a>() and <a href="qsatelliteinfo.html#setProperty">setProperty</a>().</p>
+<h3 class="fn"><a name="removeProperty"></a>void QSatelliteInfo::removeProperty ( <a href="qsatelliteinfo.html#Property-enum">Property</a> <i>property</i> )</h3>
+<p>Removes the specified <i>property</i> and its value.</p>
+<h3 class="fn"><a name="setPrnNumber"></a>void QSatelliteInfo::setPrnNumber ( int <i>prn</i> )</h3>
+<p>Sets the PRN (Pseudo-random noise) number to <i>prn</i>.</p>
+<p>The PRN number can be used to identify a satellite.</p>
+<p>See also <a href="qsatelliteinfo.html#prnNumber">prnNumber</a>().</p>
+<h3 class="fn"><a name="setProperty"></a>void QSatelliteInfo::setProperty ( <a href="qsatelliteinfo.html#Property-enum">Property</a> <i>property</i>, <a href="http://qt.nokia.com/doc/4.5/qtglobal.html#qreal-typedef">qreal</a> <i>value</i> )</h3>
+<p>Sets the value for <i>property</i> to <i>value</i>.</p>
+<p>See also <a href="qsatelliteinfo.html#property">property</a>().</p>
+<h3 class="fn"><a name="setSignalStrength"></a>void QSatelliteInfo::setSignalStrength ( int <i>signalStrength</i> )</h3>
+<p>Sets the signal strength to <i>signalStrength</i>, in decibels.</p>
+<p>See also <a href="qsatelliteinfo.html#signalStrength">signalStrength</a>().</p>
+<h3 class="fn"><a name="signalStrength"></a>int QSatelliteInfo::signalStrength () const</h3>
+<p>Returns the signal strength, or -1 if the value has not been set.</p>
+<p>See also <a href="qsatelliteinfo.html#setSignalStrength">setSignalStrength</a>().</p>
+<h3 class="fn"><a name="operator-not-eq"></a>bool QSatelliteInfo::operator!= ( const QSatelliteInfo &amp; <i>other</i> ) const</h3>
+<p>Returns true if any of the information for this satellite are not the same as those of <i>other</i>.</p>
+<h3 class="fn"><a name="operator-eq"></a>QSatelliteInfo &amp; QSatelliteInfo::operator= ( const QSatelliteInfo &amp; <i>other</i> )</h3>
+<p>Assigns the values from <i>other</i> to this object.</p>
+<h3 class="fn"><a name="operator-eq-eq"></a>bool QSatelliteInfo::operator== ( const QSatelliteInfo &amp; <i>other</i> ) const</h3>
+<p>Returns true if all the information for this satellite are the same as those of <i>other</i>.</p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td align="left">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td align="right"><div align="right">Qt Mobility API</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/doc/html/qsatelliteinfosource-members.html b/doc/html/qsatelliteinfosource-members.html
new file mode 100644
index 0000000000..651e75ed22
--- /dev/null
+++ b/doc/html/qsatelliteinfosource-members.html
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- ../../location/qsatelliteinfosource.cpp -->
+<head>
+ <title>List of All Members for QSatelliteInfoSource</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">List of All Members for QSatelliteInfoSource</h1>
+<p>This is the complete list of members for <a href="qsatelliteinfosource.html">QSatelliteInfoSource</a>, including inherited members.</p>
+<p><table class="propsummary" width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr><td width="45%" valign="top"><ul>
+<li><div class="fn"><b><a href="qsatelliteinfosource.html#QSatelliteInfoSource">QSatelliteInfoSource</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#blockSignals">blockSignals</a></b> ( bool )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#childEvent">childEvent</a></b> ( QChildEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#children">children</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#connect">connect</a></b> ( const QObject *, const char *, const QObject *, const char *, Qt::ConnectionType )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#connect-2">connect</a></b> ( const QObject *, const char *, const char *, Qt::ConnectionType ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#connectNotify">connectNotify</a></b> ( const char * )</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfosource.html#createSource">createSource</a></b> ( QObject * ) : QSatelliteInfoSource *</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#customEvent">customEvent</a></b> ( QEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#d_ptr-var">d_ptr</a></b> : </div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#deleteLater">deleteLater</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#destroyed">destroyed</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect">disconnect</a></b> ( const QObject *, const char *, const QObject *, const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect-2">disconnect</a></b> ( const char *, const QObject *, const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnect-3">disconnect</a></b> ( const QObject *, const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#disconnectNotify">disconnectNotify</a></b> ( const char * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#dumpObjectInfo">dumpObjectInfo</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#dumpObjectTree">dumpObjectTree</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#dynamicPropertyNames">dynamicPropertyNames</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#event">event</a></b> ( QEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#eventFilter">eventFilter</a></b> ( QObject *, QEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChild">findChild</a></b> ( const QString &amp; ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChildren">findChildren</a></b> ( const QString &amp; ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#findChildren-2">findChildren</a></b> ( const QRegExp &amp; ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#inherits">inherits</a></b> ( const char * ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#installEventFilter">installEventFilter</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#isWidgetType">isWidgetType</a></b> () const</div></li>
+</ul></td><td valign="top"><ul>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#killTimer">killTimer</a></b> ( int )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#metaObject">metaObject</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#moveToThread">moveToThread</a></b> ( QThread * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#objectName-prop">objectName</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#parent">parent</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#property">property</a></b> ( const char * ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#receivers">receivers</a></b> ( const char * ) const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#removeEventFilter">removeEventFilter</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfosource.html#requestTimeout">requestTimeout</a></b> ()</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfosource.html#requestUpdate">requestUpdate</a></b> ( int )</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfosource.html#satellitesInUseUpdated">satellitesInUseUpdated</a></b> ( const QList&lt;QSatelliteInfo&gt; &amp; )</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfosource.html#satellitesInViewUpdated">satellitesInViewUpdated</a></b> ( const QList&lt;QSatelliteInfo&gt; &amp; )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#sender">sender</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#objectName-prop">setObjectName</a></b> ( const QString &amp; )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#setParent">setParent</a></b> ( QObject * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#setProperty">setProperty</a></b> ( const char *, const QVariant &amp; )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#signalsBlocked">signalsBlocked</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#startTimer">startTimer</a></b> ( int )</div></li>
+<li><div class="fn"><b><a href="qsatelliteinfosource.html#startUpdates">startUpdates</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#staticMetaObject-var">staticMetaObject</a></b> : </div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#staticQtMetaObject-var">staticQtMetaObject</a></b> : </div></li>
+<li><div class="fn"><b><a href="qsatelliteinfosource.html#stopUpdates">stopUpdates</a></b> ()</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#thread">thread</a></b> () const</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#timerEvent">timerEvent</a></b> ( QTimerEvent * )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#tr">tr</a></b> ( const char *, const char *, int )</div></li>
+<li><div class="fn"><b><a href="http://qt.nokia.com/doc/4.5/qobject.html#trUtf8">trUtf8</a></b> ( const char *, const char *, int )</div></li>
+</ul>
+</td></tr>
+</table></p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td align="left">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td align="right"><div align="right">Qt Mobility API</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/doc/html/qsatelliteinfosource.html b/doc/html/qsatelliteinfosource.html
new file mode 100644
index 0000000000..2aae0c27c2
--- /dev/null
+++ b/doc/html/qsatelliteinfosource.html
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<!-- ../../location/qsatelliteinfosource.cpp -->
+<head>
+ <title>QSatelliteInfoSource Class Reference</title>
+ <link href="classic.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr>
+<td align="left" valign="top" width="32"><img src="images/qtlogo.png" align="left" border="0" /></td>
+<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a></td>
+<td align="right" valign="top" width="230"><img src="images/codeless.png" border="0" /></td></tr></table><h1 class="title">QSatelliteInfoSource Class Reference</h1>
+<p>The QSatelliteInfoSource class is an abstract base class for the distribution of satellite information updates. <a href="#details">More...</a></p>
+<pre> #include &lt;QSatelliteInfoSource&gt;</pre><p>Inherits <a href="http://qt.nokia.com/doc/4.5/qobject.html">QObject</a>.</p>
+<ul>
+<li><a href="qsatelliteinfosource-members.html">List of all members, including inherited members</a></li>
+</ul>
+<hr />
+<a name="public-functions"></a>
+<h2>Public Functions</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top"></td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfosource.html#QSatelliteInfoSource">QSatelliteInfoSource</a></b> ( QObject * <i>parent</i> = 0 )</td></tr>
+</table>
+<ul>
+<li><div bar="2" class="fn"></div>29 public functions inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-functions">QObject</a></li>
+</ul>
+<hr />
+<a name="public-slots"></a>
+<h2>Public Slots</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfosource.html#requestUpdate">requestUpdate</a></b> ( int <i>timeout</i> = 5000 ) = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfosource.html#startUpdates">startUpdates</a></b> () = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfosource.html#stopUpdates">stopUpdates</a></b> () = 0</td></tr>
+</table>
+<ul>
+<li><div bar="2" class="fn"></div>1 public slot inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-slots">QObject</a></li>
+</ul>
+<hr />
+<a name="signals"></a>
+<h2>Signals</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfosource.html#requestTimeout">requestTimeout</a></b> ()</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfosource.html#satellitesInUseUpdated">satellitesInUseUpdated</a></b> ( const QList&lt;QSatelliteInfo&gt; &amp; <i>satellites</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfosource.html#satellitesInViewUpdated">satellitesInViewUpdated</a></b> ( const QList&lt;QSatelliteInfo&gt; &amp; <i>satellites</i> )</td></tr>
+</table>
+<ul>
+<li><div bar="2" class="fn"></div>1 signal inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#signals">QObject</a></li>
+</ul>
+<hr />
+<a name="static-public-members"></a>
+<h2>Static Public Members</h2>
+<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
+<tr><td class="memItemLeft" align="right" valign="top">QSatelliteInfoSource * </td><td class="memItemRight" valign="bottom"><b><a href="qsatelliteinfosource.html#createSource">createSource</a></b> ( QObject * <i>parent</i> = 0 )</td></tr>
+</table>
+<ul>
+<li><div bar="2" class="fn"></div>4 static public members inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#static-public-members">QObject</a></li>
+</ul>
+<h3>Additional Inherited Members</h3>
+<ul>
+<li><div class="fn"></div>1 property inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#properties">QObject</a></li>
+<li><div class="fn"></div>1 public type inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#public-variables">QObject</a></li>
+<li><div class="fn"></div>7 protected functions inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#protected-functions">QObject</a></li>
+<li><div class="fn"></div>2 protected variables inherited from <a href="http://qt.nokia.com/doc/4.5/qobject.html#protected-variables">QObject</a></li>
+</ul>
+<a name="details"></a>
+<hr />
+<h2>Detailed Description</h2>
+<p>The QSatelliteInfoSource class is an abstract base class for the distribution of satellite information updates.</p>
+<p>The static function <a href="qsatelliteinfosource.html#createSource">QSatelliteInfoSource::createSource</a>() creates a default satellite data source that is appropriate for the platform, if one is available. Otherwise, QSatelliteInfoSource can be subclassed to create an appropriate custom source of satellite data.</p>
+<p>Call <a href="qsatelliteinfosource.html#startUpdates">startUpdates</a>() and <a href="qsatelliteinfosource.html#stopUpdates">stopUpdates</a>() to start and stop regular updates, or <a href="qsatelliteinfosource.html#requestUpdate">requestUpdate</a>() to request a single update. When an update is available, <a href="qsatelliteinfosource.html#satellitesInViewUpdated">satellitesInViewUpdated</a>() and/or <a href="qsatelliteinfosource.html#satellitesInUseUpdated">satellitesInUseUpdated</a>() will be emitted.</p>
+<hr />
+<h2>Member Function Documentation</h2>
+<h3 class="fn"><a name="QSatelliteInfoSource"></a>QSatelliteInfoSource::QSatelliteInfoSource ( <a href="http://qt.nokia.com/doc/4.5/qobject.html">QObject</a> * <i>parent</i> = 0 )</h3>
+<p>Creates a source with the specified <i>parent</i>.</p>
+<h3 class="fn"><a name="createSource"></a>QSatelliteInfoSource * QSatelliteInfoSource::createSource ( <a href="http://qt.nokia.com/doc/4.5/qobject.html">QObject</a> * <i>parent</i> = 0 )&nbsp;&nbsp;<tt> [static]</tt></h3>
+<p>Creates and returns a source with the specified <i>parent</i> that reads from the system's default source of satellite update information.</p>
+<p>Returns 0 if the system has no default source.</p>
+<h3 class="fn"><a name="requestTimeout"></a>void QSatelliteInfoSource::requestTimeout ()&nbsp;&nbsp;<tt> [signal]</tt></h3>
+<p>Emitted if <a href="qsatelliteinfosource.html#requestUpdate">requestUpdate</a>() was called and the current satellite information could not be retrieved within the specified timeout.</p>
+<h3 class="fn"><a name="requestUpdate"></a>void QSatelliteInfoSource::requestUpdate ( int <i>timeout</i> = 5000 )&nbsp;&nbsp;<tt> [pure virtual slot]</tt></h3>
+<p>Attempts to get the current satellite information and emit <a href="qsatelliteinfosource.html#satellitesInViewUpdated">satellitesInViewUpdated</a>() and <a href="qsatelliteinfosource.html#satellitesInUseUpdated">satellitesInUseUpdated</a>() with this information. This is useful if you do not need the regular updates provided by <a href="qsatelliteinfosource.html#startUpdates">startUpdates</a>(). If the current position cannot be found within the given <i>timeout</i> (in milliseconds), <a href="qsatelliteinfosource.html#requestTimeout">requestTimeout</a>() is emitted.</p>
+<p>This does nothing if another update request is in progress. However it can be called even if <a href="qsatelliteinfosource.html#startUpdates">startUpdates</a>() has already been called and regular updates are in progress.</p>
+<h3 class="fn"><a name="satellitesInUseUpdated"></a>void QSatelliteInfoSource::satellitesInUseUpdated ( const <a href="http://qt.nokia.com/doc/4.5/qlist.html">QList</a>&lt;<a href="qsatelliteinfo.html">QSatelliteInfo</a>&gt; &amp; <i>satellites</i> )&nbsp;&nbsp;<tt> [signal]</tt></h3>
+<p>If <a href="qsatelliteinfosource.html#startUpdates">startUpdates</a>() or <a href="qsatelliteinfosource.html#requestUpdate">requestUpdate</a>() is called, this signal is emitted when an update is available on the number of satellites that are currently in use.</p>
+<p>These are the satellites that are used to get a &quot;fix&quot; - that is, those used to determine the current position.</p>
+<p>The <i>satellites</i> parameter holds the satellites currently in use.</p>
+<h3 class="fn"><a name="satellitesInViewUpdated"></a>void QSatelliteInfoSource::satellitesInViewUpdated ( const <a href="http://qt.nokia.com/doc/4.5/qlist.html">QList</a>&lt;<a href="qsatelliteinfo.html">QSatelliteInfo</a>&gt; &amp; <i>satellites</i> )&nbsp;&nbsp;<tt> [signal]</tt></h3>
+<p>If <a href="qsatelliteinfosource.html#startUpdates">startUpdates</a>() or <a href="qsatelliteinfosource.html#requestUpdate">requestUpdate</a>() is called, this signal is emitted when an update is available on the satellites that are currently in view.</p>
+<p>The <i>satellites</i> parameter holds the satellites currently in view.</p>
+<h3 class="fn"><a name="startUpdates"></a>void QSatelliteInfoSource::startUpdates ()&nbsp;&nbsp;<tt> [pure virtual slot]</tt></h3>
+<p>Starts emitting updates at regular intervals. The updates will be provided whenever new satellite information becomes available.</p>
+<p>See also <a href="qsatelliteinfosource.html#satellitesInViewUpdated">satellitesInViewUpdated</a>() and <a href="qsatelliteinfosource.html#satellitesInUseUpdated">satellitesInUseUpdated</a>().</p>
+<h3 class="fn"><a name="stopUpdates"></a>void QSatelliteInfoSource::stopUpdates ()&nbsp;&nbsp;<tt> [pure virtual slot]</tt></h3>
+<p>Stops emitting updates at regular intervals.</p>
+<p /><address><hr /><div align="center">
+<table width="100%" cellspacing="0" border="0"><tr class="address">
+<td align="left">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>
+<td align="right"><div align="right">Qt Mobility API</div></td>
+</tr></table></div></address></body>
+</html>
diff --git a/doc/html/qservicefilter.html b/doc/html/qservicefilter.html
index 80562fb8e4..1342ef8586 100644
--- a/doc/html/qservicefilter.html
+++ b/doc/html/qservicefilter.html
@@ -49,8 +49,8 @@
<a name="related-non-members"></a>
<h2>Related Non-Members</h2>
<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr><td class="memItemLeft" align="right" valign="top">QDataStream &amp; </td><td class="memItemRight" valign="bottom"><b><a href="qservicefilter.html#operator-lt-lt-75">operator&lt;&lt;</a></b> ( QDataStream &amp; <i>out</i>, const QServiceFilter &amp; <i>sf</i> )</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">QDataStream &amp; </td><td class="memItemRight" valign="bottom"><b><a href="qservicefilter.html#operator-gt-gt-72">operator&gt;&gt;</a></b> ( QDataStream &amp; <i>in</i>, QServiceFilter &amp; <i>sf</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QDataStream &amp; </td><td class="memItemRight" valign="bottom"><b><a href="qservicefilter.html#operator-lt-lt-81">operator&lt;&lt;</a></b> ( QDataStream &amp; <i>out</i>, const QServiceFilter &amp; <i>sf</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QDataStream &amp; </td><td class="memItemRight" valign="bottom"><b><a href="qservicefilter.html#operator-gt-gt-74">operator&gt;&gt;</a></b> ( QDataStream &amp; <i>in</i>, QServiceFilter &amp; <i>sf</i> )</td></tr>
</table>
<a name="details"></a>
<hr />
@@ -117,9 +117,9 @@
<p>Copies the content of the <a href="qservicefilter.html">QServiceFilter</a> object contained in <i>other</i> into this one.</p>
<hr />
<h2>Related Non-Members</h2>
-<h3 class="fn"><a name="operator-lt-lt-75"></a><a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; operator&lt;&lt; ( <a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; <i>out</i>, const QServiceFilter &amp; <i>sf</i> )</h3>
+<h3 class="fn"><a name="operator-lt-lt-81"></a><a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; operator&lt;&lt; ( <a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; <i>out</i>, const QServiceFilter &amp; <i>sf</i> )</h3>
<p>Writes service filter <i>sf</i> to the stream <i>out</i> and returns a reference to the stream.</p>
-<h3 class="fn"><a name="operator-gt-gt-72"></a><a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; operator&gt;&gt; ( <a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; <i>in</i>, QServiceFilter &amp; <i>sf</i> )</h3>
+<h3 class="fn"><a name="operator-gt-gt-74"></a><a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; operator&gt;&gt; ( <a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; <i>in</i>, QServiceFilter &amp; <i>sf</i> )</h3>
<p>Reads a service filter into <i>sf</i> from the stream <i>in</i> and returns a reference to the stream.</p>
<p /><address><hr /><div align="center">
<table width="100%" cellspacing="0" border="0"><tr class="address">
diff --git a/doc/html/qserviceinterfacedescriptor.html b/doc/html/qserviceinterfacedescriptor.html
index e051fff085..210fed1a0d 100644
--- a/doc/html/qserviceinterfacedescriptor.html
+++ b/doc/html/qserviceinterfacedescriptor.html
@@ -46,8 +46,8 @@
<a name="related-non-members"></a>
<h2>Related Non-Members</h2>
<table class="alignedsummary" border="0" cellpadding="0" cellspacing="0" width="100%">
-<tr><td class="memItemLeft" align="right" valign="top">QDataStream &amp; </td><td class="memItemRight" valign="bottom"><b><a href="qserviceinterfacedescriptor.html#operator-lt-lt-77">operator&lt;&lt;</a></b> ( QDataStream &amp; <i>out</i>, const QServiceInterfaceDescriptor &amp; <i>dc</i> )</td></tr>
-<tr><td class="memItemLeft" align="right" valign="top">QDataStream &amp; </td><td class="memItemRight" valign="bottom"><b><a href="qserviceinterfacedescriptor.html#operator-gt-gt-74">operator&gt;&gt;</a></b> ( QDataStream &amp; <i>in</i>, QServiceInterfaceDescriptor &amp; <i>dc</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QDataStream &amp; </td><td class="memItemRight" valign="bottom"><b><a href="qserviceinterfacedescriptor.html#operator-lt-lt-78">operator&lt;&lt;</a></b> ( QDataStream &amp; <i>out</i>, const QServiceInterfaceDescriptor &amp; <i>dc</i> )</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">QDataStream &amp; </td><td class="memItemRight" valign="bottom"><b><a href="qserviceinterfacedescriptor.html#operator-gt-gt-73">operator&gt;&gt;</a></b> ( QDataStream &amp; <i>in</i>, QServiceInterfaceDescriptor &amp; <i>dc</i> )</td></tr>
</table>
<a name="details"></a>
<hr />
@@ -106,9 +106,9 @@
<p>Compares a <a href="qserviceinterfacedescriptor.html">QServiceInterfaceDescriptor</a> to <i>other</i>. Returns true if they are equal and false otherwise.</p>
<hr />
<h2>Related Non-Members</h2>
-<h3 class="fn"><a name="operator-lt-lt-77"></a><a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; operator&lt;&lt; ( <a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; <i>out</i>, const QServiceInterfaceDescriptor &amp; <i>dc</i> )</h3>
+<h3 class="fn"><a name="operator-lt-lt-78"></a><a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; operator&lt;&lt; ( <a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; <i>out</i>, const QServiceInterfaceDescriptor &amp; <i>dc</i> )</h3>
<p>Writes service interface descriptor <i>dc</i> to the stream <i>out</i> and returns a reference to the stream.</p>
-<h3 class="fn"><a name="operator-gt-gt-74"></a><a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; operator&gt;&gt; ( <a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; <i>in</i>, QServiceInterfaceDescriptor &amp; <i>dc</i> )</h3>
+<h3 class="fn"><a name="operator-gt-gt-73"></a><a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; operator&gt;&gt; ( <a href="http://qt.nokia.com/doc/4.5/qdatastream.html">QDataStream</a> &amp; <i>in</i>, QServiceInterfaceDescriptor &amp; <i>dc</i> )</h3>
<p>Reads a service interface descriptor into <i>dc</i> from the stream <i>in</i> and returns a reference to the stream.</p>
<p /><address><hr /><div align="center">
<table width="100%" cellspacing="0" border="0"><tr class="address">
diff --git a/doc/html/qt-mobility-library.dcf b/doc/html/qt-mobility-library.dcf
index b3832abd88..e2dd3b3d20 100644
--- a/doc/html/qt-mobility-library.dcf
+++ b/doc/html/qt-mobility-library.dcf
@@ -6,6 +6,90 @@
<keyword ref="qabstractsecuritysession.html#isAllowed">isAllowed</keyword>
<section ref="qabstractsecuritysession-members.html" title="List of all members"/>
</section>
+ <section ref="qgeoareamonitor.html" title="QGeoAreaMonitor Class Reference">
+ <keyword ref="qgeoareamonitor.html">QGeoAreaMonitor</keyword>
+ <keyword ref="qgeoareamonitor.html#areaEntered">areaEntered</keyword>
+ <keyword ref="qgeoareamonitor.html#areaExited">areaExited</keyword>
+ <keyword ref="qgeoareamonitor.html#coordinate">coordinate</keyword>
+ <keyword ref="qgeoareamonitor.html#createMonitor">createMonitor</keyword>
+ <keyword ref="qgeoareamonitor.html#radius">radius</keyword>
+ <keyword ref="qgeoareamonitor.html#setMonitoredArea">setMonitoredArea</keyword>
+ <section ref="qgeoareamonitor-members.html" title="List of all members"/>
+ </section>
+ <section ref="qgeocoordinate.html" title="QGeoCoordinate Class Reference">
+ <keyword ref="qgeocoordinate.html">QGeoCoordinate</keyword>
+ <keyword ref="qgeocoordinate.html#CoordinateFormat-enum">CoordinateFormat</keyword>
+ <keyword ref="qgeocoordinate.html#CoordinateFormat-enum">QGeoCoordinate::DecimalDegreesWithHemisphere</keyword>
+ <keyword ref="qgeocoordinate.html#CoordinateFormat-enum">QGeoCoordinate::DecimalDegrees</keyword>
+ <keyword ref="qgeocoordinate.html#CoordinateFormat-enum">QGeoCoordinate::DegreesMinutes</keyword>
+ <keyword ref="qgeocoordinate.html#CoordinateFormat-enum">QGeoCoordinate::DegreesMinutesWithHemisphere</keyword>
+ <keyword ref="qgeocoordinate.html#CoordinateFormat-enum">QGeoCoordinate::DegreesMinutesSeconds</keyword>
+ <keyword ref="qgeocoordinate.html#CoordinateFormat-enum">QGeoCoordinate::DegreesMinutesSecondsWithHemisphere</keyword>
+ <keyword ref="qgeocoordinate.html#CoordinateType-enum">CoordinateType</keyword>
+ <keyword ref="qgeocoordinate.html#CoordinateType-enum">QGeoCoordinate::InvalidCoordinate</keyword>
+ <keyword ref="qgeocoordinate.html#CoordinateType-enum">QGeoCoordinate::Coordinate2D</keyword>
+ <keyword ref="qgeocoordinate.html#CoordinateType-enum">QGeoCoordinate::Coordinate3D</keyword>
+ <keyword ref="qgeocoordinate.html#altitude">altitude</keyword>
+ <keyword ref="qgeocoordinate.html#azimuthTo">azimuthTo</keyword>
+ <keyword ref="qgeocoordinate.html#distanceTo">distanceTo</keyword>
+ <keyword ref="qgeocoordinate.html#isValid">isValid</keyword>
+ <keyword ref="qgeocoordinate.html#latitude">latitude</keyword>
+ <keyword ref="qgeocoordinate.html#longitude">longitude</keyword>
+ <keyword ref="qgeocoordinate.html#setAltitude">setAltitude</keyword>
+ <keyword ref="qgeocoordinate.html#setLatitude">setLatitude</keyword>
+ <keyword ref="qgeocoordinate.html#setLongitude">setLongitude</keyword>
+ <keyword ref="qgeocoordinate.html#toString">toString</keyword>
+ <keyword ref="qgeocoordinate.html#type">type</keyword>
+ <keyword ref="qgeocoordinate.html#operator-not-eq">operator!=</keyword>
+ <keyword ref="qgeocoordinate.html#operator-eq">operator=</keyword>
+ <keyword ref="qgeocoordinate.html#operator-eq-eq">operator==</keyword>
+ <section ref="qgeocoordinate-members.html" title="List of all members"/>
+ </section>
+ <section ref="qgeopositioninfo.html" title="QGeoPositionInfo Class Reference">
+ <keyword ref="qgeopositioninfo.html">QGeoPositionInfo</keyword>
+ <keyword ref="qgeopositioninfo.html#Property-enum">Property</keyword>
+ <keyword ref="qgeopositioninfo.html#Property-enum">QGeoPositionInfo::HorizontalAccuracy</keyword>
+ <keyword ref="qgeopositioninfo.html#Property-enum">QGeoPositionInfo::VerticalAccuracy</keyword>
+ <keyword ref="qgeopositioninfo.html#Property-enum">QGeoPositionInfo::Heading</keyword>
+ <keyword ref="qgeopositioninfo.html#Property-enum">QGeoPositionInfo::VerticalSpeed</keyword>
+ <keyword ref="qgeopositioninfo.html#Property-enum">QGeoPositionInfo::GroundSpeed</keyword>
+ <keyword ref="qgeopositioninfo.html#Property-enum">QGeoPositionInfo::MagneticVariation</keyword>
+ <keyword ref="qgeopositioninfo.html#coordinate">coordinate</keyword>
+ <keyword ref="qgeopositioninfo.html#dateTime">dateTime</keyword>
+ <keyword ref="qgeopositioninfo.html#hasProperty">hasProperty</keyword>
+ <keyword ref="qgeopositioninfo.html#isValid">isValid</keyword>
+ <keyword ref="qgeopositioninfo.html#property">property</keyword>
+ <keyword ref="qgeopositioninfo.html#removeProperty">removeProperty</keyword>
+ <keyword ref="qgeopositioninfo.html#setCoordinate">setCoordinate</keyword>
+ <keyword ref="qgeopositioninfo.html#setDateTime">setDateTime</keyword>
+ <keyword ref="qgeopositioninfo.html#setProperty">setProperty</keyword>
+ <keyword ref="qgeopositioninfo.html#operator-not-eq">operator!=</keyword>
+ <keyword ref="qgeopositioninfo.html#operator-eq">operator=</keyword>
+ <keyword ref="qgeopositioninfo.html#operator-eq-eq">operator==</keyword>
+ <section ref="qgeopositioninfo-members.html" title="List of all members"/>
+ </section>
+ <section ref="qgeopositioninfosource.html" title="QGeoPositionInfoSource Class Reference">
+ <keyword ref="qgeopositioninfosource.html">QGeoPositionInfoSource</keyword>
+ <keyword ref="qgeopositioninfosource.html#PositioningMethod-enum">PositioningMethod</keyword>
+ <keyword ref="qgeopositioninfosource.html#PositioningMethod-enum">PositioningMethods</keyword>
+ <keyword ref="qgeopositioninfosource.html#PositioningMethod-enum">QGeoPositionInfoSource::SatellitePositioningMethods</keyword>
+ <keyword ref="qgeopositioninfosource.html#PositioningMethod-enum">QGeoPositionInfoSource::AllPositioningMethods</keyword>
+ <keyword ref="qgeopositioninfosource.html#PositioningMethod-enum">QGeoPositionInfoSource::NonSatellitePositioningMethods</keyword>
+ <keyword ref="qgeopositioninfosource.html#createSource">createSource</keyword>
+ <keyword ref="qgeopositioninfosource.html#lastKnownPosition">lastKnownPosition</keyword>
+ <keyword ref="qgeopositioninfosource.html#minimumUpdateInterval">minimumUpdateInterval</keyword>
+ <keyword ref="qgeopositioninfosource.html#positionUpdated">positionUpdated</keyword>
+ <keyword ref="qgeopositioninfosource.html#preferredPositioningMethods">preferredPositioningMethods</keyword>
+ <keyword ref="qgeopositioninfosource.html#requestTimeout">requestTimeout</keyword>
+ <keyword ref="qgeopositioninfosource.html#requestUpdate">requestUpdate</keyword>
+ <keyword ref="qgeopositioninfosource.html#setPreferredPositioningMethods">setPreferredPositioningMethods</keyword>
+ <keyword ref="qgeopositioninfosource.html#setUpdateInterval">setUpdateInterval</keyword>
+ <keyword ref="qgeopositioninfosource.html#startUpdates">startUpdates</keyword>
+ <keyword ref="qgeopositioninfosource.html#stopUpdates">stopUpdates</keyword>
+ <keyword ref="qgeopositioninfosource.html#supportedPositioningMethods">supportedPositioningMethods</keyword>
+ <keyword ref="qgeopositioninfosource.html#updateInterval">updateInterval</keyword>
+ <section ref="qgeopositioninfosource-members.html" title="List of all members"/>
+ </section>
<section ref="qnetworkconfiguration.html" title="QNetworkConfiguration Class Reference">
<keyword ref="qnetworkconfiguration.html">QNetworkConfiguration</keyword>
<keyword ref="qnetworkconfiguration.html#Purpose-enum">Purpose</keyword>
@@ -101,6 +185,52 @@
<keyword ref="qnetworksession.html#waitForOpened">waitForOpened</keyword>
<section ref="qnetworksession-members.html" title="List of all members"/>
</section>
+ <section ref="qnmeapositioninfosource.html" title="QNmeaPositionInfoSource Class Reference">
+ <keyword ref="qnmeapositioninfosource.html">QNmeaPositionInfoSource</keyword>
+ <keyword ref="qnmeapositioninfosource.html#UpdateMode-enum">UpdateMode</keyword>
+ <keyword ref="qnmeapositioninfosource.html#UpdateMode-enum">QNmeaPositionInfoSource::SimulationMode</keyword>
+ <keyword ref="qnmeapositioninfosource.html#UpdateMode-enum">QNmeaPositionInfoSource::RealTimeMode</keyword>
+ <keyword ref="qnmeapositioninfosource.html#device">device</keyword>
+ <keyword ref="qnmeapositioninfosource.html#lastKnownPosition">lastKnownPosition</keyword>
+ <keyword ref="qnmeapositioninfosource.html#minimumUpdateInterval">minimumUpdateInterval</keyword>
+ <keyword ref="qnmeapositioninfosource.html#requestUpdate">requestUpdate</keyword>
+ <keyword ref="qnmeapositioninfosource.html#setDevice">setDevice</keyword>
+ <keyword ref="qnmeapositioninfosource.html#setUpdateInterval">setUpdateInterval</keyword>
+ <keyword ref="qnmeapositioninfosource.html#startUpdates">startUpdates</keyword>
+ <keyword ref="qnmeapositioninfosource.html#stopUpdates">stopUpdates</keyword>
+ <keyword ref="qnmeapositioninfosource.html#supportedPositioningMethods">supportedPositioningMethods</keyword>
+ <keyword ref="qnmeapositioninfosource.html#updateMode">updateMode</keyword>
+ <section ref="qnmeapositioninfosource-members.html" title="List of all members"/>
+ </section>
+ <section ref="qsatelliteinfo.html" title="QSatelliteInfo Class Reference">
+ <keyword ref="qsatelliteinfo.html">QSatelliteInfo</keyword>
+ <keyword ref="qsatelliteinfo.html#Property-enum">Property</keyword>
+ <keyword ref="qsatelliteinfo.html#Property-enum">QSatelliteInfo::Azimuth</keyword>
+ <keyword ref="qsatelliteinfo.html#Property-enum">QSatelliteInfo::Elevation</keyword>
+ <keyword ref="qsatelliteinfo.html#hasProperty">hasProperty</keyword>
+ <keyword ref="qsatelliteinfo.html#prnNumber">prnNumber</keyword>
+ <keyword ref="qsatelliteinfo.html#property">property</keyword>
+ <keyword ref="qsatelliteinfo.html#removeProperty">removeProperty</keyword>
+ <keyword ref="qsatelliteinfo.html#setPrnNumber">setPrnNumber</keyword>
+ <keyword ref="qsatelliteinfo.html#setProperty">setProperty</keyword>
+ <keyword ref="qsatelliteinfo.html#setSignalStrength">setSignalStrength</keyword>
+ <keyword ref="qsatelliteinfo.html#signalStrength">signalStrength</keyword>
+ <keyword ref="qsatelliteinfo.html#operator-not-eq">operator!=</keyword>
+ <keyword ref="qsatelliteinfo.html#operator-eq">operator=</keyword>
+ <keyword ref="qsatelliteinfo.html#operator-eq-eq">operator==</keyword>
+ <section ref="qsatelliteinfo-members.html" title="List of all members"/>
+ </section>
+ <section ref="qsatelliteinfosource.html" title="QSatelliteInfoSource Class Reference">
+ <keyword ref="qsatelliteinfosource.html">QSatelliteInfoSource</keyword>
+ <keyword ref="qsatelliteinfosource.html#createSource">createSource</keyword>
+ <keyword ref="qsatelliteinfosource.html#requestTimeout">requestTimeout</keyword>
+ <keyword ref="qsatelliteinfosource.html#requestUpdate">requestUpdate</keyword>
+ <keyword ref="qsatelliteinfosource.html#satellitesInUseUpdated">satellitesInUseUpdated</keyword>
+ <keyword ref="qsatelliteinfosource.html#satellitesInViewUpdated">satellitesInViewUpdated</keyword>
+ <keyword ref="qsatelliteinfosource.html#startUpdates">startUpdates</keyword>
+ <keyword ref="qsatelliteinfosource.html#stopUpdates">stopUpdates</keyword>
+ <section ref="qsatelliteinfosource-members.html" title="List of all members"/>
+ </section>
<section ref="qservicecontext.html" title="QServiceContext Class Reference">
<keyword ref="qservicecontext.html">QServiceContext</keyword>
<keyword ref="qservicecontext.html#ContextType-enum">ContextType</keyword>
@@ -194,8 +324,8 @@
</section>
</section>
<section ref="overviews.html" title="Overviews">
- <section ref="index.html" title="">
- <keyword ref="index.html"></keyword>
+ <section ref="index.html" title="Qt Mobility Developer Resources">
+ <keyword ref="index.html">Qt Mobility Developer Resources</keyword>
</section>
</section>
<section ref="examples.html" title="Tutorial &amp; Examples">
diff --git a/doc/html/qt-mobility-library.index b/doc/html/qt-mobility-library.index
index 38f867491f..ccbe9e8d0b 100644
--- a/doc/html/qt-mobility-library.index
+++ b/doc/html/qt-mobility-library.index
@@ -2,135 +2,104 @@
<!DOCTYPE QDOCINDEX>
<INDEX url="" title="Qt Mobility Library Reference Documentation" version="">
<namespace access="public" threadsafety="unspecified" status="commendable" name="" href="" location="" module="">
- <class access="public" threadsafety="unspecified" status="commendable" name="QNetworkConfigurationManager" href="qnetworkconfigurationmanager.html" location="qnetworkconfigmanager.h" bases="QObject" module="QtNetwork">
- <enum access="public" threadsafety="unspecified" status="commendable" name="CapabilityFlag" fullname="QNetworkConfigurationManager::CapabilityFlag" href="qnetworkconfigurationmanager.html#CapabilityFlag-enum" location="qnetworkconfigmanager.h" typedef="QNetworkConfigurationManager::CapabilityFlags">
- <value name="BearerManagement" value="0x00000001"/>
- <value name="DirectConnectionRouting" value="0x00000002"/>
- <value name="SystemSessionSupport" value="0x00000004"/>
- <value name="ApplicationLevelRoaming" value="0x00000008"/>
- <value name="ForcedRoaming" value="0x00000010"/>
- <value name="DataStatistics" value="0x00000020"/>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QGeoPositionInfoSource" href="qgeopositioninfosource.html" location="qgeopositioninfosource.h" bases="QObject" module="">
+ <enum access="public" threadsafety="unspecified" status="commendable" name="PositioningMethod" fullname="QGeoPositionInfoSource::PositioningMethod" href="qgeopositioninfosource.html#PositioningMethod-enum" location="qgeopositioninfosource.h" typedef="QGeoPositionInfoSource::PositioningMethods">
+ <value name="SatellitePositioningMethods" value="0x000000ff"/>
+ <value name="NonSatellitePositioningMethods" value="0xffffff00"/>
+ <value name="AllPositioningMethods" value="0xffffffff"/>
</enum>
- <typedef access="public" threadsafety="unspecified" status="commendable" name="CapabilityFlags" fullname="QNetworkConfigurationManager::CapabilityFlags" href="qnetworkconfigurationmanager.html#CapabilityFlags-typedef" location="qnetworkconfigmanager.h" enum="QNetworkConfigurationManager::CapabilityFlag"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="QNetworkConfigurationManager" fullname="QNetworkConfigurationManager::QNetworkConfigurationManager" href="qnetworkconfigurationmanager.html#QNetworkConfigurationManager" location="qnetworkconfigmanager.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QNetworkConfigurationManager(QObject * parent)">
+ <typedef access="public" threadsafety="unspecified" status="commendable" name="PositioningMethods" fullname="QGeoPositionInfoSource::PositioningMethods" href="qgeopositioninfosource.html#PositioningMethods-typedef" location="qgeopositioninfosource.h" enum="QGeoPositionInfoSource::PositioningMethod"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QGeoPositionInfoSource" fullname="QGeoPositionInfoSource::QGeoPositionInfoSource" href="qgeopositioninfosource.html#QGeoPositionInfoSource" location="qgeopositioninfosource.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QGeoPositionInfoSource(QObject * parent)">
<parameter left="QObject *" right="" name="parent" default="0"/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="~QNetworkConfigurationManager" fullname="QNetworkConfigurationManager::~QNetworkConfigurationManager" href="qnetworkconfigurationmanager.html#dtor.QNetworkConfigurationManager" location="qnetworkconfigmanager.h" virtual="impure" meta="destructor" const="false" static="false" overload="false" type="" signature="~QNetworkConfigurationManager()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="capabilities" fullname="QNetworkConfigurationManager::capabilities" href="qnetworkconfigurationmanager.html#capabilities" location="qnetworkconfigmanager.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QNetworkConfigurationManager::CapabilityFlags" signature="capabilities() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="defaultConfiguration" fullname="QNetworkConfigurationManager::defaultConfiguration" href="qnetworkconfigurationmanager.html#defaultConfiguration" location="qnetworkconfigmanager.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QNetworkConfiguration" signature="defaultConfiguration() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="allConfigurations" fullname="QNetworkConfigurationManager::allConfigurations" href="qnetworkconfigurationmanager.html#allConfigurations" location="qnetworkconfigmanager.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QList&lt;QNetworkConfiguration&gt;" signature="allConfigurations(QFlags&lt;QNetworkConfiguration::StateFlag&gt; filter) const">
- <parameter left="QFlags&lt;QNetworkConfiguration::StateFlag&gt;" right="" name="filter" default="0"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="~QGeoPositionInfoSource" fullname="QGeoPositionInfoSource::~QGeoPositionInfoSource" href="qgeopositioninfosource.html#dtor.QGeoPositionInfoSource" location="qgeopositioninfosource.h" virtual="impure" meta="destructor" const="false" static="false" overload="false" type="" signature="~QGeoPositionInfoSource()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setUpdateInterval" fullname="QGeoPositionInfoSource::setUpdateInterval" href="qgeopositioninfosource.html#setUpdateInterval" location="qgeopositioninfosource.h" virtual="impure" meta="plain" const="false" static="false" overload="false" type="void" signature="setUpdateInterval(int msec)">
+ <parameter left="int" right="" name="msec" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="configurationFromIdentifier" fullname="QNetworkConfigurationManager::configurationFromIdentifier" href="qnetworkconfigurationmanager.html#configurationFromIdentifier" location="qnetworkconfigmanager.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QNetworkConfiguration" signature="configurationFromIdentifier(const QString &amp; identifier) const">
- <parameter left="const QString &amp;" right="" name="identifier" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="updateInterval" fullname="QGeoPositionInfoSource::updateInterval" href="qgeopositioninfosource.html#updateInterval" location="qgeopositioninfosource.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="int" signature="updateInterval() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setPreferredPositioningMethods" fullname="QGeoPositionInfoSource::setPreferredPositioningMethods" href="qgeopositioninfosource.html#setPreferredPositioningMethods" location="qgeopositioninfosource.h" virtual="impure" meta="plain" const="false" static="false" overload="false" type="void" signature="setPreferredPositioningMethods(QFlags&lt;QGeoPositionInfoSource::PositioningMethod&gt; methods)">
+ <parameter left="QFlags&lt;QGeoPositionInfoSource::PositioningMethod&gt;" right="" name="methods" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="updateConfigurations" fullname="QNetworkConfigurationManager::updateConfigurations" href="qnetworkconfigurationmanager.html#updateConfigurations" location="qnetworkconfigmanager.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="updateConfigurations()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="configurationAdded" fullname="QNetworkConfigurationManager::configurationAdded" href="qnetworkconfigurationmanager.html#configurationAdded" location="qnetworkconfigmanager.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="configurationAdded(const QNetworkConfiguration &amp; config)">
- <parameter left="const QNetworkConfiguration &amp;" right="" name="config" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="preferredPositioningMethods" fullname="QGeoPositionInfoSource::preferredPositioningMethods" href="qgeopositioninfosource.html#preferredPositioningMethods" location="qgeopositioninfosource.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="PositioningMethods" signature="preferredPositioningMethods() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="lastKnownPosition" fullname="QGeoPositionInfoSource::lastKnownPosition" href="qgeopositioninfosource.html#lastKnownPosition" location="qgeopositioninfosource.h" virtual="pure" meta="plain" const="true" static="false" overload="false" type="QGeoPositionInfo" signature="lastKnownPosition(bool fromSatellitePositioningMethodsOnly) const">
+ <parameter left="bool" right="" name="fromSatellitePositioningMethodsOnly" default="false"/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="configurationRemoved" fullname="QNetworkConfigurationManager::configurationRemoved" href="qnetworkconfigurationmanager.html#configurationRemoved" location="qnetworkconfigmanager.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="configurationRemoved(const QNetworkConfiguration &amp; configuration)">
- <parameter left="const QNetworkConfiguration &amp;" right="" name="configuration" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="supportedPositioningMethods" fullname="QGeoPositionInfoSource::supportedPositioningMethods" href="qgeopositioninfosource.html#supportedPositioningMethods" location="qgeopositioninfosource.h" virtual="pure" meta="plain" const="true" static="false" overload="false" type="PositioningMethods" signature="supportedPositioningMethods() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="minimumUpdateInterval" fullname="QGeoPositionInfoSource::minimumUpdateInterval" href="qgeopositioninfosource.html#minimumUpdateInterval" location="qgeopositioninfosource.h" virtual="pure" meta="plain" const="true" static="false" overload="false" type="int" signature="minimumUpdateInterval() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="createSource" fullname="QGeoPositionInfoSource::createSource" href="qgeopositioninfosource.html#createSource" location="qgeopositioninfosource.h" virtual="non" meta="plain" const="false" static="true" overload="false" type="QGeoPositionInfoSource *" signature="createSource(QObject * parent)">
+ <parameter left="QObject *" right="" name="parent" default="0"/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="configurationChanged" fullname="QNetworkConfigurationManager::configurationChanged" href="qnetworkconfigurationmanager.html#configurationChanged" location="qnetworkconfigmanager.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="configurationChanged(const QNetworkConfiguration &amp; config)">
- <parameter left="const QNetworkConfiguration &amp;" right="" name="config" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="startUpdates" fullname="QGeoPositionInfoSource::startUpdates" href="qgeopositioninfosource.html#startUpdates" location="qgeopositioninfosource.h" virtual="pure" meta="slot" const="false" static="false" overload="false" type="void" signature="startUpdates()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="stopUpdates" fullname="QGeoPositionInfoSource::stopUpdates" href="qgeopositioninfosource.html#stopUpdates" location="qgeopositioninfosource.h" virtual="pure" meta="slot" const="false" static="false" overload="false" type="void" signature="stopUpdates()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="requestUpdate" fullname="QGeoPositionInfoSource::requestUpdate" href="qgeopositioninfosource.html#requestUpdate" location="qgeopositioninfosource.h" virtual="pure" meta="slot" const="false" static="false" overload="false" type="void" signature="requestUpdate(int timeout)">
+ <parameter left="int" right="" name="timeout" default="5000"/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="onlineStateChanged" fullname="QNetworkConfigurationManager::onlineStateChanged" href="qnetworkconfigurationmanager.html#onlineStateChanged" location="qnetworkconfigmanager.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="onlineStateChanged(bool isOnline)">
- <parameter left="bool" right="" name="isOnline" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="positionUpdated" fullname="QGeoPositionInfoSource::positionUpdated" href="qgeopositioninfosource.html#positionUpdated" location="qgeopositioninfosource.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="positionUpdated(const QGeoPositionInfo &amp; update)">
+ <parameter left="const QGeoPositionInfo &amp;" right="" name="update" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="updateCompleted" fullname="QNetworkConfigurationManager::updateCompleted" href="qnetworkconfigurationmanager.html#updateCompleted" location="qnetworkconfigmanager.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="updateCompleted()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="requestTimeout" fullname="QGeoPositionInfoSource::requestTimeout" href="qgeopositioninfosource.html#requestTimeout" location="qgeopositioninfosource.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="requestTimeout()"/>
</class>
- <class access="public" threadsafety="unspecified" status="commendable" name="QServiceContext" href="qservicecontext.html" location="qservicecontext.h" bases="QObject" module="">
- <property access="public" threadsafety="unspecified" status="commendable" name="clientId" fullname="QServiceContext::clientId" href="qservicecontext.html#clientId-prop" location="qservicecontext.h" type="QString">
- <getter name="clientId"/>
- <setter name="setClientId"/>
- </property>
- <property access="public" threadsafety="unspecified" status="commendable" name="clientName" fullname="QServiceContext::clientName" href="qservicecontext.html#clientName-prop" location="qservicecontext.h" type="QString">
- <getter name="clientName"/>
- <setter name="setClientName"/>
- </property>
- <enum access="public" threadsafety="unspecified" status="commendable" name="ContextType" fullname="QServiceContext::ContextType" href="qservicecontext.html#ContextType-enum" location="qservicecontext.h">
- <value name="DisplayContext" value="0"/>
- <value name="ScriptContext" value="1"/>
- <value name="UserDefined" value="100"/>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QGeoCoordinate" href="qgeocoordinate.html" location="qgeocoordinate.h" bases="" module="">
+ <enum access="public" threadsafety="unspecified" status="commendable" name="CoordinateType" fullname="QGeoCoordinate::CoordinateType" href="qgeocoordinate.html#CoordinateType-enum" location="qgeocoordinate.h">
+ <value name="InvalidCoordinate" value="0"/>
+ <value name="Coordinate2D" value="1"/>
+ <value name="Coordinate3D" value="2"/>
</enum>
- <function access="public" threadsafety="unspecified" status="commendable" name="QServiceContext" fullname="QServiceContext::QServiceContext" href="qservicecontext.html#QServiceContext" location="qservicecontext.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QServiceContext(QObject * parent)">
- <parameter left="QObject *" right="" name="parent" default="0"/>
+ <enum access="public" threadsafety="unspecified" status="commendable" name="CoordinateFormat" fullname="QGeoCoordinate::CoordinateFormat" href="qgeocoordinate.html#CoordinateFormat-enum" location="qgeocoordinate.h">
+ <value name="DecimalDegrees" value="0"/>
+ <value name="DecimalDegreesWithHemisphere" value="1"/>
+ <value name="DegreesMinutes" value="2"/>
+ <value name="DegreesMinutesWithHemisphere" value="3"/>
+ <value name="DegreesMinutesSeconds" value="4"/>
+ <value name="DegreesMinutesSecondsWithHemisphere" value="5"/>
+ </enum>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QGeoCoordinate" fullname="QGeoCoordinate::QGeoCoordinate" href="qgeocoordinate.html#QGeoCoordinate" location="qgeocoordinate.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QGeoCoordinate()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QGeoCoordinate" fullname="QGeoCoordinate::QGeoCoordinate" href="qgeocoordinate.html#QGeoCoordinate-2" location="qgeocoordinate.h" virtual="non" meta="constructor" const="false" static="false" overload="true" overload-number="2" type="" signature="QGeoCoordinate(double latitude, double longitude)">
+ <parameter left="double" right="" name="latitude" default=""/>
+ <parameter left="double" right="" name="longitude" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="~QServiceContext" fullname="QServiceContext::~QServiceContext" href="qservicecontext.html#dtor.QServiceContext" location="qservicecontext.h" virtual="impure" meta="destructor" const="false" static="false" overload="false" type="" signature="~QServiceContext()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="notify" fullname="QServiceContext::notify" href="qservicecontext.html#notify" location="qservicecontext.h" virtual="pure" meta="plain" const="false" static="false" overload="false" type="void" signature="notify(ContextType type, const QVariant &amp; data)">
- <parameter left="ContextType" right="" name="type" default=""/>
- <parameter left="const QVariant &amp;" right="" name="data" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QGeoCoordinate" fullname="QGeoCoordinate::QGeoCoordinate" href="qgeocoordinate.html#QGeoCoordinate-3" location="qgeocoordinate.h" virtual="non" meta="constructor" const="false" static="false" overload="true" overload-number="3" type="" signature="QGeoCoordinate(double latitude, double longitude, double altitude)">
+ <parameter left="double" right="" name="latitude" default=""/>
+ <parameter left="double" right="" name="longitude" default=""/>
+ <parameter left="double" right="" name="altitude" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="clientId" fullname="QServiceContext::clientId" href="qservicecontext.html#clientId-prop" location="qservicecontext.cpp" virtual="non" meta="plain" const="true" static="false" overload="false" associated-property="clientId" type="QString" signature="clientId() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="setClientId" fullname="QServiceContext::setClientId" href="qservicecontext.html#clientId-prop" location="qservicecontext.h" virtual="non" meta="plain" const="false" static="false" overload="false" associated-property="clientId" type="void" signature="setClientId(const QString &amp; id)">
- <parameter left="const QString &amp;" right="" name="id" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QGeoCoordinate" fullname="QGeoCoordinate::QGeoCoordinate" href="qgeocoordinate.html#QGeoCoordinate-4" location="qgeocoordinate.h" virtual="non" meta="constructor" const="false" static="false" overload="true" overload-number="4" type="" signature="QGeoCoordinate(const QGeoCoordinate &amp; other)">
+ <parameter left="const QGeoCoordinate &amp;" right="" name="other" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="clientName" fullname="QServiceContext::clientName" href="qservicecontext.html#clientName-prop" location="qservicecontext.cpp" virtual="non" meta="plain" const="true" static="false" overload="false" associated-property="clientName" type="QString" signature="clientName() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="setClientName" fullname="QServiceContext::setClientName" href="qservicecontext.html#clientName-prop" location="qservicecontext.cpp" virtual="non" meta="plain" const="false" static="false" overload="false" associated-property="clientName" type="void" signature="setClientName(const QString &amp; name)">
- <parameter left="const QString &amp;" right="" name="name" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="~QGeoCoordinate" fullname="QGeoCoordinate::~QGeoCoordinate" href="qgeocoordinate.html#dtor.QGeoCoordinate" location="qgeocoordinate.h" virtual="non" meta="destructor" const="false" static="false" overload="false" type="" signature="~QGeoCoordinate()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator=" fullname="QGeoCoordinate::operator=" href="qgeocoordinate.html#operator=" location="qgeocoordinate.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="QGeoCoordinate &amp;" signature="operator=(const QGeoCoordinate &amp; other)">
+ <parameter left="const QGeoCoordinate &amp;" right="" name="other" default=""/>
</function>
- </class>
- <class access="public" threadsafety="unspecified" status="commendable" name="QAbstractSecuritySession" href="qabstractsecuritysession.html" location="qabstractsecuritysession.h" bases="QObject" module="">
- <function access="public" threadsafety="unspecified" status="commendable" name="QAbstractSecuritySession" fullname="QAbstractSecuritySession::QAbstractSecuritySession" href="qabstractsecuritysession.html#QAbstractSecuritySession" location="qabstractsecuritysession.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QAbstractSecuritySession(QObject * parent)">
- <parameter left="QObject *" right="" name="parent" default="0"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator==" fullname="QGeoCoordinate::operator==" href="qgeocoordinate.html#operator==" location="qgeocoordinate.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="operator==(const QGeoCoordinate &amp; other) const">
+ <parameter left="const QGeoCoordinate &amp;" right="" name="other" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="~QAbstractSecuritySession" fullname="QAbstractSecuritySession::~QAbstractSecuritySession" href="qabstractsecuritysession.html#dtor.QAbstractSecuritySession" location="qabstractsecuritysession.h" virtual="impure" meta="destructor" const="false" static="false" overload="false" type="" signature="~QAbstractSecuritySession()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="isAllowed" fullname="QAbstractSecuritySession::isAllowed" href="qabstractsecuritysession.html#isAllowed" location="qabstractsecuritysession.h" virtual="pure" meta="plain" const="false" static="false" overload="false" type="bool" signature="isAllowed(const QStringList &amp; capabilities)">
- <parameter left="const QStringList &amp;" right="" name="capabilities" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator!=" fullname="QGeoCoordinate::operator!=" href="qgeocoordinate.html#operator!=" location="qgeocoordinate.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="operator!=(const QGeoCoordinate &amp; other) const">
+ <parameter left="const QGeoCoordinate &amp;" right="" name="other" default=""/>
</function>
- </class>
- <class access="public" threadsafety="unspecified" status="commendable" name="QServiceFilter" href="qservicefilter.html" location="qservicefilter.h" bases="" module="">
- <enum access="public" threadsafety="unspecified" status="commendable" name="VersionMatchRule" fullname="QServiceFilter::VersionMatchRule" href="qservicefilter.html#VersionMatchRule-enum" location="qservicefilter.h">
- <value name="ExactVersionMatch" value="0"/>
- <value name="MinimumVersionMatch" value="1"/>
- </enum>
- <function access="public" threadsafety="unspecified" status="commendable" name="QServiceFilter" fullname="QServiceFilter::QServiceFilter" href="qservicefilter.html#QServiceFilter" location="qservicefilter.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QServiceFilter()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="~QServiceFilter" fullname="QServiceFilter::~QServiceFilter" href="qservicefilter.html#dtor.QServiceFilter" location="qservicefilter.h" virtual="non" meta="destructor" const="false" static="false" overload="false" type="" signature="~QServiceFilter()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="QServiceFilter" fullname="QServiceFilter::QServiceFilter" href="qservicefilter.html#QServiceFilter-2" location="qservicefilter.h" virtual="non" meta="constructor" const="false" static="false" overload="true" overload-number="2" type="" signature="QServiceFilter(const QServiceFilter &amp; other)">
- <parameter left="const QServiceFilter &amp;" right="" name="other" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="isValid" fullname="QGeoCoordinate::isValid" href="qgeocoordinate.html#isValid" location="qgeocoordinate.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="isValid() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="type" fullname="QGeoCoordinate::type" href="qgeocoordinate.html#type" location="qgeocoordinate.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="CoordinateType" signature="type() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setLatitude" fullname="QGeoCoordinate::setLatitude" href="qgeocoordinate.html#setLatitude" location="qgeocoordinate.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setLatitude(double latitude)">
+ <parameter left="double" right="" name="latitude" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="QServiceFilter" fullname="QServiceFilter::QServiceFilter" href="qservicefilter.html#QServiceFilter-3" location="qservicefilter.h" virtual="non" meta="constructor" const="false" static="false" overload="true" overload-number="3" type="" signature="QServiceFilter(const QString &amp; interfaceName, const QString &amp; version, QServiceFilter::VersionMatchRule rule)">
- <parameter left="const QString &amp;" right="" name="interfaceName" default=""/>
- <parameter left="const QString &amp;" right="" name="version" default="QString()"/>
- <parameter left="QServiceFilter::VersionMatchRule" right="" name="rule" default="QServiceFilter::MinimumVersionMatch"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="latitude" fullname="QGeoCoordinate::latitude" href="qgeocoordinate.html#latitude" location="qgeocoordinate.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="double" signature="latitude() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setLongitude" fullname="QGeoCoordinate::setLongitude" href="qgeocoordinate.html#setLongitude" location="qgeocoordinate.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setLongitude(double longitude)">
+ <parameter left="double" right="" name="longitude" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="operator=" fullname="QServiceFilter::operator=" href="qservicefilter.html#operator=" location="qservicefilter.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="QServiceFilter &amp;" signature="operator=(const QServiceFilter &amp; other)">
- <parameter left="const QServiceFilter &amp;" right="" name="other" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="longitude" fullname="QGeoCoordinate::longitude" href="qgeocoordinate.html#longitude" location="qgeocoordinate.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="double" signature="longitude() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setAltitude" fullname="QGeoCoordinate::setAltitude" href="qgeocoordinate.html#setAltitude" location="qgeocoordinate.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setAltitude(double altitude)">
+ <parameter left="double" right="" name="altitude" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="setInterface" fullname="QServiceFilter::setInterface" href="qservicefilter.html#setInterface" location="qservicefilter.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setInterface(const QString &amp; interfaceName, const QString &amp; version, QServiceFilter::VersionMatchRule rule)">
- <parameter left="const QString &amp;" right="" name="interfaceName" default=""/>
- <parameter left="const QString &amp;" right="" name="version" default="QString()"/>
- <parameter left="QServiceFilter::VersionMatchRule" right="" name="rule" default="QServiceFilter::MinimumVersionMatch"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="altitude" fullname="QGeoCoordinate::altitude" href="qgeocoordinate.html#altitude" location="qgeocoordinate.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="double" signature="altitude() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="distanceTo" fullname="QGeoCoordinate::distanceTo" href="qgeocoordinate.html#distanceTo" location="qgeocoordinate.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="qreal" signature="distanceTo(const QGeoCoordinate &amp; other) const">
+ <parameter left="const QGeoCoordinate &amp;" right="" name="other" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="setServiceName" fullname="QServiceFilter::setServiceName" href="qservicefilter.html#setServiceName" location="qservicefilter.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setServiceName(const QString &amp; serviceName)">
- <parameter left="const QString &amp;" right="" name="serviceName" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="azimuthTo" fullname="QGeoCoordinate::azimuthTo" href="qgeocoordinate.html#azimuthTo" location="qgeocoordinate.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="qreal" signature="azimuthTo(const QGeoCoordinate &amp; other) const">
+ <parameter left="const QGeoCoordinate &amp;" right="" name="other" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="serviceName" fullname="QServiceFilter::serviceName" href="qservicefilter.html#serviceName" location="qservicefilter.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="serviceName() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="interfaceName" fullname="QServiceFilter::interfaceName" href="qservicefilter.html#interfaceName" location="qservicefilter.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="interfaceName() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="interfaceMajorVersion" fullname="QServiceFilter::interfaceMajorVersion" href="qservicefilter.html#interfaceMajorVersion" location="qservicefilter.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="int" signature="interfaceMajorVersion() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="interfaceMinorVersion" fullname="QServiceFilter::interfaceMinorVersion" href="qservicefilter.html#interfaceMinorVersion" location="qservicefilter.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="int" signature="interfaceMinorVersion() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="versionMatchRule" fullname="QServiceFilter::versionMatchRule" href="qservicefilter.html#versionMatchRule" location="qservicefilter.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="VersionMatchRule" signature="versionMatchRule() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="customKeys" fullname="QServiceFilter::customKeys" href="qservicefilter.html#customKeys" location="qservicefilter.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QList&lt;QString&gt;" signature="customKeys() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="customProperty" fullname="QServiceFilter::customProperty" href="qservicefilter.html#customProperty" location="qservicefilter.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="customProperty(const QString &amp; key) const">
- <parameter left="const QString &amp;" right="" name="key" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="toString" fullname="QGeoCoordinate::toString" href="qgeocoordinate.html#toString" location="qgeocoordinate.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="toString(CoordinateFormat format) const">
+ <parameter left="CoordinateFormat" right="" name="format" default="DegreesMinutesSecondsWithHemisphere"/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="setCustomProperty" fullname="QServiceFilter::setCustomProperty" href="qservicefilter.html#setCustomProperty" location="qservicefilter.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setCustomProperty(const QString &amp; key, const QString &amp; value)">
- <parameter left="const QString &amp;" right="" name="key" default=""/>
- <parameter left="const QString &amp;" right="" name="value" default=""/>
- </function>
- <function access="public" threadsafety="unspecified" status="commendable" name="removeCustomProperty" fullname="QServiceFilter::removeCustomProperty" href="qservicefilter.html#removeCustomProperty" location="qservicefilter.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="removeCustomProperty(const QString &amp; key)">
- <parameter left="const QString &amp;" right="" name="key" default=""/>
- </function>
- <function access="public" threadsafety="unspecified" status="commendable" name="clearCustomProperties" fullname="QServiceFilter::clearCustomProperties" href="qservicefilter.html#clearCustomProperties" location="qservicefilter.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="clearCustomProperties()"/>
</class>
- <function access="public" threadsafety="unspecified" status="commendable" name="operator&lt;&lt;" href="qservicefilter.html#operator&lt;&lt;-75" location="qservicefilter.cpp" virtual="non" meta="plain" const="false" static="false" overload="true" overload-number="75" relates="QServiceFilter" type="QDataStream &amp;" signature="operator&lt;&lt;(QDataStream &amp; out, const QServiceFilter &amp; sf)">
- <parameter left="QDataStream &amp;" right="" name="out" default=""/>
- <parameter left="const QServiceFilter &amp;" right="" name="sf" default=""/>
- </function>
- <function access="public" threadsafety="unspecified" status="commendable" name="operator&gt;&gt;" href="qservicefilter.html#operator&gt;&gt;-72" location="qservicefilter.cpp" virtual="non" meta="plain" const="false" static="false" overload="true" overload-number="72" relates="QServiceFilter" type="QDataStream &amp;" signature="operator&gt;&gt;(QDataStream &amp; in, QServiceFilter &amp; sf)">
- <parameter left="QDataStream &amp;" right="" name="in" default=""/>
- <parameter left="QServiceFilter &amp;" right="" name="sf" default=""/>
- </function>
<class access="public" threadsafety="unspecified" status="commendable" name="QNetworkConfiguration" href="qnetworkconfiguration.html" location="qnetworkconfiguration.h" bases="" module="QtNetwork">
<contents name="configuration-states" title="Configuration states" level="1"/>
<function access="public" threadsafety="unspecified" status="commendable" name="QNetworkConfiguration" fullname="QNetworkConfiguration::QNetworkConfiguration" href="qnetworkconfiguration.html#QNetworkConfiguration" location="qnetworkconfiguration.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QNetworkConfiguration()"/>
@@ -175,14 +144,315 @@
<function access="public" threadsafety="unspecified" status="commendable" name="name" fullname="QNetworkConfiguration::name" href="qnetworkconfiguration.html#name" location="qnetworkconfiguration.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="name() const"/>
<function access="public" threadsafety="unspecified" status="commendable" name="isValid" fullname="QNetworkConfiguration::isValid" href="qnetworkconfiguration.html#isValid" location="qnetworkconfiguration.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="isValid() const"/>
</class>
- <class access="public" threadsafety="unspecified" status="commendable" name="QServicePluginInterface" href="qserviceplugininterface.html" location="qserviceplugininterface.h" bases="" module="">
- <function access="public" threadsafety="unspecified" status="commendable" name="createInstance" fullname="QServicePluginInterface::createInstance" href="qserviceplugininterface.html#createInstance" location="qserviceplugininterface.h" virtual="pure" meta="plain" const="false" static="false" overload="false" type="QObject *" signature="createInstance(const QServiceInterfaceDescriptor &amp; descriptor, QServiceContext * context, QAbstractSecuritySession * securitySession)">
- <parameter left="const QServiceInterfaceDescriptor &amp;" right="" name="descriptor" default=""/>
- <parameter left="QServiceContext *" right="" name="context" default=""/>
- <parameter left="QAbstractSecuritySession *" right="" name="securitySession" default=""/>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QNmeaPositionInfoSource" href="qnmeapositioninfosource.html" location="qnmeapositioninfosource.h" bases="QGeoPositionInfoSource" module="">
+ <enum access="public" threadsafety="unspecified" status="commendable" name="UpdateMode" fullname="QNmeaPositionInfoSource::UpdateMode" href="qnmeapositioninfosource.html#UpdateMode-enum" location="qnmeapositioninfosource.h">
+ <value name="RealTimeMode" value="1"/>
+ <value name="SimulationMode" value="2"/>
+ </enum>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QNmeaPositionInfoSource" fullname="QNmeaPositionInfoSource::QNmeaPositionInfoSource" href="qnmeapositioninfosource.html#QNmeaPositionInfoSource" location="qnmeapositioninfosource.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QNmeaPositionInfoSource(UpdateMode updateMode, QObject * parent)">
+ <parameter left="UpdateMode" right="" name="updateMode" default=""/>
+ <parameter left="QObject *" right="" name="parent" default="0"/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="~QNmeaPositionInfoSource" fullname="QNmeaPositionInfoSource::~QNmeaPositionInfoSource" href="qnmeapositioninfosource.html#dtor.QNmeaPositionInfoSource" location="qnmeapositioninfosource.h" virtual="non" meta="destructor" const="false" static="false" overload="false" type="" signature="~QNmeaPositionInfoSource()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="updateMode" fullname="QNmeaPositionInfoSource::updateMode" href="qnmeapositioninfosource.html#updateMode" location="qnmeapositioninfosource.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="UpdateMode" signature="updateMode() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setDevice" fullname="QNmeaPositionInfoSource::setDevice" href="qnmeapositioninfosource.html#setDevice" location="qnmeapositioninfosource.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setDevice(QIODevice * device)">
+ <parameter left="QIODevice *" right="" name="device" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="device" fullname="QNmeaPositionInfoSource::device" href="qnmeapositioninfosource.html#device" location="qnmeapositioninfosource.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QIODevice *" signature="device() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setUpdateInterval" fullname="QNmeaPositionInfoSource::setUpdateInterval" href="qnmeapositioninfosource.html#setUpdateInterval" location="qnmeapositioninfosource.h" virtual="impure" meta="plain" const="false" static="false" overload="false" type="void" signature="setUpdateInterval(int msec)">
+ <parameter left="int" right="" name="msec" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="lastKnownPosition" fullname="QNmeaPositionInfoSource::lastKnownPosition" href="qnmeapositioninfosource.html#lastKnownPosition" location="qnmeapositioninfosource.h" virtual="impure" meta="plain" const="true" static="false" overload="false" type="QGeoPositionInfo" signature="lastKnownPosition(bool fromSatellitePositioningMethodsOnly) const">
+ <parameter left="bool" right="" name="fromSatellitePositioningMethodsOnly" default="false"/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="supportedPositioningMethods" fullname="QNmeaPositionInfoSource::supportedPositioningMethods" href="qnmeapositioninfosource.html#supportedPositioningMethods" location="qnmeapositioninfosource.h" virtual="impure" meta="plain" const="true" static="false" overload="false" type="PositioningMethods" signature="supportedPositioningMethods() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="minimumUpdateInterval" fullname="QNmeaPositionInfoSource::minimumUpdateInterval" href="qnmeapositioninfosource.html#minimumUpdateInterval" location="qnmeapositioninfosource.h" virtual="impure" meta="plain" const="true" static="false" overload="false" type="int" signature="minimumUpdateInterval() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="startUpdates" fullname="QNmeaPositionInfoSource::startUpdates" href="qnmeapositioninfosource.html#startUpdates" location="qnmeapositioninfosource.h" virtual="impure" meta="slot" const="false" static="false" overload="false" type="void" signature="startUpdates()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="stopUpdates" fullname="QNmeaPositionInfoSource::stopUpdates" href="qnmeapositioninfosource.html#stopUpdates" location="qnmeapositioninfosource.h" virtual="impure" meta="slot" const="false" static="false" overload="false" type="void" signature="stopUpdates()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="requestUpdate" fullname="QNmeaPositionInfoSource::requestUpdate" href="qnmeapositioninfosource.html#requestUpdate" location="qnmeapositioninfosource.h" virtual="impure" meta="slot" const="false" static="false" overload="false" type="void" signature="requestUpdate(int msec)">
+ <parameter left="int" right="" name="msec" default="5000"/>
+ </function>
+ </class>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QSatelliteInfo" href="qsatelliteinfo.html" location="qsatelliteinfo.h" bases="" module="">
+ <enum access="public" threadsafety="unspecified" status="commendable" name="Property" fullname="QSatelliteInfo::Property" href="qsatelliteinfo.html#Property-enum" location="qsatelliteinfo.h">
+ <value name="Elevation" value="0"/>
+ <value name="Azimuth" value="1"/>
+ </enum>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QSatelliteInfo" fullname="QSatelliteInfo::QSatelliteInfo" href="qsatelliteinfo.html#QSatelliteInfo" location="qsatelliteinfo.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QSatelliteInfo()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QSatelliteInfo" fullname="QSatelliteInfo::QSatelliteInfo" href="qsatelliteinfo.html#QSatelliteInfo-2" location="qsatelliteinfo.h" virtual="non" meta="constructor" const="false" static="false" overload="true" overload-number="2" type="" signature="QSatelliteInfo(const QSatelliteInfo &amp; other)">
+ <parameter left="const QSatelliteInfo &amp;" right="" name="other" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="~QSatelliteInfo" fullname="QSatelliteInfo::~QSatelliteInfo" href="qsatelliteinfo.html#dtor.QSatelliteInfo" location="qsatelliteinfo.h" virtual="non" meta="destructor" const="false" static="false" overload="false" type="" signature="~QSatelliteInfo()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator=" fullname="QSatelliteInfo::operator=" href="qsatelliteinfo.html#operator=" location="qsatelliteinfo.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="QSatelliteInfo &amp;" signature="operator=(const QSatelliteInfo &amp; other)">
+ <parameter left="const QSatelliteInfo &amp;" right="" name="other" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator==" fullname="QSatelliteInfo::operator==" href="qsatelliteinfo.html#operator==" location="qsatelliteinfo.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="operator==(const QSatelliteInfo &amp; other) const">
+ <parameter left="const QSatelliteInfo &amp;" right="" name="other" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator!=" fullname="QSatelliteInfo::operator!=" href="qsatelliteinfo.html#operator!=" location="qsatelliteinfo.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="operator!=(const QSatelliteInfo &amp; other) const">
+ <parameter left="const QSatelliteInfo &amp;" right="" name="other" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setPrnNumber" fullname="QSatelliteInfo::setPrnNumber" href="qsatelliteinfo.html#setPrnNumber" location="qsatelliteinfo.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setPrnNumber(int prn)">
+ <parameter left="int" right="" name="prn" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="prnNumber" fullname="QSatelliteInfo::prnNumber" href="qsatelliteinfo.html#prnNumber" location="qsatelliteinfo.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="int" signature="prnNumber() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setSignalStrength" fullname="QSatelliteInfo::setSignalStrength" href="qsatelliteinfo.html#setSignalStrength" location="qsatelliteinfo.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setSignalStrength(int signalStrength)">
+ <parameter left="int" right="" name="signalStrength" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="signalStrength" fullname="QSatelliteInfo::signalStrength" href="qsatelliteinfo.html#signalStrength" location="qsatelliteinfo.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="int" signature="signalStrength() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setProperty" fullname="QSatelliteInfo::setProperty" href="qsatelliteinfo.html#setProperty" location="qsatelliteinfo.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setProperty(Property property, qreal value)">
+ <parameter left="Property" right="" name="property" default=""/>
+ <parameter left="qreal" right="" name="value" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="property" fullname="QSatelliteInfo::property" href="qsatelliteinfo.html#property" location="qsatelliteinfo.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="qreal" signature="property(Property property) const">
+ <parameter left="Property" right="" name="property" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="removeProperty" fullname="QSatelliteInfo::removeProperty" href="qsatelliteinfo.html#removeProperty" location="qsatelliteinfo.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="removeProperty(Property property)">
+ <parameter left="Property" right="" name="property" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="hasProperty" fullname="QSatelliteInfo::hasProperty" href="qsatelliteinfo.html#hasProperty" location="qsatelliteinfo.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="hasProperty(Property property) const">
+ <parameter left="Property" right="" name="property" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="installService" fullname="QServicePluginInterface::installService" href="qserviceplugininterface.html#installService" location="qserviceplugininterface.cpp" virtual="impure" meta="plain" const="false" static="false" overload="false" type="void" signature="installService()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="uninstallService" fullname="QServicePluginInterface::uninstallService" href="qserviceplugininterface.html#uninstallService" location="qserviceplugininterface.cpp" virtual="impure" meta="plain" const="false" static="false" overload="false" type="void" signature="uninstallService()"/>
+ </class>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QAbstractSecuritySession" href="qabstractsecuritysession.html" location="qabstractsecuritysession.h" bases="QObject" module="">
+ <function access="public" threadsafety="unspecified" status="commendable" name="QAbstractSecuritySession" fullname="QAbstractSecuritySession::QAbstractSecuritySession" href="qabstractsecuritysession.html#QAbstractSecuritySession" location="qabstractsecuritysession.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QAbstractSecuritySession(QObject * parent)">
+ <parameter left="QObject *" right="" name="parent" default="0"/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="~QAbstractSecuritySession" fullname="QAbstractSecuritySession::~QAbstractSecuritySession" href="qabstractsecuritysession.html#dtor.QAbstractSecuritySession" location="qabstractsecuritysession.h" virtual="impure" meta="destructor" const="false" static="false" overload="false" type="" signature="~QAbstractSecuritySession()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="isAllowed" fullname="QAbstractSecuritySession::isAllowed" href="qabstractsecuritysession.html#isAllowed" location="qabstractsecuritysession.h" virtual="pure" meta="plain" const="false" static="false" overload="false" type="bool" signature="isAllowed(const QStringList &amp; capabilities)">
+ <parameter left="const QStringList &amp;" right="" name="capabilities" default=""/>
+ </function>
+ </class>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QGeoAreaMonitor" href="qgeoareamonitor.html" location="qgeoareamonitor.h" bases="QObject" module="">
+ <function access="public" threadsafety="unspecified" status="commendable" name="QGeoAreaMonitor" fullname="QGeoAreaMonitor::QGeoAreaMonitor" href="qgeoareamonitor.html#QGeoAreaMonitor" location="qgeoareamonitor.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QGeoAreaMonitor(QObject * parent)">
+ <parameter left="QObject *" right="" name="parent" default="0"/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="~QGeoAreaMonitor" fullname="QGeoAreaMonitor::~QGeoAreaMonitor" href="qgeoareamonitor.html#dtor.QGeoAreaMonitor" location="qgeoareamonitor.h" virtual="pure" meta="destructor" const="false" static="false" overload="false" type="" signature="~QGeoAreaMonitor()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setMonitoredArea" fullname="QGeoAreaMonitor::setMonitoredArea" href="qgeoareamonitor.html#setMonitoredArea" location="qgeoareamonitor.h" virtual="impure" meta="plain" const="false" static="false" overload="false" type="void" signature="setMonitoredArea(const QGeoCoordinate &amp; coordinate, int radius)">
+ <parameter left="const QGeoCoordinate &amp;" right="" name="coordinate" default=""/>
+ <parameter left="int" right="" name="radius" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="coordinate" fullname="QGeoAreaMonitor::coordinate" href="qgeoareamonitor.html#coordinate" location="qgeoareamonitor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QGeoCoordinate" signature="coordinate() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="radius" fullname="QGeoAreaMonitor::radius" href="qgeoareamonitor.html#radius" location="qgeoareamonitor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="int" signature="radius() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="createMonitor" fullname="QGeoAreaMonitor::createMonitor" href="qgeoareamonitor.html#createMonitor" location="qgeoareamonitor.h" virtual="non" meta="plain" const="false" static="true" overload="false" type="QGeoAreaMonitor *" signature="createMonitor(QObject * parent)">
+ <parameter left="QObject *" right="" name="parent" default="0"/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="areaEntered" fullname="QGeoAreaMonitor::areaEntered" href="qgeoareamonitor.html#areaEntered" location="qgeoareamonitor.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="areaEntered(const QGeoPositionInfo &amp; update)">
+ <parameter left="const QGeoPositionInfo &amp;" right="" name="update" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="areaExited" fullname="QGeoAreaMonitor::areaExited" href="qgeoareamonitor.html#areaExited" location="qgeoareamonitor.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="areaExited(const QGeoPositionInfo &amp; update)">
+ <parameter left="const QGeoPositionInfo &amp;" right="" name="update" default=""/>
+ </function>
+ </class>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QSatelliteInfoSource" href="qsatelliteinfosource.html" location="qsatelliteinfosource.h" bases="QObject" module="">
+ <function access="public" threadsafety="unspecified" status="commendable" name="QSatelliteInfoSource" fullname="QSatelliteInfoSource::QSatelliteInfoSource" href="qsatelliteinfosource.html#QSatelliteInfoSource" location="qsatelliteinfosource.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QSatelliteInfoSource(QObject * parent)">
+ <parameter left="QObject *" right="" name="parent" default="0"/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="createSource" fullname="QSatelliteInfoSource::createSource" href="qsatelliteinfosource.html#createSource" location="qsatelliteinfosource.h" virtual="non" meta="plain" const="false" static="true" overload="false" type="QSatelliteInfoSource *" signature="createSource(QObject * parent)">
+ <parameter left="QObject *" right="" name="parent" default="0"/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="startUpdates" fullname="QSatelliteInfoSource::startUpdates" href="qsatelliteinfosource.html#startUpdates" location="qsatelliteinfosource.h" virtual="pure" meta="slot" const="false" static="false" overload="false" type="void" signature="startUpdates()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="stopUpdates" fullname="QSatelliteInfoSource::stopUpdates" href="qsatelliteinfosource.html#stopUpdates" location="qsatelliteinfosource.h" virtual="pure" meta="slot" const="false" static="false" overload="false" type="void" signature="stopUpdates()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="requestUpdate" fullname="QSatelliteInfoSource::requestUpdate" href="qsatelliteinfosource.html#requestUpdate" location="qsatelliteinfosource.h" virtual="pure" meta="slot" const="false" static="false" overload="false" type="void" signature="requestUpdate(int timeout)">
+ <parameter left="int" right="" name="timeout" default="5000"/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="satellitesInViewUpdated" fullname="QSatelliteInfoSource::satellitesInViewUpdated" href="qsatelliteinfosource.html#satellitesInViewUpdated" location="qsatelliteinfosource.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="satellitesInViewUpdated(const QList&lt;QSatelliteInfo&gt; &amp; satellites)">
+ <parameter left="const QList&lt;QSatelliteInfo&gt; &amp;" right="" name="satellites" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="satellitesInUseUpdated" fullname="QSatelliteInfoSource::satellitesInUseUpdated" href="qsatelliteinfosource.html#satellitesInUseUpdated" location="qsatelliteinfosource.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="satellitesInUseUpdated(const QList&lt;QSatelliteInfo&gt; &amp; satellites)">
+ <parameter left="const QList&lt;QSatelliteInfo&gt; &amp;" right="" name="satellites" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="requestTimeout" fullname="QSatelliteInfoSource::requestTimeout" href="qsatelliteinfosource.html#requestTimeout" location="qsatelliteinfosource.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="requestTimeout()"/>
+ </class>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QNetworkConfigurationManager" href="qnetworkconfigurationmanager.html" location="qnetworkconfigmanager.h" bases="QObject" module="QtNetwork">
+ <enum access="public" threadsafety="unspecified" status="commendable" name="CapabilityFlag" fullname="QNetworkConfigurationManager::CapabilityFlag" href="qnetworkconfigurationmanager.html#CapabilityFlag-enum" location="qnetworkconfigmanager.h" typedef="QNetworkConfigurationManager::CapabilityFlags">
+ <value name="BearerManagement" value="0x00000001"/>
+ <value name="DirectConnectionRouting" value="0x00000002"/>
+ <value name="SystemSessionSupport" value="0x00000004"/>
+ <value name="ApplicationLevelRoaming" value="0x00000008"/>
+ <value name="ForcedRoaming" value="0x00000010"/>
+ <value name="DataStatistics" value="0x00000020"/>
+ </enum>
+ <typedef access="public" threadsafety="unspecified" status="commendable" name="CapabilityFlags" fullname="QNetworkConfigurationManager::CapabilityFlags" href="qnetworkconfigurationmanager.html#CapabilityFlags-typedef" location="qnetworkconfigmanager.h" enum="QNetworkConfigurationManager::CapabilityFlag"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QNetworkConfigurationManager" fullname="QNetworkConfigurationManager::QNetworkConfigurationManager" href="qnetworkconfigurationmanager.html#QNetworkConfigurationManager" location="qnetworkconfigmanager.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QNetworkConfigurationManager(QObject * parent)">
+ <parameter left="QObject *" right="" name="parent" default="0"/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="~QNetworkConfigurationManager" fullname="QNetworkConfigurationManager::~QNetworkConfigurationManager" href="qnetworkconfigurationmanager.html#dtor.QNetworkConfigurationManager" location="qnetworkconfigmanager.h" virtual="impure" meta="destructor" const="false" static="false" overload="false" type="" signature="~QNetworkConfigurationManager()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="capabilities" fullname="QNetworkConfigurationManager::capabilities" href="qnetworkconfigurationmanager.html#capabilities" location="qnetworkconfigmanager.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QNetworkConfigurationManager::CapabilityFlags" signature="capabilities() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="defaultConfiguration" fullname="QNetworkConfigurationManager::defaultConfiguration" href="qnetworkconfigurationmanager.html#defaultConfiguration" location="qnetworkconfigmanager.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QNetworkConfiguration" signature="defaultConfiguration() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="allConfigurations" fullname="QNetworkConfigurationManager::allConfigurations" href="qnetworkconfigurationmanager.html#allConfigurations" location="qnetworkconfigmanager.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QList&lt;QNetworkConfiguration&gt;" signature="allConfigurations(QFlags&lt;QNetworkConfiguration::StateFlag&gt; filter) const">
+ <parameter left="QFlags&lt;QNetworkConfiguration::StateFlag&gt;" right="" name="filter" default="0"/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="configurationFromIdentifier" fullname="QNetworkConfigurationManager::configurationFromIdentifier" href="qnetworkconfigurationmanager.html#configurationFromIdentifier" location="qnetworkconfigmanager.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QNetworkConfiguration" signature="configurationFromIdentifier(const QString &amp; identifier) const">
+ <parameter left="const QString &amp;" right="" name="identifier" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="updateConfigurations" fullname="QNetworkConfigurationManager::updateConfigurations" href="qnetworkconfigurationmanager.html#updateConfigurations" location="qnetworkconfigmanager.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="updateConfigurations()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="configurationAdded" fullname="QNetworkConfigurationManager::configurationAdded" href="qnetworkconfigurationmanager.html#configurationAdded" location="qnetworkconfigmanager.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="configurationAdded(const QNetworkConfiguration &amp; config)">
+ <parameter left="const QNetworkConfiguration &amp;" right="" name="config" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="configurationRemoved" fullname="QNetworkConfigurationManager::configurationRemoved" href="qnetworkconfigurationmanager.html#configurationRemoved" location="qnetworkconfigmanager.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="configurationRemoved(const QNetworkConfiguration &amp; configuration)">
+ <parameter left="const QNetworkConfiguration &amp;" right="" name="configuration" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="configurationChanged" fullname="QNetworkConfigurationManager::configurationChanged" href="qnetworkconfigurationmanager.html#configurationChanged" location="qnetworkconfigmanager.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="configurationChanged(const QNetworkConfiguration &amp; config)">
+ <parameter left="const QNetworkConfiguration &amp;" right="" name="config" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="onlineStateChanged" fullname="QNetworkConfigurationManager::onlineStateChanged" href="qnetworkconfigurationmanager.html#onlineStateChanged" location="qnetworkconfigmanager.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="onlineStateChanged(bool isOnline)">
+ <parameter left="bool" right="" name="isOnline" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="updateCompleted" fullname="QNetworkConfigurationManager::updateCompleted" href="qnetworkconfigurationmanager.html#updateCompleted" location="qnetworkconfigmanager.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="updateCompleted()"/>
+ </class>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QServiceInterfaceDescriptor" href="qserviceinterfacedescriptor.html" location="qserviceinterfacedescriptor.h" bases="" module="">
+ <contents name="namespaces" title="Namespaces" level="1"/>
+ <enum access="public" threadsafety="unspecified" status="commendable" name="PropertyKey" fullname="QServiceInterfaceDescriptor::PropertyKey" href="qserviceinterfacedescriptor.html#PropertyKey-enum" location="qserviceinterfacedescriptor.h">
+ <value name="Capabilities" value="0"/>
+ <value name="Location" value="1"/>
+ <value name="ServiceDescription" value="2"/>
+ <value name="InterfaceDescription" value="3"/>
+ </enum>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QServiceInterfaceDescriptor" fullname="QServiceInterfaceDescriptor::QServiceInterfaceDescriptor" href="qserviceinterfacedescriptor.html#QServiceInterfaceDescriptor" location="qserviceinterfacedescriptor.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QServiceInterfaceDescriptor()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QServiceInterfaceDescriptor" fullname="QServiceInterfaceDescriptor::QServiceInterfaceDescriptor" href="qserviceinterfacedescriptor.html#QServiceInterfaceDescriptor-2" location="qserviceinterfacedescriptor.h" virtual="non" meta="constructor" const="false" static="false" overload="true" overload-number="2" type="" signature="QServiceInterfaceDescriptor(const QServiceInterfaceDescriptor &amp; other)">
+ <parameter left="const QServiceInterfaceDescriptor &amp;" right="" name="other" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="~QServiceInterfaceDescriptor" fullname="QServiceInterfaceDescriptor::~QServiceInterfaceDescriptor" href="qserviceinterfacedescriptor.html#dtor.QServiceInterfaceDescriptor" location="qserviceinterfacedescriptor.h" virtual="non" meta="destructor" const="false" static="false" overload="false" type="" signature="~QServiceInterfaceDescriptor()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator=" fullname="QServiceInterfaceDescriptor::operator=" href="qserviceinterfacedescriptor.html#operator=" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="QServiceInterfaceDescriptor &amp;" signature="operator=(const QServiceInterfaceDescriptor &amp; other)">
+ <parameter left="const QServiceInterfaceDescriptor &amp;" right="" name="other" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator==" fullname="QServiceInterfaceDescriptor::operator==" href="qserviceinterfacedescriptor.html#operator==" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="operator==(const QServiceInterfaceDescriptor &amp; other) const">
+ <parameter left="const QServiceInterfaceDescriptor &amp;" right="" name="other" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator!=" fullname="QServiceInterfaceDescriptor::operator!=" href="qserviceinterfacedescriptor.html#operator!=" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="operator!=(const QServiceInterfaceDescriptor &amp; other) const">
+ <parameter left="const QServiceInterfaceDescriptor &amp;" right="" name="other" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="serviceName" fullname="QServiceInterfaceDescriptor::serviceName" href="qserviceinterfacedescriptor.html#serviceName" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="serviceName() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="interfaceName" fullname="QServiceInterfaceDescriptor::interfaceName" href="qserviceinterfacedescriptor.html#interfaceName" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="interfaceName() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="majorVersion" fullname="QServiceInterfaceDescriptor::majorVersion" href="qserviceinterfacedescriptor.html#majorVersion" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="int" signature="majorVersion() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="minorVersion" fullname="QServiceInterfaceDescriptor::minorVersion" href="qserviceinterfacedescriptor.html#minorVersion" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="int" signature="minorVersion() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="isValid" fullname="QServiceInterfaceDescriptor::isValid" href="qserviceinterfacedescriptor.html#isValid" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="isValid() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="inSystemScope" fullname="QServiceInterfaceDescriptor::inSystemScope" href="qserviceinterfacedescriptor.html#inSystemScope" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="inSystemScope() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="property" fullname="QServiceInterfaceDescriptor::property" href="qserviceinterfacedescriptor.html#property" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QVariant" signature="property(QServiceInterfaceDescriptor::PropertyKey key) const">
+ <parameter left="QServiceInterfaceDescriptor::PropertyKey" right="" name="key" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="customProperty" fullname="QServiceInterfaceDescriptor::customProperty" href="qserviceinterfacedescriptor.html#customProperty" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="customProperty(const QString &amp; key) const">
+ <parameter left="const QString &amp;" right="" name="key" default=""/>
+ </function>
+ </class>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator&lt;&lt;" href="qserviceinterfacedescriptor.html#operator&lt;&lt;-78" location="qserviceinterfacedescriptor.cpp" virtual="non" meta="plain" const="false" static="false" overload="true" overload-number="78" relates="QServiceInterfaceDescriptor" type="QDataStream &amp;" signature="operator&lt;&lt;(QDataStream &amp; out, const QServiceInterfaceDescriptor &amp; dc)">
+ <parameter left="QDataStream &amp;" right="" name="out" default=""/>
+ <parameter left="const QServiceInterfaceDescriptor &amp;" right="" name="dc" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator&gt;&gt;" href="qserviceinterfacedescriptor.html#operator&gt;&gt;-73" location="qserviceinterfacedescriptor.cpp" virtual="non" meta="plain" const="false" static="false" overload="true" overload-number="73" relates="QServiceInterfaceDescriptor" type="QDataStream &amp;" signature="operator&gt;&gt;(QDataStream &amp; in, QServiceInterfaceDescriptor &amp; dc)">
+ <parameter left="QDataStream &amp;" right="" name="in" default=""/>
+ <parameter left="QServiceInterfaceDescriptor &amp;" right="" name="dc" default=""/>
+ </function>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QGeoPositionInfo" href="qgeopositioninfo.html" location="qgeopositioninfo.h" bases="" module="">
+ <enum access="public" threadsafety="unspecified" status="commendable" name="Property" fullname="QGeoPositionInfo::Property" href="qgeopositioninfo.html#Property-enum" location="qgeopositioninfo.h">
+ <value name="Heading" value="0"/>
+ <value name="GroundSpeed" value="1"/>
+ <value name="VerticalSpeed" value="2"/>
+ <value name="MagneticVariation" value="3"/>
+ <value name="HorizontalAccuracy" value="4"/>
+ <value name="VerticalAccuracy" value="5"/>
+ </enum>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QGeoPositionInfo" fullname="QGeoPositionInfo::QGeoPositionInfo" href="qgeopositioninfo.html#QGeoPositionInfo" location="qgeopositioninfo.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QGeoPositionInfo()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QGeoPositionInfo" fullname="QGeoPositionInfo::QGeoPositionInfo" href="qgeopositioninfo.html#QGeoPositionInfo-2" location="qgeopositioninfo.h" virtual="non" meta="constructor" const="false" static="false" overload="true" overload-number="2" type="" signature="QGeoPositionInfo(const QGeoCoordinate &amp; coordinate, const QDateTime &amp; dateTime)">
+ <parameter left="const QGeoCoordinate &amp;" right="" name="coordinate" default=""/>
+ <parameter left="const QDateTime &amp;" right="" name="dateTime" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QGeoPositionInfo" fullname="QGeoPositionInfo::QGeoPositionInfo" href="qgeopositioninfo.html#QGeoPositionInfo-3" location="qgeopositioninfo.h" virtual="non" meta="constructor" const="false" static="false" overload="true" overload-number="3" type="" signature="QGeoPositionInfo(const QGeoPositionInfo &amp; other)">
+ <parameter left="const QGeoPositionInfo &amp;" right="" name="other" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="~QGeoPositionInfo" fullname="QGeoPositionInfo::~QGeoPositionInfo" href="qgeopositioninfo.html#dtor.QGeoPositionInfo" location="qgeopositioninfo.h" virtual="non" meta="destructor" const="false" static="false" overload="false" type="" signature="~QGeoPositionInfo()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator=" fullname="QGeoPositionInfo::operator=" href="qgeopositioninfo.html#operator=" location="qgeopositioninfo.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="QGeoPositionInfo &amp;" signature="operator=(const QGeoPositionInfo &amp; other)">
+ <parameter left="const QGeoPositionInfo &amp;" right="" name="other" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator==" fullname="QGeoPositionInfo::operator==" href="qgeopositioninfo.html#operator==" location="qgeopositioninfo.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="operator==(const QGeoPositionInfo &amp; other) const">
+ <parameter left="const QGeoPositionInfo &amp;" right="" name="other" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator!=" fullname="QGeoPositionInfo::operator!=" href="qgeopositioninfo.html#operator!=" location="qgeopositioninfo.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="operator!=(const QGeoPositionInfo &amp; other) const">
+ <parameter left="const QGeoPositionInfo &amp;" right="" name="other" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="isValid" fullname="QGeoPositionInfo::isValid" href="qgeopositioninfo.html#isValid" location="qgeopositioninfo.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="isValid() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setDateTime" fullname="QGeoPositionInfo::setDateTime" href="qgeopositioninfo.html#setDateTime" location="qgeopositioninfo.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setDateTime(const QDateTime &amp; dateTime)">
+ <parameter left="const QDateTime &amp;" right="" name="dateTime" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="dateTime" fullname="QGeoPositionInfo::dateTime" href="qgeopositioninfo.html#dateTime" location="qgeopositioninfo.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QDateTime" signature="dateTime() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setCoordinate" fullname="QGeoPositionInfo::setCoordinate" href="qgeopositioninfo.html#setCoordinate" location="qgeopositioninfo.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setCoordinate(const QGeoCoordinate &amp; coordinate)">
+ <parameter left="const QGeoCoordinate &amp;" right="" name="coordinate" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="coordinate" fullname="QGeoPositionInfo::coordinate" href="qgeopositioninfo.html#coordinate" location="qgeopositioninfo.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QGeoCoordinate" signature="coordinate() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setProperty" fullname="QGeoPositionInfo::setProperty" href="qgeopositioninfo.html#setProperty" location="qgeopositioninfo.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setProperty(Property property, qreal value)">
+ <parameter left="Property" right="" name="property" default=""/>
+ <parameter left="qreal" right="" name="value" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="property" fullname="QGeoPositionInfo::property" href="qgeopositioninfo.html#property" location="qgeopositioninfo.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="qreal" signature="property(Property property) const">
+ <parameter left="Property" right="" name="property" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="removeProperty" fullname="QGeoPositionInfo::removeProperty" href="qgeopositioninfo.html#removeProperty" location="qgeopositioninfo.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="removeProperty(Property property)">
+ <parameter left="Property" right="" name="property" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="hasProperty" fullname="QGeoPositionInfo::hasProperty" href="qgeopositioninfo.html#hasProperty" location="qgeopositioninfo.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="hasProperty(Property property) const">
+ <parameter left="Property" right="" name="property" default=""/>
+ </function>
+ </class>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QNetworkSession" href="qnetworksession.html" location="qnetworksession.h" bases="QObject" module="QtNetwork">
+ <contents name="roaming" title="Roaming" level="1"/>
+ <enum access="public" threadsafety="unspecified" status="commendable" name="State" fullname="QNetworkSession::State" href="qnetworksession.html#State-enum" location="qnetworksession.h">
+ <value name="Invalid" value="0"/>
+ <value name="NotAvailable" value="1"/>
+ <value name="Connecting" value="2"/>
+ <value name="Connected" value="3"/>
+ <value name="Closing" value="4"/>
+ <value name="Disconnected" value="5"/>
+ <value name="Roaming" value="6"/>
+ </enum>
+ <enum access="public" threadsafety="unspecified" status="commendable" name="SessionError" fullname="QNetworkSession::SessionError" href="qnetworksession.html#SessionError-enum" location="qnetworksession.h">
+ <value name="UnknownSessionError" value="0"/>
+ <value name="SessionAbortedError" value="1"/>
+ <value name="RoamingError" value="2"/>
+ <value name="OperationNotSupportedError" value="3"/>
+ <value name="InvalidConfigurationError" value="4"/>
+ </enum>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QNetworkSession" fullname="QNetworkSession::QNetworkSession" href="qnetworksession.html#QNetworkSession" location="qnetworksession.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QNetworkSession(const QNetworkConfiguration &amp; connectionConfig, QObject * parent)">
+ <parameter left="const QNetworkConfiguration &amp;" right="" name="connectionConfig" default=""/>
+ <parameter left="QObject *" right="" name="parent" default="0"/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="~QNetworkSession" fullname="QNetworkSession::~QNetworkSession" href="qnetworksession.html#dtor.QNetworkSession" location="qnetworksession.h" virtual="impure" meta="destructor" const="false" static="false" overload="false" type="" signature="~QNetworkSession()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="isActive" fullname="QNetworkSession::isActive" href="qnetworksession.html#isActive" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="isActive() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="configuration" fullname="QNetworkSession::configuration" href="qnetworksession.html#configuration" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QNetworkConfiguration" signature="configuration() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="bearerName" fullname="QNetworkSession::bearerName" href="qnetworksession.html#bearerName" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="bearerName() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="interface" fullname="QNetworkSession::interface" href="qnetworksession.html#interface" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QNetworkInterface" signature="interface() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="state" fullname="QNetworkSession::state" href="qnetworksession.html#state" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="State" signature="state() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="error" fullname="QNetworkSession::error" href="qnetworksession.html#error" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="SessionError" signature="error() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="errorString" fullname="QNetworkSession::errorString" href="qnetworksession.html#errorString" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="errorString() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="property" fullname="QNetworkSession::property" href="qnetworksession.html#property" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QVariant" signature="property(const QString &amp; key) const">
+ <parameter left="const QString &amp;" right="" name="key" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="sentData" fullname="QNetworkSession::sentData" href="qnetworksession.html#sentData" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="quint64" signature="sentData() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="receivedData" fullname="QNetworkSession::receivedData" href="qnetworksession.html#receivedData" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="quint64" signature="receivedData() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="activeTime" fullname="QNetworkSession::activeTime" href="qnetworksession.html#activeTime" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="quint64" signature="activeTime() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="waitForOpened" fullname="QNetworkSession::waitForOpened" href="qnetworksession.html#waitForOpened" location="qnetworksession.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="bool" signature="waitForOpened(int msecs)">
+ <parameter left="int" right="" name="msecs" default="30000"/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="open" fullname="QNetworkSession::open" href="qnetworksession.html#open" location="qnetworksession.h" virtual="non" meta="slot" const="false" static="false" overload="false" type="void" signature="open()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="close" fullname="QNetworkSession::close" href="qnetworksession.html#close" location="qnetworksession.h" virtual="non" meta="slot" const="false" static="false" overload="false" type="void" signature="close()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="stop" fullname="QNetworkSession::stop" href="qnetworksession.html#stop" location="qnetworksession.h" virtual="non" meta="slot" const="false" static="false" overload="false" type="void" signature="stop()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="migrate" fullname="QNetworkSession::migrate" href="qnetworksession.html#migrate" location="qnetworksession.h" virtual="non" meta="slot" const="false" static="false" overload="false" type="void" signature="migrate()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="ignore" fullname="QNetworkSession::ignore" href="qnetworksession.html#ignore" location="qnetworksession.h" virtual="non" meta="slot" const="false" static="false" overload="false" type="void" signature="ignore()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="accept" fullname="QNetworkSession::accept" href="qnetworksession.html#accept" location="qnetworksession.h" virtual="non" meta="slot" const="false" static="false" overload="false" type="void" signature="accept()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="reject" fullname="QNetworkSession::reject" href="qnetworksession.html#reject" location="qnetworksession.h" virtual="non" meta="slot" const="false" static="false" overload="false" type="void" signature="reject()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="stateChanged" fullname="QNetworkSession::stateChanged" href="qnetworksession.html#stateChanged" location="qnetworksession.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="stateChanged(QNetworkSession::State state)">
+ <parameter left="QNetworkSession::State" right="" name="state" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="sessionOpened" fullname="QNetworkSession::sessionOpened" href="qnetworksession.html#sessionOpened" location="qnetworksession.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="sessionOpened()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="sessionClosed" fullname="QNetworkSession::sessionClosed" href="qnetworksession.html#sessionClosed" location="qnetworksession.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="sessionClosed()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="error" fullname="QNetworkSession::error" href="qnetworksession.html#error-2" location="qnetworksession.h" virtual="non" meta="signal" const="false" static="false" overload="true" overload-number="2" type="void" signature="error(QNetworkSession::SessionError error)">
+ <parameter left="QNetworkSession::SessionError" right="" name="error" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="preferredConfigurationChanged" fullname="QNetworkSession::preferredConfigurationChanged" href="qnetworksession.html#preferredConfigurationChanged" location="qnetworksession.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="preferredConfigurationChanged(const QNetworkConfiguration &amp; config, bool isSeamless)">
+ <parameter left="const QNetworkConfiguration &amp;" right="" name="config" default=""/>
+ <parameter left="bool" right="" name="isSeamless" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="newConfigurationActivated" fullname="QNetworkSession::newConfigurationActivated" href="qnetworksession.html#newConfigurationActivated" location="qnetworksession.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="newConfigurationActivated()"/>
</class>
<class access="public" threadsafety="unspecified" status="commendable" name="QServiceManager" href="qservicemanager.html" location="qservicemanager.h" bases="QObject" module="">
<enum access="public" threadsafety="unspecified" status="commendable" name="Scope" fullname="QServiceManager::Scope" href="qservicemanager.html#Scope-enum" location="qservicemanager.h">
@@ -269,118 +539,98 @@
<parameter left="QServiceManager::Scope" right="" name="scope" default=""/>
</function>
</class>
- <class access="public" threadsafety="unspecified" status="commendable" name="QNetworkSession" href="qnetworksession.html" location="qnetworksession.h" bases="QObject" module="QtNetwork">
- <contents name="roaming" title="Roaming" level="1"/>
- <enum access="public" threadsafety="unspecified" status="commendable" name="State" fullname="QNetworkSession::State" href="qnetworksession.html#State-enum" location="qnetworksession.h">
- <value name="Invalid" value="0"/>
- <value name="NotAvailable" value="1"/>
- <value name="Connecting" value="2"/>
- <value name="Connected" value="3"/>
- <value name="Closing" value="4"/>
- <value name="Disconnected" value="5"/>
- <value name="Roaming" value="6"/>
- </enum>
- <enum access="public" threadsafety="unspecified" status="commendable" name="SessionError" fullname="QNetworkSession::SessionError" href="qnetworksession.html#SessionError-enum" location="qnetworksession.h">
- <value name="UnknownSessionError" value="0"/>
- <value name="SessionAbortedError" value="1"/>
- <value name="RoamingError" value="2"/>
- <value name="OperationNotSupportedError" value="3"/>
- <value name="InvalidConfigurationError" value="4"/>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QServicePluginInterface" href="qserviceplugininterface.html" location="qserviceplugininterface.h" bases="" module="">
+ <function access="public" threadsafety="unspecified" status="commendable" name="createInstance" fullname="QServicePluginInterface::createInstance" href="qserviceplugininterface.html#createInstance" location="qserviceplugininterface.h" virtual="pure" meta="plain" const="false" static="false" overload="false" type="QObject *" signature="createInstance(const QServiceInterfaceDescriptor &amp; descriptor, QServiceContext * context, QAbstractSecuritySession * securitySession)">
+ <parameter left="const QServiceInterfaceDescriptor &amp;" right="" name="descriptor" default=""/>
+ <parameter left="QServiceContext *" right="" name="context" default=""/>
+ <parameter left="QAbstractSecuritySession *" right="" name="securitySession" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="installService" fullname="QServicePluginInterface::installService" href="qserviceplugininterface.html#installService" location="qserviceplugininterface.cpp" virtual="impure" meta="plain" const="false" static="false" overload="false" type="void" signature="installService()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="uninstallService" fullname="QServicePluginInterface::uninstallService" href="qserviceplugininterface.html#uninstallService" location="qserviceplugininterface.cpp" virtual="impure" meta="plain" const="false" static="false" overload="false" type="void" signature="uninstallService()"/>
+ </class>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QServiceContext" href="qservicecontext.html" location="qservicecontext.h" bases="QObject" module="">
+ <property access="public" threadsafety="unspecified" status="commendable" name="clientId" fullname="QServiceContext::clientId" href="qservicecontext.html#clientId-prop" location="qservicecontext.h" type="QString">
+ <getter name="clientId"/>
+ <setter name="setClientId"/>
+ </property>
+ <property access="public" threadsafety="unspecified" status="commendable" name="clientName" fullname="QServiceContext::clientName" href="qservicecontext.html#clientName-prop" location="qservicecontext.h" type="QString">
+ <getter name="clientName"/>
+ <setter name="setClientName"/>
+ </property>
+ <enum access="public" threadsafety="unspecified" status="commendable" name="ContextType" fullname="QServiceContext::ContextType" href="qservicecontext.html#ContextType-enum" location="qservicecontext.h">
+ <value name="DisplayContext" value="0"/>
+ <value name="ScriptContext" value="1"/>
+ <value name="UserDefined" value="100"/>
</enum>
- <function access="public" threadsafety="unspecified" status="commendable" name="QNetworkSession" fullname="QNetworkSession::QNetworkSession" href="qnetworksession.html#QNetworkSession" location="qnetworksession.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QNetworkSession(const QNetworkConfiguration &amp; connectionConfig, QObject * parent)">
- <parameter left="const QNetworkConfiguration &amp;" right="" name="connectionConfig" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QServiceContext" fullname="QServiceContext::QServiceContext" href="qservicecontext.html#QServiceContext" location="qservicecontext.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QServiceContext(QObject * parent)">
<parameter left="QObject *" right="" name="parent" default="0"/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="~QNetworkSession" fullname="QNetworkSession::~QNetworkSession" href="qnetworksession.html#dtor.QNetworkSession" location="qnetworksession.h" virtual="impure" meta="destructor" const="false" static="false" overload="false" type="" signature="~QNetworkSession()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="isActive" fullname="QNetworkSession::isActive" href="qnetworksession.html#isActive" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="isActive() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="configuration" fullname="QNetworkSession::configuration" href="qnetworksession.html#configuration" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QNetworkConfiguration" signature="configuration() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="bearerName" fullname="QNetworkSession::bearerName" href="qnetworksession.html#bearerName" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="bearerName() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="interface" fullname="QNetworkSession::interface" href="qnetworksession.html#interface" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QNetworkInterface" signature="interface() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="state" fullname="QNetworkSession::state" href="qnetworksession.html#state" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="State" signature="state() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="error" fullname="QNetworkSession::error" href="qnetworksession.html#error" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="SessionError" signature="error() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="errorString" fullname="QNetworkSession::errorString" href="qnetworksession.html#errorString" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="errorString() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="property" fullname="QNetworkSession::property" href="qnetworksession.html#property" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QVariant" signature="property(const QString &amp; key) const">
- <parameter left="const QString &amp;" right="" name="key" default=""/>
- </function>
- <function access="public" threadsafety="unspecified" status="commendable" name="sentData" fullname="QNetworkSession::sentData" href="qnetworksession.html#sentData" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="quint64" signature="sentData() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="receivedData" fullname="QNetworkSession::receivedData" href="qnetworksession.html#receivedData" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="quint64" signature="receivedData() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="activeTime" fullname="QNetworkSession::activeTime" href="qnetworksession.html#activeTime" location="qnetworksession.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="quint64" signature="activeTime() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="waitForOpened" fullname="QNetworkSession::waitForOpened" href="qnetworksession.html#waitForOpened" location="qnetworksession.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="bool" signature="waitForOpened(int msecs)">
- <parameter left="int" right="" name="msecs" default="30000"/>
- </function>
- <function access="public" threadsafety="unspecified" status="commendable" name="open" fullname="QNetworkSession::open" href="qnetworksession.html#open" location="qnetworksession.h" virtual="non" meta="slot" const="false" static="false" overload="false" type="void" signature="open()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="close" fullname="QNetworkSession::close" href="qnetworksession.html#close" location="qnetworksession.h" virtual="non" meta="slot" const="false" static="false" overload="false" type="void" signature="close()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="stop" fullname="QNetworkSession::stop" href="qnetworksession.html#stop" location="qnetworksession.h" virtual="non" meta="slot" const="false" static="false" overload="false" type="void" signature="stop()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="migrate" fullname="QNetworkSession::migrate" href="qnetworksession.html#migrate" location="qnetworksession.h" virtual="non" meta="slot" const="false" static="false" overload="false" type="void" signature="migrate()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="ignore" fullname="QNetworkSession::ignore" href="qnetworksession.html#ignore" location="qnetworksession.h" virtual="non" meta="slot" const="false" static="false" overload="false" type="void" signature="ignore()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="accept" fullname="QNetworkSession::accept" href="qnetworksession.html#accept" location="qnetworksession.h" virtual="non" meta="slot" const="false" static="false" overload="false" type="void" signature="accept()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="reject" fullname="QNetworkSession::reject" href="qnetworksession.html#reject" location="qnetworksession.h" virtual="non" meta="slot" const="false" static="false" overload="false" type="void" signature="reject()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="stateChanged" fullname="QNetworkSession::stateChanged" href="qnetworksession.html#stateChanged" location="qnetworksession.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="stateChanged(QNetworkSession::State state)">
- <parameter left="QNetworkSession::State" right="" name="state" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="~QServiceContext" fullname="QServiceContext::~QServiceContext" href="qservicecontext.html#dtor.QServiceContext" location="qservicecontext.h" virtual="impure" meta="destructor" const="false" static="false" overload="false" type="" signature="~QServiceContext()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="notify" fullname="QServiceContext::notify" href="qservicecontext.html#notify" location="qservicecontext.h" virtual="pure" meta="plain" const="false" static="false" overload="false" type="void" signature="notify(ContextType type, const QVariant &amp; data)">
+ <parameter left="ContextType" right="" name="type" default=""/>
+ <parameter left="const QVariant &amp;" right="" name="data" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="sessionOpened" fullname="QNetworkSession::sessionOpened" href="qnetworksession.html#sessionOpened" location="qnetworksession.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="sessionOpened()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="sessionClosed" fullname="QNetworkSession::sessionClosed" href="qnetworksession.html#sessionClosed" location="qnetworksession.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="sessionClosed()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="error" fullname="QNetworkSession::error" href="qnetworksession.html#error-2" location="qnetworksession.h" virtual="non" meta="signal" const="false" static="false" overload="true" overload-number="2" type="void" signature="error(QNetworkSession::SessionError error)">
- <parameter left="QNetworkSession::SessionError" right="" name="error" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="clientId" fullname="QServiceContext::clientId" href="qservicecontext.html#clientId-prop" location="qservicecontext.cpp" virtual="non" meta="plain" const="true" static="false" overload="false" associated-property="clientId" type="QString" signature="clientId() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setClientId" fullname="QServiceContext::setClientId" href="qservicecontext.html#clientId-prop" location="qservicecontext.h" virtual="non" meta="plain" const="false" static="false" overload="false" associated-property="clientId" type="void" signature="setClientId(const QString &amp; id)">
+ <parameter left="const QString &amp;" right="" name="id" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="preferredConfigurationChanged" fullname="QNetworkSession::preferredConfigurationChanged" href="qnetworksession.html#preferredConfigurationChanged" location="qnetworksession.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="preferredConfigurationChanged(const QNetworkConfiguration &amp; config, bool isSeamless)">
- <parameter left="const QNetworkConfiguration &amp;" right="" name="config" default=""/>
- <parameter left="bool" right="" name="isSeamless" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="clientName" fullname="QServiceContext::clientName" href="qservicecontext.html#clientName-prop" location="qservicecontext.cpp" virtual="non" meta="plain" const="true" static="false" overload="false" associated-property="clientName" type="QString" signature="clientName() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setClientName" fullname="QServiceContext::setClientName" href="qservicecontext.html#clientName-prop" location="qservicecontext.cpp" virtual="non" meta="plain" const="false" static="false" overload="false" associated-property="clientName" type="void" signature="setClientName(const QString &amp; name)">
+ <parameter left="const QString &amp;" right="" name="name" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="newConfigurationActivated" fullname="QNetworkSession::newConfigurationActivated" href="qnetworksession.html#newConfigurationActivated" location="qnetworksession.h" virtual="non" meta="signal" const="false" static="false" overload="false" type="void" signature="newConfigurationActivated()"/>
</class>
- <class access="public" threadsafety="unspecified" status="commendable" name="QServiceInterfaceDescriptor" href="qserviceinterfacedescriptor.html" location="qserviceinterfacedescriptor.h" bases="" module="">
- <contents name="namespaces" title="Namespaces" level="1"/>
- <enum access="public" threadsafety="unspecified" status="commendable" name="PropertyKey" fullname="QServiceInterfaceDescriptor::PropertyKey" href="qserviceinterfacedescriptor.html#PropertyKey-enum" location="qserviceinterfacedescriptor.h">
- <value name="Capabilities" value="0"/>
- <value name="Location" value="1"/>
- <value name="ServiceDescription" value="2"/>
- <value name="InterfaceDescription" value="3"/>
+ <class access="public" threadsafety="unspecified" status="commendable" name="QServiceFilter" href="qservicefilter.html" location="qservicefilter.h" bases="" module="">
+ <enum access="public" threadsafety="unspecified" status="commendable" name="VersionMatchRule" fullname="QServiceFilter::VersionMatchRule" href="qservicefilter.html#VersionMatchRule-enum" location="qservicefilter.h">
+ <value name="ExactVersionMatch" value="0"/>
+ <value name="MinimumVersionMatch" value="1"/>
</enum>
- <function access="public" threadsafety="unspecified" status="commendable" name="QServiceInterfaceDescriptor" fullname="QServiceInterfaceDescriptor::QServiceInterfaceDescriptor" href="qserviceinterfacedescriptor.html#QServiceInterfaceDescriptor" location="qserviceinterfacedescriptor.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QServiceInterfaceDescriptor()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="QServiceInterfaceDescriptor" fullname="QServiceInterfaceDescriptor::QServiceInterfaceDescriptor" href="qserviceinterfacedescriptor.html#QServiceInterfaceDescriptor-2" location="qserviceinterfacedescriptor.h" virtual="non" meta="constructor" const="false" static="false" overload="true" overload-number="2" type="" signature="QServiceInterfaceDescriptor(const QServiceInterfaceDescriptor &amp; other)">
- <parameter left="const QServiceInterfaceDescriptor &amp;" right="" name="other" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QServiceFilter" fullname="QServiceFilter::QServiceFilter" href="qservicefilter.html#QServiceFilter" location="qservicefilter.h" virtual="non" meta="constructor" const="false" static="false" overload="false" type="" signature="QServiceFilter()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="~QServiceFilter" fullname="QServiceFilter::~QServiceFilter" href="qservicefilter.html#dtor.QServiceFilter" location="qservicefilter.h" virtual="non" meta="destructor" const="false" static="false" overload="false" type="" signature="~QServiceFilter()"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QServiceFilter" fullname="QServiceFilter::QServiceFilter" href="qservicefilter.html#QServiceFilter-2" location="qservicefilter.h" virtual="non" meta="constructor" const="false" static="false" overload="true" overload-number="2" type="" signature="QServiceFilter(const QServiceFilter &amp; other)">
+ <parameter left="const QServiceFilter &amp;" right="" name="other" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="~QServiceInterfaceDescriptor" fullname="QServiceInterfaceDescriptor::~QServiceInterfaceDescriptor" href="qserviceinterfacedescriptor.html#dtor.QServiceInterfaceDescriptor" location="qserviceinterfacedescriptor.h" virtual="non" meta="destructor" const="false" static="false" overload="false" type="" signature="~QServiceInterfaceDescriptor()"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="operator=" fullname="QServiceInterfaceDescriptor::operator=" href="qserviceinterfacedescriptor.html#operator=" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="QServiceInterfaceDescriptor &amp;" signature="operator=(const QServiceInterfaceDescriptor &amp; other)">
- <parameter left="const QServiceInterfaceDescriptor &amp;" right="" name="other" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="QServiceFilter" fullname="QServiceFilter::QServiceFilter" href="qservicefilter.html#QServiceFilter-3" location="qservicefilter.h" virtual="non" meta="constructor" const="false" static="false" overload="true" overload-number="3" type="" signature="QServiceFilter(const QString &amp; interfaceName, const QString &amp; version, QServiceFilter::VersionMatchRule rule)">
+ <parameter left="const QString &amp;" right="" name="interfaceName" default=""/>
+ <parameter left="const QString &amp;" right="" name="version" default="QString()"/>
+ <parameter left="QServiceFilter::VersionMatchRule" right="" name="rule" default="QServiceFilter::MinimumVersionMatch"/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="operator==" fullname="QServiceInterfaceDescriptor::operator==" href="qserviceinterfacedescriptor.html#operator==" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="operator==(const QServiceInterfaceDescriptor &amp; other) const">
- <parameter left="const QServiceInterfaceDescriptor &amp;" right="" name="other" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator=" fullname="QServiceFilter::operator=" href="qservicefilter.html#operator=" location="qservicefilter.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="QServiceFilter &amp;" signature="operator=(const QServiceFilter &amp; other)">
+ <parameter left="const QServiceFilter &amp;" right="" name="other" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="operator!=" fullname="QServiceInterfaceDescriptor::operator!=" href="qserviceinterfacedescriptor.html#operator!=" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="operator!=(const QServiceInterfaceDescriptor &amp; other) const">
- <parameter left="const QServiceInterfaceDescriptor &amp;" right="" name="other" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setInterface" fullname="QServiceFilter::setInterface" href="qservicefilter.html#setInterface" location="qservicefilter.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setInterface(const QString &amp; interfaceName, const QString &amp; version, QServiceFilter::VersionMatchRule rule)">
+ <parameter left="const QString &amp;" right="" name="interfaceName" default=""/>
+ <parameter left="const QString &amp;" right="" name="version" default="QString()"/>
+ <parameter left="QServiceFilter::VersionMatchRule" right="" name="rule" default="QServiceFilter::MinimumVersionMatch"/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="serviceName" fullname="QServiceInterfaceDescriptor::serviceName" href="qserviceinterfacedescriptor.html#serviceName" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="serviceName() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="interfaceName" fullname="QServiceInterfaceDescriptor::interfaceName" href="qserviceinterfacedescriptor.html#interfaceName" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="interfaceName() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="majorVersion" fullname="QServiceInterfaceDescriptor::majorVersion" href="qserviceinterfacedescriptor.html#majorVersion" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="int" signature="majorVersion() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="minorVersion" fullname="QServiceInterfaceDescriptor::minorVersion" href="qserviceinterfacedescriptor.html#minorVersion" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="int" signature="minorVersion() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="isValid" fullname="QServiceInterfaceDescriptor::isValid" href="qserviceinterfacedescriptor.html#isValid" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="isValid() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="inSystemScope" fullname="QServiceInterfaceDescriptor::inSystemScope" href="qserviceinterfacedescriptor.html#inSystemScope" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="bool" signature="inSystemScope() const"/>
- <function access="public" threadsafety="unspecified" status="commendable" name="property" fullname="QServiceInterfaceDescriptor::property" href="qserviceinterfacedescriptor.html#property" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QVariant" signature="property(QServiceInterfaceDescriptor::PropertyKey key) const">
- <parameter left="QServiceInterfaceDescriptor::PropertyKey" right="" name="key" default=""/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setServiceName" fullname="QServiceFilter::setServiceName" href="qservicefilter.html#setServiceName" location="qservicefilter.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setServiceName(const QString &amp; serviceName)">
+ <parameter left="const QString &amp;" right="" name="serviceName" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="customProperty" fullname="QServiceInterfaceDescriptor::customProperty" href="qserviceinterfacedescriptor.html#customProperty" location="qserviceinterfacedescriptor.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="customProperty(const QString &amp; key) const">
+ <function access="public" threadsafety="unspecified" status="commendable" name="serviceName" fullname="QServiceFilter::serviceName" href="qservicefilter.html#serviceName" location="qservicefilter.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="serviceName() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="interfaceName" fullname="QServiceFilter::interfaceName" href="qservicefilter.html#interfaceName" location="qservicefilter.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="interfaceName() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="interfaceMajorVersion" fullname="QServiceFilter::interfaceMajorVersion" href="qservicefilter.html#interfaceMajorVersion" location="qservicefilter.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="int" signature="interfaceMajorVersion() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="interfaceMinorVersion" fullname="QServiceFilter::interfaceMinorVersion" href="qservicefilter.html#interfaceMinorVersion" location="qservicefilter.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="int" signature="interfaceMinorVersion() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="versionMatchRule" fullname="QServiceFilter::versionMatchRule" href="qservicefilter.html#versionMatchRule" location="qservicefilter.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="VersionMatchRule" signature="versionMatchRule() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="customKeys" fullname="QServiceFilter::customKeys" href="qservicefilter.html#customKeys" location="qservicefilter.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QList&lt;QString&gt;" signature="customKeys() const"/>
+ <function access="public" threadsafety="unspecified" status="commendable" name="customProperty" fullname="QServiceFilter::customProperty" href="qservicefilter.html#customProperty" location="qservicefilter.h" virtual="non" meta="plain" const="true" static="false" overload="false" type="QString" signature="customProperty(const QString &amp; key) const">
+ <parameter left="const QString &amp;" right="" name="key" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="setCustomProperty" fullname="QServiceFilter::setCustomProperty" href="qservicefilter.html#setCustomProperty" location="qservicefilter.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="setCustomProperty(const QString &amp; key, const QString &amp; value)">
+ <parameter left="const QString &amp;" right="" name="key" default=""/>
+ <parameter left="const QString &amp;" right="" name="value" default=""/>
+ </function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="removeCustomProperty" fullname="QServiceFilter::removeCustomProperty" href="qservicefilter.html#removeCustomProperty" location="qservicefilter.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="removeCustomProperty(const QString &amp; key)">
<parameter left="const QString &amp;" right="" name="key" default=""/>
</function>
+ <function access="public" threadsafety="unspecified" status="commendable" name="clearCustomProperties" fullname="QServiceFilter::clearCustomProperties" href="qservicefilter.html#clearCustomProperties" location="qservicefilter.h" virtual="non" meta="plain" const="false" static="false" overload="false" type="void" signature="clearCustomProperties()"/>
</class>
- <function access="public" threadsafety="unspecified" status="commendable" name="operator&lt;&lt;" href="qserviceinterfacedescriptor.html#operator&lt;&lt;-77" location="qserviceinterfacedescriptor.cpp" virtual="non" meta="plain" const="false" static="false" overload="true" overload-number="77" relates="QServiceInterfaceDescriptor" type="QDataStream &amp;" signature="operator&lt;&lt;(QDataStream &amp; out, const QServiceInterfaceDescriptor &amp; dc)">
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator&lt;&lt;" href="qservicefilter.html#operator&lt;&lt;-81" location="qservicefilter.cpp" virtual="non" meta="plain" const="false" static="false" overload="true" overload-number="81" relates="QServiceFilter" type="QDataStream &amp;" signature="operator&lt;&lt;(QDataStream &amp; out, const QServiceFilter &amp; sf)">
<parameter left="QDataStream &amp;" right="" name="out" default=""/>
- <parameter left="const QServiceInterfaceDescriptor &amp;" right="" name="dc" default=""/>
+ <parameter left="const QServiceFilter &amp;" right="" name="sf" default=""/>
</function>
- <function access="public" threadsafety="unspecified" status="commendable" name="operator&gt;&gt;" href="qserviceinterfacedescriptor.html#operator&gt;&gt;-74" location="qserviceinterfacedescriptor.cpp" virtual="non" meta="plain" const="false" static="false" overload="true" overload-number="74" relates="QServiceInterfaceDescriptor" type="QDataStream &amp;" signature="operator&gt;&gt;(QDataStream &amp; in, QServiceInterfaceDescriptor &amp; dc)">
+ <function access="public" threadsafety="unspecified" status="commendable" name="operator&gt;&gt;" href="qservicefilter.html#operator&gt;&gt;-74" location="qservicefilter.cpp" virtual="non" meta="plain" const="false" static="false" overload="true" overload-number="74" relates="QServiceFilter" type="QDataStream &amp;" signature="operator&gt;&gt;(QDataStream &amp; in, QServiceFilter &amp; sf)">
<parameter left="QDataStream &amp;" right="" name="in" default=""/>
- <parameter left="QServiceInterfaceDescriptor &amp;" right="" name="dc" default=""/>
+ <parameter left="QServiceFilter &amp;" right="" name="sf" default=""/>
</function>
- <page access="public" status="commendable" name="servicebrowser" href="servicebrowser.html" subtype="example" title="Service Browser Example" fulltitle="Service Browser Example" subtitle="" location="servicebrowser.qdoc">
- <contents name="servicebrowser-class-definition" title="ServiceBrowser Class Definition" level="1"/>
- <contents name="servicebrowser-class-implementation" title="ServiceBrowser Class Implementation" level="1"/>
- <contents name="invoking-attributes-an-example" title="Invoking attributes: an example" level="2"/>
- <page access="public" status="commendable" name="servicebrowser/servicebrowser.cpp" href="servicebrowser-servicebrowser-cpp.html" subtype="file" title="" fulltitle="servicebrowser.cpp Example File" subtitle="servicebrowser/servicebrowser.cpp" location=""/>
- <page access="public" status="commendable" name="servicebrowser/servicebrowser.h" href="servicebrowser-servicebrowser-h.html" subtype="file" title="" fulltitle="servicebrowser.h Example File" subtitle="servicebrowser/servicebrowser.h" location=""/>
- <page access="public" status="commendable" name="servicebrowser/main.cpp" href="servicebrowser-main-cpp.html" subtype="file" title="" fulltitle="main.cpp Example File" subtitle="servicebrowser/main.cpp" location=""/>
- <page access="public" status="commendable" name="servicebrowser/servicebrowser.pro" href="servicebrowser-servicebrowser-pro.html" subtype="file" title="" fulltitle="servicebrowser.pro Example File" subtitle="servicebrowser/servicebrowser.pro" location=""/>
- </page>
<page access="public" status="commendable" name="bearercloud" href="bearercloud.html" subtype="example" title="Bearer Cloud Example" fulltitle="Bearer Cloud Example" subtitle="" location="bearercloud.qdoc">
<contents name="setting-the-scene" title="Setting the scene" level="1"/>
<contents name="responding-to-changes" title="Responding to changes" level="1"/>
@@ -395,15 +645,32 @@
<page access="public" status="commendable" name="bearercloud/bearercloud.pro" href="bearercloud-bearercloud-pro.html" subtype="file" title="" fulltitle="bearercloud.pro Example File" subtitle="bearercloud/bearercloud.pro" location=""/>
<page access="public" status="commendable" name="bearercloud/icons.qrc" href="bearercloud-icons-qrc.html" subtype="file" title="" fulltitle="icons.qrc Example File" subtitle="bearercloud/icons.qrc" location=""/>
</page>
- <page access="public" status="commendable" name="bearermonitor" href="bearermonitor.html" subtype="example" title="Bearer Monitor Example" fulltitle="Bearer Monitor Example" subtitle="" location="bearermonitor.qdoc">
- <page access="public" status="commendable" name="bearermonitor/bearerdialog.cpp" href="bearermonitor-bearerdialog-cpp.html" subtype="file" title="" fulltitle="bearerdialog.cpp Example File" subtitle="bearermonitor/bearerdialog.cpp" location=""/>
- <page access="public" status="commendable" name="bearermonitor/bearerdialog.h" href="bearermonitor-bearerdialog-h.html" subtype="file" title="" fulltitle="bearerdialog.h Example File" subtitle="bearermonitor/bearerdialog.h" location=""/>
- <page access="public" status="commendable" name="bearermonitor/sessionwidget.cpp" href="bearermonitor-sessionwidget-cpp.html" subtype="file" title="" fulltitle="sessionwidget.cpp Example File" subtitle="bearermonitor/sessionwidget.cpp" location=""/>
- <page access="public" status="commendable" name="bearermonitor/sessionwidget.h" href="bearermonitor-sessionwidget-h.html" subtype="file" title="" fulltitle="sessionwidget.h Example File" subtitle="bearermonitor/sessionwidget.h" location=""/>
- <page access="public" status="commendable" name="bearermonitor/main.cpp" href="bearermonitor-main-cpp.html" subtype="file" title="" fulltitle="main.cpp Example File" subtitle="bearermonitor/main.cpp" location=""/>
- <page access="public" status="commendable" name="bearermonitor/bearermonitor.pro" href="bearermonitor-bearermonitor-pro.html" subtype="file" title="" fulltitle="bearermonitor.pro Example File" subtitle="bearermonitor/bearermonitor.pro" location=""/>
+ <page access="public" status="commendable" name="servicebrowser" href="servicebrowser.html" subtype="example" title="Service Browser Example" fulltitle="Service Browser Example" subtitle="" location="servicebrowser.qdoc">
+ <contents name="servicebrowser-class-definition" title="ServiceBrowser Class Definition" level="1"/>
+ <contents name="servicebrowser-class-implementation" title="ServiceBrowser Class Implementation" level="1"/>
+ <contents name="invoking-attributes-an-example" title="Invoking attributes: an example" level="2"/>
+ <page access="public" status="commendable" name="servicebrowser/servicebrowser.cpp" href="servicebrowser-servicebrowser-cpp.html" subtype="file" title="" fulltitle="servicebrowser.cpp Example File" subtitle="servicebrowser/servicebrowser.cpp" location=""/>
+ <page access="public" status="commendable" name="servicebrowser/servicebrowser.h" href="servicebrowser-servicebrowser-h.html" subtype="file" title="" fulltitle="servicebrowser.h Example File" subtitle="servicebrowser/servicebrowser.h" location=""/>
+ <page access="public" status="commendable" name="servicebrowser/main.cpp" href="servicebrowser-main-cpp.html" subtype="file" title="" fulltitle="main.cpp Example File" subtitle="servicebrowser/main.cpp" location=""/>
+ <page access="public" status="commendable" name="servicebrowser/servicebrowser.pro" href="servicebrowser-servicebrowser-pro.html" subtype="file" title="" fulltitle="servicebrowser.pro Example File" subtitle="servicebrowser/servicebrowser.pro" location=""/>
+ </page>
+ <page access="public" status="commendable" name="bluetoothtransferplugin" href="bluetoothtransferplugin.html" subtype="example" title="Bluetooth Transfer Plugin Example" fulltitle="Bluetooth Transfer Plugin Example" subtitle="" location="bluetoothtransferplugin.qdoc">
+ <page access="public" status="commendable" name="bluetoothtransferplugin/bluetoothtransfer.cpp" href="bluetoothtransferplugin-bluetoothtransfer-cpp.html" subtype="file" title="" fulltitle="bluetoothtransfer.cpp Example File" subtitle="bluetoothtransferplugin/bluetoothtransfer.cpp" location=""/>
+ <page access="public" status="commendable" name="bluetoothtransferplugin/bluetoothtransfer.h" href="bluetoothtransferplugin-bluetoothtransfer-h.html" subtype="file" title="" fulltitle="bluetoothtransfer.h Example File" subtitle="bluetoothtransferplugin/bluetoothtransfer.h" location=""/>
+ <page access="public" status="commendable" name="bluetoothtransferplugin/bluetoothtransferplugin.cpp" href="bluetoothtransferplugin-bluetoothtransferplugin-cpp.html" subtype="file" title="" fulltitle="bluetoothtransferplugin.cpp Example File" subtitle="bluetoothtransferplugin/bluetoothtransferplugin.cpp" location=""/>
+ <page access="public" status="commendable" name="bluetoothtransferplugin/bluetoothtransferplugin.h" href="bluetoothtransferplugin-bluetoothtransferplugin-h.html" subtype="file" title="" fulltitle="bluetoothtransferplugin.h Example File" subtitle="bluetoothtransferplugin/bluetoothtransferplugin.h" location=""/>
+ <page access="public" status="commendable" name="bluetoothtransferplugin/bluetoothtransferplugin.pro" href="bluetoothtransferplugin-bluetoothtransferplugin-pro.html" subtype="file" title="" fulltitle="bluetoothtransferplugin.pro Example File" subtitle="bluetoothtransferplugin/bluetoothtransferplugin.pro" location=""/>
</page>
- <page access="public" status="commendable" name="index.html" href="index.html" subtype="page" title="" fulltitle="" subtitle="" location="index.qdoc">
+ <page access="public" status="commendable" name="filemanagerplugin" href="filemanagerplugin.html" subtype="example" title="File Manager Plugin Example" fulltitle="File Manager Plugin Example" subtitle="" location="filemanagerplugin.qdoc">
+ <page access="public" status="commendable" name="filemanagerplugin/filemanagerplugin.cpp" href="filemanagerplugin-filemanagerplugin-cpp.html" subtype="file" title="" fulltitle="filemanagerplugin.cpp Example File" subtitle="filemanagerplugin/filemanagerplugin.cpp" location=""/>
+ <page access="public" status="commendable" name="filemanagerplugin/filemanagerplugin.h" href="filemanagerplugin-filemanagerplugin-h.html" subtype="file" title="" fulltitle="filemanagerplugin.h Example File" subtitle="filemanagerplugin/filemanagerplugin.h" location=""/>
+ <page access="public" status="commendable" name="filemanagerplugin/filemanagerstorage.cpp" href="filemanagerplugin-filemanagerstorage-cpp.html" subtype="file" title="" fulltitle="filemanagerstorage.cpp Example File" subtitle="filemanagerplugin/filemanagerstorage.cpp" location=""/>
+ <page access="public" status="commendable" name="filemanagerplugin/filemanagerstorage.h" href="filemanagerplugin-filemanagerstorage-h.html" subtype="file" title="" fulltitle="filemanagerstorage.h Example File" subtitle="filemanagerplugin/filemanagerstorage.h" location=""/>
+ <page access="public" status="commendable" name="filemanagerplugin/filemanagertransfer.cpp" href="filemanagerplugin-filemanagertransfer-cpp.html" subtype="file" title="" fulltitle="filemanagertransfer.cpp Example File" subtitle="filemanagerplugin/filemanagertransfer.cpp" location=""/>
+ <page access="public" status="commendable" name="filemanagerplugin/filemanagertransfer.h" href="filemanagerplugin-filemanagertransfer-h.html" subtype="file" title="" fulltitle="filemanagertransfer.h Example File" subtitle="filemanagerplugin/filemanagertransfer.h" location=""/>
+ <page access="public" status="commendable" name="filemanagerplugin/filemanagerplugin.pro" href="filemanagerplugin-filemanagerplugin-pro.html" subtype="file" title="" fulltitle="filemanagerplugin.pro Example File" subtitle="filemanagerplugin/filemanagerplugin.pro" location=""/>
+ </page>
+ <page access="public" status="commendable" name="index.html" href="index.html" subtype="page" title="Qt Mobility Developer Resources" fulltitle="Qt Mobility Developer Resources" subtitle="" location="index.qdoc">
<contents name="qt-service-framework" title="Qt Service Framework" level="1"/>
<contents name="introduction" title="Introduction" level="2"/>
<contents name="overview" title="Overview" level="2"/>
@@ -426,26 +693,24 @@
<contents name="managing-network-sessions" title="Managing network sessions" level="3"/>
<contents name="roaming" title="Roaming" level="3"/>
<contents name="platform-capabilities" title="Platform capabilities" level="3"/>
+ <contents name="location" title="Location" level="1"/>
+ <contents name="introduction" title="Introduction" level="2"/>
+ <contents name="requesting-location-data-from-data-sources" title="Requesting location data from data sources" level="2"/>
+ <contents name="controlling-aspects-of-data-sources" title="Controlling aspects of data sources" level="3"/>
+ <contents name="reading-nmea-data" title="Reading NMEA data" level="3"/>
+ <contents name="creating-a-custom-location-data-source" title="Creating a custom location data source" level="2"/>
<contents name="building-and-compiling" title="Building and compiling" level="1"/>
<contents name="reference-documentation" title="Reference documentation" level="1"/>
<contents name="main-classes" title="Main classes" level="2"/>
<contents name="examples" title="Examples" level="2"/>
</page>
- <page access="public" status="commendable" name="bluetoothtransferplugin" href="bluetoothtransferplugin.html" subtype="example" title="Bluetooth Transfer Plugin Example" fulltitle="Bluetooth Transfer Plugin Example" subtitle="" location="bluetoothtransferplugin.qdoc">
- <page access="public" status="commendable" name="bluetoothtransferplugin/bluetoothtransfer.cpp" href="bluetoothtransferplugin-bluetoothtransfer-cpp.html" subtype="file" title="" fulltitle="bluetoothtransfer.cpp Example File" subtitle="bluetoothtransferplugin/bluetoothtransfer.cpp" location=""/>
- <page access="public" status="commendable" name="bluetoothtransferplugin/bluetoothtransfer.h" href="bluetoothtransferplugin-bluetoothtransfer-h.html" subtype="file" title="" fulltitle="bluetoothtransfer.h Example File" subtitle="bluetoothtransferplugin/bluetoothtransfer.h" location=""/>
- <page access="public" status="commendable" name="bluetoothtransferplugin/bluetoothtransferplugin.cpp" href="bluetoothtransferplugin-bluetoothtransferplugin-cpp.html" subtype="file" title="" fulltitle="bluetoothtransferplugin.cpp Example File" subtitle="bluetoothtransferplugin/bluetoothtransferplugin.cpp" location=""/>
- <page access="public" status="commendable" name="bluetoothtransferplugin/bluetoothtransferplugin.h" href="bluetoothtransferplugin-bluetoothtransferplugin-h.html" subtype="file" title="" fulltitle="bluetoothtransferplugin.h Example File" subtitle="bluetoothtransferplugin/bluetoothtransferplugin.h" location=""/>
- <page access="public" status="commendable" name="bluetoothtransferplugin/bluetoothtransferplugin.pro" href="bluetoothtransferplugin-bluetoothtransferplugin-pro.html" subtype="file" title="" fulltitle="bluetoothtransferplugin.pro Example File" subtitle="bluetoothtransferplugin/bluetoothtransferplugin.pro" location=""/>
- </page>
- <page access="public" status="commendable" name="filemanagerplugin" href="filemanagerplugin.html" subtype="example" title="File Manager Plugin Example" fulltitle="File Manager Plugin Example" subtitle="" location="filemanagerplugin.qdoc">
- <page access="public" status="commendable" name="filemanagerplugin/filemanagerplugin.cpp" href="filemanagerplugin-filemanagerplugin-cpp.html" subtype="file" title="" fulltitle="filemanagerplugin.cpp Example File" subtitle="filemanagerplugin/filemanagerplugin.cpp" location=""/>
- <page access="public" status="commendable" name="filemanagerplugin/filemanagerplugin.h" href="filemanagerplugin-filemanagerplugin-h.html" subtype="file" title="" fulltitle="filemanagerplugin.h Example File" subtitle="filemanagerplugin/filemanagerplugin.h" location=""/>
- <page access="public" status="commendable" name="filemanagerplugin/filemanagerstorage.cpp" href="filemanagerplugin-filemanagerstorage-cpp.html" subtype="file" title="" fulltitle="filemanagerstorage.cpp Example File" subtitle="filemanagerplugin/filemanagerstorage.cpp" location=""/>
- <page access="public" status="commendable" name="filemanagerplugin/filemanagerstorage.h" href="filemanagerplugin-filemanagerstorage-h.html" subtype="file" title="" fulltitle="filemanagerstorage.h Example File" subtitle="filemanagerplugin/filemanagerstorage.h" location=""/>
- <page access="public" status="commendable" name="filemanagerplugin/filemanagertransfer.cpp" href="filemanagerplugin-filemanagertransfer-cpp.html" subtype="file" title="" fulltitle="filemanagertransfer.cpp Example File" subtitle="filemanagerplugin/filemanagertransfer.cpp" location=""/>
- <page access="public" status="commendable" name="filemanagerplugin/filemanagertransfer.h" href="filemanagerplugin-filemanagertransfer-h.html" subtype="file" title="" fulltitle="filemanagertransfer.h Example File" subtitle="filemanagerplugin/filemanagertransfer.h" location=""/>
- <page access="public" status="commendable" name="filemanagerplugin/filemanagerplugin.pro" href="filemanagerplugin-filemanagerplugin-pro.html" subtype="file" title="" fulltitle="filemanagerplugin.pro Example File" subtitle="filemanagerplugin/filemanagerplugin.pro" location=""/>
+ <page access="public" status="commendable" name="bearermonitor" href="bearermonitor.html" subtype="example" title="Bearer Monitor Example" fulltitle="Bearer Monitor Example" subtitle="" location="bearermonitor.qdoc">
+ <page access="public" status="commendable" name="bearermonitor/bearerdialog.cpp" href="bearermonitor-bearerdialog-cpp.html" subtype="file" title="" fulltitle="bearerdialog.cpp Example File" subtitle="bearermonitor/bearerdialog.cpp" location=""/>
+ <page access="public" status="commendable" name="bearermonitor/bearerdialog.h" href="bearermonitor-bearerdialog-h.html" subtype="file" title="" fulltitle="bearerdialog.h Example File" subtitle="bearermonitor/bearerdialog.h" location=""/>
+ <page access="public" status="commendable" name="bearermonitor/sessionwidget.cpp" href="bearermonitor-sessionwidget-cpp.html" subtype="file" title="" fulltitle="sessionwidget.cpp Example File" subtitle="bearermonitor/sessionwidget.cpp" location=""/>
+ <page access="public" status="commendable" name="bearermonitor/sessionwidget.h" href="bearermonitor-sessionwidget-h.html" subtype="file" title="" fulltitle="sessionwidget.h Example File" subtitle="bearermonitor/sessionwidget.h" location=""/>
+ <page access="public" status="commendable" name="bearermonitor/main.cpp" href="bearermonitor-main-cpp.html" subtype="file" title="" fulltitle="main.cpp Example File" subtitle="bearermonitor/main.cpp" location=""/>
+ <page access="public" status="commendable" name="bearermonitor/bearermonitor.pro" href="bearermonitor-bearermonitor-pro.html" subtype="file" title="" fulltitle="bearermonitor.pro Example File" subtitle="bearermonitor/bearermonitor.pro" location=""/>
</page>
</namespace>
</INDEX>
diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc
index 3b08e6a6ec..b89f857cea 100644
--- a/doc/src/index.qdoc
+++ b/doc/src/index.qdoc
@@ -2,6 +2,8 @@
\page index.html
+\title Qt Mobility Developer Resources
+
\tableofcontents
@@ -404,6 +406,127 @@ The following table lists the various platform API's being used by this API. Thi
\o This backend is the fallback for all platforms supports network interface notifications via active polling only.
\endtable
+\section1 Location
+
+\section2 Introduction
+
+The Location API provides a library for distributing and receiving location data using arbitrary data sources.
+
+Location data involves a precisely specified position on the Earth's surface \unicode {0x2014} as provided by a latitude-longitude coordinate \unicode {0x2014} along with associated data, such as:
+
+ \list
+ \o The date and time at which the position was reported
+ \o The velocity of the device that reported the position
+ \o The altitude of the reported position (height above sea level)
+ \o The bearing of the device in degrees, relative to true north
+ \endlist
+
+This data can be extracted through a variety of methods. One of the most well known methods of positioning is GPS (Global Positioning System), a publicly available system that uses radiowave signals received from Earth-orbiting satellites to calculate the precise position and time of the receiver. Another popular method is Cell ID positioning, which uses the cell ID of the cell site that is currently serving the receiving device to calculate its approximate location. These and other positioning methods can all be used with the Location API; the only requirement for a location data source within the API is that it provides a latitude-longitude coordinate with a date/time value, with the option of providing the other attributes listed above.
+
+
+Location data sources are created by subclassing QGeoPositionInfoSource and providing QGeoPositionInfo objects through the QGeoPositionInfoSource::positionUpdated() signal. Clients that require location data can connect to the \l{QGeoPositionInfoSource::positionUpdated()}{positionUpdated()} signal and call \l{QGeoPositionInfoSource::startUpdates()}{startUpdates()} or \l{QGeoPositionInfoSource::requestUpdate()}{requestUpdate()} to trigger the distribution of location data.
+
+A default position source may be available on some platforms. Call QGeoPositionInfoSource::createSource() to create an instance of the default position source; the method returns 0 if no default source is available for the platform.
+
+The QGeoAreaMonitor class enables client applications to be notified when the receiving device has moved in or out of a particular area, as specified by a coordinate and radius. If the platform provides built-in support for area monitoring, QGeoAreaMonitor::createMonitor() returns an instance of the default area monitor.
+
+Satellite information can also be distributed through the QSatelliteInfoSource class. Call QSatelliteInfoSource::createSource() to create an instance of the default satellite data source for the platform, if one is available. Alternatively, clients can subclass it to provide a custom satellite data source.
+
+\section2 Requesting location data from data sources
+
+To receive data from a source, connect to its \l{QGeoPositionInfoSource::positionUpdated()}{positionUpdated()} signal, then call either \l{QGeoPositionInfoSource::startUpdates()}{startUpdates()} or \l{QGeoPositionInfoSource::requestUpdate()}{requestUpdate()} to begin.
+
+Here is an example of a client that receives data from the default location data source, as returned by QGeoPositionInfoSource::createSource():
+
+\code
+class MyClass : public QObject
+{
+ Q_OBJECT
+public:
+ MyClass(QObject *parent = 0)
+ : QObject(parent)
+ {
+ QGeoPositionInfoSource *source = QGeoPositionInfoSource::createSource();
+ if (source) {
+ connect(source, SIGNAL(positionUpdated(QGeoPositionInfo)),
+ this, SLOT(positionUpdated(QGeoPositionInfo)));
+ source->startUpdates();
+ }
+ }
+
+private slots:
+ void positionUpdated(const QGeoPositionInfo &info)
+ {
+ qDebug() << "Position updated:" << info;
+ }
+};
+
+\endcode
+
+\section3 Controlling aspects of data sources
+
+The QGeoPositionInfoSource::setUpdateInterval() method can be used to control the rate at which position updates are received. For example, if the client application only requires updates once every 30 seconds, it can call \c setUpdateInterval(30000). (If no update interval is set, or setUpdateInterval() is called with a value of 0, the source uses a default interval or some other internal logic to determine when updates should be provided.)
+
+QGeoPositionInfoSource::setPreferredPositioningMethods() enables client applications to request that a certain type of positioning method be used. For example, if the application prefers to use only satellite positioning, which offers fairly precise outdoor positioning but can be a heavy user of power resources, it can call this method with the QGeoPositionInfoSource::SatellitePositioningMethods value. However, this method should only be used in specialized client applications; in most cases, the default positioning methods should not be changed, as a source may internally use a variety of positioning methods that can be useful to the application.
+
+\section3 Reading NMEA data
+
+\l {http://en.wikipedia.org/wiki/NMEA_0183}{NMEA} is a common text-based protocol for specifying navigational data. For convenience, the QNmeaPositionInfoSource is provided to enable client applications to read and distribute NMEA data in either real-time mode (for example, when streaming from a GPS device) or simulation mode (for example, when reading from a NMEA log file). In simulation mode, the source will emit updates according to the time stamp of each NMEA sentence to produce a "replay" of the recorded data.
+
+
+\section2 Creating a custom location data source
+
+Generally, the capabilities provided by the default position source as returned by QGeoPositionInfoSource::createSource(), along with the QNmeaPositionInfoSource class, are sufficient for retrieving location data. However, in some cases developers may wish to write their own custom location data sources.
+
+The \c LogFilePositionSource class in \c examples/logfilepositionsource shows how to subclass QGeoPositionInfoSource to create a custom location data source.
+
+This example class reads location data from a text file, \i log.txt. The file specifies location data using a simple text format: it contains one location update per line, where each line contains a date/time, a latitude and a longitude, separated by spaces. The date/time is in ISO 8601 format and the latitude and longitude are in degrees decimal format. Here is an excerpt from \i log.txt:
+
+ \code
+ 2009-08-24T22:25:01 -27.576082 153.092415
+ 2009-08-24T22:25:02 -27.576223 153.092530
+ 2009-08-24T22:25:03 -27.576364 153.092648
+ \endcode
+
+The class reads this data and distributes it via the \l{QGeoPositionInfoSource::positionUpdated()}{positionUpdated()} signal.
+
+Here is the definition of the \c LogFilePositionSource class:
+
+ \quotefromfile logfilepositionsource/logfilepositionsource.h
+ \skipto class LogFilePositionSource
+ \printuntil };
+
+The main methods overrided by the subclass are:
+
+ \list
+ \o \l{QGeoPositionInfoSource::startUpdates()}{startUpdates()}: called by client applications to start regular position updates
+ \o \l{QGeoPositionInfoSource::stopUpdates()}{stopUpdates()}: called by client applications to stop regular position updates
+ \o \l{QGeoPositionInfoSource::requestUpdate()}{requestUpdate()}: called by client applications to request a single update, with a specified timeout
+ \endlist
+
+When a position update is available, the subclass emits the \l{QGeoPositionInfoSource::positionUpdated()}{positionUpdated()} signal.
+
+Here are the key methods in the class implementation:
+
+ \quotefromfile logfilepositionsource/logfilepositionsource.cpp
+ \skipto LogFilePositionSource::LogFilePositionSource
+ \printuntil /^\}/
+ \skipto LogFilePositionSource::startUpdates
+ \printuntil /^\}/
+ \skipto LogFilePositionSource::stopUpdates
+ \printuntil /^\}/
+ \skipto LogFilePositionSource::requestUpdate
+ \printuntil /^\}/
+ \printuntil LogFilePositionSource::readNextPosition
+ \printuntil /^\}/
+
+
+The example includes a \c ClientApplication class that requests updates from the \c LogFilePositionSource class. Run the exaple to see the data that is received by \c ClientApplication.
+
+Before running the example, make sure you have done both \tt make and \tt {make install}.
+
+
+
\section1 Building and compiling
This library requires Qt 4.5 to be installed.
@@ -440,6 +563,15 @@ The backend selection is expected to disappear once the API is integrated into Q
\o \l{QNetworkConfigurationManager}
\o \l{QNetworkSession}
\endlist
+ \o Location
+ \list
+ \o \l{QGeoCoordinate}
+ \o \l{QGeoPositionInfo}
+ \o \l{QGeoPositionInfoSource}
+ \o \l{QGeoAreaMonitor}
+ \o \l{QSatelliteInfo}
+ \o \l{QSatelliteInfoSource}
+ \endlist
\endlist
\section2 Examples
diff --git a/doc/src/qtmobility.qdocconf b/doc/src/qtmobility.qdocconf
index bc233882c7..8fbb38e074 100644
--- a/doc/src/qtmobility.qdocconf
+++ b/doc/src/qtmobility.qdocconf
@@ -5,10 +5,12 @@ imagedirs = images
headerdirs = ../../bearer \
../../serviceframework \
+ ../../location \
.
sourcedirs = ../../bearer \
../../serviceframework \
+ ../../location \
.
exampledirs = ../../examples
@@ -19,7 +21,6 @@ sources.fileextensions = "*.qdoc *.cpp"
outputdir = ../html
-#indexes = $QTDIR/doc/html/qt.index
indexes = qt.index
extraimages.HTML = qtlogo \
diff --git a/examples/examples.pro b/examples/examples.pro
index 8f72e18724..95c56b0ba3 100644
--- a/examples/examples.pro
+++ b/examples/examples.pro
@@ -1,10 +1,18 @@
TEMPLATE = subdirs
+#ServiceFramework examples
SUBDIRS += filemanagerplugin \
bluetoothtransferplugin \
servicebrowser
+#BearerManagement examples
SUBDIRS += bearermonitor bearercloud
contains(QT_CONFIG, declarative) {
SUBDIRS += declarative
}
+
+#Location examples
+SUBDIRS += logfilepositionsource
+contains(QT_CONFIG, webkit) {
+ SUBDIRS += fetchgooglemaps
+}
diff --git a/examples/fetchgooglemaps/fetchgooglemaps.pro b/examples/fetchgooglemaps/fetchgooglemaps.pro
new file mode 100644
index 0000000000..0703382f27
--- /dev/null
+++ b/examples/fetchgooglemaps/fetchgooglemaps.pro
@@ -0,0 +1,15 @@
+TEMPLATE=app
+INCLUDEPATH += ../../location
+
+QT += webkit
+
+HEADERS = mapwindow.h
+SOURCES = mapwindow.cpp \
+ main.cpp
+
+include(../../common.pri)
+LIBS += -lQtLocation
+
+logfile.path = $$DESTDIR
+logfile.files = nmealog.txt
+INSTALLS += logfile
diff --git a/examples/fetchgooglemaps/main.cpp b/examples/fetchgooglemaps/main.cpp
new file mode 100644
index 0000000000..594a4422d6
--- /dev/null
+++ b/examples/fetchgooglemaps/main.cpp
@@ -0,0 +1,46 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QApplication>
+
+#include "mapwindow.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ MapWindow win;
+ win.show();
+ win.start();
+
+ return app.exec();
+}
diff --git a/examples/fetchgooglemaps/mapwindow.cpp b/examples/fetchgooglemaps/mapwindow.cpp
new file mode 100644
index 0000000000..aec81da148
--- /dev/null
+++ b/examples/fetchgooglemaps/mapwindow.cpp
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtGui>
+#include <QtWebKit>
+
+#include <qnmeapositioninfosource.h>
+
+#include "mapwindow.h"
+
+// Use the special 'localhost' key for the Google Maps key
+const QString GMAPS_STATICMAP_URL_TEMPLATE = "http://maps.google.com/staticmap?center=%1,%2&zoom=14&size=%3x%4&map type=mobile&markers=%1,%2&key=ABQIAAAAnfs7bKE82qgb3Zc2YyS-oBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSySz_REpPq-4WZA27OwgbtyR3VcA&sensor=false";
+
+
+MapWindow::MapWindow(QWidget *parent, Qt::WFlags flags)
+ : QMainWindow(parent, flags),
+ source(new QNmeaPositionInfoSource(QNmeaPositionInfoSource::SimulationMode, this)),
+ webView(new QWebView),
+ posLabel(new QLabel),
+ headingAndSpeedLabel(new QLabel),
+ dateTimeLabel(new QLabel),
+ loading(false)
+{
+ QFile *logFile = new QFile(QApplication::applicationDirPath()
+ + QDir::separator() + "nmealog.txt", this);
+ source->setDevice(logFile);
+ source->setUpdateInterval(1500);
+ connect(source, SIGNAL(positionUpdated(QGeoPositionInfo)),
+ this, SLOT(positionUpdated(QGeoPositionInfo)));
+
+ connect(webView, SIGNAL(loadStarted()), this, SLOT(loadStarted()));
+ connect(webView, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool)));
+
+ QWidget *mainWidget = new QWidget;
+ QVBoxLayout *layout = new QVBoxLayout(mainWidget);
+ layout->addWidget(webView);
+ layout->addWidget(posLabel);
+ layout->addWidget(headingAndSpeedLabel);
+ layout->addWidget(dateTimeLabel);
+ setCentralWidget(mainWidget);
+
+ resize(300, 300);
+ setWindowTitle(tr("Google Maps Demo"));
+}
+
+void MapWindow::start()
+{
+ source->startUpdates();
+}
+
+void MapWindow::positionUpdated(const QGeoPositionInfo &info)
+{
+ QString heading = "?";
+ QString speed = "?";
+ if (info.hasProperty(QGeoPositionInfo::Heading))
+ heading = QString("%1%2").arg(info.property(QGeoPositionInfo::Heading)).arg(QChar(0x00b0));
+ if (info.hasProperty(QGeoPositionInfo::GroundSpeed))
+ speed = QString::number(info.property(QGeoPositionInfo::GroundSpeed) * 3.6, 'f', 1);
+ posLabel->setText(tr("Position: %1").arg(info.coordinate().toString()));
+ headingAndSpeedLabel->setText(tr("Bearing %1, travelling at %2 km/h").arg(heading).arg(speed));
+ dateTimeLabel->setText(tr("(Last update: %1)").
+ arg(info.dateTime().toLocalTime().time().toString()));
+
+ if (!loading) {
+ // Google Maps does not provide maps larger than 640x480
+ int width = qMin(webView->width(), 640);
+ int height = qMin(webView->height(), 480);
+ QString url = GMAPS_STATICMAP_URL_TEMPLATE
+ .arg(QString::number(info.coordinate().latitude()))
+ .arg(QString::number(info.coordinate().longitude()))
+ .arg(QString::number(width))
+ .arg(QString::number(height));
+ webView->load(url);
+ }
+}
+
+void MapWindow::loadStarted()
+{
+ loading = true;
+ webView->setUpdatesEnabled(false);
+}
+
+void MapWindow::loadFinished(bool)
+{
+ loading = false;
+ webView->setUpdatesEnabled(true);
+}
diff --git a/examples/fetchgooglemaps/mapwindow.h b/examples/fetchgooglemaps/mapwindow.h
new file mode 100644
index 0000000000..8654af7576
--- /dev/null
+++ b/examples/fetchgooglemaps/mapwindow.h
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef MAPWINDOW_H
+#define MAPWINDOW_H
+
+#include <QMainWindow>
+
+class QWebView;
+class QLabel;
+
+class QGeoPositionInfo;
+class QNmeaPositionInfoSource;
+
+class MapWindow : public QMainWindow
+{
+ Q_OBJECT
+public:
+ MapWindow(QWidget *parent = 0, Qt::WFlags flags = 0);
+ void start();
+
+private slots:
+ void positionUpdated(const QGeoPositionInfo &info);
+ void loadStarted();
+ void loadFinished(bool ok);
+
+private:
+ QNmeaPositionInfoSource *source;
+ QWebView *webView;
+ QLabel *posLabel;
+ QLabel *headingAndSpeedLabel;
+ QLabel *dateTimeLabel;
+ bool loading;
+};
+
+#endif
diff --git a/examples/fetchgooglemaps/nmealog.txt b/examples/fetchgooglemaps/nmealog.txt
new file mode 100644
index 0000000000..8c8286ddc5
--- /dev/null
+++ b/examples/fetchgooglemaps/nmealog.txt
@@ -0,0 +1,1403 @@
+$GPGGA,222437.000,2734.33926,S,15305.44310,E,1,07,1.3,50.6,M,39.2,M,,*72
+$GPGLL,2734.33926,S,15305.44310,E,222437.000,A,A*49
+$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D
+$GPGST,222437.000,13.3,7.4,6.6,85.1,6.0,6.8,13.7*56
+$GPGSV,3,1,10,16,49,115,42,25,39,269,36,23,58,176,29,20,72,335,35*75
+$GPGSV,3,2,10,19,02,028,,04,06,241,22,13,30,223,30,27,19,284,35*78
+$GPGSV,3,3,10,11,06,337,30,03,13,055,25*7C
+$GPRMC,222437.000,A,2734.33926,S,15305.44310,E,33.9,157.8,030308,11.2,W,A*0F
+$GPVTG,157.8,T,169.0,M,33.9,N,62.9,K,A*22
+$GPGGA,222438.000,2734.34821,S,15305.44697,E,1,07,1.2,50.8,M,39.2,M,,*79
+$GPGLL,2734.34821,S,15305.44697,E,222438.000,A,A*4D
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222438.000,12.4,6.4,9.3,16.2,6.1,8.3,16.4*5F
+$GPGSV,3,1,10,16,49,115,41,25,39,269,36,23,58,176,28,20,72,335,36*74
+$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,28,27,19,284,35*73
+$GPGSV,3,3,10,11,06,337,28,03,13,055,25*75
+$GPRMC,222438.000,A,2734.34821,S,15305.44697,E,33.8,158.3,030308,11.2,W,A*0E
+$GPVTG,158.3,T,169.5,M,33.8,N,62.5,K,A*2E
+$GPGGA,222439.000,2734.35696,S,15305.45072,E,1,06,1.7,51.2,M,39.2,M,,*78
+$GPGLL,2734.35696,S,15305.45072,E,222439.000,A,A*43
+$GPGSA,A,3,16,25,23,20,13,27,,,,,,,3.3,1.7,2.8*3A
+$GPGST,222439.000,10.3,9.1,12.2,44.6,9.8,9.9,25.2*62
+$GPGSV,3,1,10,16,49,115,34,25,39,269,36,23,58,175,29,20,72,335,35*77
+$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,27,27,19,284,32*7B
+$GPGSV,3,3,10,11,06,337,28,03,14,055,25*72
+$GPRMC,222439.000,A,2734.35696,S,15305.45072,E,33.2,158.7,030308,11.2,W,A*0E
+$GPVTG,158.7,T,169.9,M,33.2,N,61.5,K,A*2F
+$GPGGA,222440.000,2734.36580,S,15305.45446,E,1,07,1.3,52.0,M,39.2,M,,*76
+$GPGLL,2734.36580,S,15305.45446,E,222440.000,A,A*49
+$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D
+$GPGST,222440.000,13.0,8.0,13.4,6.2,7.4,12.2,20.9*64
+$GPGSV,3,1,10,16,49,115,40,25,39,269,38,23,58,175,31,20,72,335,34*72
+$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,26,27,19,284,30*78
+$GPGSV,3,3,10,11,06,337,26,03,14,055,25*7C
+$GPRMC,222440.000,A,2734.36580,S,15305.45446,E,33.7,159.1,030308,11.2,W,A*06
+$GPVTG,159.1,T,170.3,M,33.7,N,62.4,K,A*2D
+$GPGGA,222441.000,2734.37483,S,15305.45825,E,1,07,1.3,52.7,M,39.2,M,,*7A
+$GPGLL,2734.37483,S,15305.45825,E,222441.000,A,A*42
+$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D
+$GPGST,222441.000,14.0,7.6,14.1,17.6,7.7,12.5,21.0*51
+$GPGSV,3,1,10,16,49,115,41,25,39,269,39,23,58,175,29,20,72,335,35*7A
+$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,24,27,19,284,30*7A
+$GPGSV,3,3,10,11,06,337,28,03,14,055,25*72
+$GPRMC,222441.000,A,2734.37483,S,15305.45825,E,34.6,159.4,030308,11.2,W,A*0E
+$GPVTG,159.4,T,170.6,M,34.6,N,64.1,K,A*28
+$GPGGA,222442.000,2734.38407,S,15305.46216,E,1,06,1.3,53.3,M,39.2,M,,*77
+$GPGLL,2734.38407,S,15305.46216,E,222442.000,A,A*4B
+$GPGSA,A,3,16,25,20,13,27,11,,,,,,,2.3,1.3,1.9*3C
+$GPGST,222442.000,16.6,7.0,14.4,14.6,7.0,12.8,21.6*5A
+$GPGSV,3,1,10,16,49,115,40,25,39,269,38,23,58,175,22,20,72,335,35*71
+$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,25,27,19,284,29*73
+$GPGSV,3,3,10,11,06,337,27,03,14,055,25*7D
+$GPRMC,222442.000,A,2734.38407,S,15305.46216,E,35.5,159.3,030308,11.2,W,A*02
+$GPVTG,159.3,T,170.5,M,35.5,N,65.8,K,A*26
+$GPGGA,222443.000,2734.39347,S,15305.46609,E,1,05,1.8,53.8,M,39.2,M,,*7D
+$GPGLL,2734.39347,S,15305.46609,E,222443.000,A,A*42
+$GPGSA,A,3,16,25,20,27,11,,,,,,,,2.8,1.8,2.1*35
+$GPGST,222443.000,11.3,6.5,14.6,14.5,6.6,13.0,18.4*5A
+$GPGSV,3,1,10,16,49,115,40,25,39,269,38,23,58,175,22,20,72,335,36*72
+$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,26,27,19,284,31*79
+$GPGSV,3,3,10,11,06,337,28,03,14,055,25*72
+$GPRMC,222443.000,A,2734.39347,S,15305.46609,E,36.2,159.4,030308,11.2,W,A*08
+$GPVTG,159.4,T,170.6,M,36.2,N,67.0,K,A*2C
+$GPGGA,222444.000,2734.40297,S,15305.47000,E,1,06,1.3,54.1,M,39.2,M,,*70
+$GPGLL,2734.40297,S,15305.47000,E,222444.000,A,A*49
+$GPGSA,A,3,16,25,20,13,27,11,,,,,,,2.3,1.3,1.9*3C
+$GPGST,222444.000,17.6,6.3,12.7,14.4,6.3,11.4,16.2*55
+$GPGSV,3,1,10,16,49,115,38,25,39,269,38,23,58,175,22,20,72,335,35*7E
+$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,25,27,19,284,29*73
+$GPGSV,3,3,10,11,06,337,25,03,14,055,23*79
+$GPRMC,222444.000,A,2734.40297,S,15305.47000,E,36.5,159.5,030308,11.2,W,A*05
+$GPVTG,159.5,T,170.8,M,36.5,N,67.5,K,A*21
+$GPGGA,222445.000,2734.41247,S,15305.47390,E,1,07,1.3,54.2,M,39.2,M,,*75
+$GPGLL,2734.41247,S,15305.47390,E,222445.000,A,A*4E
+$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D
+$GPGST,222445.000,16.0,7.0,14.4,10.4,6.7,13.0,20.7*52
+$GPGSV,3,1,10,16,49,115,36,25,39,269,36,23,58,175,22,20,72,335,34*7F
+$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,30,223,26,27,19,284,31*79
+$GPGSV,3,3,10,11,06,337,26,03,14,055,23*7A
+$GPRMC,222445.000,A,2734.41247,S,15305.47390,E,36.6,159.7,030308,11.2,W,A*03
+$GPVTG,159.7,T,170.9,M,36.6,N,67.8,K,A*2C
+$GPGGA,222446.000,2734.42201,S,15305.47790,E,1,07,1.3,54.4,M,39.2,M,,*75
+$GPGLL,2734.42201,S,15305.47790,E,222446.000,A,A*48
+$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D
+$GPGST,222446.000,13.0,7.4,12.3,6.6,6.9,11.2,17.9*60
+$GPGSV,3,1,10,16,49,115,36,25,39,269,37,23,58,175,27,20,72,335,35*7A
+$GPGSV,3,2,10,19,02,028,,04,06,241,23,13,30,223,30,27,19,284,32*7E
+$GPGSV,3,3,10,11,06,337,27,03,14,055,23*7B
+$GPRMC,222446.000,A,2734.42201,S,15305.47790,E,36.6,159.3,030308,11.2,W,A*01
+$GPVTG,159.3,T,170.5,M,36.6,N,67.7,K,A*2B
+$GPGGA,222447.000,2734.43157,S,15305.48195,E,1,07,1.3,54.3,M,39.2,M,,*7E
+$GPGLL,2734.43157,S,15305.48195,E,222447.000,A,A*44
+$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D
+$GPGST,222447.000,10.7,6.7,10.5,6.6,6.2,9.6,15.5*5B
+$GPGSV,3,1,11,16,49,115,32,25,39,269,37,23,58,175,28,20,72,335,33*76
+$GPGSV,3,2,11,19,02,028,,04,06,241,23,13,30,223,30,27,19,284,32*7F
+$GPGSV,3,3,11,11,06,337,29,01,,,19,03,14,055,23*7D
+$GPRMC,222447.000,A,2734.43157,S,15305.48195,E,36.7,159.1,030308,11.2,W,A*0E
+$GPVTG,159.1,T,170.3,M,36.7,N,67.9,K,A*20
+$GPGGA,222448.000,2734.44111,S,15305.48610,E,1,08,1.1,54.1,M,39.2,M,,*71
+$GPGLL,2734.44111,S,15305.48610,E,222448.000,A,A*44
+$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30
+$GPGST,222448.000,20.4,10.5,8.8,52.5,8.7,9.1,15.2*6C
+$GPGSV,3,1,11,16,49,115,27,25,39,269,38,23,58,175,26,20,72,335,31*71
+$GPGSV,3,2,11,19,02,028,,04,06,241,23,13,30,223,37,27,19,284,27*7C
+$GPGSV,3,3,11,11,06,337,27,01,,,19,03,14,055,23*73
+$GPRMC,222448.000,A,2734.44111,S,15305.48610,E,36.8,158.7,030308,11.2,W,A*06
+$GPVTG,158.7,T,169.9,M,36.8,N,68.2,K,A*2E
+$GPGGA,222449.000,2734.45068,S,15305.49044,E,1,08,1.1,53.6,M,39.2,M,,*78
+$GPGLL,2734.45068,S,15305.49044,E,222449.000,A,A*4D
+$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30
+$GPGST,222449.000,17.1,8.8,10.2,14.2,8.2,9.3,17.4*6D
+$GPGSV,3,1,11,16,49,115,28,25,39,269,37,23,58,175,25,20,72,335,28*7A
+$GPGSV,3,2,11,19,02,028,,04,06,241,23,13,30,223,37,27,19,284,32*78
+$GPGSV,3,3,11,11,06,337,27,01,,,19,03,14,055,24*74
+$GPRMC,222449.000,A,2734.45068,S,15305.49044,E,37.2,157.8,030308,11.2,W,A*04
+$GPVTG,157.8,T,169.0,M,37.2,N,68.9,K,A*27
+$GPGGA,222450.000,2734.46041,S,15305.49485,E,1,08,1.1,53.3,M,39.2,M,,*74
+$GPGLL,2734.46041,S,15305.49485,E,222450.000,A,A*44
+$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30
+$GPGST,222450.000,17.4,8.9,12.7,10.1,11.5,8.2,16.5*5E
+$GPGSV,3,1,11,16,49,115,25,25,39,269,36,23,58,175,30,20,72,336,28*71
+$GPGSV,3,2,11,19,02,028,,04,06,241,21,13,30,223,38,27,19,284,34*73
+$GPGSV,3,3,11,11,06,337,27,01,,,19,03,14,055,22*72
+$GPRMC,222450.000,A,2734.46041,S,15305.49485,E,37.7,157.9,030308,11.2,W,A*09
+$GPVTG,157.9,T,169.1,M,37.7,N,69.8,K,A*22
+$GPGGA,222451.000,2734.47033,S,15305.49924,E,1,08,1.1,53.1,M,39.2,M,,*75
+$GPGLL,2734.47033,S,15305.49924,E,222451.000,A,A*47
+$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30
+$GPGST,222451.000,14.1,8.0,10.5,14.3,9.5,7.5,15.0*61
+$GPGSV,3,1,11,16,49,115,27,25,39,269,38,23,58,175,28,20,72,336,25*79
+$GPGSV,3,2,11,19,02,028,,04,06,241,21,13,30,223,38,27,19,284,34*73
+$GPGSV,3,3,11,11,06,337,24,01,,,19,03,14,055,25*76
+$GPRMC,222451.000,A,2734.47033,S,15305.49924,E,38.1,158.1,030308,11.2,W,A*04
+$GPVTG,158.1,T,169.3,M,38.1,N,70.5,K,A*2B
+$GPGGA,222452.000,2734.48022,S,15305.50375,E,1,08,1.1,52.5,M,39.2,M,,*7A
+$GPGLL,2734.48022,S,15305.50375,E,222452.000,A,A*4D
+$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30
+$GPGST,222452.000,24.1,13.9,9.7,80.6,12.7,9.0,21.0*54
+$GPGSV,3,1,11,16,49,115,29,25,39,269,38,23,58,175,27,20,72,336,30*7C
+$GPGSV,3,2,11,19,02,028,,04,06,241,21,13,30,223,35,27,19,284,34*7E
+$GPGSV,3,3,11,11,06,337,22,01,,,19,03,14,055,24*71
+$GPRMC,222452.000,A,2734.48022,S,15305.50375,E,38.3,157.9,030308,11.2,W,A*0B
+$GPVTG,157.9,T,169.1,M,38.3,N,70.9,K,A*20
+$GPGGA,222453.000,2734.49019,S,15305.50802,E,1,06,1.7,52.1,M,39.2,M,,*75
+$GPGLL,2734.49019,S,15305.50802,E,222453.000,A,A*4E
+$GPGSA,A,3,16,25,23,20,13,27,,,,,,,3.3,1.7,2.8*3A
+$GPGST,222453.000,10.4,15.4,9.3,66.3,13.4,9.6,24.6*52
+$GPGSV,3,1,11,16,49,115,31,25,39,269,36,23,58,175,28,20,71,336,25*73
+$GPGSV,3,2,11,19,02,028,,04,06,241,21,13,30,223,33,27,19,284,31*7D
+$GPGSV,3,3,11,11,06,337,22,01,,,19,03,14,055,24*71
+$GPRMC,222453.000,A,2734.49019,S,15305.50802,E,38.3,159.1,030308,11.2,W,A*0E
+$GPVTG,159.1,T,170.3,M,38.3,N,70.9,K,A*2C
+$GPGGA,222454.000,2734.50008,S,15305.51221,E,1,07,1.3,52.1,M,39.2,M,,*75
+$GPGLL,2734.50008,S,15305.51221,E,222454.000,A,A*4B
+$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D
+$GPGST,222454.000,12.5,11.7,8.3,70.6,10.4,8.0,19.0*5E
+$GPGSV,3,1,11,16,49,115,30,25,39,269,36,23,58,175,26,20,71,336,28*71
+$GPGSV,3,2,11,19,02,028,,04,06,241,21,13,30,223,32,27,19,284,30*7D
+$GPGSV,3,3,11,11,06,337,24,01,,,18,03,14,055,24*76
+$GPRMC,222454.000,A,2734.50008,S,15305.51221,E,38.1,159.4,030308,11.2,W,A*0C
+$GPVTG,159.4,T,170.6,M,38.1,N,70.5,K,A*22
+$GPGGA,222455.000,2734.50992,S,15305.51642,E,1,07,1.3,52.2,M,39.2,M,,*7C
+$GPGLL,2734.50992,S,15305.51642,E,222455.000,A,A*41
+$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D
+$GPGST,222455.000,11.5,10.8,9.3,83.5,9.9,8.6,23.3*65
+$GPGSV,3,1,11,16,49,115,33,25,39,269,36,23,58,175,32,20,71,336,31*7F
+$GPGSV,3,2,11,19,02,028,,04,06,241,21,13,30,223,29,27,19,284,29*7F
+$GPGSV,3,3,11,11,06,337,28,01,,,18,03,14,055,24*7A
+$GPRMC,222455.000,A,2734.50992,S,15305.51642,E,37.8,159.0,030308,11.2,W,A*04
+$GPVTG,159.0,T,170.2,M,37.8,N,70.0,K,A*21
+$GPGGA,222456.000,2734.51963,S,15305.52059,E,1,07,1.3,52.5,M,39.2,M,,*78
+$GPGLL,2734.51963,S,15305.52059,E,222456.000,A,A*42
+$GPGSA,A,3,16,25,23,20,13,27,11,,,,,,2.3,1.3,1.9*3D
+$GPGST,222456.000,11.3,9.0,13.1,11.0,8.4,11.9,20.9*55
+$GPGSV,3,1,11,16,49,115,31,25,39,269,37,23,58,175,27,20,71,336,33*7A
+$GPGSV,3,2,11,19,02,028,,04,06,241,19,13,30,223,29,27,19,284,32*7E
+$GPGSV,3,3,11,11,06,337,30,01,,,18,03,14,055,24*73
+$GPRMC,222456.000,A,2734.51963,S,15305.52059,E,37.3,158.8,030308,11.2,W,A*05
+$GPVTG,158.8,T,170.0,M,37.3,N,69.1,K,A*28
+$GPGGA,222457.000,2734.52908,S,15305.52467,E,1,06,1.3,53.2,M,39.2,M,,*79
+$GPGLL,2734.52908,S,15305.52467,E,222457.000,A,A*44
+$GPGSA,A,3,16,25,20,13,27,11,,,,,,,2.3,1.3,1.9*3C
+$GPGST,222457.000,20.4,7.8,12.0,8.1,7.3,10.9,17.9*63
+$GPGSV,3,1,11,16,49,115,37,25,39,269,37,23,58,175,24,20,71,336,35*79
+$GPGSV,3,2,11,19,02,028,,04,06,241,19,13,30,223,29,27,19,284,32*7E
+$GPGSV,3,3,11,11,06,337,28,01,,,18,03,14,055,23*7D
+$GPRMC,222457.000,A,2734.52908,S,15305.52467,E,36.2,158.7,030308,11.2,W,A*0C
+$GPVTG,158.7,T,169.9,M,36.2,N,67.1,K,A*28
+$GPGGA,222458.000,2734.53845,S,15305.52866,E,1,06,1.6,54.2,M,39.2,M,,*70
+$GPGLL,2734.53845,S,15305.52866,E,222458.000,A,A*4F
+$GPGSA,A,3,16,25,23,20,27,11,,,,,,,2.6,1.6,2.1*34
+$GPGST,222458.000,16.7,7.3,13.9,11.0,7.0,12.5,17.9*5D
+$GPGSV,3,1,11,16,49,115,36,25,39,269,37,23,58,175,24,20,71,336,35*78
+$GPGSV,3,2,11,19,02,028,19,04,06,241,19,13,30,223,26,27,19,284,31*7A
+$GPGSV,3,3,11,11,06,337,23,01,,,18,03,14,055,23*76
+$GPRMC,222458.000,A,2734.53845,S,15305.52866,E,35.9,159.1,030308,11.2,W,A*08
+$GPVTG,159.1,T,170.3,M,35.9,N,66.5,K,A*20
+$GPGGA,222459.000,2734.54772,S,15305.53309,E,1,08,1.1,55.6,M,39.2,M,,*72
+$GPGLL,2734.54772,S,15305.53309,E,222459.000,A,A*41
+$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30
+$GPGST,222459.000,17.5,6.5,9.3,15.5,6.1,8.3,15.2*5C
+$GPGSV,3,1,11,16,49,115,38,25,39,268,36,23,58,175,35,20,71,336,35*76
+$GPGSV,3,2,11,19,02,028,19,04,06,241,19,13,30,223,33,27,19,284,34*7B
+$GPGSV,3,3,11,11,06,337,29,01,,,18,03,14,055,22*7D
+$GPRMC,222459.000,A,2734.54772,S,15305.53309,E,35.9,156.8,030308,11.2,W,A*00
+$GPVTG,156.8,T,168.0,M,35.9,N,66.4,K,A*2D
+$GPGGA,222500.000,2734.55655,S,15305.53845,E,1,08,1.1,56.1,M,39.2,M,,*7D
+$GPGLL,2734.55655,S,15305.53845,E,222500.000,A,A*4A
+$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30
+$GPGST,222500.000,14.5,9.8,7.9,83.3,7.3,9.0,14.3*5C
+$GPGSV,3,1,11,16,49,115,36,25,39,268,31,23,58,175,39,20,71,336,33*75
+$GPGSV,3,2,11,19,02,028,21,04,06,241,19,13,30,223,30,27,19,284,29*7F
+$GPGSV,3,3,11,11,06,337,25,01,,,18,03,14,055,28*7B
+$GPRMC,222500.000,A,2734.55655,S,15305.53845,E,35.9,151.6,030308,11.2,W,A*02
+$GPVTG,151.6,T,162.8,M,35.9,N,66.5,K,A*27
+$GPGGA,222501.000,2734.56495,S,15305.54489,E,1,08,1.1,57.0,M,39.2,M,,*7A
+$GPGLL,2734.56495,S,15305.54489,E,222501.000,A,A*4D
+$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30
+$GPGST,222501.000,14.3,8.0,10.9,27.0,8.0,9.5,15.6*64
+$GPGSV,3,1,11,16,49,115,41,25,39,268,31,23,58,175,36,20,71,336,31*78
+$GPGSV,3,2,11,19,02,028,21,04,06,241,19,13,30,223,27,27,19,284,29*79
+$GPGSV,3,3,11,11,06,337,22,01,,,18,03,14,055,31*74
+$GPRMC,222501.000,A,2734.56495,S,15305.54489,E,36.5,145.7,030308,11.2,W,A*0E
+$GPVTG,145.7,T,156.9,M,36.5,N,67.5,K,A*2B
+$GPGGA,222502.000,2734.57337,S,15305.55181,E,1,06,1.5,57.9,M,39.2,M,,*78
+$GPGLL,2734.57337,S,15305.55181,E,222502.000,A,A*4C
+$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36
+$GPGST,222502.000,14.5,7.0,11.9,20.7,7.1,10.5,15.0*5F
+$GPGSV,3,1,11,16,49,115,43,25,39,268,35,23,58,175,37,20,71,336,34*7A
+$GPGSV,3,2,11,19,02,028,21,04,06,241,19,13,30,223,23,27,19,284,33*76
+$GPGSV,3,3,11,11,06,337,22,01,,,18,03,14,055,34*71
+$GPRMC,222502.000,A,2734.57337,S,15305.55181,E,37.4,143.8,030308,11.2,W,A*06
+$GPVTG,143.8,T,155.0,M,37.4,N,69.3,K,A*20
+$GPGGA,222503.000,2734.58184,S,15305.55887,E,1,08,1.1,58.5,M,39.2,M,,*7A
+$GPGLL,2734.58184,S,15305.55887,E,222503.000,A,A*47
+$GPGSA,A,3,16,25,23,20,13,27,11,03,,,,,2.0,1.1,1.6*30
+$GPGST,222503.000,13.4,6.4,14.1,0.3,5.9,12.9,21.5*60
+$GPGSV,3,1,11,16,49,115,43,25,39,268,35,23,58,175,38,20,71,336,35*74
+$GPGSV,3,2,11,19,02,028,19,04,06,241,19,13,30,223,23,27,19,284,32*7C
+$GPGSV,3,3,11,11,06,337,26,01,,,17,03,14,055,34*7A
+$GPRMC,222503.000,A,2734.58184,S,15305.55887,E,37.8,143.4,030308,11.2,W,A*0D
+$GPVTG,143.4,T,154.6,M,37.8,N,70.0,K,A*2C
+$GPGGA,222504.000,2734.59032,S,15305.56580,E,1,07,1.2,58.9,M,39.2,M,,*79
+$GPGLL,2734.59032,S,15305.56580,E,222504.000,A,A*44
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222504.000,24.6,6.2,13.3,3.6,5.7,12.2,20.2*67
+$GPGSV,3,1,11,16,49,115,43,25,39,268,35,23,58,175,39,20,71,336,35*75
+$GPGSV,3,2,11,19,02,028,19,04,06,241,19,13,30,223,22,27,19,284,31*7E
+$GPGSV,3,3,11,11,06,337,25,01,,,17,03,14,055,30*7D
+$GPRMC,222504.000,A,2734.59032,S,15305.56580,E,37.6,143.6,030308,11.2,W,A*02
+$GPVTG,143.6,T,154.8,M,37.6,N,69.7,K,A*21
+$GPGGA,222505.000,2734.59874,S,15305.57271,E,1,06,1.5,59.4,M,39.2,M,,*70
+$GPGLL,2734.59874,S,15305.57271,E,222505.000,A,A*47
+$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36
+$GPGST,222505.000,17.4,5.5,11.8,3.4,5.0,10.8,17.3*61
+$GPGSV,3,1,11,16,49,115,44,25,39,268,35,23,58,175,39,20,71,336,36*71
+$GPGSV,3,2,11,19,02,028,21,04,06,241,19,13,30,223,24,27,19,284,31*73
+$GPGSV,3,3,11,11,06,337,,01,,,17,03,14,055,29*72
+$GPRMC,222505.000,A,2734.59874,S,15305.57271,E,37.3,143.7,030308,11.2,W,A*05
+$GPVTG,143.7,T,154.9,M,37.3,N,69.1,K,A*22
+$GPGGA,222506.000,2734.60703,S,15305.57943,E,1,07,1.2,60.1,M,39.2,M,,*75
+$GPGLL,2734.60703,S,15305.57943,E,222506.000,A,A*4B
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222506.000,16.1,6.2,11.7,15.3,6.1,10.4,17.4*54
+$GPGSV,3,1,11,16,49,115,43,25,39,268,34,23,58,175,37,20,71,336,36*79
+$GPGSV,3,2,11,19,02,028,21,04,06,241,,13,30,223,24,27,19,284,31*7B
+$GPGSV,3,3,11,11,06,337,,01,,,17,03,14,055,28*73
+$GPRMC,222506.000,A,2734.60703,S,15305.57943,E,36.5,143.9,030308,11.2,W,A*00
+$GPVTG,143.9,T,155.1,M,36.5,N,67.6,K,A*2B
+$GPGGA,222507.000,2734.61507,S,15305.58593,E,1,07,1.2,60.9,M,39.2,M,,*75
+$GPGLL,2734.61507,S,15305.58593,E,222507.000,A,A*43
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222507.000,14.0,6.8,11.8,10.9,6.4,10.7,18.5*54
+$GPGSV,3,1,11,16,49,115,43,25,39,268,34,23,58,175,37,20,71,336,34*7B
+$GPGSV,3,2,11,19,02,028,21,04,06,241,,13,30,223,29,27,19,284,34*73
+$GPGSV,3,3,11,11,06,337,,01,,,17,03,14,055,29*72
+$GPRMC,222507.000,A,2734.61507,S,15305.58593,E,35.4,143.9,030308,11.2,W,A*0A
+$GPVTG,143.9,T,155.1,M,35.4,N,65.5,K,A*28
+$GPGGA,222508.000,2734.62275,S,15305.59221,E,1,06,1.7,61.8,M,39.2,M,,*70
+$GPGLL,2734.62275,S,15305.59221,E,222508.000,A,A*42
+$GPGSA,A,3,16,25,23,20,13,27,,,,,,,3.3,1.7,2.8*3A
+$GPGST,222508.000,12.5,9.3,16.3,19.5,9.4,14.4,27.5*51
+$GPGSV,3,1,11,16,49,115,43,25,39,268,33,23,58,175,38,20,71,336,31*76
+$GPGSV,3,2,11,19,02,028,21,04,06,241,,13,30,223,30,27,19,284,35*7A
+$GPGSV,3,3,11,11,06,337,,01,,,17,03,14,055,28*73
+$GPRMC,222508.000,A,2734.62275,S,15305.59221,E,33.9,143.9,030308,11.2,W,A*00
+$GPVTG,143.9,T,155.1,M,33.9,N,62.9,K,A*28
+$GPGGA,222509.000,2734.63006,S,15305.59817,E,1,06,1.7,62.7,M,39.2,M,,*75
+$GPGLL,2734.63006,S,15305.59817,E,222509.000,A,A*4B
+$GPGSA,A,3,16,25,23,20,13,27,,,,,,,3.3,1.7,2.8*3A
+$GPGST,222509.000,10.4,8.1,14.2,21.9,8.4,12.3,23.7*52
+$GPGSV,3,1,11,16,49,115,44,25,39,268,32,23,58,175,37,20,71,336,29*76
+$GPGSV,3,2,11,19,02,028,21,04,06,241,,13,30,223,28,27,19,284,35*73
+$GPGSV,3,3,11,11,06,337,,01,,,17,03,14,055,30*7A
+$GPRMC,222509.000,A,2734.63006,S,15305.59817,E,32.2,143.9,030308,11.2,W,A*03
+$GPVTG,143.9,T,155.1,M,32.2,N,59.7,K,A*24
+$GPGGA,222510.000,2734.63706,S,15305.60376,E,1,06,1.7,63.5,M,39.2,M,,*7F
+$GPGLL,2734.63706,S,15305.60376,E,222510.000,A,A*42
+$GPGSA,A,3,16,25,23,20,13,27,,,,,,,3.3,1.7,2.8*3A
+$GPGST,222510.000,12.4,8.3,12.9,28.0,8.7,11.0,21.6*57
+$GPGSV,3,1,11,16,48,115,43,25,39,268,32,23,58,175,37,20,71,336,29*70
+$GPGSV,3,2,11,19,02,028,20,04,06,241,,13,30,223,31,27,19,284,35*7A
+$GPGSV,3,3,11,11,06,337,,01,,,17,03,14,055,25*7E
+$GPRMC,222510.000,A,2734.63706,S,15305.60376,E,30.6,144.3,030308,11.2,W,A*01
+$GPVTG,144.3,T,155.5,M,30.6,N,56.7,K,A*24
+$GPGGA,222511.000,2734.64376,S,15305.60904,E,1,07,1.2,64.4,M,39.2,M,,*77
+$GPGLL,2734.64376,S,15305.60904,E,222511.000,A,A*48
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222511.000,14.6,5.7,10.5,2.7,5.2,9.6,15.0*5C
+$GPGSV,3,1,11,16,48,115,44,25,39,268,32,23,58,175,37,20,71,336,28*76
+$GPGSV,3,2,11,19,02,028,20,04,06,241,23,13,30,223,29,27,19,284,36*71
+$GPGSV,3,3,11,11,06,337,,01,,,17,03,14,055,29*72
+$GPRMC,222511.000,A,2734.64376,S,15305.60904,E,29.1,144.2,030308,11.2,W,A*05
+$GPVTG,144.2,T,155.4,M,29.1,N,53.9,K,A*20
+$GPGGA,222512.000,2734.64992,S,15305.61405,E,1,07,1.2,65.4,M,39.2,M,,*78
+$GPGLL,2734.64992,S,15305.61405,E,222512.000,A,A*46
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222512.000,13.4,17.0,5.7,85.6,5.3,15.5,23.6*5A
+$GPGSV,3,1,11,16,48,115,45,25,39,268,33,23,58,175,38,20,71,336,28*79
+$GPGSV,3,2,11,19,02,028,20,04,06,241,23,13,30,223,26,27,19,284,33*7B
+$GPGSV,3,3,11,11,06,337,24,01,,,17,03,14,055,27*7A
+$GPRMC,222512.000,A,2734.64992,S,15305.61405,E,27.2,143.6,030308,11.2,W,A*05
+$GPVTG,143.6,T,154.8,M,27.2,N,50.5,K,A*2C
+$GPGGA,222513.000,2734.65572,S,15305.61884,E,1,07,1.2,66.2,M,39.2,M,,*7A
+$GPGLL,2734.65572,S,15305.61884,E,222513.000,A,A*41
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222513.000,12.3,7.0,14.8,2.4,6.5,13.5,21.4*6D
+$GPGSV,3,1,10,16,48,115,44,25,39,268,35,23,58,175,38,20,71,336,28*7F
+$GPGSV,3,2,10,19,02,028,20,04,06,241,23,13,30,223,23,27,19,284,33*7F
+$GPGSV,3,3,10,11,06,337,24,03,14,055,28*73
+$GPRMC,222513.000,A,2734.65572,S,15305.61884,E,25.8,143.6,030308,11.2,W,A*0A
+$GPVTG,143.6,T,154.8,M,25.8,N,47.9,K,A*2E
+$GPGGA,222514.000,2734.66155,S,15305.62364,E,1,06,1.5,67.0,M,39.2,M,,*7C
+$GPGLL,2734.66155,S,15305.62364,E,222514.000,A,A*42
+$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36
+$GPGST,222514.000,25.5,6.1,14.4,3.1,5.6,13.2,19.2*6A
+$GPGSV,3,1,10,16,48,115,44,25,39,268,33,23,58,175,38,20,71,336,26*77
+$GPGSV,3,2,10,19,02,028,18,04,06,241,23,13,30,223,23,27,19,284,34*73
+$GPGSV,3,3,10,11,06,337,28,03,14,055,29*7E
+$GPRMC,222514.000,A,2734.66155,S,15305.62364,E,25.9,143.6,030308,11.2,W,A*08
+$GPVTG,143.6,T,154.8,M,25.9,N,48.0,K,A*29
+$GPGGA,222515.000,2734.66761,S,15305.62860,E,1,06,1.5,67.5,M,39.2,M,,*76
+$GPGLL,2734.66761,S,15305.62860,E,222515.000,A,A*4D
+$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36
+$GPGST,222515.000,20.1,5.5,13.0,3.0,5.1,11.8,17.4*68
+$GPGSV,3,1,10,16,48,115,44,25,39,268,32,23,58,175,38,20,71,336,26*76
+$GPGSV,3,2,10,19,02,028,18,04,06,241,23,13,30,223,24,27,19,284,34*74
+$GPGSV,3,3,10,11,06,337,28,03,14,055,24*73
+$GPRMC,222515.000,A,2734.66761,S,15305.62860,E,26.9,143.7,030308,11.2,W,A*05
+$GPVTG,143.7,T,154.9,M,26.9,N,49.8,K,A*23
+$GPGGA,222516.000,2734.67384,S,15305.63376,E,1,06,1.5,68.2,M,39.2,M,,*7E
+$GPGLL,2734.67384,S,15305.63376,E,222516.000,A,A*4D
+$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36
+$GPGST,222516.000,16.4,5.8,11.5,4.5,5.3,10.5,17.3*6A
+$GPGSV,3,1,10,16,48,115,44,25,39,268,32,23,58,175,38,20,71,336,30*71
+$GPGSV,3,2,10,19,02,028,18,04,06,241,23,13,30,223,24,27,19,284,33*73
+$GPGSV,3,3,10,11,06,337,28,03,14,055,28*7F
+$GPRMC,222516.000,A,2734.67384,S,15305.63376,E,27.7,143.8,030308,11.2,W,A*05
+$GPVTG,143.8,T,155.0,M,27.7,N,51.4,K,A*2E
+$GPGGA,222517.000,2734.68035,S,15305.63901,E,1,06,1.5,68.8,M,39.2,M,,*79
+$GPGLL,2734.68035,S,15305.63901,E,222517.000,A,A*40
+$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36
+$GPGST,222517.000,19.1,6.2,12.1,7.2,5.8,11.0,15.3*66
+$GPGSV,3,1,10,16,48,115,44,25,39,268,34,23,58,175,38,20,71,336,32*75
+$GPGSV,3,2,10,19,02,028,20,04,06,241,23,13,30,223,24,27,19,284,34*7F
+$GPGSV,3,3,10,11,06,337,24,03,14,055,29*72
+$GPRMC,222517.000,A,2734.68035,S,15305.63901,E,28.6,144.1,030308,11.2,W,A*08
+$GPVTG,144.1,T,155.3,M,28.6,N,53.0,K,A*2B
+$GPGGA,222518.000,2734.68718,S,15305.64446,E,1,07,1.4,69.1,M,39.2,M,,*7F
+$GPGLL,2734.68718,S,15305.64446,E,222518.000,A,A*4E
+$GPGSA,A,3,16,25,23,20,27,11,03,,,,,,2.4,1.4,1.9*3C
+$GPGST,222518.000,13.8,5.5,10.6,5.8,5.1,9.6,13.4*54
+$GPGSV,3,1,10,16,48,115,43,25,39,268,33,23,58,175,37,20,71,336,35*7D
+$GPGSV,3,2,10,19,02,028,20,04,06,241,18,13,30,223,24,27,19,284,33*70
+$GPGSV,3,3,10,11,06,337,22,03,14,055,33*7F
+$GPRMC,222518.000,A,2734.68718,S,15305.64446,E,29.9,144.4,030308,11.2,W,A*0D
+$GPVTG,144.4,T,155.6,M,29.9,N,55.3,K,A*20
+$GPGGA,222519.000,2734.69424,S,15305.65010,E,1,07,1.4,69.5,M,39.2,M,,*71
+$GPGLL,2734.69424,S,15305.65010,E,222519.000,A,A*44
+$GPGSA,A,3,16,25,23,20,27,11,03,,,,,,2.4,1.4,1.9*3C
+$GPGST,222519.000,14.0,13.4,5.0,89.4,4.6,12.3,18.8*58
+$GPGSV,3,1,10,16,48,115,44,25,39,268,34,23,58,175,37,20,71,336,37*7F
+$GPGSV,3,2,10,19,02,028,20,04,06,241,18,13,30,223,23,27,19,284,31*75
+$GPGSV,3,3,10,11,06,337,26,03,14,055,35*7D
+$GPRMC,222519.000,A,2734.69424,S,15305.65010,E,31.0,144.4,030308,11.2,W,A*07
+$GPVTG,144.4,T,155.6,M,31.0,N,57.5,K,A*24
+$GPGGA,222520.000,2734.70163,S,15305.65604,E,1,07,1.4,69.6,M,39.2,M,,*75
+$GPGLL,2734.70163,S,15305.65604,E,222520.000,A,A*43
+$GPGSA,A,3,16,25,23,20,27,11,03,,,,,,2.4,1.4,1.9*3C
+$GPGST,222520.000,9.8,11.6,4.7,89.0,4.3,10.6,15.9*6A
+$GPGSV,3,1,10,16,48,115,44,25,39,268,35,23,58,175,39,20,71,336,36*71
+$GPGSV,3,2,10,19,02,028,20,04,06,241,19,13,30,223,23,27,19,284,31*74
+$GPGSV,3,3,10,11,06,337,31,03,14,055,37*79
+$GPRMC,222520.000,A,2734.70163,S,15305.65604,E,32.5,144.1,030308,11.2,W,A*03
+$GPVTG,144.1,T,155.3,M,32.5,N,60.2,K,A*21
+$GPGGA,222521.000,2734.70923,S,15305.66218,E,1,07,1.4,69.5,M,39.2,M,,*71
+$GPGLL,2734.70923,S,15305.66218,E,222521.000,A,A*44
+$GPGSA,A,3,16,25,23,20,27,11,03,,,,,,2.4,1.4,1.9*3C
+$GPGST,222521.000,11.1,6.2,10.8,9.6,5.8,9.8,16.8*53
+$GPGSV,3,1,10,16,48,115,44,25,39,268,36,23,58,175,40,20,71,336,38*72
+$GPGSV,3,2,10,19,02,028,20,04,06,241,19,13,30,223,23,27,19,284,26*72
+$GPGSV,3,3,10,11,06,338,31,03,14,055,37*76
+$GPRMC,222521.000,A,2734.70923,S,15305.66218,E,33.5,144.0,030308,11.2,W,A*04
+$GPVTG,144.0,T,155.3,M,33.5,N,62.0,K,A*21
+$GPGGA,222522.000,2734.71700,S,15305.66845,E,1,06,1.5,69.1,M,39.2,M,,*7A
+$GPGLL,2734.71700,S,15305.66845,E,222522.000,A,A*4B
+$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36
+$GPGST,222522.000,15.0,5.7,9.9,5.5,5.2,9.0,15.4*68
+$GPGSV,3,1,10,16,48,115,43,25,39,268,36,23,58,175,40,20,71,336,37*7A
+$GPGSV,3,2,10,19,02,028,20,04,06,241,24,13,30,223,23,27,19,284,26*7C
+$GPGSV,3,3,10,11,06,338,25,03,14,055,37*73
+$GPRMC,222522.000,A,2734.71700,S,15305.66845,E,34.2,144.1,030308,11.2,W,A*0A
+$GPVTG,144.1,T,155.3,M,34.2,N,63.4,K,A*25
+$GPGGA,222523.000,2734.72487,S,15305.67483,E,1,07,1.4,68.6,M,39.2,M,,*75
+$GPGLL,2734.72487,S,15305.67483,E,222523.000,A,A*42
+$GPGSA,A,3,16,25,23,20,27,11,03,,,,,,2.4,1.4,1.9*3C
+$GPGST,222523.000,13.8,5.2,10.1,3.9,4.8,9.2,13.8*5B
+$GPGSV,3,1,10,16,48,115,44,25,39,268,37,23,58,175,41,20,71,336,35*7F
+$GPGSV,3,2,10,19,02,028,20,04,06,241,24,13,30,223,23,27,19,284,26*7C
+$GPGSV,3,3,10,11,06,338,23,03,14,055,31*73
+$GPRMC,222523.000,A,2734.72487,S,15305.67483,E,34.7,144.2,030308,11.2,W,A*05
+$GPVTG,144.2,T,155.4,M,34.7,N,64.3,K,A*24
+$GPGGA,222524.000,2734.73280,S,15305.68126,E,1,07,1.4,68.1,M,39.2,M,,*70
+$GPGLL,2734.73280,S,15305.68126,E,222524.000,A,A*40
+$GPGSA,A,3,16,25,23,20,27,11,03,,,,,,2.4,1.4,1.9*3C
+$GPGST,222524.000,10.5,4.9,9.4,3.5,4.5,8.6,12.8*60
+$GPGSV,3,1,10,16,48,115,44,25,39,268,37,23,58,175,41,20,71,336,35*7F
+$GPGSV,3,2,10,19,02,028,20,04,06,241,22,13,30,223,23,27,19,284,26*7A
+$GPGSV,3,3,10,11,06,338,25,03,14,055,29*7C
+$GPRMC,222524.000,A,2734.73280,S,15305.68126,E,35.0,144.2,030308,11.2,W,A*01
+$GPVTG,144.2,T,155.4,M,35.0,N,64.9,K,A*28
+$GPGGA,222525.000,2734.74083,S,15305.68778,E,1,07,1.4,67.7,M,39.2,M,,*73
+$GPGLL,2734.74083,S,15305.68778,E,222525.000,A,A*4A
+$GPGSA,A,3,16,25,23,20,27,11,03,,,,,,2.4,1.4,1.9*3C
+$GPGST,222525.000,10.3,5.2,13.4,3.6,4.8,12.3,20.4*6B
+$GPGSV,3,1,10,16,48,115,43,25,39,268,38,23,58,175,40,20,71,336,36*75
+$GPGSV,3,2,10,19,02,028,20,04,06,241,22,13,30,223,23,27,19,284,23*7F
+$GPGSV,3,3,10,11,06,338,27,03,14,055,36*70
+$GPRMC,222525.000,A,2734.74083,S,15305.68778,E,35.6,144.2,030308,11.2,W,A*0D
+$GPVTG,144.2,T,155.4,M,35.6,N,65.9,K,A*2F
+$GPGGA,222526.000,2734.74894,S,15305.69428,E,1,06,1.5,67.2,M,39.2,M,,*7C
+$GPGLL,2734.74894,S,15305.69428,E,222526.000,A,A*40
+$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36
+$GPGST,222526.000,8.0,5.7,12.0,2.6,5.2,10.9,17.4*54
+$GPGSV,3,1,10,16,48,115,43,25,39,268,37,23,58,175,40,20,71,336,35*79
+$GPGSV,3,2,10,19,02,028,20,04,06,241,22,13,30,223,23,27,19,284,24*78
+$GPGSV,3,3,10,11,06,338,27,03,14,055,39*7F
+$GPRMC,222526.000,A,2734.74894,S,15305.69428,E,35.8,144.5,030308,11.2,W,A*0E
+$GPVTG,144.5,T,155.7,M,35.8,N,66.3,K,A*2C
+$GPGGA,222527.000,2734.75707,S,15305.70075,E,1,05,1.7,66.8,M,39.2,M,,*77
+$GPGLL,2734.75707,S,15305.70075,E,222527.000,A,A*41
+$GPGSA,A,3,16,25,23,20,03,,,,,,,,2.9,1.7,2.4*39
+$GPGST,222527.000,13.9,6.3,10.9,6.3,5.9,10.0,18.2*60
+$GPGSV,3,1,10,16,48,115,44,25,39,268,38,23,58,175,40,20,71,336,33*77
+$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,30,223,23,27,19,284,26*7F
+$GPGSV,3,3,10,11,06,338,,03,14,055,36*75
+$GPRMC,222527.000,A,2734.75707,S,15305.70075,E,35.8,144.6,030308,11.2,W,A*0C
+$GPVTG,144.6,T,155.8,M,35.8,N,66.2,K,A*21
+$GPGGA,222528.000,2734.76518,S,15305.70724,E,1,06,1.5,66.1,M,39.2,M,,*7C
+$GPGLL,2734.76518,S,15305.70724,E,222528.000,A,A*42
+$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36
+$GPGST,222528.000,11.3,5.6,10.1,4.5,5.2,9.2,16.1*51
+$GPGSV,3,1,10,16,48,115,43,25,39,268,39,23,58,175,39,20,71,336,28*75
+$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,30,223,23,27,19,284,26*7F
+$GPGSV,3,3,10,11,06,338,,03,14,055,36*75
+$GPRMC,222528.000,A,2734.76518,S,15305.70724,E,35.7,144.4,030308,11.2,W,A*02
+$GPVTG,144.4,T,155.6,M,35.7,N,66.2,K,A*22
+$GPGGA,222529.000,2734.77313,S,15305.71385,E,1,06,1.5,66.1,M,39.2,M,,*7F
+$GPGLL,2734.77313,S,15305.71385,E,222529.000,A,A*41
+$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36
+$GPGST,222529.000,10.9,5.6,12.5,5.4,5.2,11.4,20.9*6F
+$GPGSV,3,1,10,16,48,115,41,25,39,268,40,23,58,175,36,20,71,336,28*76
+$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,30,223,23,27,19,284,24*7D
+$GPGSV,3,3,10,11,06,338,27,03,14,055,30*76
+$GPRMC,222529.000,A,2734.77313,S,15305.71385,E,35.6,143.5,030308,11.2,W,A*06
+$GPVTG,143.5,T,154.7,M,35.6,N,65.8,K,A*2C
+$GPGGA,222530.000,2734.78106,S,15305.72042,E,1,06,1.5,66.0,M,39.2,M,,*74
+$GPGLL,2734.78106,S,15305.72042,E,222530.000,A,A*4B
+$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36
+$GPGST,222530.000,9.4,5.4,18.9,2.4,4.9,17.3,30.6*54
+$GPGSV,3,1,10,16,48,115,40,25,39,268,40,23,58,175,36,20,71,336,28*77
+$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,30,223,23,27,19,284,26*7F
+$GPGSV,3,3,10,11,06,338,27,03,14,055,29*7E
+$GPRMC,222530.000,A,2734.78106,S,15305.72042,E,35.5,143.7,030308,11.2,W,A*0D
+$GPVTG,143.7,T,155.0,M,35.5,N,65.8,K,A*2B
+$GPGGA,222531.000,2734.78918,S,15305.72691,E,1,05,4.4,66.0,M,39.2,M,,*7D
+$GPGLL,2734.78918,S,15305.72691,E,222531.000,A,A*45
+$GPGSA,A,3,16,25,23,27,11,,,,,,,,9.3,4.4,8.2*36
+$GPGST,222531.000,9.1,8.5,53.9,3.2,8.2,49.2,81.3*56
+$GPGSV,3,1,10,16,48,115,40,25,39,268,39,23,58,175,37,20,71,336,28*78
+$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,31,223,23,27,19,284,25*7D
+$GPGSV,3,3,10,11,06,338,24,03,14,055,22*76
+$GPRMC,222531.000,A,2734.78918,S,15305.72691,E,35.9,144.5,030308,11.2,W,A*0A
+$GPVTG,144.5,T,155.7,M,35.9,N,66.4,K,A*2A
+$GPGGA,222532.000,2734.79737,S,15305.73347,E,1,06,1.5,66.0,M,39.2,M,,*74
+$GPGLL,2734.79737,S,15305.73347,E,222532.000,A,A*4B
+$GPGSA,A,3,16,25,23,20,27,03,,,,,,,2.5,1.5,2.0*36
+$GPGST,222532.000,11.0,6.8,38.7,1.2,6.3,35.3,58.4*69
+$GPGSV,3,1,10,16,48,115,40,25,39,268,39,23,58,175,36,20,71,336,28*79
+$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,31,223,24,27,19,284,23*7C
+$GPGSV,3,3,10,11,06,338,24,03,14,055,30*75
+$GPRMC,222532.000,A,2734.79737,S,15305.73347,E,36.1,144.5,030308,11.2,W,A*0F
+$GPVTG,144.5,T,155.7,M,36.1,N,66.9,K,A*2C
+$GPGGA,222533.000,2734.80571,S,15305.74004,E,1,06,4.1,66.1,M,39.2,M,,*70
+$GPGLL,2734.80571,S,15305.74004,E,222533.000,A,A*4F
+$GPGSA,A,3,16,25,23,27,11,03,,,,,,,8.3,4.1,7.3*3F
+$GPGST,222533.000,9.4,6.1,45.5,0.4,5.6,41.6,69.5*50
+$GPGSV,3,1,10,16,48,115,40,25,39,268,39,23,58,175,37,20,71,336,28*78
+$GPGSV,3,2,10,19,02,028,,04,06,241,23,13,31,223,24,27,19,284,25*7C
+$GPGSV,3,3,10,11,06,338,22,03,14,055,25*77
+$GPRMC,222533.000,A,2734.80571,S,15305.74004,E,36.6,145.0,030308,11.2,W,A*08
+$GPVTG,145.0,T,156.2,M,36.6,N,67.7,K,A*26
+$GPGGA,222534.000,2734.81441,S,15305.74656,E,1,06,1.8,65.2,M,39.2,M,,*79
+$GPGLL,2734.81441,S,15305.74656,E,222534.000,A,A*4A
+$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.5,1.8,3.1*3A
+$GPGST,222534.000,20.2,5.8,45.7,1.7,5.4,41.7,71.3*6C
+$GPGSV,3,1,10,16,48,115,40,25,39,268,38,23,58,175,37,20,71,336,28*79
+$GPGSV,3,2,10,19,02,028,,04,06,241,23,13,31,223,25,27,19,284,25*7D
+$GPGSV,3,3,10,11,06,338,22,03,14,055,31*72
+$GPRMC,222534.000,A,2734.81441,S,15305.74656,E,37.6,146.2,030308,11.2,W,A*0D
+$GPVTG,146.2,T,157.5,M,37.6,N,69.7,K,A*2E
+$GPGGA,222535.000,2734.82349,S,15305.75307,E,1,05,1.9,63.5,M,39.2,M,,*77
+$GPGLL,2734.82349,S,15305.75307,E,222535.000,A,A*47
+$GPGSA,A,3,16,25,23,13,03,,,,,,,,3.6,1.9,3.1*3D
+$GPGST,222535.000,27.6,7.0,40.6,3.1,6.7,37.1,68.4*6C
+$GPGSV,3,1,10,16,48,115,40,25,39,268,36,23,58,175,37,20,71,336,28*77
+$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,31,223,25,27,19,284,23*78
+$GPGSV,3,3,10,11,06,338,22,03,14,055,26*74
+$GPRMC,222535.000,A,2734.82349,S,15305.75307,E,38.7,147.3,030308,11.2,W,A*0E
+$GPVTG,147.3,T,158.6,M,38.7,N,71.7,K,A*25
+$GPGGA,222536.000,2734.83215,S,15305.75969,E,1,05,1.7,63.5,M,39.2,M,,*71
+$GPGLL,2734.83215,S,15305.75969,E,222536.000,A,A*4F
+$GPGSA,A,3,16,25,23,20,03,,,,,,,,2.9,1.7,2.4*39
+$GPGST,222536.000,7.9,6.3,97.2,3.9,8.3,88.7,161.0*62
+$GPGSV,3,1,10,16,48,115,40,25,39,268,37,23,58,175,36,20,71,336,28*77
+$GPGSV,3,2,10,19,02,028,,04,06,241,20,13,31,223,25,27,19,284,23*78
+$GPGSV,3,3,10,11,06,338,22,03,14,055,26*74
+$GPRMC,222536.000,A,2734.83215,S,15305.75969,E,37.6,145.6,030308,11.2,W,A*0F
+$GPVTG,145.6,T,156.8,M,37.6,N,69.7,K,A*25
+$GPGGA,222537.000,2734.84076,S,15305.76655,E,1,05,1.7,63.5,M,39.2,M,,*73
+$GPGLL,2734.84076,S,15305.76655,E,222537.000,A,A*4D
+$GPGSA,A,3,16,25,23,20,03,,,,,,,,2.9,1.7,2.4*39
+$GPGST,222537.000,16.0,7.8,110.8,2.1,8.0,101.2,209.1*57
+$GPGSV,3,1,10,16,48,115,39,25,39,268,36,23,58,175,34,20,71,336,28*7A
+$GPGSV,3,2,10,19,02,028,,04,06,241,22,13,31,223,25,27,19,284,23*7A
+$GPGSV,3,3,10,11,06,338,22,03,14,055,25*77
+$GPRMC,222537.000,A,2734.84076,S,15305.76655,E,37.9,144.6,030308,11.2,W,A*03
+$GPVTG,144.6,T,155.8,M,37.9,N,70.3,K,A*24
+$GPGGA,222538.000,2734.84945,S,15305.77356,E,1,05,1.9,63.5,M,39.2,M,,*7C
+$GPGLL,2734.84945,S,15305.77356,E,222538.000,A,A*4C
+$GPGSA,A,3,16,25,23,13,03,,,,,,,,3.6,1.9,3.1*3D
+$GPGST,222538.000,13.1,8.0,61.7,1.6,7.5,56.4,113.0*51
+$GPGSV,3,1,10,16,48,115,40,25,39,268,37,23,58,175,32,20,71,336,*79
+$GPGSV,3,2,10,19,02,028,,04,06,241,22,13,31,223,25,27,19,284,23*7A
+$GPGSV,3,3,10,11,06,338,22,03,14,055,28*7A
+$GPRMC,222538.000,A,2734.84945,S,15305.77356,E,38.4,144.2,030308,11.2,W,A*04
+$GPVTG,144.2,T,155.4,M,38.4,N,71.1,K,A*2D
+$GPGGA,222539.000,2734.85792,S,15305.78022,E,1,05,1.9,63.5,M,39.2,M,,*77
+$GPGLL,2734.85792,S,15305.78022,E,222539.000,A,A*47
+$GPGSA,A,3,16,25,23,13,03,,,,,,,,3.6,1.9,3.1*3D
+$GPGST,222539.000,6.4,7.5,72.7,1.5,7.1,66.5,137.2*68
+$GPGSV,3,1,10,16,48,115,40,25,39,268,38,23,58,175,32,20,71,336,*76
+$GPGSV,3,2,10,19,02,028,,04,06,241,22,13,31,223,25,27,19,284,23*7A
+$GPGSV,3,3,10,11,06,338,22,03,14,055,28*7A
+$GPRMC,222539.000,A,2734.85792,S,15305.78022,E,37.1,144.9,030308,11.2,W,A*0E
+$GPVTG,144.9,T,156.1,M,37.1,N,68.7,K,A*24
+$GPGGA,222540.000,2734.86604,S,15305.78646,E,1,05,4.4,63.5,M,39.2,M,,*78
+$GPGLL,2734.86604,S,15305.78646,E,222540.000,A,A*40
+$GPGSA,A,3,16,25,23,27,11,,,,,,,,9.3,4.4,8.2*36
+$GPGST,222540.000,13.6,8.3,67.7,1.8,7.8,61.9,111.1*55
+$GPGSV,3,1,10,16,48,115,40,25,39,268,38,23,58,175,32,20,71,336,*76
+$GPGSV,3,2,10,19,02,028,,04,06,241,26,13,31,223,22,27,19,284,22*78
+$GPGSV,3,3,10,11,06,338,20,03,14,055,28*78
+$GPRMC,222540.000,A,2734.86604,S,15305.78646,E,35.3,145.6,030308,11.2,W,A*07
+$GPVTG,145.6,T,156.8,M,35.3,N,65.4,K,A*2D
+$GPGGA,222541.000,2734.87421,S,15305.79222,E,1,06,1.8,63.5,M,39.2,M,,*70
+$GPGLL,2734.87421,S,15305.79222,E,222541.000,A,A*42
+$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.5,1.8,3.1*3A
+$GPGST,222541.000,11.7,33.3,8.1,87.4,7.5,30.4,54.6*51
+$GPGSV,3,1,10,16,48,115,39,25,39,268,33,23,58,175,36,20,71,336,*77
+$GPGSV,3,2,10,19,02,028,,04,06,241,26,13,31,223,22,27,19,284,22*78
+$GPGSV,3,3,10,11,06,338,20,03,14,055,26*76
+$GPRMC,222541.000,A,2734.87421,S,15305.79222,E,34.6,147.7,030308,11.2,W,A*02
+$GPVTG,147.7,T,158.9,M,34.6,N,64.1,K,A*21
+$GPGGA,222542.000,2734.88135,S,15305.79765,E,1,06,1.8,63.5,M,39.2,M,,*7A
+$GPGLL,2734.88135,S,15305.79765,E,222542.000,A,A*48
+$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.5,1.8,3.1*3A
+$GPGST,222542.000,23.5,7.9,53.0,0.2,7.2,48.5,78.4*6F
+$GPGSV,3,1,10,16,48,115,40,25,39,268,36,23,58,175,35,20,71,336,*7F
+$GPGSV,3,2,10,19,02,028,,04,06,241,27,13,31,223,23,27,19,284,25*7F
+$GPGSV,3,3,10,11,06,338,20,03,14,055,26*76
+$GPRMC,222542.000,A,2734.88135,S,15305.79765,E,31.0,145.8,030308,11.2,W,A*06
+$GPVTG,145.8,T,157.0,M,31.0,N,57.4,K,A*2C
+$GPGGA,222543.000,2734.88798,S,15305.80287,E,1,07,1.2,63.0,M,39.2,M,,*7B
+$GPGLL,2734.88798,S,15305.80287,E,222543.000,A,A*47
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222543.000,18.8,6.7,28.4,0.5,6.1,26.0,41.8*62
+$GPGSV,3,1,10,16,48,115,40,25,39,268,39,23,58,175,35,20,71,336,21*73
+$GPGSV,3,2,10,19,02,028,,04,06,241,37,13,31,223,22,27,19,284,24*7E
+$GPGSV,3,3,10,11,06,338,20,03,14,055,32*73
+$GPRMC,222543.000,A,2734.88798,S,15305.80287,E,29.0,144.8,030308,11.2,W,A*01
+$GPVTG,144.8,T,156.0,M,29.0,N,53.8,K,A*2D
+$GPGGA,222544.000,2734.89328,S,15305.80767,E,1,06,1.8,62.9,M,39.2,M,,*7A
+$GPGLL,2734.89328,S,15305.80767,E,222544.000,A,A*45
+$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.5,1.8,3.1*3A
+$GPGST,222544.000,14.9,35.2,5.8,89.5,5.4,32.2,52.6*52
+$GPGSV,3,1,10,16,48,115,43,25,39,268,40,23,58,175,25,20,71,336,21*7F
+$GPGSV,3,2,10,19,02,028,,04,06,241,28,13,31,223,30,27,19,284,29*7E
+$GPGSV,3,3,10,11,06,338,20,03,14,055,33*72
+$GPRMC,222544.000,A,2734.89328,S,15305.80767,E,24.5,140.9,030308,11.2,W,A*0E
+$GPVTG,140.9,T,152.1,M,24.5,N,45.3,K,A*29
+$GPGGA,222545.000,2734.89633,S,15305.81084,E,1,05,1.9,62.9,M,39.2,M,,*7D
+$GPGLL,2734.89633,S,15305.81084,E,222545.000,A,A*40
+$GPGSA,A,3,16,25,23,13,03,,,,,,,,3.6,1.9,3.1*3D
+$GPGST,222545.000,19.5,6.0,33.0,1.0,5.5,30.2,52.4*69
+$GPGSV,3,1,10,16,48,115,41,25,39,268,34,23,58,175,29,20,71,336,30*72
+$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,31,223,29,27,19,284,30*73
+$GPGSV,3,3,10,11,06,338,20,03,14,055,30*71
+$GPRMC,222545.000,A,2734.89633,S,15305.81084,E,14.6,136.6,030308,11.2,W,A*05
+$GPVTG,136.6,T,147.8,M,14.6,N,27.0,K,A*2D
+$GPGGA,222546.000,2734.89236,S,15305.81130,E,1,06,1.3,62.6,M,39.2,M,,*77
+$GPGLL,2734.89236,S,15305.81130,E,222546.000,A,A*4C
+$GPGSA,A,3,16,25,23,20,13,03,,,,,,,2.3,1.3,1.9*3B
+$GPGST,222546.000,11.5,5.6,15.6,0.9,5.2,14.3,26.4*6E
+$GPGSV,3,1,10,16,48,115,35,25,39,268,40,23,58,175,41,20,71,336,38*74
+$GPGSV,3,2,10,19,02,028,,04,06,241,26,13,31,223,33,27,19,284,26*7C
+$GPGSV,3,3,10,11,06,338,20,03,14,055,28*78
+$GPRMC,222546.000,A,2734.89236,S,15305.81130,E,16.9,2.1,030308,11.2,W,A*05
+$GPVTG,2.1,T,13.3,M,16.9,N,31.2,K,A*1F
+$GPGGA,222547.000,2734.89429,S,15305.81239,E,1,05,2.3,62.5,M,39.2,M,,*77
+$GPGLL,2734.89429,S,15305.81239,E,222547.000,A,A*4F
+$GPGSA,A,3,16,23,13,27,03,,,,,,,,4.6,2.3,3.9*39
+$GPGST,222547.000,11.4,38.3,9.7,69.8,14.7,33.0,49.2*6B
+$GPGSV,3,1,10,16,48,115,32,25,39,268,37,23,58,175,42,20,71,336,37*7F
+$GPGSV,3,2,10,19,02,028,,04,06,241,26,13,31,223,36,27,19,284,29*76
+$GPGSV,3,3,10,11,06,338,20,03,14,055,34*75
+$GPRMC,222547.000,A,2734.89429,S,15305.81239,E,8.4,154.5,030308,11.2,W,A*32
+$GPVTG,154.5,T,165.7,M,8.4,N,15.6,K,A*1D
+$GPGGA,222548.000,2734.89474,S,15305.81253,E,1,07,1.2,62.0,M,39.2,M,,*79
+$GPGLL,2734.89474,S,15305.81253,E,222548.000,A,A*44
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222548.000,11.0,12.3,7.9,86.0,7.3,11.3,20.6*5F
+$GPGSV,3,1,10,16,48,115,34,25,39,268,36,23,58,175,42,20,71,336,38*77
+$GPGSV,3,2,10,19,02,028,,04,06,241,25,13,31,223,36,27,19,284,29*75
+$GPGSV,3,3,10,11,06,338,20,03,14,055,33*72
+$GPRMC,222548.000,A,2734.89474,S,15305.81253,E,0.3,353.0,030308,11.2,W,A*36
+$GPVTG,353.0,T,4.3,M,0.3,N,0.5,K,A*27
+$GPGGA,222549.000,2734.89490,S,15305.81265,E,1,04,2.0,61.8,M,39.2,M,,*7E
+$GPGLL,2734.89490,S,15305.81265,E,222549.000,A,A*4A
+$GPGSA,A,3,25,23,13,03,,,,,,,,,3.9,2.0,3.3*3D
+$GPGST,222549.000,17.0,16.1,8.8,81.3,8.3,14.6,29.3*57
+$GPGSV,3,1,11,16,48,115,33,25,39,268,37,23,58,175,42,20,71,336,36*7E
+$GPGSV,3,2,11,19,02,028,,04,06,241,25,13,31,223,35,27,19,284,30*7F
+$GPGSV,3,3,11,11,06,338,20,01,,,21,03,14,055,33*71
+$GPRMC,222549.000,A,2734.89490,S,15305.81265,E,0.2,330.7,030308,11.2,W,A*3B
+$GPVTG,330.7,T,341.9,M,0.2,N,0.3,K,A*2A
+$GPGGA,222550.000,2734.89526,S,15305.81278,E,1,04,2.6,61.7,M,39.2,M,,*7F
+$GPGLL,2734.89526,S,15305.81278,E,222550.000,A,A*42
+$GPGSA,A,3,16,25,23,13,,,,,,,,,6.1,2.6,5.6*31
+$GPGST,222550.000,13.4,12.4,27.3,43.1,18.9,19.8,52.9*5A
+$GPGSV,3,1,11,16,48,115,30,25,39,268,38,23,58,175,42,20,71,336,37*73
+$GPGSV,3,2,11,19,02,028,,04,06,241,25,13,31,223,36,27,19,284,31*7D
+$GPGSV,3,3,11,11,06,338,,01,,,21,03,14,055,32*72
+$GPRMC,222550.000,A,2734.89526,S,15305.81278,E,0.1,350.7,030308,11.2,W,A*36
+$GPVTG,350.7,T,1.9,M,0.1,N,0.2,K,A*29
+$GPGGA,222551.000,2734.89528,S,15305.81279,E,1,05,2.3,61.7,M,39.2,M,,*75
+$GPGLL,2734.89528,S,15305.81279,E,222551.000,A,A*4C
+$GPGSA,A,3,16,23,13,27,03,,,,,,,,4.6,2.3,3.9*39
+$GPGST,222551.000,13.7,31.0,11.1,60.5,16.5,25.2,39.3*5F
+$GPGSV,3,1,11,16,48,115,30,25,39,268,39,23,58,175,41,20,71,336,35*73
+$GPGSV,3,2,11,19,02,028,,04,06,241,23,13,31,223,36,27,19,284,31*7B
+$GPGSV,3,3,11,11,06,338,,01,,,20,03,14,055,30*71
+$GPRMC,222551.000,A,2734.89528,S,15305.81279,E,0.1,345.0,030308,11.2,W,A*3B
+$GPVTG,345.0,T,356.2,M,0.1,N,0.2,K,A*20
+$GPGGA,222552.000,2734.89550,S,15305.81288,E,1,05,2.1,61.7,M,39.2,M,,*75
+$GPGLL,2734.89550,S,15305.81288,E,222552.000,A,A*4E
+$GPGSA,A,3,16,25,23,13,27,,,,,,,,4.7,2.1,4.2*32
+$GPGST,222552.000,11.7,11.5,20.8,20.0,11.8,18.2,39.1*55
+$GPGSV,3,1,11,16,48,115,31,25,39,268,40,23,58,175,42,20,71,336,35*7F
+$GPGSV,3,2,11,19,02,028,,04,06,241,23,13,31,223,38,27,19,284,31*75
+$GPGSV,3,3,11,11,06,338,,01,,,20,03,14,055,30*71
+$GPRMC,222552.000,A,2734.89550,S,15305.81288,E,0.1,11.2,030308,11.2,W,A*09
+$GPVTG,11.2,T,22.5,M,0.1,N,0.2,K,A*27
+$GPGGA,222553.000,2734.89573,S,15305.81294,E,1,05,2.1,61.5,M,39.2,M,,*7A
+$GPGLL,2734.89573,S,15305.81294,E,222553.000,A,A*43
+$GPGSA,A,3,16,25,23,13,27,,,,,,,,4.7,2.1,4.2*32
+$GPGST,222553.000,9.8,10.3,17.6,19.1,10.4,15.6,33.7*6C
+$GPGSV,3,1,10,16,48,115,29,25,39,268,38,23,58,175,41,20,71,336,37*79
+$GPGSV,3,2,10,19,02,028,,04,06,241,23,13,31,223,39,27,19,284,30*74
+$GPGSV,3,3,10,11,06,338,,03,14,055,29*7B
+$GPRMC,222553.000,A,2734.89573,S,15305.81294,E,0.1,351.8,030308,11.2,W,A*39
+$GPVTG,351.8,T,3.0,M,0.1,N,0.2,K,A*2C
+$GPGGA,222554.000,2734.89591,S,15305.81298,E,1,04,2.6,61.4,M,39.2,M,,*7A
+$GPGLL,2734.89591,S,15305.81298,E,222554.000,A,A*44
+$GPGSA,A,3,16,25,23,13,,,,,,,,,6.1,2.6,5.6*31
+$GPGST,222554.000,16.9,10.4,17.8,12.8,10.0,16.1,37.3*5F
+$GPGSV,3,1,10,16,48,115,32,25,39,268,38,23,58,175,41,20,71,336,36*72
+$GPGSV,3,2,10,19,02,028,,04,06,241,23,13,31,223,38,27,19,284,31*74
+$GPGSV,3,3,10,11,06,338,,03,14,055,26*74
+$GPRMC,222554.000,A,2734.89591,S,15305.81298,E,0.1,334.9,030308,11.2,W,A*3C
+$GPVTG,334.9,T,346.1,M,0.1,N,0.2,K,A*2D
+$GPGGA,222555.000,2734.89607,S,15305.81301,E,1,04,2.6,61.2,M,39.2,M,,*70
+$GPGLL,2734.89607,S,15305.81301,E,222555.000,A,A*48
+$GPGSA,A,3,16,25,23,13,,,,,,,,,6.1,2.6,5.6*31
+$GPGST,222555.000,14.4,11.9,23.3,40.8,16.2,17.6,44.5*56
+$GPGSV,3,1,11,16,48,115,32,25,39,268,37,23,58,175,40,20,71,336,38*73
+$GPGSV,3,2,11,19,02,028,,04,06,241,23,13,31,223,37,27,19,284,30*7B
+$GPGSV,3,3,11,11,06,338,,01,,,20,03,14,055,25*75
+$GPRMC,222555.000,A,2734.89607,S,15305.81301,E,0.1,6.2,030308,11.2,W,A*39
+$GPVTG,6.2,T,17.4,M,0.1,N,0.2,K,A*16
+$GPGGA,222556.000,2734.89612,S,15305.81301,E,1,04,2.6,61.1,M,39.2,M,,*74
+$GPGLL,2734.89612,S,15305.81301,E,222556.000,A,A*4F
+$GPGSA,A,3,16,25,23,13,,,,,,,,,6.1,2.6,5.6*31
+$GPGST,222556.000,12.4,15.8,24.1,4.1,14.5,22.0,39.9*69
+$GPGSV,3,1,11,16,48,115,33,25,39,268,38,23,58,174,41,20,71,336,38*7D
+$GPGSV,3,2,11,19,02,028,,04,06,242,23,13,31,223,38,27,19,284,32*75
+$GPGSV,3,3,11,11,06,338,,01,,,20,03,14,055,28*78
+$GPRMC,222556.000,A,2734.89612,S,15305.81301,E,0.1,21.8,030308,11.2,W,A*01
+$GPVTG,21.8,T,33.0,M,0.1,N,0.2,K,A*2B
+$GPGGA,222557.000,2734.89635,S,15305.81337,E,1,05,2.1,61.0,M,39.2,M,,*72
+$GPGLL,2734.89635,S,15305.81337,E,222557.000,A,A*4E
+$GPGSA,A,3,16,25,23,13,27,,,,,,,,4.7,2.1,4.2*32
+$GPGST,222557.000,10.3,13.0,15.0,5.2,11.9,13.7,32.7*6B
+$GPGSV,3,1,10,16,48,115,33,25,39,268,38,23,58,174,41,20,71,336,36*72
+$GPGSV,3,2,10,19,02,028,,04,06,242,23,13,31,223,39,27,19,284,28*7E
+$GPGSV,3,3,10,11,06,338,,03,14,055,31*72
+$GPRMC,222557.000,A,2734.89635,S,15305.81337,E,1.2,96.1,030308,11.2,W,A*07
+$GPVTG,96.1,T,107.3,M,1.2,N,2.2,K,A*1B
+$GPGGA,222558.000,2734.89638,S,15305.81517,E,1,06,1.8,60.6,M,39.2,M,,*7A
+$GPGLL,2734.89638,S,15305.81517,E,222558.000,A,A*48
+$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.5,1.8,3.1*3A
+$GPGST,222558.000,18.6,12.9,7.5,72.4,7.5,11.4,21.9*57
+$GPGSV,3,1,10,16,48,115,39,25,39,268,38,23,58,174,37,20,71,336,26*78
+$GPGSV,3,2,10,19,02,028,,04,06,242,23,13,31,223,34,27,19,284,29*72
+$GPGSV,3,3,10,11,06,338,,03,14,055,30*73
+$GPRMC,222558.000,A,2734.89638,S,15305.81517,E,5.6,82.0,030308,11.2,W,A*05
+$GPVTG,82.0,T,93.2,M,5.6,N,10.3,K,A*10
+$GPGGA,222559.000,2734.89631,S,15305.81911,E,1,05,2.2,60.5,M,39.2,M,,*71
+$GPGLL,2734.89631,S,15305.81911,E,222559.000,A,A*4A
+$GPGSA,A,3,16,25,23,20,27,,,,,,,,3.6,2.2,2.9*3A
+$GPGST,222559.000,17.0,15.1,33.1,15.1,15.5,29.4,59.0*59
+$GPGSV,3,1,10,16,48,115,34,25,39,268,35,23,58,174,30,20,71,336,29*70
+$GPGSV,3,2,10,19,02,028,,04,06,242,23,13,31,223,35,27,19,284,28*72
+$GPGSV,3,3,10,11,06,338,,03,14,055,27*75
+$GPRMC,222559.000,A,2734.89631,S,15305.81911,E,12.5,87.6,030308,11.2,W,A*31
+$GPVTG,87.6,T,98.8,M,12.5,N,23.2,K,A*26
+$GPGGA,222600.000,2734.89436,S,15305.82359,E,1,06,1.8,61.2,M,39.2,M,,*72
+$GPGLL,2734.89436,S,15305.82359,E,222600.000,A,A*45
+$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.5,1.8,3.1*3A
+$GPGST,222600.000,14.4,14.9,6.9,79.1,6.7,13.4,28.4*57
+$GPGSV,3,1,10,16,48,115,37,25,39,268,36,23,58,174,29,20,71,336,33*73
+$GPGSV,3,2,10,19,02,028,,04,06,242,23,13,31,223,39,27,19,284,28*7E
+$GPGSV,3,3,10,11,06,338,,03,14,055,28*7A
+$GPRMC,222600.000,A,2734.89436,S,15305.82359,E,15.9,62.5,030308,11.2,W,A*3D
+$GPVTG,62.5,T,73.7,M,15.9,N,29.5,K,A*22
+$GPGGA,222601.000,2734.89190,S,15305.82850,E,1,06,1.8,60.5,M,39.2,M,,*7E
+$GPGLL,2734.89190,S,15305.82850,E,222601.000,A,A*4F
+$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.6,1.8,3.1*39
+$GPGST,222601.000,11.5,13.4,6.1,78.5,6.0,12.0,24.9*56
+$GPGSV,3,1,10,16,48,115,40,25,39,268,27,23,58,174,35,20,71,336,28*74
+$GPGSV,3,2,10,19,02,028,,04,06,242,,13,31,223,39,27,19,284,27*70
+$GPGSV,3,3,10,11,06,338,,03,14,055,23*71
+$GPRMC,222601.000,A,2734.89190,S,15305.82850,E,18.0,58.9,030308,11.2,W,A*36
+$GPVTG,58.9,T,70.1,M,18.0,N,33.4,K,A*2C
+$GPGGA,222602.000,2734.88904,S,15305.83361,E,1,05,1.6,60.0,M,39.2,M,,*79
+$GPGLL,2734.88904,S,15305.83361,E,222602.000,A,A*40
+$GPGSA,A,3,16,23,20,13,03,,,,,,,,2.5,1.6,1.9*3F
+$GPGST,222602.000,11.3,17.1,6.5,54.9,10.2,13.2,18.6*62
+$GPGSV,3,1,10,16,48,115,27,25,39,268,29,23,58,174,33,20,71,336,33*77
+$GPGSV,3,2,10,19,02,028,,04,06,242,,13,31,223,35,27,19,284,32*78
+$GPGSV,3,3,10,11,06,338,,03,14,055,24*76
+$GPRMC,222602.000,A,2734.88904,S,15305.83361,E,19.8,55.1,030308,11.2,W,A*35
+$GPVTG,55.1,T,66.3,M,19.8,N,36.7,K,A*23
+$GPGGA,222603.000,2734.88556,S,15305.83944,E,1,04,3.8,58.8,M,39.2,M,,*70
+$GPGLL,2734.88556,S,15305.83944,E,222603.000,A,A*47
+$GPGSA,A,3,25,23,20,27,,,,,,,,,6.5,3.8,5.2*3C
+$GPGST,222603.000,12.6,48.6,15.6,66.9,41.3,21.9,62.5*59
+$GPGSV,3,1,10,16,48,115,23,25,39,268,29,23,58,174,31,20,71,337,37*74
+$GPGSV,3,2,10,19,02,028,,04,06,242,,13,31,223,34,27,19,284,26*7C
+$GPGSV,3,3,10,11,06,338,,03,14,055,28*7A
+$GPRMC,222603.000,A,2734.88556,S,15305.83944,E,22.7,54.4,030308,11.2,W,A*31
+$GPVTG,54.4,T,65.6,M,22.7,N,42.1,K,A*23
+$GPGGA,222604.000,2734.88238,S,15305.84546,E,1,04,4.4,57.8,M,39.2,M,,*75
+$GPGLL,2734.88238,S,15305.84546,E,222604.000,A,A*46
+$GPGSA,A,3,25,20,13,27,,,,,,,,,7.2,4.4,5.7*37
+$GPGST,222604.000,10.4,46.8,10.9,81.3,42.4,11.8,57.5*57
+$GPGSV,3,1,10,16,48,115,27,25,39,268,32,23,58,174,32,20,71,337,37*79
+$GPGSV,3,2,10,19,02,028,,04,06,242,,13,31,223,34,27,19,284,34*7F
+$GPGSV,3,3,10,11,06,338,,03,14,055,29*7B
+$GPRMC,222604.000,A,2734.88238,S,15305.84546,E,23.3,54.5,030308,11.2,W,A*34
+$GPVTG,54.5,T,65.7,M,23.3,N,43.2,K,A*24
+$GPGGA,222605.000,2734.87917,S,15305.85182,E,1,04,4.4,56.6,M,39.2,M,,*7F
+$GPGLL,2734.87917,S,15305.85182,E,222605.000,A,A*43
+$GPGSA,A,3,25,20,13,27,,,,,,,,,7.2,4.4,5.7*37
+$GPGST,222605.000,14.3,40.3,10.1,81.5,36.5,10.7,49.8*58
+$GPGSV,3,1,10,16,48,115,24,25,39,268,32,23,58,174,33,20,71,337,37*7B
+$GPGSV,3,2,10,19,02,028,,04,06,242,20,13,31,223,35,27,19,284,32*7A
+$GPGSV,3,3,10,11,06,338,,03,14,055,26*74
+$GPRMC,222605.000,A,2734.87917,S,15305.85182,E,24.5,55.0,030308,11.2,W,A*34
+$GPVTG,55.0,T,66.2,M,24.5,N,45.3,K,A*20
+$GPGGA,222606.000,2734.87588,S,15305.85846,E,1,05,3.6,55.8,M,39.2,M,,*7E
+$GPGLL,2734.87588,S,15305.85846,E,222606.000,A,A*4B
+$GPGSA,A,3,25,23,20,13,27,,,,,,,,6.3,3.6,5.2*36
+$GPGST,222606.000,11.7,30.4,8.7,77.7,27.2,9.8,40.6*59
+$GPGSV,3,1,10,16,48,115,24,25,39,268,31,23,58,174,32,20,71,337,34*7A
+$GPGSV,3,2,10,19,02,029,,04,06,242,20,13,31,223,35,27,19,284,34*7D
+$GPGSV,3,3,10,11,06,338,,03,14,055,24*76
+$GPRMC,222606.000,A,2734.87588,S,15305.85846,E,25.3,55.9,030308,11.2,W,A*32
+$GPVTG,55.9,T,67.1,M,25.3,N,46.9,K,A*25
+$GPGGA,222607.000,2734.87218,S,15305.86543,E,1,06,1.8,55.5,M,39.2,M,,*78
+$GPGLL,2734.87218,S,15305.86543,E,222607.000,A,A*4F
+$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.6,1.8,3.1*39
+$GPGST,222607.000,11.2,13.8,8.5,86.1,7.8,12.6,27.3*52
+$GPGSV,3,1,10,16,48,115,29,25,39,268,26,23,58,174,34,20,71,337,32*71
+$GPGSV,3,2,10,19,02,029,,04,06,242,27,13,31,223,36,27,19,284,30*7D
+$GPGSV,3,3,10,11,06,338,,03,14,055,24*76
+$GPRMC,222607.000,A,2734.87218,S,15305.86543,E,26.0,57.6,030308,11.2,W,A*3B
+$GPVTG,57.6,T,68.8,M,26.0,N,48.1,K,A*28
+$GPGGA,222608.000,2734.86867,S,15305.87251,E,1,06,1.8,55.1,M,39.2,M,,*75
+$GPGLL,2734.86867,S,15305.87251,E,222608.000,A,A*46
+$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.6,1.8,3.1*39
+$GPGST,222608.000,15.1,15.8,7.1,68.8,8.0,13.6,36.7*5C
+$GPGSV,3,1,10,16,48,115,39,25,39,268,28,23,58,174,35,20,71,337,30*7D
+$GPGSV,3,2,10,19,02,029,,04,06,242,27,13,31,223,40,27,19,284,28*75
+$GPGSV,3,3,10,11,06,338,,03,14,055,28*7A
+$GPRMC,222608.000,A,2734.86867,S,15305.87251,E,25.9,60.7,030308,11.2,W,A*3D
+$GPVTG,60.7,T,71.9,M,25.9,N,47.9,K,A*29
+$GPGGA,222609.000,2734.86555,S,15305.87973,E,1,06,1.8,54.7,M,39.2,M,,*74
+$GPGLL,2734.86555,S,15305.87973,E,222609.000,A,A*40
+$GPGSA,A,3,16,25,23,13,27,03,,,,,,,3.6,1.8,3.1*39
+$GPGST,222609.000,10.9,10.9,5.1,85.4,4.7,10.0,22.0*55
+$GPGSV,3,1,10,16,48,116,34,25,39,268,39,23,58,174,29,20,71,337,33*7D
+$GPGSV,3,2,10,19,02,029,,04,06,242,24,13,31,223,42,27,19,284,23*7F
+$GPGSV,3,3,10,11,06,338,,03,14,055,26*74
+$GPRMC,222609.000,A,2734.86555,S,15305.87973,E,25.7,64.3,030308,11.2,W,A*35
+$GPVTG,64.3,T,75.6,M,25.7,N,47.5,K,A*20
+$GPGGA,222610.000,2734.86253,S,15305.88695,E,1,05,1.9,54.1,M,39.2,M,,*71
+$GPGLL,2734.86253,S,15305.88695,E,222610.000,A,A*41
+$GPGSA,A,3,16,25,23,13,03,,,,,,,,3.7,1.9,3.1*3C
+$GPGST,222610.000,11.1,14.6,7.4,64.7,8.3,12.4,28.7*57
+$GPGSV,3,1,10,16,48,116,29,25,39,268,42,23,58,174,28,20,71,337,32*7D
+$GPGSV,3,2,10,19,02,029,,04,06,242,24,13,31,223,42,27,19,284,23*7F
+$GPGSV,3,3,10,11,06,338,,03,14,055,24*76
+$GPRMC,222610.000,A,2734.86253,S,15305.88695,E,25.3,65.0,030308,11.2,W,A*32
+$GPVTG,65.0,T,76.3,M,25.3,N,46.8,K,A*2C
+$GPGGA,222611.000,2734.85924,S,15305.89387,E,1,05,2.2,53.4,M,39.2,M,,*75
+$GPGLL,2734.85924,S,15305.89387,E,222611.000,A,A*4F
+$GPGSA,A,3,16,25,23,20,13,,,,,,,,5.3,2.2,4.8*39
+$GPGST,222611.000,17.7,8.4,21.7,17.4,9.4,19.0,57.8*57
+$GPGSV,3,1,10,16,48,116,39,25,39,268,32,23,58,174,35,20,71,337,26*72
+$GPGSV,3,2,10,19,02,029,,04,06,242,31,13,31,223,39,27,19,284,24*70
+$GPGSV,3,3,10,11,06,338,,03,14,055,26*74
+$GPRMC,222611.000,A,2734.85924,S,15305.89387,E,24.9,61.4,030308,11.2,W,A*37
+$GPVTG,61.4,T,72.6,M,24.9,N,46.1,K,A*2F
+$GPGGA,222612.000,2734.85516,S,15305.90007,E,1,07,1.2,53.3,M,39.2,M,,*7E
+$GPGLL,2734.85516,S,15305.90007,E,222612.000,A,A*42
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222612.000,15.5,16.3,8.2,77.8,8.0,14.7,27.8*50
+$GPGSV,3,1,10,16,48,116,29,25,39,268,29,23,58,174,30,20,71,337,34*7F
+$GPGSV,3,2,10,19,02,029,,04,06,242,27,13,31,223,35,27,19,284,28*77
+$GPGSV,3,3,10,11,06,338,,03,14,055,25*77
+$GPRMC,222612.000,A,2734.85516,S,15305.90007,E,24.5,53.1,030308,11.2,W,A*32
+$GPVTG,53.1,T,64.3,M,24.5,N,45.4,K,A*23
+$GPGGA,222613.000,2734.85043,S,15305.90565,E,1,05,1.9,53.2,M,39.2,M,,*73
+$GPGLL,2734.85043,S,15305.90565,E,222613.000,A,A*47
+$GPGSA,A,3,16,25,20,13,27,,,,,,,,3.7,1.9,3.2*3A
+$GPGST,222613.000,21.1,11.0,20.9,21.8,11.7,18.1,48.5*55
+$GPGSV,3,1,10,16,48,116,30,25,39,268,32,23,58,174,24,20,71,337,36*7A
+$GPGSV,3,2,10,19,02,029,,04,06,242,22,13,31,223,35,27,19,284,29*73
+$GPGSV,3,3,10,11,06,338,,03,14,055,29*7B
+$GPRMC,222613.000,A,2734.85043,S,15305.90565,E,24.9,45.4,030308,11.2,W,A*39
+$GPVTG,45.4,T,56.6,M,24.9,N,46.1,K,A*2F
+$GPGGA,222614.000,2734.84523,S,15305.91064,E,1,05,1.9,53.2,M,39.2,M,,*73
+$GPGLL,2734.84523,S,15305.91064,E,222614.000,A,A*47
+$GPGSA,A,3,16,25,20,13,27,,,,,,,,3.7,1.9,3.2*3A
+$GPGST,222614.000,18.8,16.8,28.3,28.1,18.2,24.0,43.4*54
+$GPGSV,3,1,10,16,48,116,27,25,39,268,30,23,58,174,32,20,71,337,35*7A
+$GPGSV,3,2,10,19,02,029,,04,06,242,28,13,31,223,26,27,19,284,32*71
+$GPGSV,3,3,10,11,06,338,,03,14,055,30*73
+$GPRMC,222614.000,A,2734.84523,S,15305.91064,E,24.7,40.2,030308,11.2,W,A*34
+$GPVTG,40.2,T,51.4,M,24.7,N,45.7,K,A*22
+$GPGGA,222615.000,2734.84002,S,15305.91547,E,1,07,1.2,53.0,M,39.2,M,,*7B
+$GPGLL,2734.84002,S,15305.91547,E,222615.000,A,A*44
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222615.000,19.7,18.9,7.9,71.0,8.8,16.5,18.9*52
+$GPGSV,3,1,10,16,48,116,25,25,39,268,26,23,58,174,35,20,71,337,34*79
+$GPGSV,3,2,10,19,02,029,,04,06,242,24,13,31,223,25,27,19,284,30*7C
+$GPGSV,3,3,10,11,06,338,,03,14,055,29*7B
+$GPRMC,222615.000,A,2734.84002,S,15305.91547,E,24.1,38.7,030308,11.2,W,A*3B
+$GPVTG,38.7,T,49.9,M,24.1,N,44.7,K,A*2B
+$GPGGA,222616.000,2734.83488,S,15305.92024,E,1,07,1.2,53.1,M,39.2,M,,*7B
+$GPGLL,2734.83488,S,15305.92024,E,222616.000,A,A*45
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222616.000,18.1,15.8,11.2,70.8,10.8,14.1,19.9*51
+$GPGSV,3,1,10,16,48,116,27,25,39,268,29,23,58,174,34,20,71,337,30*71
+$GPGSV,3,2,10,19,02,029,,04,06,242,27,13,31,223,24,27,19,284,28*77
+$GPGSV,3,3,10,11,06,338,,03,14,055,32*71
+$GPRMC,222616.000,A,2734.83488,S,15305.92024,E,24.0,39.3,030308,11.2,W,A*3E
+$GPVTG,39.3,T,50.5,M,24.0,N,44.5,K,A*29
+$GPGGA,222617.000,2734.82955,S,15305.92505,E,1,07,1.2,53.2,M,39.2,M,,*73
+$GPGLL,2734.82955,S,15305.92505,E,222617.000,A,A*4E
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222617.000,14.7,13.3,9.2,70.7,8.9,11.8,16.8*5B
+$GPGSV,3,1,10,16,48,116,23,25,39,268,30,23,58,174,35,20,71,337,33*7F
+$GPGSV,3,2,10,19,02,029,,04,06,242,25,13,31,223,25,27,19,284,26*7A
+$GPGSV,3,3,10,11,06,338,,03,14,055,32*71
+$GPRMC,222617.000,A,2734.82955,S,15305.92505,E,24.7,38.8,030308,11.2,W,A*38
+$GPVTG,38.8,T,50.0,M,24.7,N,45.7,K,A*22
+$GPGGA,222618.000,2734.82405,S,15305.92991,E,1,07,1.2,53.5,M,39.2,M,,*72
+$GPGLL,2734.82405,S,15305.92991,E,222618.000,A,A*48
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222618.000,13.7,14.7,7.8,77.2,7.6,13.2,24.3*54
+$GPGSV,3,1,10,16,48,116,27,25,39,268,30,23,58,174,36,20,71,337,32*79
+$GPGSV,3,2,10,19,02,029,,04,06,242,31,13,31,223,25,27,19,283,23*7D
+$GPGSV,3,3,10,11,06,338,,03,14,056,32*72
+$GPRMC,222618.000,A,2734.82405,S,15305.92991,E,25.3,38.3,030308,11.2,W,A*30
+$GPVTG,38.3,T,49.5,M,25.3,N,46.8,K,A*2D
+$GPGGA,222619.000,2734.81867,S,15305.93485,E,1,07,1.2,53.8,M,39.2,M,,*7C
+$GPGLL,2734.81867,S,15305.93485,E,222619.000,A,A*4B
+$GPGSA,A,3,16,25,23,20,13,27,03,,,,,,2.1,1.2,1.7*33
+$GPGST,222619.000,20.5,18.3,9.9,85.5,9.1,16.7,27.9*5A
+$GPGSV,3,1,10,16,48,116,27,25,39,268,30,23,58,174,35,20,71,337,33*7B
+$GPGSV,3,2,10,19,02,029,,04,06,242,29,13,31,223,23,27,19,283,23*72
+$GPGSV,3,3,10,11,06,338,,03,14,056,32*72
+$GPRMC,222619.000,A,2734.81867,S,15305.93485,E,25.3,39.2,030308,11.2,W,A*33
+$GPVTG,39.2,T,50.4,M,25.3,N,46.8,K,A*24
+$GPGGA,222620.000,2734.81344,S,15305.93979,E,1,05,1.6,53.8,M,39.2,M,,*74
+$GPGLL,2734.81344,S,15305.93979,E,222620.000,A,A*45
+$GPGSA,A,3,16,23,20,13,03,,,,,,,,2.5,1.6,1.9*3F
+$GPGST,222620.000,18.2,14.7,21.1,9.8,19.1,13.7,29.8*64
+$GPGSV,3,1,10,16,48,116,26,25,39,268,30,23,58,174,33,20,71,337,34*7B
+$GPGSV,3,2,10,19,02,029,,04,06,242,24,13,31,223,25,27,19,283,29*73
+$GPGSV,3,3,10,11,06,338,,03,14,056,33*73
+$GPRMC,222620.000,A,2734.81344,S,15305.93979,E,24.7,39.5,030308,11.2,W,A*3F
+$GPVTG,39.5,T,50.7,M,24.7,N,45.8,K,A*26
+$GPGGA,222621.000,2734.80838,S,15305.94469,E,1,06,1.3,53.5,M,39.2,M,,*74
+$GPGLL,2734.80838,S,15305.94469,E,222621.000,A,A*4E
+$GPGSA,A,3,16,25,23,20,13,03,,,,,,,2.3,1.3,1.9*3B
+$GPGST,222621.000,14.6,11.8,13.4,39.2,11.7,11.4,21.8*5D
+$GPGSV,3,1,10,16,48,116,25,25,39,268,31,23,58,174,33,20,71,337,37*7A
+$GPGSV,3,2,10,19,03,029,,04,06,242,24,13,31,223,24,27,19,283,36*7D
+$GPGSV,3,3,10,11,06,338,,03,14,056,32*72
+$GPRMC,222621.000,A,2734.80838,S,15305.94469,E,24.1,40.1,030308,11.2,W,A*38
+$GPVTG,40.1,T,51.3,M,24.1,N,44.7,K,A*21
+$GPGGA,222622.000,2734.80354,S,15305.94956,E,1,06,1.7,53.3,M,39.2,M,,*75
+$GPGLL,2734.80354,S,15305.94956,E,222622.000,A,A*4D
+$GPGSA,A,3,16,25,23,20,13,27,,,,,,,3.3,1.7,2.9*3B
+$GPGST,222622.000,13.2,10.2,17.1,41.6,12.5,13.2,30.8*59
+$GPGSV,3,1,10,16,48,116,26,25,39,268,31,23,58,174,26,20,71,337,39*73
+$GPGSV,3,2,10,19,03,029,,04,06,242,24,13,31,223,28,27,19,283,36*71
+$GPGSV,3,3,10,11,06,338,,03,14,056,35*75
+$GPRMC,222622.000,A,2734.80354,S,15305.94956,E,23.6,41.3,030308,11.2,W,A*38
+$GPVTG,41.3,T,52.5,M,23.6,N,43.7,K,A*20
+$GPGGA,222623.000,2734.79878,S,15305.95470,E,1,05,1.9,52.8,M,39.2,M,,*78
+$GPGLL,2734.79878,S,15305.95470,E,222623.000,A,A*47
+$GPGSA,A,3,16,25,20,13,27,,,,,,,,3.7,1.9,3.2*3A
+$GPGST,222623.000,14.7,24.8,16.6,50.3,19.9,18.6,39.3*5E
+$GPGSV,3,1,11,16,48,116,24,25,39,268,32,23,58,174,24,20,71,337,38*70
+$GPGSV,3,2,11,19,03,029,,04,06,242,24,13,31,223,32,27,19,283,34*79
+$GPGSV,3,3,11,11,06,338,,01,,,18,03,14,056,34*7D
+$GPRMC,222623.000,A,2734.79878,S,15305.95470,E,24.0,43.4,030308,11.2,W,A*36
+$GPVTG,43.4,T,54.6,M,24.0,N,44.4,K,A*25
+$GPGGA,222624.000,2734.79400,S,15305.96019,E,1,05,1.9,52.3,M,39.2,M,,*7F
+$GPGLL,2734.79400,S,15305.96019,E,222624.000,A,A*4B
+$GPGSA,A,3,16,25,20,27,03,,,,,,,,2.7,1.9,2.0*39
+$GPGST,222624.000,12.3,24.0,7.9,80.2,8.0,21.7,15.3*5C
+$GPGSV,3,1,11,16,48,116,23,25,39,268,32,23,58,174,26,20,71,337,37*7A
+$GPGSV,3,2,11,19,03,029,,04,06,242,24,13,31,223,35,27,19,283,25*7E
+$GPGSV,3,3,11,11,06,338,,01,,,18,03,14,056,31*78
+$GPRMC,222624.000,A,2734.79400,S,15305.96019,E,24.7,45.3,030308,11.2,W,A*3C
+$GPVTG,45.3,T,56.6,M,24.7,N,45.7,K,A*23
+$GPGGA,222625.000,2734.78953,S,15305.96595,E,1,05,1.9,51.8,M,39.2,M,,*7D
+$GPGLL,2734.78953,S,15305.96595,E,222625.000,A,A*41
+$GPGSA,A,3,16,25,20,13,27,,,,,,,,3.7,1.9,3.2*3A
+$GPGST,222625.000,24.0,12.2,19.9,37.5,14.2,16.0,36.1*57
+$GPGSV,3,1,11,16,48,116,30,25,39,268,32,23,58,174,23,20,71,337,37*7D
+$GPGSV,3,2,11,19,03,029,,04,06,242,25,13,31,223,36,27,19,283,25*7C
+$GPGSV,3,3,11,11,06,338,,01,,,18,03,14,056,24*7C
+$GPRMC,222625.000,A,2734.78953,S,15305.96595,E,24.8,47.9,030308,11.2,W,A*31
+$GPVTG,47.9,T,59.1,M,24.8,N,46.0,K,A*28
+$GPGGA,222626.000,2734.78516,S,15305.97172,E,1,05,2.5,51.1,M,39.2,M,,*79
+$GPGLL,2734.78516,S,15305.97172,E,222626.000,A,A*43
+$GPGSA,A,3,16,25,20,04,13,,,,,,,,4.2,2.5,3.3*37
+$GPGST,222626.000,20.2,12.6,23.1,19.8,13.0,20.2,38.4*5F
+$GPGSV,3,1,11,16,48,116,31,25,39,268,32,23,58,174,25,20,71,337,38*75
+$GPGSV,3,2,11,19,03,029,,04,06,242,25,13,31,223,36,27,19,283,23*7A
+$GPGSV,3,3,11,11,06,338,,01,,,18,03,14,056,24*7C
+$GPRMC,222626.000,A,2734.78516,S,15305.97172,E,24.7,48.3,030308,11.2,W,A*39
+$GPVTG,48.3,T,59.5,M,24.7,N,45.7,K,A*22
+$GPGGA,222627.000,2734.78079,S,15305.97737,E,1,04,2.5,50.5,M,39.2,M,,*77
+$GPGLL,2734.78079,S,15305.97737,E,222627.000,A,A*49
+$GPGSA,A,3,16,23,20,13,,,,,,,,,5.8,2.5,5.2*39
+$GPGST,222627.000,16.3,12.4,42.2,11.3,13.5,37.9,90.0*51
+$GPGSV,3,1,11,16,48,116,28,25,39,268,32,23,58,174,25,20,71,337,37*72
+$GPGSV,3,2,11,19,03,029,,04,06,242,29,13,31,223,37,27,19,283,30*75
+$GPGSV,3,3,11,11,06,338,,01,,,18,03,14,056,24*7C
+$GPRMC,222627.000,A,2734.78079,S,15305.97737,E,24.3,48.1,030308,11.2,W,A*35
+$GPVTG,48.1,T,59.3,M,24.3,N,45.1,K,A*24
+$GPGGA,222628.000,2734.77637,S,15305.98293,E,1,07,1.3,50.2,M,39.2,M,,*7E
+$GPGLL,2734.77637,S,15305.98293,E,222628.000,A,A*41
+$GPGSA,A,3,16,25,23,04,13,27,03,,,,,,2.2,1.3,1.8*38
+$GPGST,222628.000,13.2,14.5,8.8,76.9,8.4,13.0,22.0*5F
+$GPGSV,3,1,11,16,48,116,30,25,39,268,32,23,58,174,27,20,71,337,37*79
+$GPGSV,3,2,11,19,03,029,,04,06,242,32,13,31,223,37,27,19,283,28*76
+$GPGSV,3,3,11,11,06,338,,01,,,18,03,14,056,25*7D
+$GPRMC,222628.000,A,2734.77637,S,15305.98293,E,23.9,48.5,030308,11.2,W,A*34
+$GPVTG,48.5,T,59.7,M,23.9,N,44.3,K,A*2A
+$GPGGA,222629.000,2734.77226,S,15305.98850,E,1,08,1.1,49.5,M,39.2,M,,*7C
+$GPGLL,2734.77226,S,15305.98850,E,222629.000,A,A*41
+$GPGSA,A,3,16,25,23,20,04,13,27,03,,,,,1.7,1.1,1.3*35
+$GPGST,222629.000,11.0,9.5,7.3,89.6,6.7,8.6,14.3*5E
+$GPGSV,3,1,11,16,48,116,31,25,39,268,32,23,58,174,25,20,71,337,36*7B
+$GPGSV,3,2,11,19,03,029,,04,06,242,30,13,31,223,37,27,19,283,28*74
+$GPGSV,3,3,11,11,06,338,,01,,,18,03,14,056,27*7F
+$GPRMC,222629.000,A,2734.77226,S,15305.98850,E,23.5,49.4,030308,11.2,W,A*38
+$GPVTG,49.4,T,60.6,M,23.5,N,43.5,K,A*2C
+$GPGGA,222630.000,2734.76859,S,15305.99361,E,1,04,3.5,49.4,M,39.2,M,,*74
+$GPGLL,2734.76859,S,15305.99361,E,222630.000,A,A*42
+$GPGSA,A,3,16,25,20,27,,,,,,,,,4.9,3.5,3.4*39
+$GPGST,222630.000,13.4,7.9,50.0,19.9,17.0,43.1,69.5*66
+$GPGSV,3,1,11,16,48,116,31,25,39,268,30,23,58,174,22,20,71,337,36*7E
+$GPGSV,3,2,11,19,03,029,,04,06,242,32,13,31,223,35,27,19,283,24*78
+$GPGSV,3,3,11,11,06,338,18,01,,,18,03,14,056,29*78
+$GPRMC,222630.000,A,2734.76859,S,15305.99361,E,21.1,50.3,030308,11.2,W,A*32
+$GPVTG,50.3,T,61.5,M,21.1,N,39.1,K,A*2E
+$GPGGA,222631.000,2734.76498,S,15305.99809,E,1,08,1.1,48.2,M,39.2,M,,*7C
+$GPGLL,2734.76498,S,15305.99809,E,222631.000,A,A*47
+$GPGSA,A,3,16,25,23,20,04,13,27,03,,,,,1.7,1.1,1.3*35
+$GPGST,222631.000,18.4,10.8,5.8,77.6,5.6,9.7,13.2*63
+$GPGSV,3,1,11,16,48,116,32,25,39,268,31,23,58,174,22,20,71,337,35*7F
+$GPGSV,3,2,11,19,03,029,,04,06,242,30,13,31,223,36,27,19,283,25*78
+$GPGSV,3,3,11,11,06,338,18,01,,,18,03,14,056,33*73
+$GPRMC,222631.000,A,2734.76498,S,15305.99809,E,19.4,47.4,030308,11.2,W,A*38
+$GPVTG,47.4,T,58.6,M,19.4,N,35.9,K,A*2C
+$GPGGA,222632.000,2734.76359,S,15306.00162,E,1,08,1.1,49.6,M,39.2,M,,*77
+$GPGLL,2734.76359,S,15306.00162,E,222632.000,A,A*49
+$GPGSA,A,3,16,25,23,20,04,13,27,03,,,,,1.7,1.1,1.3*35
+$GPGST,222632.000,18.1,14.9,6.7,53.4,9.5,11.5,16.1*5A
+$GPGSV,3,1,11,16,48,116,30,25,39,268,31,23,58,174,31,20,71,337,31*7B
+$GPGSV,3,2,11,19,03,029,,04,06,242,22,13,31,223,37,27,19,283,29*76
+$GPGSV,3,3,11,11,06,338,24,01,,,18,03,14,056,25*7B
+$GPRMC,222632.000,A,2734.76359,S,15306.00162,E,12.4,65.5,030308,11.2,W,A*3C
+$GPVTG,65.5,T,76.7,M,12.4,N,22.9,K,A*2D
+$GPGGA,222633.000,2734.76254,S,15306.00553,E,1,08,1.1,49.0,M,39.2,M,,*7A
+$GPGLL,2734.76254,S,15306.00553,E,222633.000,A,A*42
+$GPGSA,A,3,16,25,23,20,04,13,27,03,,,,,1.7,1.1,1.3*35
+$GPGST,222633.000,13.9,12.3,5.8,55.3,7.8,9.7,13.7*62
+$GPGSV,3,1,10,16,48,116,35,25,39,268,35,23,58,174,30,20,71,337,35*7E
+$GPGSV,3,2,10,19,03,029,,04,06,242,26,13,31,223,39,27,19,283,26*72
+$GPGSV,3,3,10,11,06,338,24,03,14,056,30*76
+$GPRMC,222633.000,A,2734.76254,S,15306.00553,E,12.9,72.5,030308,11.2,W,A*3C
+$GPVTG,72.5,T,83.7,M,12.9,N,23.9,K,A*2D
+$GPGGA,222634.000,2734.76305,S,15306.00850,E,1,08,1.1,48.4,M,39.2,M,,*73
+$GPGLL,2734.76305,S,15306.00850,E,222634.000,A,A*4E
+$GPGSA,A,3,16,25,23,20,04,13,27,03,,,,,1.7,1.1,1.3*35
+$GPGST,222634.000,11.3,10.3,5.3,58.0,6.5,8.4,12.0*62
+$GPGSV,3,1,10,16,48,116,33,25,39,268,38,23,58,174,30,20,71,337,30*70
+$GPGSV,3,2,10,19,03,029,,04,06,242,29,13,31,223,34,27,19,283,30*77
+$GPGSV,3,3,10,11,06,338,23,03,14,056,25*75
+$GPRMC,222634.000,A,2734.76305,S,15306.00850,E,9.4,99.3,030308,11.2,W,A*04
+$GPVTG,99.3,T,110.5,M,9.4,N,17.3,K,A*2D
+$GPGGA,222635.000,2734.76418,S,15306.01089,E,1,08,1.1,47.9,M,39.2,M,,*76
+$GPGLL,2734.76418,S,15306.01089,E,222635.000,A,A*49
+$GPGSA,A,3,16,25,23,20,04,13,27,03,,,,,1.7,1.1,1.3*35
+$GPGST,222635.000,13.4,9.3,7.7,66.3,7.3,8.3,14.0*50
+$GPGSV,3,1,10,16,48,116,36,25,39,268,31,23,58,174,37,20,71,337,36*7D
+$GPGSV,3,2,10,19,03,029,,04,06,242,31,13,31,223,34,27,19,283,31*7F
+$GPGSV,3,3,10,11,06,338,23,03,14,056,23*73
+$GPRMC,222635.000,A,2734.76418,S,15306.01089,E,8.3,116.7,030308,11.2,W,A*37
+$GPVTG,116.7,T,127.9,M,8.3,N,15.4,K,A*14
+$GPGGA,222636.000,2734.76577,S,15306.01258,E,1,07,1.7,47.9,M,39.2,M,,*7A
+$GPGLL,2734.76577,S,15306.01258,E,222636.000,A,A*4C
+$GPGSA,A,3,16,25,23,20,04,13,27,,,,,,2.8,1.7,2.3*3F
+$GPGST,222636.000,10.6,11.9,8.1,45.4,9.3,9.3,18.8*65
+$GPGSV,3,1,10,16,48,116,41,25,39,268,35,23,58,174,40,20,71,337,33*7C
+$GPGSV,3,2,10,19,03,029,,04,06,242,32,13,31,223,28,27,19,283,34*74
+$GPGSV,3,3,10,11,06,338,25,03,14,056,23*75
+$GPRMC,222636.000,A,2734.76577,S,15306.01258,E,7.6,135.7,030308,11.2,W,A*39
+$GPVTG,135.7,T,146.9,M,7.6,N,14.1,K,A*1C
+$GPGGA,222637.000,2734.76759,S,15306.01422,E,1,07,1.7,47.8,M,39.2,M,,*7F
+$GPGLL,2734.76759,S,15306.01422,E,222637.000,A,A*48
+$GPGSA,A,3,16,25,23,20,04,13,27,,,,,,2.8,1.7,2.3*3F
+$GPGST,222637.000,8.9,7.2,10.9,44.4,8.4,8.5,17.1*59
+$GPGSV,3,1,10,16,48,116,44,25,39,268,36,23,58,174,33,20,71,337,33*7E
+$GPGSV,3,2,10,19,03,029,,04,06,242,24,13,31,223,29,27,19,283,36*70
+$GPGSV,3,3,10,11,06,338,25,03,14,056,23*75
+$GPRMC,222637.000,A,2734.76759,S,15306.01422,E,8.0,140.6,030308,11.2,W,A*37
+$GPVTG,140.6,T,151.8,M,8.0,N,14.8,K,A*18
+$GPGGA,222638.000,2734.76957,S,15306.01592,E,1,06,2.0,47.6,M,39.2,M,,*71
+$GPGLL,2734.76957,S,15306.01592,E,222638.000,A,A*4D
+$GPGSA,A,3,16,25,23,20,04,13,,,,,,,3.2,2.0,2.6*30
+$GPGST,222638.000,10.4,8.9,16.3,14.1,8.7,14.6,19.9*51
+$GPGSV,3,1,10,16,48,116,38,25,39,268,30,23,58,174,29,20,71,337,29*73
+$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,29*7B
+$GPGSV,3,3,10,11,06,338,21,03,14,056,23*71
+$GPRMC,222638.000,A,2734.76957,S,15306.01592,E,8.8,142.8,030308,11.2,W,A*36
+$GPVTG,142.8,T,154.0,M,8.8,N,16.2,K,A*19
+$GPGGA,222639.000,2734.77109,S,15306.01748,E,1,07,1.7,47.8,M,39.2,M,,*7C
+$GPGLL,2734.77109,S,15306.01748,E,222639.000,A,A*4B
+$GPGSA,A,3,16,25,23,20,04,13,27,,,,,,2.8,1.7,2.3*3F
+$GPGST,222639.000,9.5,9.6,14.7,43.8,11.3,11.5,19.8*51
+$GPGSV,3,1,10,16,48,116,37,25,39,268,32,23,58,174,37,20,71,337,29*71
+$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,27*75
+$GPGSV,3,3,10,11,06,338,21,03,14,056,23*71
+$GPRMC,222639.000,A,2734.77109,S,15306.01748,E,7.1,137.2,030308,11.2,W,A*3E
+$GPVTG,137.2,T,148.4,M,7.1,N,13.1,K,A*18
+$GPGGA,222640.000,2734.77216,S,15306.02018,E,1,04,2.6,47.8,M,39.2,M,,*7F
+$GPGLL,2734.77216,S,15306.02018,E,222640.000,A,A*49
+$GPGSA,A,3,16,25,23,13,,,,,,,,,6.2,2.6,5.6*32
+$GPGST,222640.000,20.0,11.7,22.3,7.0,10.9,20.3,46.8*65
+$GPGSV,3,1,10,16,48,116,32,25,39,268,29,23,58,174,24,20,71,337,25*70
+$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,25*77
+$GPGSV,3,3,10,11,06,338,21,03,14,056,23*71
+$GPRMC,222640.000,A,2734.77216,S,15306.02018,E,9.4,114.2,030308,11.2,W,A*36
+$GPVTG,114.2,T,125.4,M,9.4,N,17.4,K,A*18
+$GPGGA,222641.000,2734.77543,S,15306.02149,E,1,04,2.6,47.7,M,39.2,M,,*73
+$GPGLL,2734.77543,S,15306.02149,E,222641.000,A,A*4A
+$GPGSA,A,3,16,25,23,13,,,,,,,,,6.2,2.6,5.6*32
+$GPGST,222641.000,18.3,40.3,13.2,79.5,13.7,36.3,59.1*5E
+$GPGSV,3,1,10,16,48,116,34,25,39,268,23,23,58,174,26,20,71,337,27*7C
+$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*71
+$GPGSV,3,3,10,11,06,338,21,03,14,056,23*71
+$GPRMC,222641.000,A,2734.77543,S,15306.02149,E,12.5,160.9,030308,11.2,W,A*06
+$GPVTG,160.9,T,172.1,M,12.5,N,23.1,K,A*2E
+$GPGGA,222642.000,2734.77709,S,15306.02300,E,1,04,2.6,47.7,M,39.2,M,,*73
+$GPGLL,2734.77709,S,15306.02300,E,222642.000,A,A*4A
+$GPGSA,A,3,16,20,04,13,,,,,,,,,4.3,2.6,3.4*35
+$GPGST,222642.000,15.8,14.5,71.8,20.7,26.3,61.6,97.2*58
+$GPGSV,3,1,10,16,48,116,41,25,40,268,23,23,58,174,27,20,71,337,34*73
+$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*71
+$GPGSV,3,3,10,11,06,338,21,03,14,056,23*71
+$GPRMC,222642.000,A,2734.77709,S,15306.02300,E,7.5,140.7,030308,11.2,W,A*3E
+$GPVTG,140.7,T,151.9,M,7.5,N,13.9,K,A*14
+$GPGGA,222643.000,2734.77831,S,15306.02427,E,1,04,2.6,47.5,M,39.2,M,,*76
+$GPGLL,2734.77831,S,15306.02427,E,222643.000,A,A*4D
+$GPGSA,A,3,16,20,04,13,,,,,,,,,4.3,2.6,3.4*35
+$GPGST,222643.000,12.9,15.5,112.8,21.4,39.9,96.1,154.3*5C
+$GPGSV,3,1,10,16,48,116,41,25,40,268,23,23,58,174,26,20,71,337,35*73
+$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*71
+$GPGSV,3,3,10,11,06,338,21,03,14,056,23*71
+$GPRMC,222643.000,A,2734.77831,S,15306.02427,E,5.6,136.2,030308,11.2,W,A*3C
+$GPVTG,136.2,T,147.4,M,5.6,N,10.4,K,A*15
+$GPGGA,222644.000,2734.77900,S,15306.02522,E,1,04,2.5,47.4,M,39.2,M,,*74
+$GPGLL,2734.77900,S,15306.02522,E,222644.000,A,A*4D
+$GPGSA,A,3,16,23,20,13,,,,,,,,,5.8,2.5,5.2*39
+$GPGST,222644.000,11.9,32.3,39.9,23.1,35.5,30.7,165.7*69
+$GPGSV,3,1,10,16,48,116,38,25,40,268,23,23,58,174,25,20,71,337,37*7C
+$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*71
+$GPGSV,3,3,10,11,06,338,21,03,14,056,26*74
+$GPRMC,222644.000,A,2734.77900,S,15306.02522,E,3.7,127.8,030308,11.2,W,A*31
+$GPVTG,127.8,T,139.0,M,3.7,N,6.9,K,A*2F
+$GPGGA,222645.000,2734.77991,S,15306.02594,E,1,04,3.4,47.4,M,39.2,M,,*70
+$GPGLL,2734.77991,S,15306.02594,E,222645.000,A,A*49
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.4,5.0*30
+$GPGST,222645.000,15.3,40.1,15.0,66.6,34.1,19.2,69.1*50
+$GPGSV,3,1,10,16,48,116,33,25,40,268,23,23,58,174,23,20,71,337,35*73
+$GPGSV,3,2,10,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*71
+$GPGSV,3,3,10,11,06,338,21,03,14,056,30*73
+$GPRMC,222645.000,A,2734.77991,S,15306.02594,E,3.9,145.4,030308,11.2,W,A*33
+$GPVTG,145.4,T,156.6,M,3.9,N,7.2,K,A*2C
+$GPGGA,222646.000,2734.78074,S,15306.02652,E,1,04,3.4,47.4,M,39.2,M,,*77
+$GPGLL,2734.78074,S,15306.02652,E,222646.000,A,A*4E
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.4,5.0*30
+$GPGST,222646.000,14.8,53.5,15.6,78.9,48.1,16.9,76.9*50
+$GPGSV,3,1,11,16,48,116,32,25,40,268,23,23,58,174,26,20,71,337,32*71
+$GPGSV,3,2,11,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*70
+$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,34*4D
+$GPRMC,222646.000,A,2734.78074,S,15306.02652,E,3.5,149.5,030308,11.2,W,A*35
+$GPVTG,149.5,T,160.7,M,3.5,N,6.6,K,A*2C
+$GPGGA,222647.000,2734.78140,S,15306.02704,E,1,04,3.4,47.3,M,39.2,M,,*75
+$GPGLL,2734.78140,S,15306.02704,E,222647.000,A,A*4B
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.4,5.0*30
+$GPGST,222647.000,11.7,42.4,13.1,77.7,38.0,14.3,60.9*53
+$GPGSV,3,1,11,16,48,116,37,25,40,268,23,23,58,174,31,20,71,337,36*76
+$GPGSV,3,2,11,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*70
+$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,34*4D
+$GPRMC,222647.000,A,2734.78140,S,15306.02704,E,2.8,145.4,030308,11.2,W,A*31
+$GPVTG,145.4,T,156.6,M,2.8,N,5.1,K,A*2D
+$GPGGA,222648.000,2734.78183,S,15306.02753,E,1,04,3.5,47.2,M,39.2,M,,*77
+$GPGLL,2734.78183,S,15306.02753,E,222648.000,A,A*49
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31
+$GPGST,222648.000,11.3,35.2,16.9,76.3,31.5,16.9,53.8*53
+$GPGSV,3,1,11,16,48,116,35,25,40,267,23,23,58,174,37,20,71,337,35*7E
+$GPGSV,3,2,11,19,03,029,,04,06,242,28,13,31,223,31,27,19,283,23*70
+$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,35*4C
+$GPRMC,222648.000,A,2734.78183,S,15306.02753,E,2.1,135.8,030308,11.2,W,A*31
+$GPVTG,135.8,T,147.1,M,2.1,N,3.9,K,A*26
+$GPGGA,222649.000,2734.78197,S,15306.02773,E,1,04,3.5,46.8,M,39.2,M,,*7A
+$GPGLL,2734.78197,S,15306.02773,E,222649.000,A,A*4F
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31
+$GPGST,222649.000,13.9,60.8,14.8,84.0,55.3,14.7,79.7*52
+$GPGSV,3,1,11,16,48,116,31,25,40,267,23,23,58,174,36,20,71,337,31*7F
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,19,283,23*78
+$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,29*41
+$GPRMC,222649.000,A,2734.78197,S,15306.02773,E,0.6,148.6,030308,11.2,W,A*36
+$GPVTG,148.6,T,159.8,M,0.6,N,1.2,K,A*28
+$GPGGA,222650.000,2734.78195,S,15306.02785,E,1,04,3.5,46.4,M,39.2,M,,*75
+$GPGLL,2734.78195,S,15306.02785,E,222650.000,A,A*4C
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31
+$GPGST,222650.000,11.4,48.0,12.9,83.3,43.6,12.8,63.8*5B
+$GPGSV,3,1,11,16,48,116,30,25,40,267,23,23,58,174,33,20,71,337,30*7A
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,19,283,23*78
+$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,26*4E
+$GPRMC,222650.000,A,2734.78195,S,15306.02785,E,0.2,6.4,030308,11.2,W,A*38
+$GPVTG,6.4,T,17.6,M,0.2,N,0.3,K,A*10
+$GPGGA,222651.000,2734.78191,S,15306.02798,E,1,04,3.5,45.9,M,39.2,M,,*72
+$GPGLL,2734.78191,S,15306.02798,E,222651.000,A,A*45
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31
+$GPGST,222651.000,9.8,40.0,12.0,82.4,36.3,11.9,53.8*6E
+$GPGSV,3,1,11,16,48,116,28,25,40,267,,23,58,174,35,20,71,337,26*73
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,19,283,*79
+$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,28*40
+$GPRMC,222651.000,A,2734.78191,S,15306.02798,E,0.1,352.6,030308,11.2,W,A*32
+$GPVTG,352.6,T,3.8,M,0.1,N,0.3,K,A*28
+$GPGGA,222652.000,2734.78198,S,15306.02797,E,1,04,3.5,45.9,M,39.2,M,,*77
+$GPGLL,2734.78198,S,15306.02797,E,222652.000,A,A*40
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31
+$GPGST,222652.000,21.7,41.2,15.0,83.8,37.5,14.2,91.6*58
+$GPGSV,3,1,11,16,48,116,24,25,40,267,,23,58,174,23,20,71,337,26*78
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,19,283,*79
+$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,24*4C
+$GPRMC,222652.000,A,2734.78198,S,15306.02797,E,0.2,263.5,030308,11.2,W,A*34
+$GPVTG,263.5,T,274.7,M,0.2,N,0.3,K,A*26
+$GPGGA,222653.000,2734.78226,S,15306.02793,E,1,04,3.5,45.9,M,39.2,M,,*74
+$GPGLL,2734.78226,S,15306.02793,E,222653.000,A,A*43
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31
+$GPGST,222653.000,18.8,36.4,20.7,81.4,33.0,19.3,78.6*5F
+$GPGSV,3,1,11,16,48,116,24,25,40,267,,23,58,174,25,20,71,337,25*7D
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73
+$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,24*4C
+$GPRMC,222653.000,A,2734.78226,S,15306.02793,E,0.8,188.1,030308,11.2,W,A*3F
+$GPVTG,188.1,T,199.3,M,0.8,N,1.5,K,A*2D
+$GPGGA,222654.000,2734.78231,S,15306.02789,E,1,04,3.5,45.9,M,39.2,M,,*7E
+$GPGLL,2734.78231,S,15306.02789,E,222654.000,A,A*49
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31
+$GPGST,222654.000,14.4,23.3,16.5,69.8,20.7,16.0,57.9*5D
+$GPGSV,3,1,11,16,48,116,34,25,40,267,,23,58,174,34,20,71,337,31*79
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73
+$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,31*48
+$GPRMC,222654.000,A,2734.78231,S,15306.02789,E,0.1,145.6,030308,11.2,W,A*3A
+$GPVTG,145.6,T,156.8,M,0.1,N,0.2,K,A*2C
+$GPGGA,222655.000,2734.78251,S,15306.02806,E,1,04,3.5,45.8,M,39.2,M,,*70
+$GPGLL,2734.78251,S,15306.02806,E,222655.000,A,A*46
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31
+$GPGST,222655.000,12.0,28.1,14.0,78.7,25.3,13.6,52.5*54
+$GPGSV,3,1,11,16,48,116,40,25,40,267,,23,58,174,38,20,71,337,35*72
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73
+$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,36*4F
+$GPRMC,222655.000,A,2734.78251,S,15306.02806,E,0.7,135.5,030308,11.2,W,A*37
+$GPVTG,135.5,T,146.8,M,0.7,N,1.2,K,A*2E
+$GPGGA,222656.000,2734.78273,S,15306.02823,E,1,04,3.5,45.7,M,39.2,M,,*7B
+$GPGLL,2734.78273,S,15306.02823,E,222656.000,A,A*42
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31
+$GPGST,222656.000,9.9,24.8,12.2,76.6,22.2,12.0,44.0*69
+$GPGSV,3,1,11,16,48,116,38,25,40,267,,23,58,174,36,20,71,337,30*76
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73
+$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,35*4C
+$GPRMC,222656.000,A,2734.78273,S,15306.02823,E,0.5,135.5,030308,11.2,W,A*31
+$GPVTG,135.5,T,146.7,M,0.5,N,1.0,K,A*21
+$GPGGA,222657.000,2734.78312,S,15306.02858,E,1,04,3.5,45.5,M,39.2,M,,*72
+$GPGLL,2734.78312,S,15306.02858,E,222657.000,A,A*49
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31
+$GPGST,222657.000,8.4,22.4,10.9,74.9,19.9,11.0,38.1*60
+$GPGSV,3,1,11,16,48,116,37,25,40,267,,23,58,174,36,20,71,337,30*79
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73
+$GPGSV,3,3,11,11,06,338,21,08,00,298,,03,14,056,34*4D
+$GPRMC,222657.000,A,2734.78312,S,15306.02858,E,1.3,137.6,030308,11.2,W,A*3C
+$GPVTG,137.6,T,148.8,M,1.3,N,2.4,K,A*21
+$GPGGA,222658.000,2734.78370,S,15306.02910,E,1,04,3.5,45.4,M,39.2,M,,*75
+$GPGLL,2734.78370,S,15306.02910,E,222658.000,A,A*4F
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31
+$GPGST,222658.000,11.5,25.4,19.7,45.8,20.9,20.7,46.1*53
+$GPGSV,3,1,11,16,48,116,34,25,40,267,18,23,58,174,36,20,71,337,32*71
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,32*48
+$GPRMC,222658.000,A,2734.78370,S,15306.02910,E,2.7,141.8,030308,11.2,W,A*32
+$GPVTG,141.8,T,153.0,M,2.7,N,5.0,K,A*28
+$GPGGA,222659.000,2734.78463,S,15306.02956,E,1,04,3.5,45.4,M,39.2,M,,*73
+$GPGLL,2734.78463,S,15306.02956,E,222659.000,A,A*49
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31
+$GPGST,222659.000,10.9,34.8,17.8,79.2,31.4,17.1,52.2*5E
+$GPGSV,3,1,11,16,48,116,32,25,40,267,18,23,58,174,37,20,71,337,32*76
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,26*4D
+$GPRMC,222659.000,A,2734.78463,S,15306.02956,E,3.6,157.2,030308,11.2,W,A*39
+$GPVTG,157.2,T,168.4,M,3.6,N,6.7,K,A*2D
+$GPGGA,222700.000,2734.78553,S,15306.02974,E,1,04,3.5,45.3,M,39.2,M,,*7B
+$GPGLL,2734.78553,S,15306.02974,E,222700.000,A,A*46
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31
+$GPGST,222700.000,13.4,30.5,15.4,80.9,27.6,14.6,58.2*5C
+$GPGSV,3,1,11,16,48,116,38,25,40,267,18,23,58,174,42,20,71,337,34*78
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,,27,20,283,*73
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,30*4A
+$GPRMC,222700.000,A,2734.78553,S,15306.02974,E,3.1,171.1,030308,11.2,W,A*36
+$GPVTG,171.1,T,182.3,M,3.1,N,5.7,K,A*2D
+$GPGGA,222701.000,2734.78678,S,15306.02887,E,1,05,1.6,45.4,M,39.2,M,,*7A
+$GPGLL,2734.78678,S,15306.02887,E,222701.000,A,A*40
+$GPGSA,A,3,16,23,20,13,03,,,,,,,,2.5,1.6,1.9*3F
+$GPGST,222701.000,18.6,22.3,33.4,25.2,29.0,22.6,46.2*53
+$GPGSV,3,1,11,16,48,116,30,25,40,267,18,23,58,174,33,20,71,337,27*74
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,20,27,20,283,*71
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,27*4C
+$GPRMC,222701.000,A,2734.78678,S,15306.02887,E,5.1,212.6,030308,11.2,W,A*37
+$GPVTG,212.6,T,223.8,M,5.1,N,9.5,K,A*27
+$GPGGA,222702.000,2734.78726,S,15306.02769,E,1,04,3.5,45.3,M,39.2,M,,*7B
+$GPGLL,2734.78726,S,15306.02769,E,222702.000,A,A*46
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.0*31
+$GPGST,222702.000,14.7,49.5,20.8,84.3,45.1,19.5,72.8*5F
+$GPGSV,3,1,11,16,48,116,36,25,40,267,18,23,58,174,40,20,71,337,31*71
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,20,27,20,283,*71
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,28*43
+$GPRMC,222702.000,A,2734.78726,S,15306.02769,E,4.2,246.4,030308,11.2,W,A*30
+$GPVTG,246.4,T,257.6,M,4.2,N,7.7,K,A*27
+$GPGGA,222703.000,2734.78745,S,15306.02617,E,1,05,1.6,45.3,M,39.2,M,,*77
+$GPGLL,2734.78745,S,15306.02617,E,222703.000,A,A*4A
+$GPGSA,A,3,16,23,20,13,03,,,,,,,,2.5,1.6,1.9*3F
+$GPGST,222703.000,12.3,16.0,23.0,21.5,20.3,15.6,33.1*53
+$GPGSV,3,1,11,16,48,116,31,25,40,267,18,23,58,174,29,20,70,337,23*7B
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,22,27,20,283,*73
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,27*4C
+$GPRMC,222703.000,A,2734.78745,S,15306.02617,E,4.9,265.5,030308,11.2,W,A*37
+$GPVTG,265.5,T,276.7,M,4.9,N,9.1,K,A*26
+$GPGGA,222704.000,2734.78730,S,15306.02555,E,1,04,3.5,45.3,M,39.2,M,,*77
+$GPGLL,2734.78730,S,15306.02555,E,222704.000,A,A*4A
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.1*30
+$GPGST,222704.000,9.5,34.0,22.1,80.5,30.8,20.6,55.7*69
+$GPGSV,3,1,11,16,48,116,31,25,40,267,18,23,58,174,29,20,70,337,23*7B
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,22,27,20,283,*73
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,31*4B
+$GPRMC,222704.000,A,2734.78730,S,15306.02555,E,2.1,286.5,030308,11.2,W,A*34
+$GPVTG,286.5,T,297.7,M,2.1,N,3.9,K,A*28
+$GPGGA,222705.000,2734.78698,S,15306.02452,E,1,04,3.5,45.3,M,39.2,M,,*73
+$GPGLL,2734.78698,S,15306.02452,E,222705.000,A,A*4E
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.1*30
+$GPGST,222705.000,93.8,65.1,31.9,84.0,59.3,29.7,94.1*5F
+$GPGSV,3,1,11,16,48,116,29,25,40,267,18,23,58,174,29,20,70,337,23*72
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,22,27,20,283,*73
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,30*4A
+$GPRMC,222705.000,A,2734.78698,S,15306.02452,E,3.6,290.3,030308,11.2,W,A*37
+$GPVTG,290.3,T,301.5,M,3.6,N,6.8,K,A*27
+$GPGGA,222706.000,2734.78686,S,15306.02339,E,1,04,3.5,45.3,M,39.2,M,,*75
+$GPGLL,2734.78686,S,15306.02339,E,222706.000,A,A*48
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.1*30
+$GPGST,222706.000,114.3,62.0,48.3,70.3,55.4,45.7,116.3*5B
+$GPGSV,3,1,11,16,48,116,24,25,40,267,18,23,58,174,29,20,70,337,23*7F
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,22,27,20,283,*73
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,24*4F
+$GPRMC,222706.000,A,2734.78686,S,15306.02339,E,3.4,277.7,030308,11.2,W,A*3E
+$GPVTG,277.7,T,288.9,M,3.4,N,6.3,K,A*2F
+$GPGGA,222707.000,2734.78679,S,15306.02251,E,1,04,3.5,45.3,M,39.2,M,,*7B
+$GPGLL,2734.78679,S,15306.02251,E,222707.000,A,A*46
+$GPGSA,A,3,16,23,20,03,,,,,,,,,6.1,3.5,5.1*30
+$GPGST,222707.000,128.0,90.0,67.0,53.0,75.4,69.6,158.6*55
+$GPGSV,3,1,11,16,48,116,24,25,40,267,18,23,58,174,29,20,70,337,23*7F
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,223,22,27,20,283,*73
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,24*4F
+$GPRMC,222707.000,A,2734.78679,S,15306.02251,E,,,030308,,,A*79
+$GPVTG,,T,,M,,N,,K,N*2C
+$GPGGA,222708.000,2734.78673,S,15306.02181,E,1,05,1.6,45.3,M,39.2,M,,*70
+$GPGLL,2734.78673,S,15306.02181,E,222708.000,A,A*4D
+$GPGSA,A,3,16,23,20,13,03,,,,,,,,2.5,1.6,1.9*3F
+$GPGST,222708.000,66.8,93.0,70.5,62.6,69.3,81.1,141.7*6F
+$GPGSV,3,1,11,16,48,116,24,25,40,267,,23,58,174,29,20,70,337,23*76
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,222,22,27,20,283,*72
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,24*4F
+$GPRMC,222708.000,A,2734.78673,S,15306.02181,E,,,030308,,,A*72
+$GPVTG,,T,,M,,N,,K,N*2C
+$GPGGA,222709.000,2734.78668,S,15306.02124,E,1,05,1.6,45.3,M,39.2,M,,*74
+$GPGLL,2734.78668,S,15306.02124,E,222709.000,A,A*49
+$GPGSA,A,2,16,23,20,13,03,,,,,,,,1.8,1.6,0.9*31
+$GPGST,222709.000,89.5,61.2,117.7,37.9,91.7,79.5,4.3*54
+$GPGSV,3,1,11,16,48,116,24,25,40,267,,23,58,174,29,20,70,337,23*76
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,222,22,27,20,283,*72
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,24*4F
+$GPRMC,222709.000,A,2734.78668,S,15306.02124,E,,,030308,,,A*76
+$GPVTG,,T,,M,,N,,K,N*2C
+$GPGGA,222710.000,2734.78664,S,15306.02080,E,1,05,1.6,45.3,M,39.2,M,,*7F
+$GPGLL,2734.78664,S,15306.02080,E,222710.000,A,A*42
+$GPGSA,A,2,16,23,20,13,03,,,,,,,,1.8,1.6,0.9*31
+$GPGST,222710.000,117.0,82.3,157.6,39.0,121.7,107.9,3.9*62
+$GPGSV,3,1,11,16,48,116,24,25,40,267,,23,58,174,29,20,70,337,23*76
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,222,22,27,20,283,*72
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,24*4F
+$GPRMC,222710.000,A,2734.78664,S,15306.02080,E,,,030308,,,A*7D
+$GPVTG,,T,,M,,N,,K,N*2C
+$GPGGA,222711.000,2734.78660,S,15306.02044,E,1,05,1.6,45.3,M,39.2,M,,*72
+$GPGLL,2734.78660,S,15306.02044,E,222711.000,A,A*4F
+$GPGSA,A,2,16,23,20,13,03,,,,,,,,1.8,1.6,0.9*31
+$GPGST,222711.000,128.0,107.6,205.2,40.2,156.7,142.6,3.5*58
+$GPGSV,3,1,11,16,48,116,24,25,40,267,,23,58,174,29,20,70,337,23*76
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,222,22,27,20,283,*72
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,24*4F
+$GPRMC,222711.000,A,2734.78660,S,15306.02044,E,,,030308,,,A*70
+$GPVTG,,T,,M,,N,,K,N*2C
+$GPGGA,222712.000,2734.78658,S,15306.02015,E,1,05,1.6,45.3,M,39.2,M,,*7E
+$GPGLL,2734.78658,S,15306.02015,E,222712.000,A,A*43
+$GPGSA,A,2,16,23,20,13,03,,,,,,,,1.8,1.6,0.9*31
+$GPGST,222712.000,128.0,137.2,261.1,41.4,197.4,183.9,3.2*51
+$GPGSV,3,1,11,16,48,116,24,25,40,267,,23,58,173,29,20,70,337,23*71
+$GPGSV,3,2,11,19,03,029,,04,06,242,,13,31,222,22,27,20,283,*72
+$GPGSV,3,3,11,11,06,338,,08,00,298,,03,14,056,24*4F
+$GPRMC,222712.000,A,2734.78658,S,15306.02015,E,,,030308,,,A*7C \ No newline at end of file
diff --git a/examples/logfilepositionsource/clientapplication.cpp b/examples/logfilepositionsource/clientapplication.cpp
new file mode 100644
index 0000000000..5010af9afc
--- /dev/null
+++ b/examples/logfilepositionsource/clientapplication.cpp
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+
+#include "logfilepositionsource.h"
+#include "clientapplication.h"
+
+ClientApplication::ClientApplication(QObject *parent)
+ : QObject(parent)
+{
+ LogFilePositionSource *source = new LogFilePositionSource(this);
+ connect(source, SIGNAL(positionUpdated(QGeoPositionInfo)),
+ this, SLOT(positionUpdated(QGeoPositionInfo)));
+
+ source->startUpdates();
+}
+
+void ClientApplication::positionUpdated(const QGeoPositionInfo &info)
+{
+ qDebug() << "Position updated: Date/time =" << info.dateTime()
+ << "Coordinate =" << info.coordinate();
+}
diff --git a/examples/logfilepositionsource/clientapplication.h b/examples/logfilepositionsource/clientapplication.h
new file mode 100644
index 0000000000..2fb1cc24a3
--- /dev/null
+++ b/examples/logfilepositionsource/clientapplication.h
@@ -0,0 +1,51 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef CLIENTAPPLICATION_H
+#define CLIENTAPPLICATION_H
+
+#include <QObject>
+
+class QGeoPositionInfo;
+
+class ClientApplication : public QObject
+{
+ Q_OBJECT
+public:
+ ClientApplication(QObject *parent = 0);
+
+private slots:
+ void positionUpdated(const QGeoPositionInfo &info);
+};
+
+
+#endif
diff --git a/examples/logfilepositionsource/logfilepositionsource.cpp b/examples/logfilepositionsource/logfilepositionsource.cpp
new file mode 100644
index 0000000000..605827ee31
--- /dev/null
+++ b/examples/logfilepositionsource/logfilepositionsource.cpp
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QtCore>
+
+#include "logfilepositionsource.h"
+
+LogFilePositionSource::LogFilePositionSource(QObject *parent)
+ : QGeoPositionInfoSource(parent),
+ logFile(new QFile(this)),
+ timer(new QTimer(this))
+{
+ connect(timer, SIGNAL(timeout()), this, SLOT(readNextPosition()));
+
+ logFile->setFileName(QCoreApplication::applicationDirPath()
+ + QDir::separator() + "simplelog.txt");
+ if (!logFile->open(QIODevice::ReadOnly))
+ qWarning() << "Error: cannot open source file" << logFile->fileName();
+}
+
+QGeoPositionInfo LogFilePositionSource::lastKnownPosition(bool /*fromSatellitePositioningMethodsOnly*/) const
+{
+ return lastPosition;
+}
+
+LogFilePositionSource::PositioningMethods LogFilePositionSource::supportedPositioningMethods() const
+{
+ return AllPositioningMethods;
+}
+
+int LogFilePositionSource::minimumUpdateInterval() const
+{
+ return 500;
+}
+
+void LogFilePositionSource::startUpdates()
+{
+ int interval = updateInterval();
+ if (interval < minimumUpdateInterval())
+ interval = minimumUpdateInterval();
+
+ timer->start(interval);
+}
+
+void LogFilePositionSource::stopUpdates()
+{
+ timer->stop();
+}
+
+void LogFilePositionSource::requestUpdate(int /*timeout*/)
+{
+ // For simplicity, ignore timeout - assume that if data is not available
+ // now, no data will be added to the file later
+ if (logFile->canReadLine())
+ readNextPosition();
+ else
+ emit requestTimeout();
+}
+
+void LogFilePositionSource::readNextPosition()
+{
+ QByteArray line = logFile->readLine().trimmed();
+ if (!line.isEmpty()) {
+ QList<QByteArray> data = line.split(' ');
+ double latitude;
+ double longitude;
+ bool hasLatitude = false;
+ bool hasLongitude = false;
+ QDateTime dateTime = QDateTime::fromString(QString(data.value(0)), Qt::ISODate);
+ latitude = data.value(1).toDouble(&hasLatitude);
+ longitude = data.value(2).toDouble(&hasLongitude);
+
+ if (hasLatitude && hasLongitude && dateTime.isValid()) {
+ QGeoCoordinate coordinate(latitude, longitude);
+ QGeoPositionInfo info(coordinate, dateTime);
+ if (info.isValid()) {
+ lastPosition = info;
+ emit positionUpdated(info);
+ }
+ }
+ }
+}
diff --git a/examples/logfilepositionsource/logfilepositionsource.h b/examples/logfilepositionsource/logfilepositionsource.h
new file mode 100644
index 0000000000..d4bf872916
--- /dev/null
+++ b/examples/logfilepositionsource/logfilepositionsource.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef LOGFILEPOSITIONSOURCE_H
+#define LOGFILEPOSITIONSOURCE_H
+
+#include <qgeopositioninfosource.h>
+
+class QFile;
+class QTimer;
+
+class LogFilePositionSource : public QGeoPositionInfoSource
+{
+ Q_OBJECT
+public:
+ LogFilePositionSource(QObject *parent = 0);
+
+ QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const;
+
+ PositioningMethods supportedPositioningMethods() const;
+ int minimumUpdateInterval() const;
+
+public slots:
+ virtual void startUpdates();
+ virtual void stopUpdates();
+
+ virtual void requestUpdate(int timeout = 5000);
+
+private slots:
+ void readNextPosition();
+
+private:
+ QFile *logFile;
+ QTimer *timer;
+ QGeoPositionInfo lastPosition;
+};
+
+#endif
diff --git a/examples/logfilepositionsource/logfilepositionsource.pro b/examples/logfilepositionsource/logfilepositionsource.pro
new file mode 100644
index 0000000000..c1e0eaf476
--- /dev/null
+++ b/examples/logfilepositionsource/logfilepositionsource.pro
@@ -0,0 +1,17 @@
+TEMPLATE=app
+INCLUDEPATH += ../../location
+
+HEADERS = logfilepositionsource.h \
+ clientapplication.h
+SOURCES = logfilepositionsource.cpp \
+ clientapplication.cpp \
+ main.cpp
+
+CONFIG += console
+
+include(../../common.pri)
+LIBS += -lQtLocation
+
+logfile.path = $$DESTDIR
+logfile.files = simplelog.txt
+INSTALLS += logfile
diff --git a/examples/logfilepositionsource/main.cpp b/examples/logfilepositionsource/main.cpp
new file mode 100644
index 0000000000..9592423ae3
--- /dev/null
+++ b/examples/logfilepositionsource/main.cpp
@@ -0,0 +1,44 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QCoreApplication>
+
+#include "clientapplication.h"
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication app(argc, argv);
+
+ ClientApplication client;
+
+ return app.exec();
+} \ No newline at end of file
diff --git a/examples/logfilepositionsource/simplelog.txt b/examples/logfilepositionsource/simplelog.txt
new file mode 100644
index 0000000000..d016b2a8a4
--- /dev/null
+++ b/examples/logfilepositionsource/simplelog.txt
@@ -0,0 +1,156 @@
+2009-08-24T22:24:37 -27.572321 153.090718
+2009-08-24T22:24:38 -27.572470 153.090783
+2009-08-24T22:24:39 -27.572616 153.090845
+2009-08-24T22:24:40 -27.572763 153.090908
+2009-08-24T22:24:41 -27.572914 153.090971
+2009-08-24T22:24:42 -27.573068 153.091036
+2009-08-24T22:24:43 -27.573224 153.091102
+2009-08-24T22:24:44 -27.573383 153.091167
+2009-08-24T22:24:45 -27.573541 153.091232
+2009-08-24T22:24:46 -27.573700 153.091298
+2009-08-24T22:24:47 -27.573860 153.091366
+2009-08-24T22:24:48 -27.574019 153.091435
+2009-08-24T22:24:49 -27.574178 153.091507
+2009-08-24T22:24:50 -27.574340 153.091581
+2009-08-24T22:24:51 -27.574506 153.091654
+2009-08-24T22:24:52 -27.574670 153.091729
+2009-08-24T22:24:53 -27.574836 153.091800
+2009-08-24T22:24:54 -27.575001 153.091870
+2009-08-24T22:24:55 -27.575165 153.091940
+2009-08-24T22:24:56 -27.575327 153.092010
+2009-08-24T22:24:57 -27.575485 153.092078
+2009-08-24T22:24:58 -27.575641 153.092144
+2009-08-24T22:24:59 -27.575795 153.092218
+2009-08-24T22:25:00 -27.575942 153.092308
+2009-08-24T22:25:01 -27.576082 153.092415
+2009-08-24T22:25:02 -27.576223 153.092530
+2009-08-24T22:25:03 -27.576364 153.092648
+2009-08-24T22:25:04 -27.576505 153.092763
+2009-08-24T22:25:05 -27.576646 153.092879
+2009-08-24T22:25:06 -27.576784 153.092990
+2009-08-24T22:25:07 -27.576918 153.093099
+2009-08-24T22:25:08 -27.577046 153.093204
+2009-08-24T22:25:09 -27.577168 153.093303
+2009-08-24T22:25:10 -27.577284 153.093396
+2009-08-24T22:25:11 -27.577396 153.093484
+2009-08-24T22:25:12 -27.577499 153.093568
+2009-08-24T22:25:13 -27.577595 153.093647
+2009-08-24T22:25:14 -27.577692 153.093727
+2009-08-24T22:25:15 -27.577793 153.093810
+2009-08-24T22:25:16 -27.577897 153.093896
+2009-08-24T22:25:17 -27.578006 153.093984
+2009-08-24T22:25:18 -27.578120 153.094074
+2009-08-24T22:25:19 -27.578237 153.094168
+2009-08-24T22:25:20 -27.578360 153.094267
+2009-08-24T22:25:21 -27.578487 153.094370
+2009-08-24T22:25:22 -27.578617 153.094474
+2009-08-24T22:25:23 -27.578748 153.094581
+2009-08-24T22:25:24 -27.578880 153.094688
+2009-08-24T22:25:25 -27.579014 153.094796
+2009-08-24T22:25:26 -27.579149 153.094905
+2009-08-24T22:25:27 -27.579285 153.095012
+2009-08-24T22:25:28 -27.579420 153.095121
+2009-08-24T22:25:29 -27.579552 153.095231
+2009-08-24T22:25:30 -27.579684 153.095340
+2009-08-24T22:25:31 -27.579820 153.095449
+2009-08-24T22:25:32 -27.579956 153.095558
+2009-08-24T22:25:33 -27.580095 153.095667
+2009-08-24T22:25:34 -27.580240 153.095776
+2009-08-24T22:25:35 -27.580392 153.095885
+2009-08-24T22:25:36 -27.580536 153.095995
+2009-08-24T22:25:37 -27.580679 153.096109
+2009-08-24T22:25:38 -27.580824 153.096226
+2009-08-24T22:25:39 -27.580965 153.096337
+2009-08-24T22:25:40 -27.581101 153.096441
+2009-08-24T22:25:41 -27.581237 153.096537
+2009-08-24T22:25:42 -27.581356 153.096628
+2009-08-24T22:25:43 -27.581466 153.096714
+2009-08-24T22:25:44 -27.581555 153.096795
+2009-08-24T22:25:45 -27.581606 153.096847
+2009-08-24T22:25:46 -27.581539 153.096855
+2009-08-24T22:25:47 -27.581572 153.096873
+2009-08-24T22:25:48 -27.581579 153.096875
+2009-08-24T22:25:49 -27.581582 153.096878
+2009-08-24T22:25:50 -27.581588 153.096880
+2009-08-24T22:25:51 -27.581588 153.096880
+2009-08-24T22:25:52 -27.581592 153.096881
+2009-08-24T22:25:53 -27.581596 153.096882
+2009-08-24T22:25:54 -27.581599 153.096883
+2009-08-24T22:25:55 -27.581601 153.096883
+2009-08-24T22:25:56 -27.581602 153.096883
+2009-08-24T22:25:57 -27.581606 153.096890
+2009-08-24T22:25:58 -27.581606 153.096919
+2009-08-24T22:25:59 -27.581605 153.096985
+2009-08-24T22:26:00 -27.581573 153.097060
+2009-08-24T22:26:01 -27.581532 153.097142
+2009-08-24T22:26:02 -27.581484 153.097227
+2009-08-24T22:26:03 -27.581426 153.097324
+2009-08-24T22:26:04 -27.581373 153.097424
+2009-08-24T22:26:05 -27.581320 153.097530
+2009-08-24T22:26:06 -27.581265 153.097641
+2009-08-24T22:26:07 -27.581203 153.097757
+2009-08-24T22:26:08 -27.581144 153.097875
+2009-08-24T22:26:09 -27.581093 153.097995
+2009-08-24T22:26:10 -27.581042 153.098116
+2009-08-24T22:26:11 -27.580987 153.098231
+2009-08-24T22:26:12 -27.580919 153.098334
+2009-08-24T22:26:13 -27.580841 153.098428
+2009-08-24T22:26:14 -27.580754 153.098511
+2009-08-24T22:26:15 -27.580667 153.098591
+2009-08-24T22:26:16 -27.580581 153.098671
+2009-08-24T22:26:17 -27.580492 153.098751
+2009-08-24T22:26:18 -27.580401 153.098832
+2009-08-24T22:26:19 -27.580311 153.098914
+2009-08-24T22:26:20 -27.580224 153.098996
+2009-08-24T22:26:21 -27.580140 153.099078
+2009-08-24T22:26:22 -27.580059 153.099159
+2009-08-24T22:26:23 -27.579980 153.099245
+2009-08-24T22:26:24 -27.579900 153.099336
+2009-08-24T22:26:25 -27.579826 153.099433
+2009-08-24T22:26:26 -27.579753 153.099529
+2009-08-24T22:26:27 -27.579680 153.099623
+2009-08-24T22:26:28 -27.579606 153.099716
+2009-08-24T22:26:29 -27.579538 153.099808
+2009-08-24T22:26:30 -27.579477 153.099893
+2009-08-24T22:26:31 -27.579416 153.099968
+2009-08-24T22:26:32 -27.579393 153.100027
+2009-08-24T22:26:33 -27.579376 153.100092
+2009-08-24T22:26:34 -27.579384 153.100142
+2009-08-24T22:26:35 -27.579403 153.100181
+2009-08-24T22:26:36 -27.579429 153.100210
+2009-08-24T22:26:37 -27.579460 153.100237
+2009-08-24T22:26:38 -27.579493 153.100265
+2009-08-24T22:26:39 -27.579518 153.100291
+2009-08-24T22:26:40 -27.579536 153.100336
+2009-08-24T22:26:41 -27.579591 153.100358
+2009-08-24T22:26:42 -27.579618 153.100383
+2009-08-24T22:26:43 -27.579639 153.100404
+2009-08-24T22:26:44 -27.579650 153.100420
+2009-08-24T22:26:45 -27.579665 153.100432
+2009-08-24T22:26:46 -27.579679 153.100442
+2009-08-24T22:26:47 -27.579690 153.100451
+2009-08-24T22:26:48 -27.579697 153.100459
+2009-08-24T22:26:49 -27.579700 153.100462
+2009-08-24T22:26:50 -27.579699 153.100464
+2009-08-24T22:26:51 -27.579699 153.100466
+2009-08-24T22:26:52 -27.579700 153.100466
+2009-08-24T22:26:53 -27.579704 153.100466
+2009-08-24T22:26:54 -27.579705 153.100465
+2009-08-24T22:26:55 -27.579708 153.100468
+2009-08-24T22:26:56 -27.579712 153.100471
+2009-08-24T22:26:57 -27.579719 153.100476
+2009-08-24T22:26:58 -27.579728 153.100485
+2009-08-24T22:26:59 -27.579744 153.100493
+2009-08-24T22:27:00 -27.579759 153.100496
+2009-08-24T22:27:01 -27.579780 153.100481
+2009-08-24T22:27:02 -27.579788 153.100462
+2009-08-24T22:27:03 -27.579791 153.100436
+2009-08-24T22:27:04 -27.579788 153.100426
+2009-08-24T22:27:05 -27.579783 153.100409
+2009-08-24T22:27:06 -27.579781 153.100390
+2009-08-24T22:27:07 -27.579780 153.100375
+2009-08-24T22:27:08 -27.579779 153.100364
+2009-08-24T22:27:09 -27.579778 153.100354
+2009-08-24T22:27:10 -27.579777 153.100347
+2009-08-24T22:27:11 -27.579777 153.100341
+2009-08-24T22:27:12 -27.579776 153.100336
diff --git a/location.pro b/location.pro
new file mode 100644
index 0000000000..a6273c5050
--- /dev/null
+++ b/location.pro
@@ -0,0 +1,3 @@
+TEMPLATE = subdirs
+CONFIG+=ordered
+SUBDIRS += location tests examples
diff --git a/location/location.pro b/location/location.pro
new file mode 100644
index 0000000000..2e3f28b399
--- /dev/null
+++ b/location/location.pro
@@ -0,0 +1,56 @@
+TEMPLATE = lib
+TARGET = QtLocation
+QT = core
+
+include(../common.pri)
+
+DEFINES += QT_BUILD_LOCATION_LIB QT_MAKEDLL
+
+INCLUDEPATH += .
+DEPENDPATH += .
+
+PUBLIC_HEADERS +=
+
+PUBLIC_HEADERS += qlocationglobal.h \
+ qgeocoordinate.h \
+ qgeopositioninfo.h \
+ qsatelliteinfo.h \
+ qsatelliteinfosource.h \
+ qgeopositioninfosource.h \
+ qgeoareamonitor.h \
+ qnmeapositioninfosource.h
+
+PRIVATE_HEADERS += qlocationutils_p.h \
+ qnmeapositioninfosource_p.h
+
+symbian {
+ PRIVATE_HEADERS += qgeopositioninfosource_s60_p.h \
+ qmlbackendao_s60_p.h \
+ notificationcallback_s60_p.h
+
+ SOURCES += qgeopositioninfosource_s60.cpp \
+ qmlbackendao_s60.cpp
+}
+
+HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS
+
+SOURCES += qlocationutils.cpp \
+ qgeocoordinate.cpp \
+ qgeopositioninfo.cpp \
+ qsatelliteinfo.cpp \
+ qsatelliteinfosource.cpp \
+ qgeopositioninfosource.cpp \
+ qgeoareamonitor.cpp \
+ qnmeapositioninfosource.cpp
+
+symbian {
+ TARGET.CAPABILITY = ALL -TCB
+ INCLUDEPATH += \epoc32\include\osextensions
+ LIBS += -llbs
+
+ deploy.path = /
+ exportheaders.sources = $$PUBLIC_HEADERS
+ exportheaders.path = epoc32/include
+ DEPLOYMENT += exportheaders
+}
+
diff --git a/location/notificationcallback_s60_p.h b/location/notificationcallback_s60_p.h
new file mode 100644
index 0000000000..ad826b1934
--- /dev/null
+++ b/location/notificationcallback_s60_p.h
@@ -0,0 +1,50 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef NOTIFICATIONCALLBACK_S60_P_H
+#define NOTIFICATIONCALLBACK_S60_P_H
+
+#include <e32base.h> // For CActive, link against: euser.lib
+#include <lbs.h>
+#include <lbscommon.h>
+
+
+class INotificationCallback
+{
+public:
+ virtual void UpdateDeviceStatus(void) = 0 ;
+ virtual void UpdatePosition(HPositionGenericInfo *mPosInfo, int error) = 0 ;
+};
+
+
+#endif // NOTIFICATIONCALLBACK_S60_P_H
diff --git a/location/qgeoareamonitor.cpp b/location/qgeoareamonitor.cpp
new file mode 100644
index 0000000000..d067313145
--- /dev/null
+++ b/location/qgeoareamonitor.cpp
@@ -0,0 +1,160 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qgeoareamonitor.h"
+
+/*!
+ \class QGeoAreaMonitor
+ \brief The QGeoAreaMonitor class enables the detection of proximity changes for a specified set of coordinates.
+
+ A QGeoAreaMonitor emits signals when the current position is in
+ range, or has moved out of range, of a specified area.
+
+ For example:
+
+ \code
+ public:
+ MyClass::MyClass()
+ {
+ QGeoAreaMonitor *monitor = QGeoAreaMonitor::createMonitor();
+ connect(monitor, SIGNAL(areaEntered(QGeoPositionInfo)),
+ this, SLOT(areaEntered(QGeoPositionInfo)));
+ connect(monitor, SIGNAL(areaExited(QGeoPositionInfo)),
+ this, SLOT(areaExited(QGeoPositionInfo)));
+
+ QGeoCoordinate bigBenLocation(51.50104, -0.124632);
+ monitor->setMonitoredArea(bigBenLocation, 100);
+ }
+
+ public slots:
+ void areaEntered(const QGeoPositionInfo &update)
+ {
+ qDebug() << "Now within 100 meters, current position is" << update.coordinate();
+ }
+
+ void areaExited(const QGeoPositionInfo &update)
+ {
+ qDebug() << "No longer within 100 meters, current position is" << update.coordinate();
+ }
+ \endcode
+*/
+
+
+class QGeoAreaMonitorPrivate
+{
+public:
+ QGeoCoordinate coord;
+ int radius;
+};
+
+
+/*!
+ Creates a monitor with the given \a parent.
+*/
+QGeoAreaMonitor::QGeoAreaMonitor(QObject *parent)
+ : QObject(parent),
+ d(new QGeoAreaMonitorPrivate)
+{
+ d->radius = 0;
+}
+
+/*!
+ Destroys the monitor.
+*/
+QGeoAreaMonitor::~QGeoAreaMonitor()
+{
+}
+
+/*!
+ Sets the area to be monitored to the area specified by \a coordinate
+ with a radius of \a radius.
+
+ If the current position is within the specified area, areaEntered()
+ is emitted immediately.
+
+ Note: Subclass implementations of this method should call the base
+ implementation to ensure coordinate() and radius() return the correct
+ values.
+*/
+
+void QGeoAreaMonitor::setMonitoredArea(const QGeoCoordinate &coordinate, int radius)
+{
+ d->coord = coordinate;
+ d->radius = radius;
+}
+
+/*!
+ Returns the coordinate set with setMonitoredArea(), or an invalid
+ coordinate if no area has been set.
+*/
+QGeoCoordinate QGeoAreaMonitor::coordinate() const
+{
+ return d->coord;
+}
+
+/*!
+ Returns the radius set with setMonitoredArea(), or 0 if no area
+ has been set.
+*/
+int QGeoAreaMonitor::radius() const
+{
+ return d->radius;
+}
+
+/*!
+ Creates and returns a monitor with the given \a parent that
+ monitors areas using resources on the underlying system.
+
+ Returns 0 if the system has no support for position monitoring.
+*/
+QGeoAreaMonitor *QGeoAreaMonitor::createMonitor(QObject * /*parent*/)
+{
+ return 0;
+}
+
+/*!
+ \fn void QGeoAreaMonitor::areaEntered(const QGeoPositionInfo &update);
+
+ Emitted when the current position has moved from a position outside the
+ monitored area to a position within the monitored area.
+
+ The \a update holds the new position.
+*/
+
+/*!
+ \fn void QGeoAreaMonitor::areaExited(const QGeoPositionInfo &update);
+
+ Emitted when the current position has moved from a position within the
+ monitored area to a position outside the monitored area.
+
+ The \a update holds the new position.
+*/
diff --git a/location/qgeoareamonitor.h b/location/qgeoareamonitor.h
new file mode 100644
index 0000000000..2da791aca1
--- /dev/null
+++ b/location/qgeoareamonitor.h
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QGEOAREAMONITOR_H
+#define QGEOAREAMONITOR_H
+
+#include "qlocationglobal.h"
+#include "qgeocoordinate.h"
+
+#include <QObject>
+
+class QGeoPositionInfo;
+class QGeoAreaMonitorPrivate;
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class Q_LOCATION_EXPORT QGeoAreaMonitor : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QGeoAreaMonitor(QObject *parent = 0);
+ virtual ~QGeoAreaMonitor() = 0;
+
+ virtual void setMonitoredArea(const QGeoCoordinate &coordinate, int radius);
+ QGeoCoordinate coordinate() const;
+ int radius() const;
+
+ static QGeoAreaMonitor *createMonitor(QObject *parent = 0);
+
+signals:
+ void areaEntered(const QGeoPositionInfo &update);
+ void areaExited(const QGeoPositionInfo &update);
+
+private:
+ Q_DISABLE_COPY(QGeoAreaMonitor)
+ QGeoAreaMonitorPrivate *d;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/location/qgeocoordinate.cpp b/location/qgeocoordinate.cpp
new file mode 100644
index 0000000000..a5f8f0f8f6
--- /dev/null
+++ b/location/qgeocoordinate.cpp
@@ -0,0 +1,550 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qgeocoordinate.h"
+#include "qlocationutils_p.h"
+
+#include <QDateTime>
+#include <QHash>
+#include <QDataStream>
+#include <QDebug>
+#include <qnumeric.h>
+#include <qmath.h>
+
+#include <math.h>
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+static const double qgeocoordinate_EARTH_MEAN_RADIUS = 6371.0072;
+
+inline static double qgeocoordinate_degToRad(double deg) { return deg * M_PI / 180; }
+inline static double qgeocoordinate_radToDeg(double rad) { return rad * 180 / M_PI; }
+
+
+class QGeoCoordinatePrivate
+{
+public:
+ double lat;
+ double lng;
+ double alt;
+
+ QGeoCoordinatePrivate()
+ {
+ lat = qQNaN();
+ lng = qQNaN();
+ alt = qQNaN();
+ }
+};
+
+
+/*!
+ \class QGeoCoordinate
+ \brief The QGeoCoordinate class defines a geographical position on the surface of the Earth.
+
+ A QGeoCoordinate is defined by latitude, longitude, and optionally, altitude.
+
+ Use type() to determine whether a coordinate is a 2D coordinate (has
+ latitude and longitude only) or 3D coordinate (has latitude, longitude
+ and altitude). Use distanceTo() and azimuthTo() to calculate the distance
+ and bearing between coordinates.
+
+ The coordinate values should be specified using the WGS84 datum.
+*/
+
+/*!
+ \enum QGeoCoordinate::CoordinateType
+ Defines the types of a coordinate.
+
+ \value InvalidCoordinate An invalid coordinate. A coordinate is invalid if its latitude or longitude values are invalid.
+ \value Coordinate2D A coordinate with valid latitude and longitude values.
+ \value Coordinate3D A coordinate with valid latitude and longitude values, and also an altitude value.
+*/
+
+/*!
+ \enum QGeoCoordinate::CoordinateFormat
+ Defines the possible formatting options for toString().
+
+ \value DecimalDegrees Returns a string representation of the coordinates in decimal degrees format.
+ \value DecimalDegreesWithHemisphere Returns a string representation of the coordinates in decimal degrees format, using 'N', 'S', 'E' or 'W' to indicate the hemispheres of the coordinates.
+ \value DegreesMinutes Returns a string representation of the coordinates in degrees-minutes format.
+ \value DegreesMinutesWithHemisphere Returns a string representation of the coordinates in degrees-minutes format, using 'N', 'S', 'E' or 'W' to indicate the hemispheres of the coordinates.
+ \value DegreesMinutesSeconds Returns a string representation of the coordinates in degrees-minutes-seconds format.
+ \value DegreesMinutesSecondsWithHemisphere Returns a string representation of the coordinates in degrees-minutes-seconds format, using 'N', 'S', 'E' or 'W' to indicate the hemispheres of the coordinates.
+
+ \sa toString()
+*/
+
+
+/*!
+ Constructs a coordinate. The coordinate will be invalid until
+ setLatitude() and setLongitude() have been called.
+*/
+QGeoCoordinate::QGeoCoordinate()
+ : d(new QGeoCoordinatePrivate)
+{
+}
+
+/*!
+ Constructs a coordinate with the given \a latitude and \a longitude.
+
+ If the latitude is not between -90 to 90 inclusive, or the longitude
+ is not between -180 to 180 inclusive, none of the values are set and
+ the type() will be QGeoCoordinate::InvalidCoordinate.
+
+ \sa isValid()
+*/
+QGeoCoordinate::QGeoCoordinate(double latitude, double longitude)
+ : d(new QGeoCoordinatePrivate)
+{
+ if (QLocationUtils::isValidLat(latitude) && QLocationUtils::isValidLong(longitude)) {
+ d->lat = latitude;
+ d->lng = longitude;
+ }
+}
+
+/*!
+ Constructs a coordinate with the given \a latitude, \a longitude
+ and \a altitude.
+
+ If the latitude is not between -90 to 90 inclusive, or the longitude
+ is not between -180 to 180 inclusive, none of the values are set and
+ the type() will be QGeoCoordinate::InvalidCoordinate.
+
+ \sa isValid()
+*/
+QGeoCoordinate::QGeoCoordinate(double latitude, double longitude, double altitude)
+ : d(new QGeoCoordinatePrivate)
+{
+ if (QLocationUtils::isValidLat(latitude) && QLocationUtils::isValidLong(longitude)) {
+ d->lat = latitude;
+ d->lng = longitude;
+ d->alt = altitude;
+ }
+}
+
+/*!
+ Constructs a coordinate from the contents of \a other.
+*/
+QGeoCoordinate::QGeoCoordinate(const QGeoCoordinate &other)
+ : d(new QGeoCoordinatePrivate)
+{
+ operator=(other);
+}
+
+/*!
+ Destroys the coordinate object.
+*/
+QGeoCoordinate::~QGeoCoordinate()
+{
+ delete d;
+}
+
+/*!
+ Assigns \a other to this coordinate and returns a reference to this
+ coordinate.
+*/
+QGeoCoordinate &QGeoCoordinate::operator=(const QGeoCoordinate &other)
+{
+ if (this == &other)
+ return *this;
+
+ d->lat = other.d->lat;
+ d->lng = other.d->lng;
+ d->alt = other.d->alt;
+
+ return *this;
+}
+
+/*!
+ Returns true if the latitude, longitude and altitude of this
+ coordinate are the same as those of \a other.
+*/
+bool QGeoCoordinate::operator==(const QGeoCoordinate &other) const
+{
+ return ( (qIsNaN(d->lat) && qIsNaN(other.d->lat)) || qFuzzyCompare(d->lat, other.d->lat) )
+ && ( (qIsNaN(d->lng) && qIsNaN(other.d->lng)) || qFuzzyCompare(d->lng, other.d->lng) )
+ && ( (qIsNaN(d->alt) && qIsNaN(other.d->alt)) || qFuzzyCompare(d->alt, other.d->alt) );
+}
+
+/*!
+ \fn bool QGeoCoordinate::operator!=(const QGeoCoordinate &other) const;
+
+ Returns true if the latitude, longitude or altitude of this
+ coordinate are not the same as those of \a other.
+*/
+
+/*!
+ Returns true if the type() is Coordinate2D or Coordinate3D.
+*/
+bool QGeoCoordinate::isValid() const
+{
+ CoordinateType t = type();
+ return t == Coordinate2D || t == Coordinate3D;
+}
+
+/*!
+ Returns the type of this coordinate.
+*/
+QGeoCoordinate::CoordinateType QGeoCoordinate::type() const
+{
+ if (QLocationUtils::isValidLat(d->lat)
+ && QLocationUtils::isValidLong(d->lng)) {
+ if (qIsNaN(d->alt))
+ return Coordinate2D;
+ return Coordinate3D;
+ }
+ return InvalidCoordinate;
+}
+
+
+/*!
+ Returns the latitude, in decimal degrees. The return value is undefined
+ if the latitude has not been set.
+
+ A positive latitude indicates the Northern Hemisphere, and a negative
+ latitude indicates the Southern Hemisphere.
+
+ \sa setLatitude(), type()
+*/
+double QGeoCoordinate::latitude() const
+{
+ return d->lat;
+}
+
+/*!
+ Sets the latitude (in decimal degrees) to \a latitude. The value should
+ be in the WGS84 datum.
+
+ To be valid, the latitude must be between -90 to 90 inclusive.
+
+ \sa latitude()
+*/
+void QGeoCoordinate::setLatitude(double latitude)
+{
+ d->lat = latitude;
+}
+
+/*!
+ Returns the longitude, in decimal degrees. The return value is undefined
+ if the longitude has not been set.
+
+ A positive longitude indicates the Eastern Hemisphere, and a negative
+ longitude indicates the Western Hemisphere.
+
+ \sa setLongitude(), type()
+*/
+double QGeoCoordinate::longitude() const
+{
+ return d->lng;
+}
+
+/*!
+ Sets the longitude (in decimal degrees) to \a longitude. The value should
+ be in the WGS84 datum.
+
+ To be valid, the longitude must be between -180 to 180 inclusive.
+
+ \sa longitude()
+*/
+void QGeoCoordinate::setLongitude(double longitude)
+{
+ d->lng = longitude;
+}
+
+/*!
+ Returns the altitude (meters above sea level).
+
+ The return value is undefined if the altitude has not been set.
+
+ \sa setAltitude(), type()
+*/
+double QGeoCoordinate::altitude() const
+{
+ return d->alt;
+}
+
+/*!
+ Sets the altitude (meters above sea level) to \a altitude.
+
+ \sa altitude()
+*/
+void QGeoCoordinate::setAltitude(double altitude)
+{
+ d->alt = altitude;
+}
+
+/*!
+ Returns the distance (in meters) from this coordinate to the coordinate
+ specified by \a other. Altitude is not used in the calculation.
+
+ This calculation returns the great-circle distance between the two
+ coordinates, with an assumption that the Earth is spherical for the
+ purpose of this calculation.
+
+ Returns 0 if the type of this coordinate or the type of \a other is
+ QGeoCoordinate::InvalidCoordinate.
+*/
+qreal QGeoCoordinate::distanceTo(const QGeoCoordinate &other) const
+{
+ if (type() == QGeoCoordinate::InvalidCoordinate
+ || other.type() == QGeoCoordinate::InvalidCoordinate) {
+ return 0;
+ }
+
+ // Haversine formula
+ double dlat = qgeocoordinate_degToRad(other.d->lat - d->lat);
+ double dlon = qgeocoordinate_degToRad(other.d->lng - d->lng);
+ double y = qSin(dlat/2.0) * qSin(dlat/2.0)
+ + qCos(qgeocoordinate_degToRad(d->lat))
+ * qCos(qgeocoordinate_degToRad(other.d->lat))
+ * qSin(dlon/2.0) * qSin(dlon/2.0);
+ double x = 2 * atan2(qSqrt(y), qSqrt(1-y));
+ return qreal(x * qgeocoordinate_EARTH_MEAN_RADIUS * 1000);
+}
+
+/*!
+ Returns the azimuth (or bearing) in degrees from this coordinate to the
+ coordinate specified by \a other. Altitude is not used in the calculation.
+
+ There is an assumption that the Earth is spherical for the purpose of
+ this calculation.
+
+ Returns 0 if the type of this coordinate or the type of \a other is
+ QGeoCoordinate::InvalidCoordinate.
+*/
+qreal QGeoCoordinate::azimuthTo(const QGeoCoordinate &other) const
+{
+ if (type() == QGeoCoordinate::InvalidCoordinate
+ || other.type() == QGeoCoordinate::InvalidCoordinate) {
+ return 0;
+ }
+
+ double dlon = qgeocoordinate_degToRad(other.d->lng - d->lng);
+ double lat1Rad = qgeocoordinate_degToRad(d->lat);
+ double lat2Rad = qgeocoordinate_degToRad(other.d->lat);
+
+ double y = qSin(dlon) * qCos(lat2Rad);
+ double x = qCos(lat1Rad) * qSin(lat2Rad) - qSin(lat1Rad) * qCos(lat2Rad) * qCos(dlon);
+
+ double whole;
+ double fraction = modf(qgeocoordinate_radToDeg(atan2(y, x)), &whole);
+ return qreal((int(whole + 360) % 360) + fraction);
+}
+
+/*!
+ Returns this coordinate as a string in the specified \a format.
+
+ For example, if this coordinate has a latitude of -27.46758, a longitude
+ of 153.027892 and an altitude of 28.1, these are the strings
+ returned depending on \a format:
+
+ \table
+ \header
+ \o \a format value
+ \o Returned string
+ \row
+ \o \l DecimalDegrees
+ \o -27.46758\unicode{0xB0}, 153.02789\unicode{0xB0}, 28.1m
+ \row
+ \o \l DecimalDegreesWithHemisphere
+ \o 27.46758\unicode{0xB0} S, 153.02789\unicode{0xB0} E, 28.1m
+ \row
+ \o \l DegreesMinutes
+ \o -27\unicode{0xB0} 28.054', 153\unicode{0xB0} 1.673', 28.1m
+ \row
+ \o \l DegreesMinutesWithHemisphere
+ \o 27\unicode{0xB0} 28.054 S', 153\unicode{0xB0} 1.673' E, 28.1m
+ \row
+ \o \l DegreesMinutesSeconds
+ \o -27\unicode{0xB0} 28' 3.2", 153\unicode{0xB0} 1' 40.4", 28.1m
+ \row
+ \o \l DegreesMinutesSecondsWithHemisphere
+ \o 27\unicode{0xB0} 28' 3.2" S, 153\unicode{0xB0} 1' 40.4" E, 28.1m
+ \endtable
+
+ The altitude field is omitted if no altitude is set.
+
+ If the coordinate is invalid, an empty string is returned.
+*/
+QString QGeoCoordinate::toString(CoordinateFormat format) const
+{
+ if (type() == QGeoCoordinate::InvalidCoordinate)
+ return QString();
+
+ QString latStr;
+ QString longStr;
+
+ double absLat = qAbs(d->lat);
+ double absLng = qAbs(d->lng);
+ QChar symbol(0x00B0); // degrees symbol
+
+ switch (format) {
+ case DecimalDegrees:
+ case DecimalDegreesWithHemisphere:
+ {
+ latStr = QString::number(absLat, 'f', 5) + symbol;
+ longStr = QString::number(absLng, 'f', 5) + symbol;
+ break;
+ }
+ case DegreesMinutes:
+ case DegreesMinutesWithHemisphere:
+ {
+ double latMin = (absLat - int(absLat)) * 60;
+ double lngMin = (absLng - int(absLng)) * 60;
+ latStr = QString("%1%2 %3'")
+ .arg(QString::number(int(absLat)))
+ .arg(symbol)
+ .arg(QString::number(latMin, 'f', 3));
+ longStr = QString("%1%2 %3'")
+ .arg(QString::number(int(absLng)))
+ .arg(symbol)
+ .arg(QString::number(lngMin, 'f', 3));
+ break;
+ }
+ case DegreesMinutesSeconds:
+ case DegreesMinutesSecondsWithHemisphere:
+ {
+ double latMin = (absLat - int(absLat)) * 60;
+ double lngMin = (absLng - int(absLng)) * 60;
+ double latSec = (latMin - int(latMin)) * 60;
+ double lngSec = (lngMin - int(lngMin)) * 60;
+
+ latStr = QString("%1%2 %3' %4\"")
+ .arg(QString::number(int(absLat)))
+ .arg(symbol)
+ .arg(QString::number(int(latMin)))
+ .arg(QString::number(latSec, 'f', 1));
+ longStr = QString("%1%2 %3' %4\"")
+ .arg(QString::number(int(absLng)))
+ .arg(symbol)
+ .arg(QString::number(int(lngMin)))
+ .arg(QString::number(lngSec, 'f', 1));
+ break;
+ }
+ }
+
+ // now add the "-" to the start, or append the hemisphere char
+ switch (format) {
+ case DecimalDegrees:
+ case DegreesMinutes:
+ case DegreesMinutesSeconds:
+ {
+ if (d->lat < 0)
+ latStr.insert(0, "-");
+ if (d->lng < 0)
+ longStr.insert(0, "-");
+ break;
+ }
+ case DecimalDegreesWithHemisphere:
+ case DegreesMinutesWithHemisphere:
+ case DegreesMinutesSecondsWithHemisphere:
+ {
+ if (d->lat < 0)
+ latStr.append(" S");
+ else if (d->lat > 0)
+ latStr.append(" N");
+ if (d->lng < 0)
+ longStr.append(" W");
+ else if (d->lng > 0)
+ longStr.append(" E");
+ break;
+ }
+ }
+
+ if (qIsNaN(d->alt))
+ return QString("%1, %2").arg(latStr, longStr);
+ return QString("%1, %2, %3m").arg(latStr, longStr, QString::number(d->alt));
+}
+
+#ifndef QT_NO_DEBUG_STREAM
+QDebug operator<<(QDebug dbg, const QGeoCoordinate &coord)
+{
+ double lat = coord.latitude();
+ double lng = coord.longitude();
+
+ dbg.nospace() << "QGeoCoordinate(";
+ if (qIsNaN(lat))
+ dbg.nospace() << '?';
+ else
+ dbg.nospace() << lat;
+ dbg.nospace() << ", ";
+ if (qIsNaN(lng))
+ dbg.nospace() << '?';
+ else
+ dbg.nospace() << lng;
+ if (coord.type() == QGeoCoordinate::Coordinate3D) {
+ dbg.nospace() << ", ";
+ dbg.nospace() << coord.altitude();
+ }
+ dbg.nospace() << ')';
+ return dbg;
+}
+#endif
+
+#ifndef QT_NO_DATASTREAM
+/*!
+ Writes the given \a coordinate to the specified \a stream.
+
+ \sa {Format of the QDataStream Operators}
+*/
+
+QDataStream &operator<<(QDataStream &stream, const QGeoCoordinate &coordinate)
+{
+ stream << coordinate.latitude();
+ stream << coordinate.longitude();
+ stream << coordinate.altitude();
+ return stream;
+}
+#endif
+
+#ifndef QT_NO_DATASTREAM
+/*!
+ Reads a coordinate from the specified \a stream into the given
+ \a coordinate.
+
+ \sa {Format of the QDataStream Operators}
+*/
+
+QDataStream &operator>>(QDataStream &stream, QGeoCoordinate &coordinate)
+{
+ double value;
+ stream >> value;
+ coordinate.setLatitude(value);
+ stream >> value;
+ coordinate.setLongitude(value);
+ stream >> value;
+ coordinate.setAltitude(value);
+ return stream;
+}
+#endif
diff --git a/location/qgeocoordinate.h b/location/qgeocoordinate.h
new file mode 100644
index 0000000000..b5b5746313
--- /dev/null
+++ b/location/qgeocoordinate.h
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QGEOCOORDINATE_H
+#define QGEOCOORDINATE_H
+
+#include "qlocationglobal.h"
+
+#include <QString>
+
+class QDebug;
+class QDataStream;
+class QGeoCoordinatePrivate;
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class Q_LOCATION_EXPORT QGeoCoordinate
+{
+public:
+ enum CoordinateType {
+ InvalidCoordinate,
+ Coordinate2D,
+ Coordinate3D
+ };
+
+ enum CoordinateFormat {
+ DecimalDegrees,
+ DecimalDegreesWithHemisphere,
+ DegreesMinutes,
+ DegreesMinutesWithHemisphere,
+ DegreesMinutesSeconds,
+ DegreesMinutesSecondsWithHemisphere
+ };
+
+ QGeoCoordinate();
+ QGeoCoordinate(double latitude, double longitude);
+ QGeoCoordinate(double latitude, double longitude, double altitude);
+ QGeoCoordinate(const QGeoCoordinate &other);
+ ~QGeoCoordinate();
+
+ QGeoCoordinate &operator=(const QGeoCoordinate &other);
+
+ bool operator==(const QGeoCoordinate &other) const;
+ inline bool operator!=(const QGeoCoordinate &other) const { return !operator==(other); }
+
+ bool isValid() const;
+ CoordinateType type() const;
+
+ void setLatitude(double latitude);
+ double latitude() const;
+
+ void setLongitude(double longitude);
+ double longitude() const;
+
+ void setAltitude(double altitude);
+ double altitude() const;
+
+ qreal distanceTo(const QGeoCoordinate &other) const;
+ qreal azimuthTo(const QGeoCoordinate &other) const;
+
+ QString toString(CoordinateFormat format = DegreesMinutesSecondsWithHemisphere) const;
+
+private:
+ QGeoCoordinatePrivate *d;
+};
+
+#ifndef QT_NO_DEBUG_STREAM
+Q_LOCATION_EXPORT QDebug operator<<(QDebug, const QGeoCoordinate &);
+#endif
+
+#ifndef QT_NO_DATASTREAM
+Q_LOCATION_EXPORT QDataStream &operator<<(QDataStream &stream, const QGeoCoordinate &coordinate);
+Q_LOCATION_EXPORT QDataStream &operator>>(QDataStream &stream, QGeoCoordinate &coordinate);
+#endif
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/location/qgeopositioninfo.cpp b/location/qgeopositioninfo.cpp
new file mode 100644
index 0000000000..1dd9d34a8b
--- /dev/null
+++ b/location/qgeopositioninfo.cpp
@@ -0,0 +1,292 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qgeopositioninfo.h"
+
+#include <QHash>
+#include <QDebug>
+#include <QDataStream>
+
+class QGeoPositionInfoPrivate
+{
+public:
+ QDateTime dateTime;
+ QGeoCoordinate coord;
+ QHash<int, qreal> doubleProps;
+};
+
+/*!
+ \class QGeoPositionInfo
+ \brief The QGeoPositionInfo class contains information gathered on a global position, direction and velocity at a particular point in time.
+
+ A QGeoPositionInfo contains, at a minimum, a geographical coordinate and
+ a timestamp. It may also have heading and speed measurements as well as
+ estimates of the accuracy of the provided data.
+
+ \sa QGeoPositionInfoSource
+*/
+
+/*!
+ \enum QGeoPositionInfo::Property
+ Defines the properties for positional information.
+
+ \value Heading The bearing to true north, in degrees.
+ \value GroundSpeed The ground speed, in metres/sec.
+ \value VerticalSpeed The vertical speed, in metres/sec.
+ \value MagneticVariation The angle between the horizontal component of the magnetic field and true north, in degrees. Also known as magnetic declination. A positive value indicates a clockwise direction from true north and a negative value indicates a counter-clockwise direction.
+ \value HorizontalAccuracy The accuracy of the provided latitude-longitude value, in metres.
+ \value VerticalAccuracy The accuracy of the provided altitude value, in metres.
+*/
+
+/*!
+ Creates an invalid QGeoPositionInfo object.
+
+ \sa isValid()
+*/
+QGeoPositionInfo::QGeoPositionInfo()
+ : d(new QGeoPositionInfoPrivate)
+{
+}
+
+/*!
+ Creates a QGeoPositionInfo for the given \a coordinate and \a dateTime.
+*/
+QGeoPositionInfo::QGeoPositionInfo(const QGeoCoordinate &coordinate, const QDateTime &dateTime)
+ : d(new QGeoPositionInfoPrivate)
+{
+ d->dateTime = dateTime;
+ d->coord = coordinate;
+}
+
+/*!
+ Creates a QGeoPositionInfo with the values of \a other.
+*/
+QGeoPositionInfo::QGeoPositionInfo(const QGeoPositionInfo &other)
+ : d(new QGeoPositionInfoPrivate)
+{
+ operator=(other);
+}
+
+/*!
+ Destroys a QGeoPositionInfo object.
+*/
+QGeoPositionInfo::~QGeoPositionInfo()
+{
+ delete d;
+}
+
+/*!
+ Assigns the values from \a other to this QGeoPositionInfo.
+*/
+QGeoPositionInfo &QGeoPositionInfo::operator=(const QGeoPositionInfo &other)
+{
+ if (this == &other)
+ return *this;
+
+ d->dateTime = other.d->dateTime;
+ d->coord = other.d->coord;
+ d->doubleProps = other.d->doubleProps;
+
+ return *this;
+}
+
+/*!
+ Returns true if all of this object's values are the same as those of
+ \a other.
+*/
+bool QGeoPositionInfo::operator==(const QGeoPositionInfo &other) const
+{
+ return d->dateTime == other.d->dateTime
+ && d->coord == other.d->coord
+ && d->doubleProps == other.d->doubleProps;
+}
+
+/*!
+ \fn bool QGeoPositionInfo::operator!=(const QGeoPositionInfo &other) const
+
+ Returns true if any of this object's values are not the same as those of
+ \a other.
+*/
+
+/*!
+ Returns true if the dateTime() and coordinate() values are both valid.
+
+ \sa QGeoCoordinate::isValid(), QDateTime::isValid()
+*/
+bool QGeoPositionInfo::isValid() const
+{
+ return d->dateTime.isValid() && d->coord.isValid();
+}
+
+/*!
+ Sets the date and time at which this position was reported to \a dateTime.
+
+ The \a dateTime must be in UTC time.
+
+ \sa dateTime()
+*/
+void QGeoPositionInfo::setDateTime(const QDateTime &dateTime)
+{
+ d->dateTime = dateTime;
+}
+
+/*!
+ Returns the date and time at which this position was reported, in UTC time.
+
+ Returns an invalid QDateTime if no date/time value has been set.
+
+ \sa setDateTime()
+*/
+QDateTime QGeoPositionInfo::dateTime() const
+{
+ return d->dateTime;
+}
+
+/*!
+ Sets the coordinate for this position to \a coordinate.
+
+ \sa coordinate()
+*/
+void QGeoPositionInfo::setCoordinate(const QGeoCoordinate &coordinate)
+{
+ d->coord = coordinate;
+}
+
+/*!
+ Returns the coordinate for this position.
+
+ Returns an invalid coordinate if no coordinate has been set.
+
+ \sa setCoordinate()
+*/
+QGeoCoordinate QGeoPositionInfo::coordinate() const
+{
+ return d->coord;
+}
+
+/*!
+ Sets the value for \a property to \a value.
+
+ \sa property()
+*/
+void QGeoPositionInfo::setProperty(Property property, qreal value)
+{
+ d->doubleProps[int(property)] = value;
+}
+
+/*!
+ Returns the value of the specified \a property as a qreal value.
+
+ Returns -1 if the value has not been set.
+
+ \sa hasProperty(), setProperty()
+*/
+qreal QGeoPositionInfo::property(Property property) const
+{
+ if (d->doubleProps.contains(int(property)))
+ return d->doubleProps[int(property)];
+ return -1;
+}
+
+/*!
+ Removes the specified \a property and its value.
+*/
+void QGeoPositionInfo::removeProperty(Property property)
+{
+ d->doubleProps.remove(int(property));
+}
+
+/*!
+ Returns true if the specified \a property is present for this
+ QGeoPositionInfo object.
+*/
+bool QGeoPositionInfo::hasProperty(Property property) const
+{
+ return d->doubleProps.contains(int(property));
+}
+
+#ifndef QT_NO_DEBUG_STREAM
+QDebug operator<<(QDebug dbg, const QGeoPositionInfo &update)
+{
+ dbg.nospace() << "QGeoPositionInfo(" << update.d->dateTime;
+ dbg.nospace() << ", ";
+ dbg.nospace() << update.d->coord;
+
+ QList<int> props = update.d->doubleProps.keys();
+ for (int i=0; i<props.count(); i++) {
+ dbg.nospace() << ", ";
+ switch (props[i]) {
+ case QGeoPositionInfo::Heading:
+ dbg.nospace() << "Heading=";
+ break;
+ case QGeoPositionInfo::GroundSpeed:
+ dbg.nospace() << "GroundSpeed=";
+ break;
+ case QGeoPositionInfo::VerticalSpeed:
+ dbg.nospace() << "VerticalSpeed=";
+ break;
+ case QGeoPositionInfo::MagneticVariation:
+ dbg.nospace() << "MagneticVariation=";
+ break;
+ case QGeoPositionInfo::HorizontalAccuracy:
+ dbg.nospace() << "HorizontalAccuracy=";
+ break;
+ case QGeoPositionInfo::VerticalAccuracy:
+ dbg.nospace() << "VerticalAccuracy=";
+ break;
+ }
+ dbg.nospace() << update.d->doubleProps[props[i]];
+ }
+ dbg.nospace() << ')';
+ return dbg;
+}
+#endif
+
+#ifndef QT_NO_DATASTREAM
+QDataStream &operator<<(QDataStream &stream, const QGeoPositionInfo &update)
+{
+ stream << update.d->dateTime;
+ stream << update.d->coord;
+ stream << update.d->doubleProps;
+ return stream;
+}
+#endif
+
+#ifndef QT_NO_DATASTREAM
+QDataStream &operator>>(QDataStream &stream, QGeoPositionInfo &update)
+{
+ stream >> update.d->dateTime;
+ stream >> update.d->coord;
+ stream >> update.d->doubleProps;
+ return stream;
+}
+#endif
diff --git a/location/qgeopositioninfo.h b/location/qgeopositioninfo.h
new file mode 100644
index 0000000000..3cecd2bd2a
--- /dev/null
+++ b/location/qgeopositioninfo.h
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QGEOPOSITIONINFO_H
+#define QGEOPOSITIONINFO_H
+
+#include "qlocationglobal.h"
+#include "qgeocoordinate.h"
+
+#include <QDateTime>
+
+class QDebug;
+class QDataStream;
+class QGeoPositionInfoPrivate;
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class Q_LOCATION_EXPORT QGeoPositionInfo
+{
+public:
+ enum Property {
+ Heading,
+ GroundSpeed,
+ VerticalSpeed,
+ MagneticVariation,
+ HorizontalAccuracy,
+ VerticalAccuracy
+ };
+
+ QGeoPositionInfo();
+ QGeoPositionInfo(const QGeoCoordinate &coordinate, const QDateTime &updateTime);
+ QGeoPositionInfo(const QGeoPositionInfo &other);
+ ~QGeoPositionInfo();
+
+ QGeoPositionInfo &operator=(const QGeoPositionInfo &other);
+
+ bool operator==(const QGeoPositionInfo &other) const;
+ inline bool operator!=(const QGeoPositionInfo &other) const { return !operator==(other); }
+
+ bool isValid() const;
+
+ void setDateTime(const QDateTime &dateTime);
+ QDateTime dateTime() const;
+
+ void setCoordinate(const QGeoCoordinate &coordinate);
+ QGeoCoordinate coordinate() const;
+
+ void setProperty(Property property, qreal value);
+ qreal property(Property property) const;
+ void removeProperty(Property property);
+
+ bool hasProperty(Property property) const;
+
+private:
+#ifndef QT_NO_DEBUG_STREAM
+ friend Q_LOCATION_EXPORT QDebug operator<<(QDebug dbg, const QGeoPositionInfo &update);
+#endif
+#ifndef QT_NO_DATASTREAM
+ friend Q_LOCATION_EXPORT QDataStream &operator<<(QDataStream &stream, const QGeoPositionInfo &update);
+ friend Q_LOCATION_EXPORT QDataStream &operator>>(QDataStream &stream, QGeoPositionInfo &update);
+#endif
+ QGeoPositionInfoPrivate *d;
+};
+
+#ifndef QT_NO_DEBUG_STREAM
+Q_LOCATION_EXPORT QDebug operator<<(QDebug dbg, const QGeoPositionInfo &update);
+#endif
+
+#ifndef QT_NO_DATASTREAM
+Q_LOCATION_EXPORT QDataStream &operator<<(QDataStream &stream, const QGeoPositionInfo &update);
+Q_LOCATION_EXPORT QDataStream &operator>>(QDataStream &stream, QGeoPositionInfo &update);
+#endif
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/location/qgeopositioninfosource.cpp b/location/qgeopositioninfosource.cpp
new file mode 100644
index 0000000000..d61a30da49
--- /dev/null
+++ b/location/qgeopositioninfosource.cpp
@@ -0,0 +1,255 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qgeopositioninfosource.h"
+
+#if defined(Q_OS_SYMBIAN)
+# include "qgeopositioninfosource_s60_p.h"
+#endif
+
+/*!
+ \class QGeoPositionInfoSource
+ \brief The QGeoPositionInfoSource class is an abstract base class for the distribution of positional updates.
+
+ The static function QGeoPositionInfoSource::createSource() creates a default
+ position source that is appropriate for the platform, if one is available.
+ Otherwise, QGeoPositionInfoSource can be subclassed to create an appropriate
+ custom source of position data.
+
+ Users of a QGeoPositionInfoSource subclass can request the current position using
+ requestUpdate(), or start and stop regular position updates using
+ startUpdates() and stopUpdates(). When an update is available,
+ positionUpdate() is emitted. The last known position can be accessed with
+ lastUpdate().
+
+ If regular position updates are required, setUpdateInterval() can be used
+ to specify how often these updates should be emitted. (If no interval is
+ specified, updates are simply provided whenever they are available.)
+ For example:
+
+ \code
+ // Emit updates every 10 seconds if available
+ QGeoPositionInfoSource *source = QGeoPositionInfoSource::createSource();
+ source->setUpdateInterval(10000);
+ \endcode
+
+ To remove an update interval that was previously set, call
+ setUpdateInterval() with a value of 0.
+
+ Note that the position source may have a minimum value requirement for
+ update intervals, as returned by minimumIntervalForType().
+*/
+
+/*!
+ \enum QGeoPositionInfoSource::PositioningMethod
+ Defines the types of positioning methods.
+
+ \value SatellitePositioningMethods Satellite-based positioning methods such as GPS.
+ \value NonSatellitePositioningMethods Other positioning methods.
+ \value AllPositioningMethods A flag that matches all positioning methods.
+*/
+
+class QGeoPositionInfoSourcePrivate
+{
+public:
+ int interval;
+ QGeoPositionInfoSource::PositioningMethods methods;
+};
+
+
+/*!
+ Creates a position source with the specified \a parent.
+*/
+
+QGeoPositionInfoSource::QGeoPositionInfoSource(QObject *parent)
+ : QObject(parent),
+ d(new QGeoPositionInfoSourcePrivate)
+{
+ d->interval = 0;
+ d->methods = 0;
+}
+
+/*!
+ Destroys the position source.
+*/
+QGeoPositionInfoSource::~QGeoPositionInfoSource()
+{
+ delete d;
+}
+
+/*!
+ Sets the source to emit updates every \a msec milliseconds.
+ If \a msec is 0, the source will provide updates using a default interval
+ or some internal logic that determines when an update should be provided.
+
+ If \a msec is not 0 and is less than the value returned by
+ minimumUpdateInterval(), the interval will be set to the minimum interval.
+
+ Note that implementations may not provide updates at the exact
+ interval specified. For example, a given millisecond interval value may be
+ rounded to the nearest second if the implementation does not support
+ intervals specified to millisecond precision.
+
+ \bold {Note:} When reimplementing this method, subclasses must call the
+ base method implementation to ensure updateInterval() returns the correct
+ value.
+*/
+void QGeoPositionInfoSource::setUpdateInterval(int msec)
+{
+ d->interval = msec;
+}
+
+/*!
+ Returns the interval value set by setUpdateInterval().
+
+ Returns 0 if no interval has been set.
+*/
+int QGeoPositionInfoSource::updateInterval() const
+{
+ return d->interval;
+}
+
+/*!
+ Sets the preferred positioning methods for this source to \a methods.
+
+ If \a methods includes a method that is not supported by the source, the
+ unsupported method will be ignored.
+
+ \bold {Note:} When reimplementing this method, subclasses must call the
+ base method implementation to ensure preferredPositioningMethods() returns the correct value.
+
+ \sa supportedPositioningMethods()
+*/
+void QGeoPositionInfoSource::setPreferredPositioningMethods(PositioningMethods methods)
+{
+ d->methods = methods;
+}
+
+/*!
+ Returns the positioning methods set by setPreferredPositioningMethods().
+*/
+QGeoPositionInfoSource::PositioningMethods QGeoPositionInfoSource::preferredPositioningMethods() const
+{
+ return d->methods;
+}
+
+/*!
+ Creates and returns a position source with the given \a parent that
+ reads from the system's default sources of location data.
+
+ Returns 0 if the system has no default position source.
+*/
+
+QGeoPositionInfoSource *QGeoPositionInfoSource::createSource(QObject *parent)
+{
+#if defined(Q_OS_SYMBIAN)
+ return CQGeoPositionInfoSourceS60::NewL(parent);
+#else
+ Q_UNUSED(parent);
+#endif
+ return 0;
+}
+
+/*!
+ \fn QGeoPositionInfo QGeoPositionInfoSource::lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const = 0;
+
+ Returns an update containing the last known position, or a null update
+ if none is available.
+
+ If \a fromSatellitePositioningMethodsOnly is true, this returns the last
+ known position received from a satellite positioning method; if none
+ is available, a null update is returned.
+*/
+
+/*!
+ \fn virtual PositioningMethods QGeoPositionInfoSource::supportedPositioningMethods() const = 0;
+
+ Returns the positioning methods available to this source.
+
+ \sa setPreferredPositioningMethods()
+*/
+
+/*!
+ \fn virtual int QGeoPositionInfoSource::minimumUpdateInterval() const = 0;
+
+ Returns the minimum value accepted by setUpdateInterval().
+*/
+
+
+/*!
+ \fn virtual void QGeoPositionInfoSource::startUpdates() = 0;
+
+ Starts emitting updates at regular intervals as specified by setUpdateInterval().
+
+ If setUpdateInterval() has not been called, the source will emit updates
+ as soon as they become available.
+*/
+
+/*!
+ \fn virtual void QGeoPositionInfoSource::stopUpdates() = 0;
+
+ Stops emitting updates at regular intervals.
+*/
+
+/*!
+ \fn virtual void QGeoPositionInfoSource::requestUpdate(int timeout = 5000);
+
+ Attempts to get the current position and emit positionUpdated() with
+ this information. This is useful if you do not need the regular updates
+ provided by startUpdates(). If the current position cannot be found
+ within the given \a timeout (in milliseconds), requestTimeout() is
+ emitted.
+
+ This does nothing if another update request is in progress. However
+ it can be called even if startUpdates() has already been called and
+ regular updates are in progress.
+
+ If the source uses multiple positioning methods, it tries to gets the
+ current position from the most accurate positioning method within the
+ given timeout.
+*/
+
+/*!
+ \fn void QGeoPositionInfoSource::positionUpdated(const QGeoPositionInfo &update);
+
+ If startUpdates() or requestUpdate() is called, this signal is emitted
+ when an update becomes available.
+
+ The \a update value holds the value of the new update.
+*/
+
+/*!
+ \fn void QGeoPositionInfoSource::requestTimeout();
+
+ Emitted if requestUpdate() was called and the current position could
+ not be retrieved within the specified timeout.
+*/
diff --git a/location/qgeopositioninfosource.h b/location/qgeopositioninfosource.h
new file mode 100644
index 0000000000..b82ae0f2a3
--- /dev/null
+++ b/location/qgeopositioninfosource.h
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QGEOPOSITIONINFOSOURCE_H
+#define QGEOPOSITIONINFOSOURCE_H
+
+#include "qlocationglobal.h"
+#include "qgeopositioninfo.h"
+
+#include <QObject>
+
+class QGeoPositionInfoSourcePrivate;
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+
+class Q_LOCATION_EXPORT QGeoPositionInfoSource : public QObject
+{
+ Q_OBJECT
+public:
+ enum PositioningMethod {
+ SatellitePositioningMethods = 0x000000ff,
+ NonSatellitePositioningMethods = 0xffffff00,
+ AllPositioningMethods = 0xffffffff
+ };
+ Q_DECLARE_FLAGS(PositioningMethods, PositioningMethod)
+
+ explicit QGeoPositionInfoSource(QObject *parent = 0);
+ virtual ~QGeoPositionInfoSource();
+
+ virtual void setUpdateInterval(int msec);
+ int updateInterval() const;
+
+ virtual void setPreferredPositioningMethods(PositioningMethods methods);
+ PositioningMethods preferredPositioningMethods() const;
+
+ virtual QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const = 0;
+
+ virtual PositioningMethods supportedPositioningMethods() const = 0;
+ virtual int minimumUpdateInterval() const = 0;
+
+ static QGeoPositionInfoSource *createSource(QObject *parent = 0);
+
+public slots:
+ virtual void startUpdates() = 0;
+ virtual void stopUpdates() = 0;
+
+ virtual void requestUpdate(int timeout = 5000) = 0;
+
+signals:
+ void positionUpdated(const QGeoPositionInfo &update);
+ void requestTimeout();
+
+private:
+ Q_DISABLE_COPY(QGeoPositionInfoSource)
+ QGeoPositionInfoSourcePrivate *d;
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(QGeoPositionInfoSource::PositioningMethods)
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/location/qgeopositioninfosource_s60.cpp b/location/qgeopositioninfosource_s60.cpp
new file mode 100644
index 0000000000..4af9818674
--- /dev/null
+++ b/location/qgeopositioninfosource_s60.cpp
@@ -0,0 +1,947 @@
+/* /****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <limits.h>
+
+#include <QObject>
+#include <QDateTime>
+#include "qgeopositioninfosource_s60_p.h"
+#include "qgeopositioninfosource.h"
+#include "qmlbackendao_s60_p.h"
+
+// constructor
+CQGeoPositionInfoSourceS60::CQGeoPositionInfoSourceS60(QObject * parent) : QGeoPositionInfoSource(parent),
+ currentModuleID(TUid::Null()),reqmoduleID(TUid::Null()),devStatusUpdateAO(NULL),
+ reqUpdateAO(NULL),regUpdateAO(NULL),supportedMethods(PositioningMethod(0)),currentMethod(PositioningMethod(0)),
+ ListSize(0),mStartUpdates(FALSE),ModuleFlags(0)
+ {
+ memset(list, 0 , MAX_SIZE * sizeof(CPosMethodInfo));
+ }
+
+// destructor
+CQGeoPositionInfoSourceS60::~CQGeoPositionInfoSourceS60()
+ {
+ if (reqUpdateAO)
+ delete reqUpdateAO;
+ if (regUpdateAO)
+ delete regUpdateAO;
+ if (devStatusUpdateAO)
+ delete devStatusUpdateAO;
+
+
+ }
+
+// static function NewLC
+CQGeoPositionInfoSourceS60* CQGeoPositionInfoSourceS60::NewLC(QObject * parent)
+ {
+ CQGeoPositionInfoSourceS60* self =
+ new (ELeave) CQGeoPositionInfoSourceS60(parent);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+// static function NewL
+CQGeoPositionInfoSourceS60* CQGeoPositionInfoSourceS60::NewL(QObject * parent)
+ {
+ CQGeoPositionInfoSourceS60* self = CQGeoPositionInfoSourceS60::NewLC(parent);
+ CleanupStack::Pop();
+
+ //check if the second phase construction is successful
+ if( !self->isValid())
+ {
+ delete self;
+ self = NULL;
+ }
+
+ return self;
+ }
+
+// 2nd phase constructor
+void CQGeoPositionInfoSourceS60::ConstructL()
+ {
+ TInt error = mPositionServer.Connect();
+
+ if(error == KErrNone)
+ {
+ CleanupClosePushL( mPositionServer );
+
+ devStatusUpdateAO = CQMLBackendAO::NewL(this,REQ_DEV_STATUS);
+
+ if( devStatusUpdateAO == NULL)
+ {
+ CleanupStack::Pop(1);
+
+ return;
+ }
+
+ //update the list array with the available method initially
+ UpdateDeviceStatus();
+
+ //devStatusUpdateAO->NotifyDeviceStatus(mStatusEvent);
+
+ CleanupStack::PushL(devStatusUpdateAO);
+
+ if(currentModuleID != TUid::Null())
+ regUpdateAO = CQMLBackendAO::NewL(this,REQ_REG_UPDATE,currentModuleID);
+
+ CleanupStack::Pop(2);
+ }
+
+ }
+
+QGeoPositionInfo CQGeoPositionInfoSourceS60::getLastknownPositionS60(TPositionModuleId moduleID) const
+ {
+ TRequestStatus status;
+ TPosition pos;
+ TInt error = KErrNone;
+ RPositioner iLastKnownpositioner;
+ QGeoPositionInfo posUpdate;
+
+
+ error=iLastKnownpositioner.Open(*const_cast<RPositionServer*>(&mPositionServer),moduleID);
+ //request for lastknown position update and wait for the request to complete
+ if(error == KErrNone)
+ {
+ TPositionInfo posInfo;
+ TReal val;
+
+ iLastKnownpositioner.SetRequestor( CRequestor::ERequestorService ,
+ CRequestor::EFormatApplication, _L("QTmobility_Location"));
+
+
+ iLastKnownpositioner.GetLastKnownPosition(posInfo,status);
+
+ User::WaitForRequest(status);
+
+ error = status.Int();
+
+ iLastKnownpositioner.Close();
+
+ if( (error == KErrNone) || (error == KPositionPartialUpdate))
+ {
+ QGeoCoordinate coord;
+
+ posInfo.GetPosition(pos);
+
+ coord.setLatitude(pos.Latitude());
+ coord.setLongitude(pos.Longitude());
+ coord.setAltitude(pos.Altitude());
+
+ //store the QGeoCoordinate values
+ posUpdate.setCoordinate(coord);
+
+ TDateTime datetime = pos.Time().DateTime();
+ QDateTime dt(QDate(datetime.Year(),datetime.Month(),datetime.Day()),
+ QTime(datetime.Hour(),datetime.Minute(),datetime.Second(),
+ datetime.MicroSecond()/1000));
+
+ //store the time stamp
+ posUpdate.setDateTime(dt);
+
+ //store the horizontal accuracy
+ posUpdate.setProperty(QGeoPositionInfo::HorizontalAccuracy,pos.HorizontalAccuracy());
+
+ //store the vertical accuracy
+ posUpdate.setProperty(QGeoPositionInfo::VerticalAccuracy,pos.VerticalAccuracy());
+ }
+ }
+ return posUpdate;
+ }
+
+// lastknownPosition
+QGeoPositionInfo CQGeoPositionInfoSourceS60::lastKnownPosition ( bool fromSatellitePositioningMethodsOnly ) const
+ {
+ //update_available_types();
+ TUint8 bits;
+ TInt index = -1;
+ TPositionModuleId modID;
+ QGeoPositionInfo posUpdate;
+
+ if ( fromSatellitePositioningMethodsOnly )
+
+ {
+ if( currentMethod == SatellitePositioningMethods)
+
+ {
+ posUpdate = getLastknownPositionS60(currentModuleID);
+ }
+
+ else if( supportedMethods & SatellitePositioningMethods )
+ {
+ bits = ModuleFlags;
+
+ PositioningMethod method = SatellitePositioningMethods;
+
+ do
+ {
+ index = getIndexPositionModule(bits);
+
+ if( index < 0)
+ break;
+
+ modID = list[index].mUid;
+
+ posUpdate = getLastknownPositionS60(modID);
+
+ if(posUpdate.isValid())
+ break;
+
+ bits = bits & (0XFF ^ (1<<index));
+ }while(1);
+
+ }
+ }
+
+ else
+ {
+ bits = ModuleFlags;
+ do
+ {
+ index = getIndexPositionModule(bits);
+
+ if( index < 0)
+ break;
+
+ modID = list[index].mUid;
+
+ posUpdate = getLastknownPositionS60(modID);
+
+ if(posUpdate.isValid())
+ break;
+
+ bits = bits & (0XFF ^ (1<<index));
+ }while(1);
+
+
+ }
+
+ return posUpdate;
+ }
+
+//
+int CQGeoPositionInfoSourceS60::minimumUpdateInterval () const
+ {
+ if(currentModuleID == TUid::Null())
+ return 0;
+
+ TInt i = checkmodule(currentModuleID);
+ if (i!= -1)
+ return list[i].mTimeToNextFix.Int64()/1000; //divide by 1000, to convert microsecond to milisecond
+ return 0;
+}
+
+
+
+//private function : to derive the supported positioning methods
+void CQGeoPositionInfoSourceS60::update_available_types()
+ {
+ PositioningMethods types;
+
+ for(TInt i = 0;i < ListSize ; i++)
+ {
+ //check only for the available module without any device errors
+ if(list[i].mIsAvailable &&
+ (list[i].mStatus != TPositionModuleStatus::EDeviceUnknown) &&
+ (list[i].mStatus != TPositionModuleStatus::EDeviceError) )
+ {
+ types |= list[i].mPosMethod;
+
+ }
+
+ //if both SatellitePositioningMethods and NonSatellitePositioningMethods return
+ if( types.testFlag(AllPositioningMethods))
+ break;
+ }
+
+ //update the supported methods based on types value, derived from the above steps
+ supportedMethods = types;
+ }
+
+//private function : to retrieve the index of the supplied module id from the list array
+TInt CQGeoPositionInfoSourceS60::checkmodule(TPositionModuleId id)const
+ {
+ TInt i;
+ for(i=0;i<ListSize;i++)
+ if(list[i].mUid == id)
+ return i;
+ return -1;
+ }
+
+//private function : get the index of the list that supports the preferred method if
+//available,else returns the index of the default module
+TInt CQGeoPositionInfoSourceS60::getIndexPositionModule(TUint8 aBits,PositioningMethods posMethods) const
+ {
+ TInt index,error;
+
+ TPositionModuleId modID;
+
+ //get the default module Id, whose index is returned if the preferred methods are not
+ //available
+ error = mPositionServer.GetDefaultModuleId(modID);
+
+ if(error != KErrNone)
+ modID = TUid::Null();
+
+ //index = -1 : no methods available in the list that supports preferred methods
+ index= -1;
+
+
+ for(TInt i = 0; i < ListSize ; i++)
+ {
+ //check the module properties to select the preferred method,search should not
+ //not select an unavailable method,error device or index matching aLastIndex
+ if( list[i].mIsAvailable && posMethods.testFlag(list[i].mPosMethod)
+ && (list[i].mStatus != TPositionModuleStatus::EDeviceUnknown)
+ && (list[i].mStatus != TPositionModuleStatus::EDeviceError)
+ && ( ((aBits >> i) & 1) ))
+ {
+ return i;
+ }
+
+ //store the index of the default module
+ if( (modID == list[i].mUid) && ((aBits >> i) & 1))
+ index = i;
+ }
+
+
+ return index;
+ }
+
+//private function : to get the index of the positioning method with time to first fix
+//lesser than timeout
+TInt CQGeoPositionInfoSourceS60::getMoreAccurateMethod(TInt aTimeout,TUint8 aBits)
+ {
+ TInt index = -1, temp = INT_MAX;
+ PositioningMethods posMethods;
+ TTimeIntervalMicroSeconds microSeconds;
+
+ posMethods = preferredPositioningMethods();
+
+ //convert the timeout --> micro seconds
+ microSeconds = aTimeout * 1000;
+
+ for(TInt i =0 ;i < ListSize ; i++)
+ {
+ if( list[i].mIsAvailable
+ //&& posMethods.testFlag(list[i].mPosMethod)
+ && (list[i].mStatus != TPositionModuleStatus::EDeviceUnknown)
+ && (list[i].mStatus != TPositionModuleStatus::EDeviceError)
+ && (((aBits >> i) & 1))
+ && (list[i].mTimeToFirstFix < microSeconds))
+ {
+ if( list[i].mhorizontalAccuracy < temp )
+ {
+ index = i;
+ temp = list[i].mhorizontalAccuracy;
+ }
+ }
+ }
+ return index;
+ }
+
+//private function : to update the list array
+void CQGeoPositionInfoSourceS60::update_status(TPositionModuleInfo aModInfo,TInt aStatus)
+ {
+
+ TInt i,error, index;
+ TPositionModuleId id;
+ PositioningMethod method;
+ TBool available;
+ TReal32 accuracy;
+ TTimeIntervalMicroSeconds time_to_first_fix,time_to_next_fix;
+ TPositionQuality quality;
+ CQMLBackendAO *temp = NULL;
+
+ //query for the following parameters
+ id = aModInfo.ModuleId();
+
+ //module with a satellite capability is assumed to be provided satellite based positioning
+ //method
+ method = (aModInfo.Capabilities() & TPositionModuleInfo::ECapabilitySatellite) ?
+ SatellitePositioningMethods : NonSatellitePositioningMethods;
+
+ //gets the device availability based on the user settings
+ available = aModInfo.IsAvailable();
+
+ //quality : holds the required metrics
+ aModInfo.GetPositionQuality(quality);
+
+ //Accuracy
+ accuracy = quality.HorizontalAccuracy();
+
+ //time taken for the first fix
+ time_to_first_fix = quality.TimeToFirstFix();
+
+ //time taken for the subsequent fix
+ time_to_next_fix = quality.TimeToNextFix();
+
+
+ if( (i = checkmodule(id)) == -1)
+ {
+ //store the correct method in use from the currentmoduleID retireved earlier
+ if( id == currentModuleID)
+ {
+ currentMethod = method;
+ QGeoPositionInfoSource::setPreferredPositioningMethods(currentMethod);
+ }
+ //update the properties of the module
+
+ //TPositionModuleId of the module
+ list[ListSize].mUid = id;
+
+ //positioning method method type
+ list[ListSize].mPosMethod = method;
+
+ //status of the device
+ list[ListSize].mStatus = aStatus;
+
+ //availablility of the module
+ list[ListSize].mIsAvailable = available;
+
+ //horizontal accuracy of the module
+ list[ListSize].mhorizontalAccuracy = accuracy;
+
+ //time required to get the first fix
+ list[ListSize].mTimeToFirstFix = time_to_first_fix;
+
+ //time required for subsequent fix
+ list[ListSize].mTimeToNextFix = time_to_next_fix;
+
+ //count on the list array size
+ ListSize++;
+ }
+ else
+ {
+ //module's status has changed
+ if(list[i].mStatus != aStatus)
+ list[i].mStatus = aStatus;
+
+ //module's availability has changed
+ if(list[i].mIsAvailable != available)
+ list[i].mIsAvailable = available;
+
+ //module's horizontal accuracy has changed
+ if(list[i].mhorizontalAccuracy != accuracy)
+ list[i].mhorizontalAccuracy = accuracy;
+
+ //module's time to first fix has changed
+ if(list[i].mTimeToFirstFix != time_to_first_fix)
+ list[i].mTimeToFirstFix = time_to_first_fix;
+
+ //module's time to subsequent fix has changed
+ if(list[i].mTimeToNextFix != time_to_next_fix)
+ list[i].mTimeToFirstFix = time_to_next_fix;
+
+ //if the currentModuleID is NULL, try updating the reg update with the available
+ //positioning method
+ if( currentModuleID == TUid::Null() && (available == TRUE) &&
+ (aStatus != TPositionModuleStatus::EDeviceUnknown) &&
+ (aStatus !=TPositionModuleStatus::EDeviceError))
+ {
+ TInt interval;
+
+ interval = QGeoPositionInfoSource::updateInterval();
+
+ TRAPD(ret , temp = CQMLBackendAO::NewL(this,REQ_REG_UPDATE,
+ list[i].mUid));
+
+ if((ret == KErrNone) && (temp != NULL))
+ {
+ temp->setUpdateInterval(interval);
+
+ regUpdateAO = temp;
+
+ //to be uncommented when startUpdates are done
+
+ if(mStartUpdates)
+ regUpdateAO->startUpdates();
+
+
+ currentModuleID = list[i].mUid;
+
+ currentMethod = list[i].mPosMethod;
+
+ QGeoPositionInfoSource::setPreferredPositioningMethods(currentMethod);
+ }
+ }
+
+ //check if the status of the currently used modules for regular update or
+ //request update has changed
+ if( ((id == currentModuleID)||(id == reqmoduleID)) &&
+ ((aStatus== TPositionModuleStatus::EDeviceUnknown) ||
+ (aStatus==TPositionModuleStatus::EDeviceError) ||
+ (available == FALSE)) )
+ {
+ //if the change happened for regular update
+ if( id == currentModuleID)
+ {
+ TInt interval;
+
+ TUint8 bits;
+
+ interval = QGeoPositionInfoSource::updateInterval();
+
+ delete regUpdateAO;
+
+ error = -1;
+
+ bits = ModuleFlags;
+
+ do
+ {
+ //error = Get the index of the positioning module based on
+ //the preferred method if available , else get the default
+ //position module
+ index = getIndexPositionModule(bits);
+
+ if(index >= 0)
+ {
+ TRAPD(ret,temp = CQMLBackendAO::NewL(this,REQ_REG_UPDATE,
+ list[index].mUid));
+
+ if((ret == KErrNone) && (temp != NULL))
+ break;
+
+ bits = bits & (0XFF ^ (1<<index));
+ }
+ }while( index >= 0);
+
+
+ if(temp != NULL)
+ {
+ //successful in creating the subsession for the required
+ //method
+ regUpdateAO = temp;
+
+ regUpdateAO->setUpdateInterval(interval);
+
+ //to be uncommented when startUpdates are done
+
+ if(mStartUpdates)
+ regUpdateAO->startUpdates();
+
+
+ currentModuleID = list[index].mUid;
+ currentMethod = list[index].mPosMethod;
+ QGeoPositionInfoSource::setPreferredPositioningMethods(currentMethod);
+ }
+ else
+ {
+ //no methods available,clean up the resources
+ regUpdateAO = NULL;
+ currentModuleID = TUid::Null();
+ currentMethod = PositioningMethod(0);
+ QGeoPositionInfoSource::setPreferredPositioningMethods(currentMethod);
+ }
+
+ }
+
+ //check if device status of the request update module changed
+ if(id == reqmoduleID)
+ {
+ delete reqUpdateAO;
+ reqUpdateAO = NULL;
+ reqmoduleID = TUid::Null();
+ emit requestTimeout;
+ }
+
+ }
+
+ } //end else
+
+ //update the supported source types based on the device status
+ update_available_types();
+ }
+
+
+// Notification methods from active object. Notifies device status changes
+void CQGeoPositionInfoSourceS60::UpdateDeviceStatus(void)
+ {
+ TPositionModuleStatus moduleStatus;
+ TPositionModuleInfo moduleInfo;
+ TInt error;
+
+ //ListSize = 0 : called updateDeviceStatus() first time to initialise the array
+ if(ListSize == 0)
+ {
+ TUint modCount;
+
+ //count on the modules currently supported by the device
+ mPositionServer.GetNumModules(modCount);
+
+ //module ID of the default module
+ error = mPositionServer.GetDefaultModuleId(currentModuleID);
+
+ if(error != KErrNone)
+ currentModuleID = TUid::Null();
+
+ for(TInt i = 0;i < modCount ; i++)
+ {
+ //get module information
+ mPositionServer.GetModuleInfoByIndex(i,moduleInfo);
+
+ //get module status
+ mPositionServer.GetModuleStatus(moduleStatus,moduleInfo.ModuleId());
+
+ //update the properties of the module in the list array
+ update_status(moduleInfo,moduleStatus.DeviceStatus());
+
+ ModuleFlags |= (1 << i);
+ }
+ }
+ else
+ {
+ //UpdateDeviceStatus() called afetr registering for NotifyModuleStatusEvent
+
+ //get the module id from the status event
+ TPositionModuleId id = mStatusEvent.ModuleId();
+
+ //get module information
+ mPositionServer.GetModuleInfoById(id,moduleInfo);
+
+ //get current status of the module
+ mStatusEvent.GetModuleStatus(moduleStatus);
+
+ //update the properties of the module in the list array
+ update_status(moduleInfo,moduleStatus.DeviceStatus());
+
+
+ }
+
+ //register for next NotifyModuleStatusEvent
+ devStatusUpdateAO->NotifyDeviceStatus(mStatusEvent);
+
+ }
+
+//
+void CQGeoPositionInfoSourceS60::TPositionInfo2QGeoPositionInfo(
+ HPositionGenericInfo *mPosInfo, QGeoPositionInfo& posInfo)
+ {
+ TPosition pos;
+ QGeoCoordinate coord;
+ double val;
+
+ mPosInfo->GetPosition(pos);
+
+
+ coord.setLatitude(pos.Latitude());
+ coord.setLongitude(pos.Longitude());
+ coord.setAltitude(pos.Altitude());
+
+ //store the QGeoCoordinate values
+ posInfo.setCoordinate(coord);
+
+ TDateTime datetime = pos.Time().DateTime();
+ QDateTime dt(QDate(datetime.Year(),datetime.Month(),datetime.Day()),
+ QTime(datetime.Hour(),datetime.Minute(),datetime.Second(),
+ datetime.MicroSecond()/1000));
+
+ //store the time stamp
+ posInfo.setDateTime(dt);
+
+ //store the horizontal accuracy
+ posInfo.setProperty(QGeoPositionInfo::HorizontalAccuracy,pos.HorizontalAccuracy());
+
+ //store the vertical accuracy
+ posInfo.setProperty(QGeoPositionInfo::VerticalAccuracy,pos.VerticalAccuracy());
+
+ //check for the horizontal speed
+ if(mPosInfo->IsFieldAvailable(EPositionFieldHorizontalSpeed))
+ {
+ mPosInfo->GetValue(EPositionFieldHorizontalSpeed,val);
+ posInfo.setProperty(QGeoPositionInfo::GroundSpeed,val);
+ }
+
+ //check for the vertcal speed
+ if(mPosInfo->IsFieldAvailable(EPositionFieldVerticalSpeed))
+ {
+ mPosInfo->GetValue(EPositionFieldVerticalSpeed,val);
+ posInfo.setProperty(QGeoPositionInfo::VerticalSpeed,val);
+ }
+
+ //check for the magnetic variation
+ if(mPosInfo->IsFieldAvailable(EPositionFieldMagneticCourseError))
+ {
+ mPosInfo->GetValue(EPositionFieldMagneticCourseError,val);
+ posInfo.setProperty(QGeoPositionInfo::MagneticVariation,val);
+ }
+
+ //check for the heading
+ if(mPosInfo->IsFieldAvailable(EPositionFieldHeading))
+ {
+ mPosInfo->GetValue(EPositionFieldHeading,val);
+ posInfo.setProperty(QGeoPositionInfo::Heading,val);
+ }
+ }
+//
+void CQGeoPositionInfoSourceS60::UpdatePosition(HPositionGenericInfo *mPosInfo, int error)
+ {
+ QGeoPositionInfo posInfo;
+
+ if(error == KErrNone)
+ {
+ //fill posUpdate
+ TPositionInfo2QGeoPositionInfo(mPosInfo,posInfo);
+
+ //emit posUpdate
+ emit positionUpdated(posInfo);
+ }
+
+ else if(error == KErrTimedOut)
+ {
+ //request has timed out
+ emit requestTimeout();
+ }
+
+ else
+ {
+ //posiitoning module is unable to return any position information
+ emit positionUpdated(posInfo);
+ }
+ }
+
+// Returns the PositionServer handle
+RPositionServer& CQGeoPositionInfoSourceS60:: getPositionServer()
+ {
+ return mPositionServer;
+ }
+
+
+// for request update
+void CQGeoPositionInfoSourceS60::requestUpdate ( int timeout)
+ {
+ TInt index = -1;
+ TUint8 bits;
+
+ CQMLBackendAO *temp;
+
+ //return if already a request update is pending
+ if(reqUpdateAO && reqUpdateAO->IsRequestPending())
+ return;
+
+
+ bits = ModuleFlags;
+
+ do {
+
+ //index of the more accurate method in the array
+ index = getMoreAccurateMethod(timeout,bits);
+
+ //no positioning method method available : emit requestTimeout
+ if(index < 0)
+ {
+ emit requestTimeout();
+ break;
+ }
+ //if the selected module for request update is same as the previous one reuse the request
+ if(list[index].mUid == reqmoduleID)
+ {
+ reqUpdateAO->requestUpdate(timeout);
+ return;
+ }
+
+ TRAPD(ret,temp = CQMLBackendAO::NewL(this,REQ_ONCE_UPDATE,list[index].mUid));
+
+ if((ret == KErrNone) && (temp != NULL))
+ {
+ //delete the old reqest update
+ delete reqUpdateAO;
+
+ //set the requestAO to the newly created AO
+ reqUpdateAO = temp;
+
+ //set the request module ID
+ reqmoduleID = list[index].mUid;
+
+ //start the update
+ reqUpdateAO->requestUpdate(timeout);
+
+ return;
+ }
+
+ bits = bits & (0XFF ^ (1<<index));
+
+ }while( index >=0 );
+
+ //cleanup resources if the invalid requpdate is still stored
+ if(reqUpdateAO)
+ {
+ delete reqUpdateAO;
+ reqmoduleID = TUid::Null();
+ }
+
+ }
+
+// starts the regular updates
+void CQGeoPositionInfoSourceS60::startUpdates ()
+ {
+ if (receivers(SIGNAL(positionUpdated(QGeoPositionInfo))) > 0 && !mStartUpdates)
+ regUpdateAO->startUpdates();
+ mStartUpdates = true;
+ }
+
+// stops the regular updates
+void CQGeoPositionInfoSourceS60::stopUpdates ()
+ {
+ mStartUpdates = false;
+ regUpdateAO->CancelUpdate();
+ }
+TPositionModuleId CQGeoPositionInfoSourceS60::getPreferredPoistionModuleId(QGeoPositionInfoSource::PositioningMethods methods)
+{
+ // walk through the list for available method
+ for( int k=0; k< ListSize; k++)
+ {
+ if((list[k].mPosMethod & methods) && (list[k].mIsAvailable))
+ {
+
+ return list[k].mUid;
+ }
+
+ }
+
+ return TUid::Null();
+
+}
+
+//Added by PM
+void CQGeoPositionInfoSourceS60::setPreferredPositioningMethods ( PositioningMethods methods )
+ {
+ PositioningMethods preferredMethod(PositioningMethods(0));
+ TInt index = -1;
+ // the poistioning methods are not supported
+ // if the preferred positioning method is the current poistioning
+
+ if( !(supportedMethods & methods ) || (methods == AllPositioningMethods) ||
+ ( methods == currentMethod ))
+
+ return;
+
+ //TPositionModuleId moduleId = getPreferredPoistionModuleId(methods);
+
+ //if(moduleId == TUid::Null())
+ //return;
+ CQMLBackendAO *temp = NULL;
+ TUint8 bits;
+ bits = ModuleFlags;
+ do
+ {
+ //index = Get the index of the positioning module based on
+ //the preferred method if available , else get the default
+ //position module
+ index = getIndexPositionModule(bits, methods);
+
+ if(index == -1)
+ return;
+
+ if(index >= 0)
+ {
+
+ TRAPD(error, temp = CQMLBackendAO::NewL(this,REQ_REG_UPDATE,
+ list[index].mUid));
+ if(temp != NULL )
+ break;
+
+ bits = bits & (0XFF ^ (1<<index));
+ }
+ }while( index >= 0);
+
+ //CQMLBackendAO *temp = CQMLBackendAO::NewL(this, REQ_REG_UPDATE, moduleId );
+ if(temp != NULL)
+ {
+ // this is needed as the previous setupdateinterval value should not be lost
+ int updateInterval = QGeoPositionInfoSource::updateInterval();
+ if(regUpdateAO)
+ delete regUpdateAO;
+ regUpdateAO = temp;
+ currentModuleID = list[index].mUid ;
+
+ index = checkmodule(currentModuleID);
+
+ currentMethod = list[index].mPosMethod ;
+
+
+ if(updateInterval)
+ {
+ int value = regUpdateAO->setUpdateInterval(updateInterval);
+ //as the poistioning module has changed
+ //possibility of the minimumupdateinterval being changed
+ if(value != updateInterval)
+ QGeoPositionInfoSource::setUpdateInterval(value);
+
+ }
+ QGeoPositionInfoSource::setPreferredPositioningMethods(currentMethod);
+ }
+
+
+
+
+ // irrespective of whatever be the preferred methods just set
+ // the method that is set
+ //QGeoPositionInfoSource::setPreferredPositioningMethods(currentMethod);
+
+
+
+ }
+
+
+//
+//Added by PM
+void CQGeoPositionInfoSourceS60::setUpdateInterval ( int msec )
+ {
+ if(regUpdateAO)
+ {
+ int interval = regUpdateAO->setUpdateInterval(msec);
+ // as the above set value can be minimum value so
+ // assigning to the base class data member
+ QGeoPositionInfoSource::setUpdateInterval(interval);
+ }
+ }
+
+void CQGeoPositionInfoSourceS60::connectNotify(const char *signal)
+{
+ // start update if it already connected
+ if (mStartUpdates && regUpdateAO && QLatin1String(signal) == SIGNAL(positionUpdated(QGeoPositionInfo)))
+ regUpdateAO->startUpdates();
+
+}
+
+void CQGeoPositionInfoSourceS60::disconnectNotify(const char *signal)
+{
+ // Cancel updates if slot is disconnected for the positionUpdate() signal.
+
+ if ( (regUpdateAO)&&(QLatin1String(signal) == SIGNAL(positionUpdated(QGeoPositionInfo))) && receivers(SIGNAL(positionUpdated(QGeoPositionInfo))) == 0 )
+ regUpdateAO->CancelUpdate();
+
+}
+
diff --git a/location/qgeopositioninfosource_s60_p.h b/location/qgeopositioninfosource_s60_p.h
new file mode 100644
index 0000000000..76ef001d69
--- /dev/null
+++ b/location/qgeopositioninfosource_s60_p.h
@@ -0,0 +1,274 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QGEOPOSITIONINFOSOURCE_S60_P_H
+#define QGEOPOSITIONINFOSOURCE_S60_P_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <lbs.h>
+#include "qgeopositioninfosource.h"
+#include "qmlbackendao_s60_p.h"
+#include "notificationcallback_s60_p.h"
+
+#define MAX_SIZE 5
+
+// CLASS DECLARATION
+//forward declaration
+class CQMLBackendAO;
+
+class CPosMethodInfo
+{
+ public:
+ // A unique id for the positioning module
+ TPositionModuleId mUid;
+
+ // Positioning Module (satellite/ non-satellite)
+ QGeoPositionInfoSource::PositioningMethod mPosMethod;
+
+ //
+ int mStatus;
+
+ // time to first and next fix from the location server
+ TTimeIntervalMicroSeconds mTimeToFirstFix;
+ TTimeIntervalMicroSeconds mTimeToNextFix;
+
+ // Accuracy
+ double mhorizontalAccuracy;
+
+ // Flags whether the positioning technology is currently available or not.
+ bool mIsAvailable;
+};
+
+
+/**
+ * CQGeoPositionInfoSourceS60
+ *
+ */
+class CQGeoPositionInfoSourceS60 : public INotificationCallback,
+ public QGeoPositionInfoSource
+
+ {
+public:
+ // Constructors and destructor
+ /**
+ * Destructor.
+ */
+ ~CQGeoPositionInfoSourceS60( );
+
+ /**
+ * Two-phased constructor.
+ */
+ static CQGeoPositionInfoSourceS60* NewL(QObject * parent);
+
+ /**
+ * Two-phased constructor.
+ */
+ static CQGeoPositionInfoSourceS60* NewLC(QObject * parent);
+
+ /**
+ * returns the last known position
+ */
+ QGeoPositionInfo lastKnownPosition ( bool fromSatellitePositioningMethodsOnly = false ) const;
+
+ /**
+ * returns the minimum update interval
+ */
+ int minimumUpdateInterval () const;
+
+ /**
+ * Sets the preferred PositioningMethod, if available
+ * otherwise sets the default poistioning mmethod
+ */
+ void setPreferredPositioningMethods ( PositioningMethods methods );
+
+ /**
+ * Sets the interval for the regular position notifications
+ */
+ void setUpdateInterval ( int msec );
+
+ /**
+ * Returns the supported Positioning Methods
+ */
+ PositioningMethods supportedPositioningMethods () const {
+ return supportedMethods;
+ }
+
+ /**
+ * Notification methods from active object.
+ * Notifies device status, position value, and status
+ */
+ void UpdateDeviceStatus(void) ;
+
+ /**
+ * Update the position info
+ */
+ void UpdatePosition(HPositionGenericInfo *mPosInfo, int error);
+
+
+ /**
+ * Gets the handle of the PositionServer
+ */
+ RPositionServer& getPositionServer();
+
+ /*
+ * checks whether the object is valid
+ */
+ inline TBool isValid()
+ {
+ if( devStatusUpdateAO && regUpdateAO)
+ return TRUE;
+ else
+ return FALSE;
+ }
+
+ inline TPositionModuleId getCurrentPositonModuleID()
+ {
+ return currentModuleID;
+ }
+
+ inline TPositionModuleId getRequestUpdateModuleID()
+ {
+ return reqmoduleID;
+ }
+
+public slots :
+ // for request update
+ void requestUpdate ( int timeout = 5000 );
+
+ // starts the regular updates
+ virtual void startUpdates ();
+
+ // stops the regular updates
+ virtual void stopUpdates ();
+
+
+private:
+
+ /**
+ * Constructor for performing 1st stage construction
+ */
+ CQGeoPositionInfoSourceS60(QObject * parent = 0);
+
+ /**
+ * EPOC default constructor for performing 2nd stage construction
+ */
+ void ConstructL();
+
+ void update_status(TPositionModuleInfo aModInfo,TInt aStatus);
+
+ void update_available_types(void);
+
+ //get the index of the module in the List array
+ TInt checkmodule(TPositionModuleId id) const;
+
+ //get the index of the position module based on the preferred methods
+ TInt getIndexPositionModule(TUint8 aBits,PositioningMethods posMethods = AllPositioningMethods) const;
+
+ TPositionModuleId getPreferredPoistionModuleId(
+ QGeoPositionInfoSource::PositioningMethods methods);
+
+ //get the more accuarte method with time to first fix < than timeout
+ TInt getMoreAccurateMethod(TInt aTimeout,TUint8 aBits);
+
+ QGeoPositionInfo getLastknownPositionS60(TPositionModuleId moduleID) const;
+
+ void TPositionInfo2QGeoPositionInfo(HPositionGenericInfo *mPosInfo,
+ QGeoPositionInfo& posUpdate);
+
+protected:
+ void connectNotify(const char *signal);
+ void disconnectNotify(const char *signal);
+private:
+ /**
+ * Active object for requestUpdate
+ */
+ CQMLBackendAO * reqUpdateAO;
+
+ /**
+ *prvmoduleID
+ */
+ TPositionModuleId reqmoduleID;
+
+ /**
+ * Active object for device status updates
+ */
+ CQMLBackendAO * devStatusUpdateAO;
+
+ /**
+ * Positioner server
+ */
+ RPositionServer mPositionServer;
+
+
+ /**
+ * Active object for regular updates.
+ */
+ CQMLBackendAO * regUpdateAO;
+
+ /**
+ * list of supported position methods
+ */
+ CPosMethodInfo list[MAX_SIZE];
+
+ PositioningMethods supportedMethods;
+
+ PositioningMethod currentMethod;
+
+ /**
+ * current module ID
+ */
+ TPositionModuleId currentModuleID;
+
+ /**
+ * maintaiss the size of thr CPosMethodInfo array
+ */
+ int ListSize;
+
+ /*
+ * query for the status
+ */
+ TPositionModuleStatusEvent mStatusEvent;
+
+ /*
+ * maintain the startUpdates status
+ */
+ TBool mStartUpdates;
+ /*
+ * flags for the modules
+ */
+ TUint8 ModuleFlags;
+ };
+
+#endif // QGEOPOSITIONINFOSOURCE_S60_P_H
diff --git a/location/qlocationglobal.h b/location/qlocationglobal.h
new file mode 100644
index 0000000000..6bf103e6a4
--- /dev/null
+++ b/location/qlocationglobal.h
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QLOCATIONGLOBAL_H
+#define QLOCATIONGLOBAL_H
+
+#include <QtCore/qglobal.h>
+
+#if defined(Q_OS_WIN) || defined(Q_OS_SYMBIAN)
+# if defined(QT_NODLL)
+# undef QT_MAKEDLL
+# undef QT_DLL
+# elif defined(QT_MAKEDLL)
+# if defined(QT_DLL)
+# undef QT_DLL
+# endif
+# if defined(QT_BUILD_LOCATION_LIB)
+# define Q_LOCATION_EXPORT Q_DECL_EXPORT
+# else
+# define Q_LOCATION_EXPORT Q_DECL_IMPORT
+# endif
+# elif defined(QT_DLL) /* use a Qt DLL library */
+# define Q_LOCATION_EXPORT Q_DECL_IMPORT
+# endif
+#else
+#endif
+
+#if !defined(Q_LOCATION_EXPORT)
+# if defined(QT_SHARED)
+# define Q_LOCATION_EXPORT Q_DECL_EXPORT
+# else
+# define Q_LOCATION_EXPORT
+# endif
+#endif
+
+#endif
diff --git a/location/qlocationutils.cpp b/location/qlocationutils.cpp
new file mode 100644
index 0000000000..e26176740f
--- /dev/null
+++ b/location/qlocationutils.cpp
@@ -0,0 +1,353 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qlocationutils_p.h"
+#include "qgeopositioninfo.h"
+
+#include <QTime>
+#include <QList>
+#include <QByteArray>
+#include <QDebug>
+
+#include <math.h>
+
+
+// converts e.g. 15306.0235 from NMEA sentence to 153.100392
+static double qlocationutils_nmeaDegreesToDecimal(double nmeaDegrees)
+{
+ double deg;
+ double min = 100.0 * modf(nmeaDegrees / 100.0, &deg);
+ return deg + (min / 60.0);
+}
+
+static void qlocationutils_readGga(const char *data, int size, QGeoPositionInfo *info, bool *hasFix)
+{
+ QByteArray sentence(data, size);
+ QList<QByteArray> parts = sentence.split(',');
+ QGeoCoordinate coord;
+
+ if (hasFix && parts.count() > 6 && parts[6].count() > 0)
+ *hasFix = parts[6].toInt() > 0;
+
+ if (parts.count() > 1 && parts[1].count() > 0) {
+ QTime time;
+ if (QLocationUtils::getNmeaTime(parts[1], &time))
+ info->setDateTime(QDateTime(QDate(), time, Qt::UTC));
+ }
+
+ if (parts.count() > 5 && parts[3].count() == 1 && parts[5].count() == 1) {
+ double lat;
+ double lng;
+ if (QLocationUtils::getNmeaLatLong(parts[2], parts[3][0], parts[4], parts[5][0], &lat, &lng)) {
+ coord.setLatitude(lat);
+ coord.setLongitude(lng);
+ }
+ }
+
+ if (parts.count() > 9 && parts[9].count() > 0) {
+ bool hasAlt = false;
+ double alt = parts[9].toDouble(&hasAlt);
+ if (hasAlt)
+ coord.setAltitude(alt);
+ }
+
+ if (coord.type() != QGeoCoordinate::InvalidCoordinate)
+ info->setCoordinate(coord);
+}
+
+static void qlocationutils_readGll(const char *data, int size, QGeoPositionInfo *info, bool *hasFix)
+{
+ QByteArray sentence(data, size);
+ QList<QByteArray> parts = sentence.split(',');
+ QGeoCoordinate coord;
+
+ if (hasFix && parts.count() > 6 && parts[6].count() > 0)
+ *hasFix = (parts[6][0] == 'A');
+
+ if (parts.count() > 5 && parts[5].count() > 0) {
+ QTime time;
+ if (QLocationUtils::getNmeaTime(parts[5], &time))
+ info->setDateTime(QDateTime(QDate(), time, Qt::UTC));
+ }
+
+ if (parts.count() > 4 && parts[2].count() == 1 && parts[4].count() == 1) {
+ double lat;
+ double lng;
+ if (QLocationUtils::getNmeaLatLong(parts[1], parts[2][0], parts[3], parts[4][0], &lat, &lng)) {
+ coord.setLatitude(lat);
+ coord.setLongitude(lng);
+ }
+ }
+
+ if (coord.type() != QGeoCoordinate::InvalidCoordinate)
+ info->setCoordinate(coord);
+}
+
+static void qlocationutils_readRmc(const char *data, int size, QGeoPositionInfo *info, bool *hasFix)
+{
+ QByteArray sentence(data, size);
+ QList<QByteArray> parts = sentence.split(',');
+ QGeoCoordinate coord;
+ QDate date;
+ QTime time;
+
+ if (hasFix && parts.count() > 2 && parts[2].count() > 0)
+ *hasFix = (parts[2][0] == 'A');
+
+ if (parts.count() > 9 && parts[9].count() == 6) {
+ date = QDate::fromString(parts[9], "ddMMyy");
+ if (date.isValid())
+ date = date.addYears(100); // otherwise starts from 1900
+ else
+ date = QDate();
+ }
+
+ if (parts.count() > 1 && parts[1].count() > 0)
+ QLocationUtils::getNmeaTime(parts[1], &time);
+
+ if (parts.count() > 6 && parts[4].count() == 1 && parts[6].count() == 1) {
+ double lat;
+ double lng;
+ if (QLocationUtils::getNmeaLatLong(parts[3], parts[4][0], parts[5], parts[6][0], &lat, &lng)) {
+ coord.setLatitude(lat);
+ coord.setLongitude(lng);
+ }
+ }
+
+ bool parsed = false;
+ double value = 0.0;
+ if (parts.count() > 7 && parts[7].count() > 0) {
+ value = parts[7].toDouble(&parsed);
+ if (parsed)
+ info->setProperty(QGeoPositionInfo::GroundSpeed, qreal(value * 1.852 / 3.6)); // knots -> m/s
+ }
+ if (parts.count() > 8 && parts[8].count() > 0) {
+ value = parts[8].toDouble(&parsed);
+ if (parsed)
+ info->setProperty(QGeoPositionInfo::Heading, qreal(value));
+ }
+ if (parts.count() > 11 && parts[11].count() == 1
+ && (parts[11][0] == 'E' || parts[11][0] == 'W') ) {
+ value = parts[10].toDouble(&parsed);
+ if (parsed) {
+ if (parts[11][0] == 'W')
+ value *= -1;
+ info->setProperty(QGeoPositionInfo::MagneticVariation, qreal(value));
+ }
+ }
+
+ if (coord.type() != QGeoCoordinate::InvalidCoordinate)
+ info->setCoordinate(coord);
+
+ info->setDateTime(QDateTime(date, time, Qt::UTC));
+}
+
+static void qlocationutils_readVtg(const char *data, int size, QGeoPositionInfo *info, bool *hasFix)
+{
+ if (hasFix)
+ *hasFix = false;
+
+ QByteArray sentence(data, size);
+ QList<QByteArray> parts = sentence.split(',');
+
+ bool parsed = false;
+ double value = 0.0;
+ if (parts.count() > 1 && parts[1].count() > 0) {
+ value = parts[1].toDouble(&parsed);
+ if (parsed)
+ info->setProperty(QGeoPositionInfo::Heading, qreal(value));
+ }
+ if (parts.count() > 7 && parts[7].count() > 0) {
+ value = parts[7].toDouble(&parsed);
+ if (parsed)
+ info->setProperty(QGeoPositionInfo::GroundSpeed, qreal(value / 3.6)); // km/h -> m/s
+ }
+}
+
+static void qlocationutils_readZda(const char *data, int size, QGeoPositionInfo *info, bool *hasFix)
+{
+ if (hasFix)
+ *hasFix = false;
+
+ QByteArray sentence(data, size);
+ QList<QByteArray> parts = sentence.split(',');
+ QDate date;
+ QTime time;
+
+ if (parts.count() > 1 && parts[1].count() > 0)
+ QLocationUtils::getNmeaTime(parts[1], &time);
+
+ if (parts.count() > 4 && parts[2].count() > 0 && parts[3].count() > 0
+ && parts[4].count() == 4) { // must be full 4-digit year
+ int day = parts[2].toUInt();
+ int month = parts[3].toUInt();
+ int year = parts[4].toUInt();
+ if (day > 0 && month > 0 && year > 0)
+ date.setDate(year, month, day);
+ }
+
+ info->setDateTime(QDateTime(date, time, Qt::UTC));
+}
+
+bool QLocationUtils::getPosInfoFromNmea(const char *data, int size, QGeoPositionInfo *info, bool *hasFix)
+{
+ if (!info)
+ return false;
+
+ if (hasFix)
+ *hasFix = false;
+ if (size < 6 || data[0] != '$' || !hasValidNmeaChecksum(data, size))
+ return false;
+
+ if (data[3] == 'G' && data[4] == 'G' && data[5] == 'A') {
+ // "$--GGA" sentence.
+ qlocationutils_readGga(data, size, info, hasFix);
+ return true;
+ }
+
+ if (data[3] == 'G' && data[4] == 'L' && data[5] == 'L') {
+ // "$--GLL" sentence.
+ qlocationutils_readGll(data, size, info, hasFix);
+ return true;
+ }
+
+ if (data[3] == 'R' && data[4] == 'M' && data[5] == 'C') {
+ // "$--RMC" sentence.
+ qlocationutils_readRmc(data, size, info, hasFix);
+ return true;
+ }
+
+ if (data[3] == 'V' && data[4] == 'T' && data[5] == 'G') {
+ // "$--VTG" sentence.
+ qlocationutils_readVtg(data, size, info, hasFix);
+ return true;
+ }
+
+ if (data[3] == 'Z' && data[4] == 'D' && data[5] == 'A') {
+ // "$--ZDA" sentence.
+ qlocationutils_readZda(data, size, info, hasFix);
+ return true;
+ }
+
+ return false;
+}
+
+bool QLocationUtils::hasValidNmeaChecksum(const char *data, int size)
+{
+ int asteriskIndex = -1;
+ for (int i=0; i<size; i++) {
+ if (data[i] == '*') {
+ asteriskIndex = i;
+ break;
+ }
+ }
+
+ const int CSUM_LEN = 2;
+ if (asteriskIndex < 0 || asteriskIndex + CSUM_LEN >= size)
+ return false;
+
+ // XOR byte value of all characters between '$' and '*'
+ int result = 0;
+ for (int i=1; i<asteriskIndex; i++)
+ result ^= data[i];
+/*
+ char calc[CSUM_LEN + 1];
+ ::snprintf(calc, CSUM_LEN + 1, "%02x", result);
+ return ::strncmp(calc, &data[asteriskIndex+1], 2) == 0;
+ */
+
+ QString s;
+ s.sprintf("%02x", result);
+ return s.toAscii() == QByteArray(&data[asteriskIndex+1], 2);
+}
+
+bool QLocationUtils::getNmeaTime(const QByteArray &bytes, QTime *time)
+{
+ int dotIndex = bytes.indexOf('.');
+ QTime tempTime;
+
+ if (dotIndex < 0) {
+ tempTime = QTime::fromString(bytes, "hhmmss");
+ } else {
+ tempTime = QTime::fromString(bytes.mid(0, dotIndex), "hhmmss");
+ bool hasMsecs = false;
+ int midLen = qMin(3, bytes.size() - dotIndex-1);
+ int msecs = bytes.mid(dotIndex+1, midLen).toUInt(&hasMsecs);
+ if (hasMsecs)
+ tempTime = tempTime.addMSecs(msecs);
+ }
+
+ if (tempTime.isValid()) {
+ *time = tempTime;
+ return true;
+ }
+ return false;
+}
+
+bool QLocationUtils::getNmeaLatLong(const QByteArray &latString, char latDirection, const QByteArray &lngString, char lngDirection, double *lat, double *lng)
+{
+ if ( (latDirection != 'N' && latDirection != 'S')
+ || (lngDirection != 'E' && lngDirection != 'W') ) {
+ return false;
+ }
+
+ bool hasLat = false;
+ bool hasLong = false;
+ double tempLat = latString.toDouble(&hasLat);
+ double tempLng = lngString.toDouble(&hasLong);
+ if (hasLat && hasLong) {
+ tempLat = qlocationutils_nmeaDegreesToDecimal(tempLat);
+ if (latDirection == 'S')
+ tempLat *= -1;
+ tempLng = qlocationutils_nmeaDegreesToDecimal(tempLng);
+ if (lngDirection == 'W')
+ tempLng *= -1;
+
+ if (isValidLat(tempLat) && isValidLong(tempLng)) {
+ *lat = tempLat;
+ *lng = tempLng;
+ return true;
+ }
+ }
+ return false;
+}
+
+
+
diff --git a/location/qlocationutils_p.h b/location/qlocationutils_p.h
new file mode 100644
index 0000000000..d77d4613b7
--- /dev/null
+++ b/location/qlocationutils_p.h
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QLOCATIONUTILS_P_H
+#define QLOCATIONUTILS_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtGlobal>
+
+class QTime;
+class QGeoPositionInfo;
+class QByteArray;
+
+class QLocationUtils
+{
+public:
+ inline static bool isValidLat(double lat) { return lat >= -90 && lat <= 90; }
+ inline static bool isValidLong(double lng) { return lng >= -180 && lng <= 180; }
+
+ /*
+ Creates a QGeoPositionInfo from a GGA, GLL, RMC, VTG or ZDA sentence.
+
+ Note:
+ - GGA and GLL sentences have time but not date so the update's
+ QDateTime object will have an invalid date.
+ - RMC reports date with a two-digit year so in this case the year
+ is assumed to be after the year 2000.
+ */
+ Q_AUTOTEST_EXPORT static bool getPosInfoFromNmea(const char *data, int size, QGeoPositionInfo *info, bool *hasFix = 0);
+
+ /*
+ Returns true if the given NMEA sentence has a valid checksum.
+ */
+ Q_AUTOTEST_EXPORT static bool hasValidNmeaChecksum(const char *data, int size);
+
+ /*
+ Returns time from a string in hhmmss or hhmmss.z+ format.
+ */
+ Q_AUTOTEST_EXPORT static bool getNmeaTime(const QByteArray &bytes, QTime *time);
+
+ /*
+ Accepts e.g. ("2734.7964", 'S', "15306.0124", 'E') and returns the
+ lat-long values. Fails if lat or long fail isValidLat() or isValidLong().
+ */
+ Q_AUTOTEST_EXPORT static bool getNmeaLatLong(const QByteArray &latString, char latDirection, const QByteArray &lngString, char lngDirection, double *lat, double *lon);
+
+};
+
+#endif
diff --git a/location/qmlbackendao_s60.cpp b/location/qmlbackendao_s60.cpp
new file mode 100644
index 0000000000..975f187c99
--- /dev/null
+++ b/location/qmlbackendao_s60.cpp
@@ -0,0 +1,426 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qgeopositioninfosource_s60_p.h"
+#include "qmlbackendao_s60_p.h"
+
+//The name of the requestor //Added by PM
+_LIT(KRequestor,"QTMobility Location");
+
+// constructor
+CQMLBackendAO::CQMLBackendAO() :
+ CActive(EPriorityStandard), // Standard priority
+ mPosInfo(NULL),mRequester(NULL),mRequestType(RequestType(0))
+ {
+ }
+
+//
+//
+//
+CQMLBackendAO* CQMLBackendAO::NewLC(CQGeoPositionInfoSourceS60 *requester,
+ RequestType requestType, TPositionModuleId modID)
+ {
+ CQMLBackendAO* self = new (ELeave) CQMLBackendAO();
+ CleanupStack::PushL(self);
+ self->ConstructL(requester, requestType, modID);
+ return self;
+ }
+
+//
+//
+//
+CQMLBackendAO* CQMLBackendAO::NewL(CQGeoPositionInfoSourceS60 *requester,
+ RequestType requestType, TPositionModuleId modID)
+ {
+ CQMLBackendAO* self = CQMLBackendAO::NewLC(requester, requestType, modID);
+ CleanupStack::Pop(); // self;
+ return self;
+ }
+
+//
+//
+//
+TInt CQMLBackendAO::ConstructL(CQGeoPositionInfoSourceS60 *requester, RequestType requestType,
+ TPositionModuleId modId)
+ {
+ TInt error = KErrNone;
+
+ mRequester = requester;
+
+ mRequestType = requestType;
+
+
+
+ if( (mRequestType == REQ_REG_UPDATE) || (mRequestType == REQ_ONCE_UPDATE) )
+ {
+ RPositionServer &PosServer = mRequester->getPositionServer();
+ error = mPositioner.Open(PosServer,modId);
+
+ if( error != KErrNone )
+ return error;
+
+ CleanupClosePushL(mPositioner);
+
+ error = mPositioner.SetRequestor( CRequestor::ERequestorService ,
+ CRequestor::EFormatApplication, _L("QTmobility_Location"));
+
+ CleanupStack::Pop(1);
+
+ if( error != KErrNone )
+ return error;
+
+ }
+
+ CActiveScheduler::Add(this); // Add to scheduler
+
+ return error;
+ }
+
+//
+CQMLBackendAO::~CQMLBackendAO()
+ {
+ Cancel();
+
+ if( (mRequestType == REQ_ONCE_UPDATE) || (mRequestType == REQ_REG_UPDATE) )
+ {
+ //close the subsession
+ mPositioner.Close();
+
+ if( mPosInfo)
+ {
+ mPosInfo->ClearRequestedFields();
+
+ mPosInfo->ClearPositionData();
+ //delete the HPositionGenericInfo
+ delete mPosInfo;
+ }
+ }
+ else if(mRequestType == REQ_DEV_STATUS)
+ {
+ //done only by the position server Active Object
+ RPositionServer &posServer = mRequester->getPositionServer();
+ posServer.Close();
+ }
+ }
+
+//
+void CQMLBackendAO::DoCancel()
+ {
+ CancelAll();
+ }
+
+
+//
+void CQMLBackendAO::RunL()
+ {
+ switch(mRequestType)
+ {
+ case REQ_DEV_STATUS :
+ handleDeviceNotification(iStatus.Int());
+ break;
+ case REQ_REG_UPDATE :
+ case REQ_ONCE_UPDATE:
+ handlePosUpdateNotification(iStatus.Int());
+ break;
+ default :
+ break;
+ }
+ }
+
+//
+TInt CQMLBackendAO::RunError(TInt aError)
+ {
+ return aError;
+ }
+
+
+// checks any pending request in activeobject
+bool CQMLBackendAO::IsRequestPending()
+ {
+ if(IsActive())
+ return true;
+ else
+ return false;
+ }
+
+
+
+// Async call to get notifications about device status.
+void CQMLBackendAO::NotifyDeviceStatus(TPositionModuleStatusEventBase &aStatusEvent)
+ {
+ RPositionServer& PosServ = mRequester->getPositionServer();
+
+ //register for device status events
+ TPositionModuleStatusEventBase::TModuleEvent RequestedEvents(
+ TPositionModuleStatusEventBase::EEventDeviceStatus);
+
+ aStatusEvent.SetRequestedEvents(RequestedEvents);
+
+ PosServ.NotifyModuleStatusEvent(aStatusEvent,iStatus);
+
+ SetActive();
+
+ }
+
+void CQMLBackendAO::CancelAll()
+ {
+ TInt error;
+
+ if(mRequestType == REQ_DEV_STATUS)
+ {
+ RPositionServer &PosServer = mRequester->getPositionServer();
+ error = PosServer.CancelRequest(EPositionServerNotifyModuleStatusEvent);
+ }
+ else if( (mRequestType == REQ_ONCE_UPDATE) || (mRequestType == REQ_REG_UPDATE) )
+ {
+ mPositioner.CancelRequest(EPositionerNotifyPositionUpdate);
+ }
+
+ }
+
+//Initialize the posInfo with appropriate fields
+bool CQMLBackendAO::InitializePosInfo()
+ {
+ if( !mPosInfo )
+ {
+ mPosInfo = HPositionGenericInfo::New();
+
+ if(mPosInfo == NULL)
+ return FALSE;
+ }
+ else
+ {
+ mPosInfo->ClearRequestedFields();
+
+ mPosInfo->ClearPositionData();
+ }
+ RPositionServer posServer;
+ TPositionModuleInfo moduleInfo;
+ TInt error = KErrNone;
+
+ //get the posiiton server
+ posServer = mRequester->getPositionServer();
+
+ //retrieve the module id used by the posiitoner
+ if( mRequestType == REQ_REG_UPDATE )
+ error = posServer.GetModuleInfoById(mRequester->getCurrentPositonModuleID(), moduleInfo);
+ else if( mRequestType == REQ_ONCE_UPDATE )
+ error = posServer.GetModuleInfoById(mRequester->getRequestUpdateModuleID(), moduleInfo);
+
+ if (error == KErrNone) {
+
+ //get capabilities of the module
+ TPositionModuleInfo::TCapabilities caps = moduleInfo.Capabilities();
+
+ if (caps & TPositionModuleInfo::ECapabilitySatellite) {
+ mPosInfo->SetRequestedField(EPositionFieldSatelliteNumInView);
+ mPosInfo->SetRequestedField(EPositionFieldSatelliteNumUsed);
+ }
+
+ if (caps & TPositionModuleInfo::ECapabilitySpeed) {
+ mPosInfo->SetRequestedField(EPositionFieldHorizontalSpeed);
+ mPosInfo->SetRequestedField(EPositionFieldVerticalSpeed);
+ }
+ if (caps & TPositionModuleInfo::ECapabilityCompass) {
+ mPosInfo->SetRequestedField(EPositionFieldMagneticCourseError);
+ mPosInfo->SetRequestedField(EPositionFieldHeading);
+ }
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+//requestUpdate : request for position update once
+void CQMLBackendAO::requestUpdate(TInt aTimeout)
+ {
+ TPositionUpdateOptions aPosOption;
+
+ TInt ret = FALSE;
+
+ TInt error = mPositioner.GetUpdateOptions(aPosOption);
+
+ aPosOption.SetUpdateInterval(TTimeIntervalMicroSeconds(0));
+
+ aPosOption.SetUpdateTimeOut(TTimeIntervalMicroSeconds(aTimeout * 1000));
+
+ mPositioner.SetUpdateOptions(aPosOption);
+
+ //setUpdateInterval(aTimeout);
+ startUpdates();
+ }
+
+
+//
+void CQMLBackendAO::CancelUpdate()
+ {
+ Cancel();
+
+ }
+
+
+//
+bool CQMLBackendAO::handleDeviceNotification (int error)
+ {
+ switch(error)
+ {
+ //NotifyPositionModulestatusEvent successfully completed
+ case KErrNone :
+
+ //module not found
+ case KErrNotFound :
+ mRequester->UpdateDeviceStatus();
+ break;
+
+ //request has been successfully cancelled
+ case KErrCancel :
+ break;
+
+ //unrecoverabe errors
+ default :
+ break;
+ }
+ }
+
+
+//
+bool CQMLBackendAO::handlePosUpdateNotification (int error)
+ {
+
+ switch(error)
+ {
+ //NotifyPositionUpdate successfully completed
+ case KErrNone :
+
+ //Posiiton Module is unable to return any position information
+ case KPositionQualityLoss :
+
+ //requested information could not be retrieved within the maximum peroid
+ case KErrTimedOut:
+
+ HPositionGenericInfo *positionInfo = NULL;
+
+ positionInfo = HPositionGenericInfo::New();
+
+ if(positionInfo == NULL)
+ return;
+
+ //copy the buffer contents into a new HPositionGenericInfo buffer,to be used
+ //for creating QGeoPositionInfo object later
+ memcpy(positionInfo , mPosInfo , mPosInfo->BufferSize());
+
+ //if regUpdateAO, request for the next update
+ if(mRequestType == REQ_REG_UPDATE)
+ {
+ InitializePosInfo();
+ mPositioner.NotifyPositionUpdate( *mPosInfo , iStatus);
+ SetActive();
+ }
+
+ //KErrTimedOut should not be emited for regular update
+ if( (error!= KErrTimedOut) || (mRequestType != REQ_REG_UPDATE))
+ mRequester->UpdatePosition(positionInfo,error);
+
+ delete positionInfo;
+
+ break;
+
+ //request was successfully cancelled
+ case KErrCancel :
+ break;
+
+ default :
+ break;
+
+ }
+ }
+
+//////////////////////////////////////////////////////////////
+// Sets the interval for getting the regular notification //
+// the time interval set is in milli seconds //
+//////////////////////////////////////////////////////////////
+int CQMLBackendAO::setUpdateInterval ( int msec )
+ {
+ int minimumUpdateInterval = 0;
+ TInt64 mUpdateInterval = 0 ;
+
+ if(mRequester)
+ minimumUpdateInterval = mRequester->minimumUpdateInterval();
+
+ // if the current requesttype is regular updates
+ // then set the updateinterval otherwise ignore
+ //if(mRequestType != REQ_REG_UPDATE)
+ // return;
+
+ TPositionUpdateOptions aPosOption;
+
+ TInt error = mPositioner.GetUpdateOptions(aPosOption);
+
+ // TTimeIntervalMicroSeconds is converted seconds
+ TInt currentUpdateInterval = aPosOption.UpdateInterval().Int64() / 1000;
+
+ // If msec is not 0 and is less than the value returned by minimumUpdateInterval(),
+ // the interval will be set to the minimum interval.
+ if( msec != 0 && msec <= minimumUpdateInterval)
+ {
+ mUpdateInterval = minimumUpdateInterval;
+ }
+
+ // if the same value is being set then just ignore it.
+ if( currentUpdateInterval == msec )
+ {
+ if( msec != mUpdateInterval )
+ mUpdateInterval = msec;
+ return mUpdateInterval;
+ }
+
+ // if Zero or above minimum value will be set.
+ if(msec == 0 || msec > minimumUpdateInterval )
+ {
+ mUpdateInterval = msec;
+ }
+
+ // will set Either zero, minimum or +ve value
+ // seconds converted to TTimeIntervalMicroSeconds
+ aPosOption.SetUpdateInterval(TTimeIntervalMicroSeconds (mUpdateInterval * 1000));
+ error = mPositioner.SetUpdateOptions(aPosOption);
+
+ return mUpdateInterval;
+ }
+
+void CQMLBackendAO::startUpdates()
+ {
+ InitializePosInfo();
+ mPositioner.NotifyPositionUpdate( *mPosInfo , iStatus);
+ if(!IsActive())
+ SetActive();
+ }
diff --git a/location/qmlbackendao_s60_p.h b/location/qmlbackendao_s60_p.h
new file mode 100644
index 0000000000..ed1875a326
--- /dev/null
+++ b/location/qmlbackendao_s60_p.h
@@ -0,0 +1,145 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMLBACKENDAO_S60_P_H
+#define QMLBACKENDAO_S60_P_H
+
+#include <e32base.h> // For CActive, link against: euser.lib
+#include <lbs.h>
+#include <lbscommon.h>
+
+#include "qgeopositioninfosource.h"
+//#include "QGeoPositionInfoSourceS60.h"
+
+class CQGeoPositionInfoSourceS60 ;
+
+// Types of request
+enum RequestType{
+ REQ_REG_UPDATE = 1, // Regular updates
+ REQ_ONCE_UPDATE, // request update
+ REQ_DEV_STATUS // device updates
+ };
+
+//
+class CQMLBackendAO : public CActive
+ {
+public:
+ // Cancel and destroy
+ ~CQMLBackendAO();
+
+ // Two-phased constructor.
+ static CQMLBackendAO* NewL(CQGeoPositionInfoSourceS60 *requester,
+ RequestType requestType, TPositionModuleId modId = TUid::Uid(0));
+
+ // Two-phased constructor.
+ static CQMLBackendAO* NewLC(CQGeoPositionInfoSourceS60 *requester,
+ RequestType requestType, TPositionModuleId modID);
+
+ // checks any pending request in activeobject
+ bool IsRequestPending();
+
+ // Async call to get notifications about device status.
+ void NotifyDeviceStatus(TPositionModuleStatusEventBase &aStatusEvent) ;
+
+ // requesting for position update once
+ void requestUpdate(TInt aTimeout);
+
+ // cancels an outstanding update request
+ void CancelUpdate();
+
+ // Sets an interval in millisecs for regular notifications
+ int setUpdateInterval ( int msec );
+
+ void startUpdates();
+
+
+public:
+ // New functions
+ // Function for making the initial request
+ void StartL(TTimeIntervalMicroSeconds32 aDelay);
+
+private:
+ // C++ constructor
+ CQMLBackendAO();
+
+ // Second-phase constructor
+ TInt CQMLBackendAO::ConstructL(CQGeoPositionInfoSourceS60 *requester, RequestType requestType,
+ TPositionModuleId modId);
+
+ // Device Notifications are handled
+ bool handleDeviceNotification (int error);
+
+ // regular position notifications are handled
+ bool handlePosUpdateNotification (int error);
+
+ void CancelAll();
+
+ bool InitializePosInfo();
+
+private:
+ // From CActive
+ // Handle completion
+ void RunL();
+
+ // How to cancel me
+ void DoCancel();
+
+ // Override to handle leaves from RunL(). Default implementation causes
+ // the active scheduler to panic.
+ int RunError(int aError);
+
+private:
+ enum TQMLBackendAOState
+ {
+ EUninitialized, // Uninitialized
+ EInitialized, // Initalized
+ EError
+ // Error condition
+ };
+
+private:
+
+ // Request is a device or a regular
+ CQGeoPositionInfoSourceS60 *mRequester;
+
+ // Request type once, regular, device
+ RequestType mRequestType;
+
+ // Positioning Information
+ RPositioner mPositioner;
+
+ HPositionGenericInfo *mPosInfo;
+
+ };
+
+#endif // QMLBACKENDAO_S60_P_H
diff --git a/location/qnmeapositioninfosource.cpp b/location/qnmeapositioninfosource.cpp
new file mode 100644
index 0000000000..b5edc89037
--- /dev/null
+++ b/location/qnmeapositioninfosource.cpp
@@ -0,0 +1,555 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qnmeapositioninfosource_p.h"
+#include "qlocationutils_p.h"
+
+#include <QIODevice>
+#include <QBasicTimer>
+#include <QTimerEvent>
+#include <QDebug>
+#include <QTimer>
+
+
+QNmeaRealTimeReader::QNmeaRealTimeReader(QNmeaPositionInfoSourcePrivate *sourcePrivate)
+ : QNmeaReader(sourcePrivate)
+{
+}
+
+void QNmeaRealTimeReader::readAvailableData()
+{
+ QGeoPositionInfo update;
+ bool hasFix = false;
+
+ char buf[1024];
+ qint64 size = m_proxy->m_device->readLine(buf, sizeof(buf));
+ while (size > 0) {
+ if (QLocationUtils::getPosInfoFromNmea(buf, size, &update, &hasFix))
+ m_proxy->notifyNewUpdate(&update, hasFix);
+ memset(buf, 0, size);
+ size = m_proxy->m_device->readLine(buf, sizeof(buf));
+ }
+}
+
+
+//============================================================
+
+QNmeaSimulatedReader::QNmeaSimulatedReader(QNmeaPositionInfoSourcePrivate *sourcePrivate)
+ : QNmeaReader(sourcePrivate),
+ m_currTimerId(-1),
+ m_hasValidDateTime(false)
+{
+}
+
+QNmeaSimulatedReader::~QNmeaSimulatedReader()
+{
+ if (m_currTimerId > 0)
+ killTimer(m_currTimerId);
+}
+
+void QNmeaSimulatedReader::readAvailableData()
+{
+ if (m_currTimerId > 0) // we are already reading
+ return;
+
+ if (!m_hasValidDateTime) { // first update
+ Q_ASSERT(m_proxy->m_device && (m_proxy->m_device->openMode() & QIODevice::ReadOnly));
+
+ if (!setFirstDateTime()) {
+ //m_proxy->notifyReachedEndOfFile();
+ qWarning("QNmeaPositionInfoSource: cannot find NMEA sentence with valid date & time");
+ return;
+ }
+
+ m_hasValidDateTime = true;
+ simulatePendingUpdate();
+
+ } else {
+ // previously read to EOF, but now new data has arrived
+ processNextSentence();
+ }
+}
+
+bool QNmeaSimulatedReader::setFirstDateTime()
+{
+ // find the first update with valid date and time
+ QGeoPositionInfo update;
+ bool hasFix = false;
+ while (m_proxy->m_device->bytesAvailable() > 0) {
+ char buf[1024];
+ qint64 size = m_proxy->m_device->readLine(buf, sizeof(buf));
+ if (size <= 0)
+ continue;
+ bool ok = QLocationUtils::getPosInfoFromNmea(buf, size, &update, &hasFix);
+ if (ok && update.dateTime().isValid()) {
+ QPendingGeoPositionInfo pending;
+ pending.info = update;
+ pending.hasFix = hasFix;
+ m_pendingUpdates.enqueue(pending);
+ return true;
+ }
+ }
+ return false;
+}
+
+void QNmeaSimulatedReader::simulatePendingUpdate()
+{
+ if (m_pendingUpdates.size() > 0) {
+ // will be dequeued in processNextSentence()
+ QPendingGeoPositionInfo &pending = m_pendingUpdates.head();
+ if (pending.info.coordinate().type() != QGeoCoordinate::InvalidCoordinate)
+ m_proxy->notifyNewUpdate(&pending.info, pending.hasFix);
+ }
+
+ processNextSentence();
+}
+
+void QNmeaSimulatedReader::timerEvent(QTimerEvent *event)
+{
+ killTimer(event->timerId());
+ m_currTimerId = -1;
+ simulatePendingUpdate();
+}
+
+void QNmeaSimulatedReader::processNextSentence()
+{
+ QGeoPositionInfo info;
+ bool hasFix = false;
+ int timeToNextUpdate = -1;
+ QTime prevTime;
+ if (m_pendingUpdates.size() > 0)
+ prevTime = m_pendingUpdates.head().info.dateTime().time();
+
+ // find the next update with a valid time (as long as the time is valid,
+ // we can calculate when the update should be emitted)
+ while (m_proxy->m_device && m_proxy->m_device->bytesAvailable() > 0) {
+ char buf[1024];
+ qint64 size = m_proxy->m_device->readLine(buf, sizeof(buf));
+ if (size <= 0)
+ continue;
+ if (QLocationUtils::getPosInfoFromNmea(buf, size, &info, &hasFix)) {
+ QTime time = info.dateTime().time();
+ if (time.isValid()) {
+ if (!prevTime.isValid()) {
+ timeToNextUpdate = 0;
+ break;
+ }
+ timeToNextUpdate = prevTime.msecsTo(time);
+ if (timeToNextUpdate >= 0)
+ break;
+ }
+ }
+ }
+
+ if (timeToNextUpdate < 0)
+ return;
+
+ m_pendingUpdates.dequeue();
+
+ QPendingGeoPositionInfo pending;
+ pending.info = info;
+ pending.hasFix = hasFix;
+ m_pendingUpdates.enqueue(pending);
+ m_currTimerId = startTimer(timeToNextUpdate);
+}
+
+
+//============================================================
+
+
+QNmeaPositionInfoSourcePrivate::QNmeaPositionInfoSourcePrivate(QNmeaPositionInfoSource *parent)
+ : QObject(parent),
+ m_invokedStart(false),
+ m_source(parent),
+ m_nmeaReader(0),
+ m_updateTimer(0),
+ m_requestTimer(0),
+ m_noUpdateLastInterval(false),
+ m_connectedReadyRead(false)
+{
+}
+
+QNmeaPositionInfoSourcePrivate::~QNmeaPositionInfoSourcePrivate()
+{
+ delete m_nmeaReader;
+ delete m_updateTimer;
+}
+
+bool QNmeaPositionInfoSourcePrivate::openSourceDevice()
+{
+ if (!m_device) {
+ qWarning("QNmeaPositionInfoSource: no QIODevice data source, call setDevice() first");
+ return false;
+ }
+
+ if (!m_device->isOpen() && !m_device->open(QIODevice::ReadOnly)) {
+ qWarning("QNmeaPositionInfoSource: cannot open QIODevice data source");
+ return false;
+ }
+
+ connect(m_device, SIGNAL(aboutToClose()), SLOT(sourceDataClosed()));
+ connect(m_device, SIGNAL(readChannelFinished()), SLOT(sourceDataClosed()));
+ connect(m_device, SIGNAL(destroyed()), SLOT(sourceDataClosed()));
+
+ return true;
+}
+
+void QNmeaPositionInfoSourcePrivate::sourceDataClosed()
+{
+ if (m_nmeaReader && m_device && m_device->bytesAvailable())
+ m_nmeaReader->readAvailableData();
+}
+
+void QNmeaPositionInfoSourcePrivate::readyRead()
+{
+ if (m_nmeaReader)
+ m_nmeaReader->readAvailableData();
+}
+
+bool QNmeaPositionInfoSourcePrivate::initialize()
+{
+ if (m_nmeaReader)
+ return true;
+
+ if (!openSourceDevice())
+ return false;
+
+ if (m_updateMode == QNmeaPositionInfoSource::RealTimeMode)
+ m_nmeaReader = new QNmeaRealTimeReader(this);
+ else
+ m_nmeaReader = new QNmeaSimulatedReader(this);
+
+ return true;
+}
+
+void QNmeaPositionInfoSourcePrivate::prepareSourceDevice()
+{
+ // some data may already be available
+ if (m_updateMode == QNmeaPositionInfoSource::SimulationMode) {
+ if (m_nmeaReader && m_device->bytesAvailable())
+ m_nmeaReader->readAvailableData();
+ }
+
+ if (!m_connectedReadyRead) {
+ connect(m_device, SIGNAL(readyRead()), SLOT(readyRead()));
+ m_connectedReadyRead = true;
+ }
+}
+
+void QNmeaPositionInfoSourcePrivate::startUpdates()
+{
+ if (m_invokedStart)
+ return;
+
+ m_invokedStart = true;
+ m_pendingUpdate = QGeoPositionInfo();
+ m_noUpdateLastInterval = false;
+
+ bool initialized = initialize();
+ if (!initialized)
+ return;
+
+ if (m_updateMode == QNmeaPositionInfoSource::RealTimeMode) {
+ // skip over any buffered data - we only want the newest data
+ if (m_device->bytesAvailable()) {
+ if (m_device->isSequential())
+ m_device->readAll();
+ else
+ m_device->seek(m_device->bytesAvailable());
+ }
+ }
+
+ if (m_updateTimer)
+ m_updateTimer->stop();
+
+ if (m_source->updateInterval() > 0) {
+ if (!m_updateTimer)
+ m_updateTimer = new QBasicTimer;
+ m_updateTimer->start(m_source->updateInterval(), this);
+ }
+
+ if (initialized)
+ prepareSourceDevice();
+}
+
+void QNmeaPositionInfoSourcePrivate::stopUpdates()
+{
+ m_invokedStart = false;
+ if (m_updateTimer)
+ m_updateTimer->stop();
+ m_pendingUpdate = QGeoPositionInfo();
+ m_noUpdateLastInterval = false;
+}
+
+void QNmeaPositionInfoSourcePrivate::requestUpdate(int msec)
+{
+ if (m_requestTimer && m_requestTimer->isActive())
+ return;
+ if (!m_requestTimer) {
+ m_requestTimer = new QTimer(this);
+ connect(m_requestTimer, SIGNAL(timeout()), SLOT(updateRequestTimeout()));
+ }
+
+ bool initialized = initialize();
+ if (!initialized) {
+ emit m_source->requestTimeout();
+ return;
+ }
+
+ m_requestTimer->start(msec);
+
+ if (initialized)
+ prepareSourceDevice();
+}
+
+void QNmeaPositionInfoSourcePrivate::updateRequestTimeout()
+{
+ m_requestTimer->stop();
+ emit m_source->requestTimeout();
+}
+
+void QNmeaPositionInfoSourcePrivate::notifyNewUpdate(QGeoPositionInfo *update, bool hasFix)
+{
+ //qDebug() << "QNmeaPositionInfoSourcePrivate::notifyNewUpdate()" << update->dateTime() << hasFix << m_invokedStart << (m_requestTimer && m_requestTimer->isActive());
+
+ QDate date = update->dateTime().date();
+ if (date.isValid()) {
+ m_currentDate = date;
+ } else {
+ // some sentence have time but no date
+ QTime time = update->dateTime().time();
+ if (time.isValid() && m_currentDate.isValid())
+ update->setDateTime(QDateTime(m_currentDate, time, Qt::UTC));
+ }
+
+ if (hasFix && update->isValid()) {
+ if (m_requestTimer && m_requestTimer->isActive()) {
+ m_requestTimer->stop();
+ emitUpdated(*update);
+ } else if (m_invokedStart) {
+ if (m_updateTimer && m_updateTimer->isActive()) {
+ // for periodic updates, only want the most recent update
+ m_pendingUpdate = *update;
+ if (m_noUpdateLastInterval) {
+ emitPendingUpdate();
+ m_noUpdateLastInterval = false;
+ }
+ } else {
+ emitUpdated(*update);
+ }
+ }
+ m_lastUpdate = *update;
+ }
+}
+
+void QNmeaPositionInfoSourcePrivate::timerEvent(QTimerEvent *)
+{
+ emitPendingUpdate();
+}
+
+void QNmeaPositionInfoSourcePrivate::emitPendingUpdate()
+{
+ if (m_pendingUpdate.isValid()) {
+ emitUpdated(m_pendingUpdate);
+ m_pendingUpdate = QGeoPositionInfo();
+ } else {
+ m_noUpdateLastInterval = true;
+ }
+}
+
+void QNmeaPositionInfoSourcePrivate::emitUpdated(const QGeoPositionInfo &update)
+{
+ m_lastUpdate = update;
+ emit m_source->positionUpdated(update);
+}
+
+//=========================================================
+
+/*!
+ \class QNmeaPositionInfoSource
+ \brief The QNmeaPositionInfoSource class provides positional information using a NMEA data source.
+
+ NMEA is a commonly used protocol for the specification of one's global
+ position at a certain point in time. The QNmeaPositionInfoSource class reads NMEA
+ data and uses it to provide positional data in the form of
+ QGeoPositionInfo objects.
+
+ A QNmeaPositionInfoSource instance operates in either \l {RealTimeMode} or
+ \l {SimulationMode}. These modes allow NMEA data to be read from either a
+ live source of positional data, or replayed for simulation purposes from
+ previously recorded NMEA data.
+
+ Use setUpdateMode() to define the update mode, and setDevice() to
+ set the source of NMEA data.
+
+ Use startUpdates() to receive regular position updates through the updated()
+ signal, and stopUpdates() to stop these updates. If you only require
+ updates occasionally, you can call requestUpdate() as required, instead
+ of startUpdates() and stopUpdates().
+*/
+
+
+/*!
+ \enum QNmeaPositionInfoSource::UpdateMode
+ Defines the available update modes.
+
+ \value RealTimeMode Positional data is read and distributed from the data source as it becomes available. Use this mode if you are using a live source of positional data (for example, a GPS hardware device).
+ \value SimulationMode The data and time information in the NMEA source data is used to provide positional updates at the rate at which the data was originally recorded. if the data source contains previously recorded NMEA data and you want to replay the data for simulation purposes.
+*/
+
+
+/*!
+ Constructs a QNmeaPositionInfoSource instance with the given \a parent
+ and \a updateMode.
+*/
+QNmeaPositionInfoSource::QNmeaPositionInfoSource(UpdateMode updateMode, QObject *parent)
+ : QGeoPositionInfoSource(parent),
+ d(new QNmeaPositionInfoSourcePrivate(this))
+{
+ d->m_updateMode = updateMode;
+ d->m_device = 0;
+}
+
+/*!
+ Destroys the position source.
+*/
+QNmeaPositionInfoSource::~QNmeaPositionInfoSource()
+{
+ delete d;
+}
+
+/*!
+ Returns the update mode. The default mode is
+ QNmeaPositionInfoSource::InvalidMode.
+*/
+QNmeaPositionInfoSource::UpdateMode QNmeaPositionInfoSource::updateMode() const
+{
+ return d->m_updateMode;
+}
+
+/*!
+ Sets the NMEA data source to \a device. If the device is not open, it
+ will be opened in QIODevice::ReadOnly mode.
+
+ The source device can only be set once and must be set before calling
+ startUpdates() or requestUpdate().
+
+ \bold {Note:} The \a device must emit QIODevice::readyRead() for the
+ source to be notified when data is available for reading.
+*/
+void QNmeaPositionInfoSource::setDevice(QIODevice *device)
+{
+ if (device != d->m_device) {
+ if (!d->m_device)
+ d->m_device = device;
+ else
+ qWarning("QNmeaPositionInfoSource: source device has already been set");
+ }
+}
+
+/*!
+ Returns the NMEA data source.
+*/
+QIODevice *QNmeaPositionInfoSource::device() const
+{
+ return d->m_device;
+}
+
+/*!
+ \reimp
+*/
+void QNmeaPositionInfoSource::setUpdateInterval(int msec)
+{
+ QGeoPositionInfoSource::setUpdateInterval(msec);
+ if (d->m_invokedStart) {
+ d->stopUpdates();
+ d->startUpdates();
+ }
+}
+
+/*!
+ \reimp
+*/
+void QNmeaPositionInfoSource::startUpdates()
+{
+ d->startUpdates();
+}
+
+/*!
+ \reimp
+*/
+void QNmeaPositionInfoSource::stopUpdates()
+{
+ d->stopUpdates();
+}
+
+/*!
+ \reimp
+*/
+void QNmeaPositionInfoSource::requestUpdate(int msec)
+{
+ d->requestUpdate(msec);
+}
+
+/*!
+ \reimp
+*/
+QGeoPositionInfo QNmeaPositionInfoSource::lastKnownPosition(bool) const
+{
+ // the bool value does not matter since we only use satellite positioning
+ return d->m_lastUpdate;
+}
+
+/*!
+ \reimp
+*/
+QGeoPositionInfoSource::PositioningMethods QNmeaPositionInfoSource::supportedPositioningMethods() const
+{
+ return SatellitePositioningMethods;
+}
+
+/*!
+ \reimp
+*/
+int QNmeaPositionInfoSource::minimumUpdateInterval() const
+{
+ return 0;
+}
+
diff --git a/location/qnmeapositioninfosource.h b/location/qnmeapositioninfosource.h
new file mode 100644
index 0000000000..7e16808554
--- /dev/null
+++ b/location/qnmeapositioninfosource.h
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QNMEAPOSITIONINFOSOURCE_H
+#define QNMEAPOSITIONINFOSOURCE_H
+
+#include "qlocationglobal.h"
+#include "qgeopositioninfosource.h"
+
+class QNmeaPositionInfoSourcePrivate;
+class QIODevice;
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class Q_LOCATION_EXPORT QNmeaPositionInfoSource : public QGeoPositionInfoSource
+{
+ Q_OBJECT
+public:
+ enum UpdateMode {
+ RealTimeMode = 1,
+ SimulationMode
+ };
+
+ explicit QNmeaPositionInfoSource(UpdateMode updateMode, QObject *parent = 0);
+ ~QNmeaPositionInfoSource();
+
+ UpdateMode updateMode() const;
+
+ void setDevice(QIODevice *source);
+ QIODevice *device() const;
+
+ void setUpdateInterval(int msec);
+
+ QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const;
+ PositioningMethods supportedPositioningMethods() const;
+ int minimumUpdateInterval() const;
+
+public slots:
+ void startUpdates();
+ void stopUpdates();
+ void requestUpdate(int timeout = 5000);
+
+private:
+ Q_DISABLE_COPY(QNmeaPositionInfoSource)
+ friend class QNmeaPositionInfoSourcePrivate;
+ QNmeaPositionInfoSourcePrivate *d;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/location/qnmeapositioninfosource_p.h b/location/qnmeapositioninfosource_p.h
new file mode 100644
index 0000000000..51d65bb78f
--- /dev/null
+++ b/location/qnmeapositioninfosource_p.h
@@ -0,0 +1,174 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QNMEAPOSITIONINFOSOURCE_P_H
+#define QNMEAPOSITIONINFOSOURCE_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qnmeapositioninfosource.h"
+#include "qgeopositioninfo.h"
+
+#include <QObject>
+#include <QQueue>
+#include <QPointer>
+
+class QNmeaReader;
+class QBasicTimer;
+class QTimerEvent;
+class QTimer;
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+struct QPendingGeoPositionInfo
+{
+ QGeoPositionInfo info;
+ bool hasFix;
+};
+
+
+class QNmeaPositionInfoSourcePrivate : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QNmeaPositionInfoSourcePrivate(QNmeaPositionInfoSource *parent);
+ ~QNmeaPositionInfoSourcePrivate();
+
+ void startUpdates();
+ void stopUpdates();
+ void requestUpdate(int msec);
+
+ void notifyNewUpdate(QGeoPositionInfo *update, bool fixStatus);
+
+ QNmeaPositionInfoSource::UpdateMode m_updateMode;
+ QPointer<QIODevice> m_device;
+ QGeoPositionInfo m_lastUpdate;
+ bool m_invokedStart;
+
+public slots:
+ void readyRead();
+
+protected:
+ void timerEvent(QTimerEvent *event);
+
+private slots:
+ void emitPendingUpdate();
+ void sourceDataClosed();
+ void updateRequestTimeout();
+
+private:
+ bool openSourceDevice();
+ bool initialize();
+ void prepareSourceDevice();
+ void emitUpdated(const QGeoPositionInfo &update);
+
+ QNmeaPositionInfoSource *m_source;
+ QNmeaReader *m_nmeaReader;
+ QBasicTimer *m_updateTimer;
+ QGeoPositionInfo m_pendingUpdate;
+ QDate m_currentDate;
+ QTimer *m_requestTimer;
+ bool m_noUpdateLastInterval;
+ bool m_connectedReadyRead;
+};
+
+
+class QNmeaReader
+{
+public:
+ explicit QNmeaReader(QNmeaPositionInfoSourcePrivate *sourcePrivate)
+ : m_proxy(sourcePrivate) {}
+ virtual ~QNmeaReader() {}
+
+ virtual void readAvailableData() = 0;
+
+protected:
+ QNmeaPositionInfoSourcePrivate *m_proxy;
+};
+
+
+class QNmeaRealTimeReader : public QNmeaReader
+{
+public:
+ explicit QNmeaRealTimeReader(QNmeaPositionInfoSourcePrivate *sourcePrivate);
+ virtual void readAvailableData();
+};
+
+
+class QNmeaSimulatedReader : public QObject, public QNmeaReader
+{
+ Q_OBJECT
+public:
+ explicit QNmeaSimulatedReader(QNmeaPositionInfoSourcePrivate *sourcePrivate);
+ ~QNmeaSimulatedReader();
+ virtual void readAvailableData();
+
+protected:
+ virtual void timerEvent(QTimerEvent *event);
+
+private slots:
+ void simulatePendingUpdate();
+
+private:
+ bool setFirstDateTime();
+ void processNextSentence();
+
+ QQueue<QPendingGeoPositionInfo> m_pendingUpdates;
+ int m_currTimerId;
+ bool m_hasValidDateTime;
+};
+
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/location/qsatelliteinfo.cpp b/location/qsatelliteinfo.cpp
new file mode 100644
index 0000000000..1fffe8be27
--- /dev/null
+++ b/location/qsatelliteinfo.cpp
@@ -0,0 +1,220 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qsatelliteinfo.h"
+
+#include <QHash>
+#include <QDebug>
+
+
+class QSatelliteInfoPrivate
+{
+public:
+ int prn;
+ int signal;
+ QHash<int, qreal> doubleProps;
+};
+
+
+/*!
+ \class QSatelliteInfo
+ \brief The QSatelliteInfo class contains basic information about a satellite.
+
+ \sa QSatelliteInfoSource
+*/
+
+/*!
+ \enum QSatelliteInfo::Property
+ Defines the properties for the satellite information.
+
+ \value Elevation The elevation of the satellite, in degrees.
+ \value Azimuth The azimuth to true north, in degrees.
+*/
+
+
+/*!
+ Creates a satellite information object.
+*/
+QSatelliteInfo::QSatelliteInfo()
+ : d(new QSatelliteInfoPrivate)
+{
+ d->prn = -1;
+ d->signal = -1;
+}
+
+/*!
+ Creates a satellite information object with the values of \a other.
+*/
+
+QSatelliteInfo::QSatelliteInfo(const QSatelliteInfo &other)
+ : d(new QSatelliteInfoPrivate)
+{
+ operator=(other);
+}
+
+/*!
+ Destroys a satellite information object.
+*/
+QSatelliteInfo::~QSatelliteInfo()
+{
+ delete d;
+}
+
+/*!
+ Assigns the values from \a other to this object.
+*/
+QSatelliteInfo &QSatelliteInfo::operator=(const QSatelliteInfo &other)
+{
+ if (this == &other)
+ return *this;
+
+ d->prn = other.d->prn;
+ d->signal = other.d->signal;
+ d->doubleProps = other.d->doubleProps;
+ return *this;
+}
+
+/*!
+ Returns true if all the information for this satellite
+ are the same as those of \a other.
+*/
+bool QSatelliteInfo::operator==(const QSatelliteInfo &other) const
+{
+ return d->prn == other.d->prn
+ && d->signal == other.d->signal
+ && d->doubleProps == other.d->doubleProps;
+}
+
+/*!
+ \fn bool QSatelliteInfo::operator!=(const QSatelliteInfo &other) const;
+
+ Returns true if any of the information for this satellite
+ are not the same as those of \a other.
+*/
+
+/*!
+ Sets the PRN (Pseudo-random noise) number to \a prn.
+
+ The PRN number can be used to identify a satellite.
+*/
+void QSatelliteInfo::setPrnNumber(int prn)
+{
+ d->prn = prn;
+}
+
+/*!
+ Returns the PRN (Pseudo-random noise) number, or -1 if the value has not been set.
+*/
+
+int QSatelliteInfo::prnNumber() const
+{
+ return d->prn;
+}
+
+/*!
+ Sets the signal strength to \a signalStrength, in decibels.
+*/
+void QSatelliteInfo::setSignalStrength(int signalStrength)
+{
+ d->signal = signalStrength;
+}
+
+/*!
+ Returns the signal strength, or -1 if the value has not been set.
+*/
+int QSatelliteInfo::signalStrength() const
+{
+ return d->signal;
+}
+
+/*!
+ Sets the value for \a property to \a value.
+*/
+void QSatelliteInfo::setProperty(Property property, qreal value)
+{
+ d->doubleProps[int(property)] = value;
+}
+
+/*!
+ Returns the value of the specified \a property as a qreal value.
+
+ Returns -1 if the value has not been set.
+
+ \sa hasProperty(), setProperty()
+*/
+qreal QSatelliteInfo::property(Property property) const
+{
+ if (d->doubleProps.contains(int(property)))
+ return d->doubleProps[int(property)];
+ return -1;
+}
+
+/*!
+ Removes the specified \a property and its value.
+*/
+void QSatelliteInfo::removeProperty(Property property)
+{
+ d->doubleProps.remove(int(property));
+}
+
+/*!
+ Returns true if the specified \a property is present in this update.
+*/
+bool QSatelliteInfo::hasProperty(Property property) const
+{
+ return d->doubleProps.contains(int(property));
+}
+
+#ifndef QT_NO_DEBUG_STREAM
+QDebug operator<<(QDebug dbg, const QSatelliteInfo &info)
+{
+ dbg.nospace() << "QSatelliteInfo(PRN=" << info.d->prn;
+ dbg.nospace() << ", signal-strength=";
+ dbg.nospace() << info.d->signal;
+
+ QList<int> props = info.d->doubleProps.keys();
+ for (int i=0; i<props.count(); i++) {
+ dbg.nospace() << ", ";
+ switch (props[i]) {
+ case QSatelliteInfo::Elevation:
+ dbg.nospace() << "Elevation=";
+ break;
+ case QSatelliteInfo::Azimuth:
+ dbg.nospace() << "Azimuth=";
+ break;
+ }
+ dbg.nospace() << info.d->doubleProps[props[i]];
+ }
+ dbg.nospace() << ')';
+ return dbg;
+}
+#endif
diff --git a/location/qsatelliteinfo.h b/location/qsatelliteinfo.h
new file mode 100644
index 0000000000..d4a72aff58
--- /dev/null
+++ b/location/qsatelliteinfo.h
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QSATELLITEINFO_H
+#define QSATELLITEINFO_H
+
+#include "qlocationglobal.h"
+
+class QDebug;
+class QSatelliteInfoPrivate;
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class Q_LOCATION_EXPORT QSatelliteInfo
+{
+public:
+ enum Property {
+ Elevation,
+ Azimuth
+ };
+
+ QSatelliteInfo();
+ QSatelliteInfo(const QSatelliteInfo &other);
+ ~QSatelliteInfo();
+
+ QSatelliteInfo &operator=(const QSatelliteInfo &other);
+
+ bool operator==(const QSatelliteInfo &other) const;
+ inline bool operator!=(const QSatelliteInfo &other) const { return !operator==(other); }
+
+ void setPrnNumber(int prn);
+ int prnNumber() const;
+
+ void setSignalStrength(int signalStrength);
+ int signalStrength() const;
+
+ void setProperty(Property property, qreal value);
+ qreal property(Property property) const;
+ void removeProperty(Property property);
+
+ bool hasProperty(Property property) const;
+
+private:
+#ifndef QT_NO_DEBUG_STREAM
+ friend Q_LOCATION_EXPORT QDebug operator<<(QDebug dbg, const QSatelliteInfo &info);
+#endif
+ QSatelliteInfoPrivate *d;
+};
+
+#ifndef QT_NO_DEBUG_STREAM
+Q_LOCATION_EXPORT QDebug operator<<(QDebug dbg, const QSatelliteInfo &info);
+#endif
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/location/qsatelliteinfosource.cpp b/location/qsatelliteinfosource.cpp
new file mode 100644
index 0000000000..c45699ef5f
--- /dev/null
+++ b/location/qsatelliteinfosource.cpp
@@ -0,0 +1,128 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qsatelliteinfosource.h"
+
+
+/*!
+ \class QSatelliteInfoSource
+ \brief The QSatelliteInfoSource class is an abstract base class for the distribution of satellite information updates.
+
+ The static function QSatelliteInfoSource::createSource() creates a default
+ satellite data source that is appropriate for the platform, if one is
+ available. Otherwise, QSatelliteInfoSource can be subclassed to create an
+ appropriate custom source of satellite data.
+
+ Call startUpdates() and stopUpdates() to start and stop regular updates,
+ or requestUpdate() to request a single update.
+ When an update is available, satellitesInViewUpdated() and/or
+ satellitesInUseUpdated() will be emitted.
+*/
+
+/*!
+ Creates a source with the specified \a parent.
+*/
+QSatelliteInfoSource::QSatelliteInfoSource(QObject *parent)
+ : QObject(parent)
+{
+}
+
+/*!
+ Creates and returns a source with the specified \a parent that reads
+ from the system's default source of satellite update information.
+
+ Returns 0 if the system has no default source.
+*/
+QSatelliteInfoSource *QSatelliteInfoSource::createSource(QObject * /*parent*/)
+{
+ return 0;
+}
+
+/*!
+ \fn void QSatelliteInfoSource::satellitesInViewUpdated(const QList<QSatelliteInfo> &satellites);
+
+ If startUpdates() or requestUpdate() is called, this signal is emitted
+ when an update is available on the satellites that are
+ currently in view.
+
+ The \a satellites parameter holds the satellites currently in view.
+*/
+
+/*!
+ \fn void QSatelliteInfoSource::satellitesInUseUpdated(const QList<QSatelliteInfo> &satellites);
+
+ If startUpdates() or requestUpdate() is called, this signal is emitted
+ when an update is available on the number of satellites that are
+ currently in use.
+
+ These are the satellites that are used to get a "fix" - that
+ is, those used to determine the current position.
+
+ The \a satellites parameter holds the satellites currently in use.
+*/
+
+/*!
+ \fn virtual void QSatelliteInfoSource::startUpdates() = 0;
+
+ Starts emitting updates at regular intervals. The updates will be
+ provided whenever new satellite information becomes available.
+
+ \sa satellitesInViewUpdated(), satellitesInUseUpdated()
+*/
+
+/*!
+ \fn virtual void QSatelliteInfoSource::stopUpdates() = 0;
+
+ Stops emitting updates at regular intervals.
+*/
+
+/*!
+ \fn virtual void QSatelliteInfoSource::requestUpdate(int timeout = 5000);
+
+ Attempts to get the current satellite information and emit
+ satellitesInViewUpdated() and satellitesInUseUpdated() with this
+ information. This is useful if you do not need the regular updates
+ provided by startUpdates(). If the current position cannot be found
+ within the given \a timeout (in milliseconds), requestTimeout() is
+ emitted.
+
+ This does nothing if another update request is in progress. However
+ it can be called even if startUpdates() has already been called and
+ regular updates are in progress.
+*/
+
+/*!
+ \fn void QSatelliteInfoSource::requestTimeout();
+
+ Emitted if requestUpdate() was called and the current satellite
+ information could not be retrieved within the specified timeout.
+*/
diff --git a/location/qsatelliteinfosource.h b/location/qsatelliteinfosource.h
new file mode 100644
index 0000000000..439d1e7f15
--- /dev/null
+++ b/location/qsatelliteinfosource.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QSATELLITEINFOSOURCE_H
+#define QSATELLITEINFOSOURCE_H
+
+#include "qlocationglobal.h"
+#include "qsatelliteinfo.h"
+
+#include <QObject>
+#include <QList>
+
+class QSatelliteInfoSourcePrivate;
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class Q_LOCATION_EXPORT QSatelliteInfoSource : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QSatelliteInfoSource(QObject *parent = 0);
+
+ static QSatelliteInfoSource *createSource(QObject *parent = 0);
+
+public slots:
+ virtual void startUpdates() = 0;
+ virtual void stopUpdates() = 0;
+
+ virtual void requestUpdate(int timeout = 5000) = 0;
+
+signals:
+ void satellitesInViewUpdated(const QList<QSatelliteInfo> &satellites);
+ void satellitesInUseUpdated(const QList<QSatelliteInfo> &satellites);
+ void requestTimeout();
+
+private:
+ Q_DISABLE_COPY(QSatelliteInfoSource)
+ QSatelliteInfoSourcePrivate *d;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro
index bf964fbe12..617f8979d6 100644
--- a/tests/auto/auto.pro
+++ b/tests/auto/auto.pro
@@ -9,4 +9,14 @@ SUBDIRS += servicemetadata \ #service framework
qservicecontext \
qnetworkconfigmanager \ #Bearer management
qnetworkconfiguration \
- qnetworksession
+ qnetworksession \
+ tst_qgeocoordinate \ #Location
+ tst_qgeopositioninfo \
+ tst_qsatelliteinfo \
+ tst_qsatelliteinfosource \
+ tst_qgeopositioninfosource \
+ tst_qgeoareamonitor \
+ tst_qlocationutils \
+ tst_qnmeapositioninfosource \
+ tst_qnmeapositioninfosource_realtime \
+ tst_qnmeapositioninfosource_sim
diff --git a/tests/auto/qgeopositioninfosourcesubclasstest.cpp b/tests/auto/qgeopositioninfosourcesubclasstest.cpp
new file mode 100644
index 0000000000..7e5be7e172
--- /dev/null
+++ b/tests/auto/qgeopositioninfosourcesubclasstest.cpp
@@ -0,0 +1,409 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qgeopositioninfosourcesubclasstest_p.h"
+#include "qlocationtestutils_p.h"
+
+#include <QTest>
+#include <QSignalSpy>
+#include <QMetaType>
+#include <QDebug>
+
+Q_DECLARE_METATYPE(QGeoPositionInfo)
+Q_DECLARE_METATYPE(QList<int>)
+Q_DECLARE_METATYPE(QList<QDateTime>)
+
+class QUpdateIntervalLogger : public QObject
+{
+ Q_OBJECT
+public:
+ QUpdateIntervalLogger(QGeoPositionInfoSource *source, QObject *parent = 0)
+ : QObject(parent),
+ m_source(source)
+ {
+ }
+
+ ~QUpdateIntervalLogger() {}
+
+ int updateCount() const { return m_updateCount; }
+
+ void compareIntervals(int expectedInterval, int errorMarginMsec, bool compareFirstInterval = true)
+ {
+ QList<int> intervals = listUpdateIntervals();
+
+ for (int i=0; i<intervals.count(); i++) {
+ if (i==0 && !compareFirstInterval)
+ continue;
+ //qDebug() << "Actual vs expected time:"
+ // << qAbs(expectedInterval - intervals[i]) << "ms";
+ QString debug;
+ QTextStream stream(&debug);
+ stream << intervals[i] << " not within " << errorMarginMsec << "ms"
+ << " of " << expectedInterval;
+ QVERIFY2( (intervals[i] >= expectedInterval - errorMarginMsec)
+ && (intervals[i] <= expectedInterval + errorMarginMsec),
+ debug.toLatin1().constData());
+ }
+ }
+
+public slots:
+ void startLogging()
+ {
+ connect(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)),
+ SLOT(positionUpdated(QGeoPositionInfo)));
+
+ // insert starting timestamp to measure first interval
+ m_updateCount = 0;
+ m_timestamps << QDateTime::currentDateTime();
+ }
+
+private slots:
+ void positionUpdated(const QGeoPositionInfo &update)
+ {
+ Q_UNUSED(update);
+ m_timestamps << QDateTime::currentDateTime();
+ m_updateCount++;
+ }
+
+private:
+ QList<int> listUpdateIntervals() const
+ {
+ QList<int> intervals;
+ for (int i=0; i<m_timestamps.count(); i++) {
+ if (i+1 == m_timestamps.count())
+ break;
+ intervals << m_timestamps[i].time().msecsTo(m_timestamps[i+1].time());
+ }
+ return intervals;
+ }
+
+ QGeoPositionInfoSource *m_source;
+ QList<QDateTime> m_timestamps;
+ int m_updateCount;
+ QTime m_last;
+};
+
+
+
+QGeoPositionInfoSourceSubclassTest::QGeoPositionInfoSourceSubclassTest(QGeoPositionInfoSourceProxyFactory *factory, QObject *parent)
+ : QObject(parent),
+ m_factory(factory),
+ m_helper(0),
+ m_source(0)
+{
+}
+
+QList<QDateTime> QGeoPositionInfoSourceSubclassTest::createDateTimes(int count) const
+{
+ QList<QDateTime> dateTimes;
+ QDateTime dt = QDateTime::currentDateTime().toUTC();
+ int interval = 100;
+ for (int i=0; i<count; i++) {
+ dateTimes << dt.addMSecs(interval);
+ interval += 100;
+ }
+ return dateTimes;
+}
+
+void QGeoPositionInfoSourceSubclassTest::initTestCase()
+{
+ qRegisterMetaType<QGeoPositionInfo>();
+}
+
+void QGeoPositionInfoSourceSubclassTest::init()
+{
+ m_helper = m_factory->createProxy();
+ m_source = m_helper->source();
+}
+
+void QGeoPositionInfoSourceSubclassTest::cleanup()
+{
+ delete m_helper;
+ m_source = 0;
+}
+
+void QGeoPositionInfoSourceSubclassTest::setUpdateInterval()
+{
+ QFETCH(int, interval);
+ QFETCH(bool, setIntervalBeforeStart);
+ QFETCH(QList<QDateTime>, dateTimes);
+
+ QUpdateIntervalLogger *logger = new QUpdateIntervalLogger(m_source);
+
+ // Should not make a difference whether setUpdateInterval() is called
+ // before startUpdates() or after it.
+ if (setIntervalBeforeStart)
+ m_source->setUpdateInterval(interval);
+ m_source->startUpdates();
+ if (!setIntervalBeforeStart)
+ m_source->setUpdateInterval(interval);
+
+ logger->startLogging();
+
+ QTest::qWait(m_source->updateInterval()/2); // delay first update to ensure it is received
+ for (int i=0; i<dateTimes.count(); i++) {
+ m_helper->feedUpdate(dateTimes[i]);
+ QTest::qWait(m_source->updateInterval());
+ }
+
+ QTRY_COMPARE(logger->updateCount(), dateTimes.count());
+ logger->compareIntervals(m_source->updateInterval(), m_helper->updateIntervalErrorMargin());
+}
+
+void QGeoPositionInfoSourceSubclassTest::setUpdateInterval_data()
+{
+ QTest::addColumn<int>("interval");
+ QTest::addColumn<bool>("setIntervalBeforeStart");
+ QTest::addColumn< QList<QDateTime> >("dateTimes");
+
+ QList<QDateTime> dateTimes;
+ QList<int> testIntervals;
+
+ dateTimes = createDateTimes(3);
+ QTest::newRow("300ms, regular test intervals, set before start") << 300 << true << dateTimes;
+ QTest::newRow("300ms, regular test intervals, set after start") << 300 << false << dateTimes;
+}
+
+void QGeoPositionInfoSourceSubclassTest::setUpdateInterval_delayedUpdate()
+{
+ // If an update interval is set, and an update is not available at a
+ // particular interval, the source should emit the next update as soon
+ // as it becomes available
+
+ QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
+ m_source->setUpdateInterval(500);
+ m_source->startUpdates();
+
+ QTest::qWait(600);
+ QDateTime now = QDateTime::currentDateTime();
+ m_helper->feedUpdate(now);
+ QTRY_COMPARE(spyUpdate.count(), 1);
+
+ // should have gotten the update immediately, and not have needed to
+ // wait until the next interval
+ QVERIFY(now.time().msecsTo(QDateTime::currentDateTime().time()) < 200);
+}
+
+void QGeoPositionInfoSourceSubclassTest::setUpdateInterval_expectLatestUpdateOnly()
+{
+ // If multiple updates are in the buffer at a particular update interval,
+ // only the latest update should be emitted
+
+ QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
+ m_source->setUpdateInterval(500);
+ m_source->startUpdates();
+
+ QList<QDateTime> dateTimes = createDateTimes(3);
+ for (int i=0; i<dateTimes.count(); i++)
+ m_helper->feedUpdate(dateTimes[i]);
+
+ QTRY_COMPARE(spyUpdate.count(), 1);
+ QCOMPARE(spyUpdate[0][0].value<QGeoPositionInfo>().dateTime(), dateTimes.last());
+}
+
+void QGeoPositionInfoSourceSubclassTest::lastKnownPosition()
+{
+ QCOMPARE(m_source->lastKnownPosition(), QGeoPositionInfo());
+
+ // source may need requestUpdate() or startUpdates() to be called to
+ // trigger reading of data channel
+ QSignalSpy spyTimeout(m_source, SIGNAL(requestTimeout()));
+ m_source->requestUpdate(0);
+ QTRY_COMPARE(spyTimeout.count(), 1);
+
+ // If an update is received and startUpdates() or requestUpdate() hasn't
+ // been called, it should still be available through lastKnownPosition()
+ QDateTime dt = QDateTime::currentDateTime().toUTC();
+ m_helper->feedUpdate(dt);
+ QTRY_COMPARE(m_source->lastKnownPosition().dateTime(), dt);
+
+ QList<QDateTime> dateTimes = createDateTimes(5);
+ for (int i=0; i<dateTimes.count(); i++) {
+ m_source->requestUpdate();
+ m_helper->feedUpdate(dateTimes[i]);
+ QTRY_COMPARE(m_source->lastKnownPosition().dateTime(), dateTimes[i]);
+ }
+
+ m_source->startUpdates();
+ dateTimes = createDateTimes(5);
+ for (int i=0; i<dateTimes.count(); i++) {
+ m_helper->feedUpdate(dateTimes[i]);
+ QTRY_COMPARE(m_source->lastKnownPosition().dateTime(), dateTimes[i]);
+ }
+
+ m_source->stopUpdates();
+ m_source->setUpdateInterval(3000);
+ m_source->startUpdates();
+ dateTimes = createDateTimes(5);
+ for (int i=0; i<dateTimes.count(); i++) {
+ m_helper->feedUpdate(dateTimes[i]);
+ QTRY_COMPARE(m_source->lastKnownPosition().dateTime(), dateTimes[i]);
+ }
+
+ // calling start, stop, request shouldn't affect the last known position
+ m_source->startUpdates();
+ m_source->stopUpdates();
+ m_source->requestUpdate(100);
+
+ QCOMPARE(m_source->lastKnownPosition().dateTime(), dateTimes.last());
+}
+
+void QGeoPositionInfoSourceSubclassTest::requestUpdate()
+{
+ QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
+ QSignalSpy spyTimeout(m_source, SIGNAL(requestTimeout()));
+ QDateTime dt;
+
+ m_source->requestUpdate(100);
+ QTRY_COMPARE(spyTimeout.count(), 1);
+ spyTimeout.clear();
+
+ dt = QDateTime::currentDateTime().toUTC();
+ m_helper->feedUpdate(dt);
+ m_source->requestUpdate();
+ QTRY_COMPARE(spyUpdate.count(), 1);
+ QCOMPARE(spyUpdate[0][0].value<QGeoPositionInfo>().dateTime(), dt);
+ QCOMPARE(spyTimeout.count(), 0);
+ spyUpdate.clear();
+
+ // delay the update and expect it to be emitted after 300ms
+ dt = QDateTime::currentDateTime().toUTC();
+ m_source->requestUpdate(1000);
+ QTest::qWait(300);
+ m_helper->feedUpdate(dt);
+ QTRY_COMPARE(spyUpdate.count(), 1);
+ QCOMPARE(spyUpdate[0][0].value<QGeoPositionInfo>().dateTime(), dt);
+ QCOMPARE(spyTimeout.count(), 0);
+ spyUpdate.clear();
+
+ // delay the update and expect requestTimeout() to be emitted
+ dt = QDateTime::currentDateTime().toUTC();
+ m_source->requestUpdate(500);
+ QTest::qWait(1000);
+ m_helper->feedUpdate(dt);
+ QCOMPARE(spyTimeout.count(), 1);
+ QCOMPARE(spyUpdate.count(), 0);
+ spyUpdate.clear();
+}
+
+void QGeoPositionInfoSourceSubclassTest::requestUpdate_after_start()
+{
+ QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
+ QSignalSpy spyTimeout(m_source, SIGNAL(requestTimeout()));
+
+ // Start updates with 500ms interval and requestUpdate() with 100ms
+ // timeout. Feed an update, and it should be emitted immediately due to
+ // the requestUpdate(). The update should not be emitted again after that
+ // (i.e. the startUpdates() interval should not cause it to be re-emitted).
+
+ QDateTime dt = QDateTime::currentDateTime().toUTC();
+ m_source->setUpdateInterval(500);
+ m_source->startUpdates();
+ m_source->requestUpdate(100);
+ m_helper->feedUpdate(dt);
+ QTRY_COMPARE(spyUpdate.count(), 1);
+ QCOMPARE(spyUpdate[0][0].value<QGeoPositionInfo>().dateTime(), dt);
+ QCOMPARE(spyTimeout.count(), 0);
+ spyUpdate.clear();
+
+ // Update has been emitted for requestUpdate(), shouldn't be emitted for startUpdates()
+ QTest::qWait(1000);
+ QCOMPARE(spyUpdate.count(), 0);
+}
+
+void QGeoPositionInfoSourceSubclassTest::startUpdates()
+{
+ QFETCH(QList<QDateTime>, dateTimes);
+
+ QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
+ m_source->startUpdates();
+
+ for (int i=0; i<dateTimes.count(); i++)
+ m_helper->feedUpdate(dateTimes[i]);
+ QTRY_COMPARE(spyUpdate.count(), dateTimes.count());
+}
+
+void QGeoPositionInfoSourceSubclassTest::startUpdates_data()
+{
+ QTest::addColumn<QList<QDateTime> >("dateTimes");
+
+ QTest::newRow("1 update") << createDateTimes(1);
+ QTest::newRow("2 updates") << createDateTimes(2);
+ QTest::newRow("10 updates") << createDateTimes(10);
+}
+
+void QGeoPositionInfoSourceSubclassTest::startUpdates_startNotCalled()
+{
+ QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
+ m_helper->feedUpdate(QDateTime::currentDateTime().toUTC());
+
+ // signal not emitted if start() not called
+ QTest::qWait(1000);
+ QCOMPARE(spyUpdate.count(), 0);
+}
+
+void QGeoPositionInfoSourceSubclassTest::stopUpdates()
+{
+ QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
+
+ m_source->startUpdates();
+
+ QList<QDateTime> dateTimes = createDateTimes(5);
+ for (int i=0; i<dateTimes.count(); i++)
+ m_helper->feedUpdate(dateTimes[i]);
+ QTRY_COMPARE(spyUpdate.count(), dateTimes.count());
+
+ spyUpdate.clear();
+ m_source->stopUpdates();
+ for (int i=0; i<dateTimes.count(); i++)
+ m_helper->feedUpdate(dateTimes[i]);
+ // Shouldn't get updates after stop()
+ QTest::qWait(1000);
+ QCOMPARE(spyUpdate.count(), 0);
+}
+
+void QGeoPositionInfoSourceSubclassTest::stopUpdates_restart()
+{
+ QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
+
+ m_source->startUpdates();
+ m_source->stopUpdates();
+
+ m_source->startUpdates();
+ QList<QDateTime> dateTimes = createDateTimes(5);
+ for (int i=0; i<dateTimes.count(); i++)
+ m_helper->feedUpdate(dateTimes[i]);
+ QTRY_COMPARE(spyUpdate.count(), dateTimes.count());
+}
+
+
+#include "qgeopositioninfosourcesubclasstest.moc"
diff --git a/tests/auto/qgeopositioninfosourcesubclasstest_p.h b/tests/auto/qgeopositioninfosourcesubclasstest_p.h
new file mode 100644
index 0000000000..b8aff6d859
--- /dev/null
+++ b/tests/auto/qgeopositioninfosourcesubclasstest_p.h
@@ -0,0 +1,110 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QGEOPOSITIONINFOSOURCESUBCLASSTEST_H
+#define QGEOPOSITIONINFOSOURCESUBCLASSTEST_H
+
+#include <qgeopositioninfosource.h>
+
+#include <QIODevice>
+#include <QObject>
+#include <QList>
+#include <QPointer>
+
+class QGeoCoordinate;
+
+class QGeoPositionInfoSourceProxy
+{
+public:
+ QGeoPositionInfoSourceProxy() {}
+ virtual ~QGeoPositionInfoSourceProxy() {}
+
+ virtual QGeoPositionInfoSource *source() const = 0;
+ virtual void feedUpdate(const QDateTime &dt) = 0;
+
+ virtual int updateIntervalErrorMargin() const { return 50; }
+};
+
+
+class QGeoPositionInfoSourceProxyFactory
+{
+public:
+ QGeoPositionInfoSourceProxyFactory() {}
+ virtual ~QGeoPositionInfoSourceProxyFactory() {}
+
+ virtual QGeoPositionInfoSourceProxy *createProxy() = 0;
+};
+
+
+
+class QGeoPositionInfoSourceSubclassTest : public QObject
+{
+ Q_OBJECT
+public:
+ QGeoPositionInfoSourceSubclassTest(QGeoPositionInfoSourceProxyFactory *factory, QObject *parent = 0);
+
+private slots:
+ void initTestCase();
+ void init();
+ void cleanup();
+
+ void setUpdateInterval();
+ void setUpdateInterval_data();
+ void setUpdateInterval_delayedUpdate();
+ void setUpdateInterval_expectLatestUpdateOnly();
+
+ void lastKnownPosition();
+
+ void requestUpdate();
+ void requestUpdate_after_start();
+
+ void startUpdates();
+ void startUpdates_data();
+ void startUpdates_startNotCalled();
+
+ void stopUpdates();
+ void stopUpdates_restart();
+
+protected:
+ inline QGeoPositionInfoSourceProxyFactory *factory() const { return m_factory; }
+
+private:
+ QList<QDateTime> createDateTimes(int count) const;
+
+ QGeoPositionInfoSourceProxyFactory *m_factory;
+ QGeoPositionInfoSourceProxy *m_helper;
+ QGeoPositionInfoSource *m_source;
+};
+
+
+#endif
+
diff --git a/tests/auto/qlocationtestutils.cpp b/tests/auto/qlocationtestutils.cpp
new file mode 100644
index 0000000000..0c6bf710bb
--- /dev/null
+++ b/tests/auto/qlocationtestutils.cpp
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qlocationtestutils_p.h"
+
+#if defined(Q_OS_SYMBIAN)
+ #include <e32std.h>
+#endif
+
+void QLocationTestUtils::uheap_mark()
+{
+#if defined(Q_OS_SYMBIAN)
+ __UHEAP_MARK;
+#endif
+}
+
+void QLocationTestUtils::uheap_mark_end()
+{
+#if defined(Q_OS_SYMBIAN)
+ __UHEAP_MARKEND;
+#endif
+}
+
+QString QLocationTestUtils::addNmeaChecksumAndBreaks(const QString &sentence)
+{
+ Q_ASSERT(sentence[0] == '$' && sentence[sentence.length()-1] == '*');
+
+ // XOR byte value of all characters between '$' and '*'
+ int result = 0;
+ for (int i=1; i<sentence.length()-1; i++)
+ result ^= sentence[i].toAscii();
+ QString sum;
+ sum.sprintf("%02x", result);
+ return sentence + sum + "\r\n";
+}
+
+QString QLocationTestUtils::createRmcSentence(const QDateTime &dt)
+{
+ QString time = dt.toString("hhmmss.zzz");
+ QString date = dt.toString("ddMMyy");
+ QString nmea = QString("$GPRMC,%1,A,2730.83609,S,15301.87844,E,0.7,9.0,%2,11.2,W,A*")
+ .arg(time).arg(date);
+ return addNmeaChecksumAndBreaks(nmea);
+}
+
+QString QLocationTestUtils::createGgaSentence(const QTime &time)
+{
+ QString nmea = QString("$GPGGA,%1,2734.76859,S,15305.99361,E,1,04,3.5,49.4,M,39.2,M,,*")
+ .arg(time.toString("hhmmss.zzz"));
+ return addNmeaChecksumAndBreaks(nmea);
+}
+
+QString QLocationTestUtils::createZdaSentence(const QDateTime &dt)
+{
+ QString time = dt.toString("hhmmss.zzz");
+ QString nmea = QString("$GPZDA,%1,%2,%3,%4,,*")
+ .arg(time).arg(dt.toString("dd")).arg(dt.toString("MM")).arg(dt.toString("yyyy"));
+ return addNmeaChecksumAndBreaks(nmea);
+}
diff --git a/tests/auto/qlocationtestutils_p.h b/tests/auto/qlocationtestutils_p.h
new file mode 100644
index 0000000000..d4b45b77df
--- /dev/null
+++ b/tests/auto/qlocationtestutils_p.h
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QLOCATIONTESTUTILS_P_H
+#define QLOCATIONTESTUTILS_P_H
+
+#include <QString>
+#include <QTest>
+
+#define QTRY_COMPARE(a,e) \
+ for (int _i = 0; _i < 5000; _i += 100) { \
+ if ((a) == (e)) break; \
+ QTest::qWait(100); \
+ } \
+ QCOMPARE(a, e)
+
+
+class QLocationTestUtils
+{
+public:
+ static void uheap_mark();
+ static void uheap_mark_end();
+
+ static QString addNmeaChecksumAndBreaks(const QString &sentence);
+
+ static QString createRmcSentence(const QDateTime &dt);
+ static QString createGgaSentence(const QTime &time);
+ static QString createZdaSentence(const QDateTime &dt);
+};
+
+#endif
diff --git a/tests/auto/qnmeapositioninfosourceproxyfactory.cpp b/tests/auto/qnmeapositioninfosourceproxyfactory.cpp
new file mode 100644
index 0000000000..4cdcd0a3e5
--- /dev/null
+++ b/tests/auto/qnmeapositioninfosourceproxyfactory.cpp
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qnmeapositioninfosourceproxyfactory.h"
+#include "qlocationtestutils_p.h"
+
+#include <QIODevice>
+#include <QTcpServer>
+#include <QTcpSocket>
+
+
+QNmeaPositionInfoSourceProxy::QNmeaPositionInfoSourceProxy(QNmeaPositionInfoSource *source, QIODevice *outDevice)
+ : m_source(source),
+ m_outDevice(outDevice)
+{
+}
+
+QNmeaPositionInfoSourceProxy::~QNmeaPositionInfoSourceProxy()
+{
+ m_source->device()->close();
+ m_outDevice->close();
+ delete m_source;
+ delete m_outDevice;
+}
+
+QGeoPositionInfoSource *QNmeaPositionInfoSourceProxy::source() const
+{
+ return m_source;
+}
+
+void QNmeaPositionInfoSourceProxy::feedUpdate(const QDateTime &dt)
+{
+ m_outDevice->write(QLocationTestUtils::createRmcSentence(dt).toAscii());
+}
+
+void QNmeaPositionInfoSourceProxy::feedBytes(const QByteArray &bytes)
+{
+ m_outDevice->write(bytes);
+}
+
+
+QNmeaPositionInfoSourceProxyFactory::QNmeaPositionInfoSourceProxyFactory(QNmeaPositionInfoSource::UpdateMode mode)
+ : m_server(new QTcpServer(this)),
+ m_mode(mode)
+{
+ bool b = m_server->listen(QHostAddress::LocalHost);
+ Q_ASSERT(b);
+}
+
+QGeoPositionInfoSourceProxy *QNmeaPositionInfoSourceProxyFactory::createProxy()
+{
+ QTcpSocket *client = new QTcpSocket;
+ client->connectToHost(m_server->serverAddress(), m_server->serverPort());
+ qDebug() << "listening on" << m_server->serverAddress() << m_server->serverPort();
+ bool b = m_server->waitForNewConnection(5000);
+ Q_ASSERT(b);
+ b = client->waitForConnected();
+ Q_ASSERT(b);
+
+ QNmeaPositionInfoSource *source = new QNmeaPositionInfoSource(m_mode);
+ source->setDevice(m_server->nextPendingConnection());
+ Q_ASSERT(source->device() != 0);
+ return new QNmeaPositionInfoSourceProxy(source, client);
+}
diff --git a/tests/auto/qnmeapositioninfosourceproxyfactory.h b/tests/auto/qnmeapositioninfosourceproxyfactory.h
new file mode 100644
index 0000000000..77299b9c37
--- /dev/null
+++ b/tests/auto/qnmeapositioninfosourceproxyfactory.h
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QNMEAPOSITIONINFOSOURCEPROXYFACTORY_H
+#define QNMEAPOSITIONINFOSOURCEPROXYFACTORY_H
+
+#include <QObject>
+
+#include "qgeopositioninfosourcesubclasstest_p.h"
+#include <qnmeapositioninfosource.h>
+
+class QTcpServer;
+class QNmeaPositionInfoSource;
+class QIODevice;
+
+class QNmeaPositionInfoSourceProxy : public QGeoPositionInfoSourceProxy
+{
+public:
+ QNmeaPositionInfoSourceProxy(QNmeaPositionInfoSource *source, QIODevice *outDevice);
+ ~QNmeaPositionInfoSourceProxy();
+
+ QGeoPositionInfoSource *source() const;
+
+ void feedUpdate(const QDateTime &dt);
+
+ void feedBytes(const QByteArray &bytes);
+
+private:
+ QNmeaPositionInfoSource *m_source;
+ QIODevice *m_outDevice;
+};
+
+class QNmeaPositionInfoSourceProxyFactory : public QObject, public QGeoPositionInfoSourceProxyFactory
+{
+ Q_OBJECT
+public:
+ QNmeaPositionInfoSourceProxyFactory(QNmeaPositionInfoSource::UpdateMode mode);
+
+ QGeoPositionInfoSourceProxy *createProxy();
+
+private:
+ QTcpServer *m_server;
+ QNmeaPositionInfoSource::UpdateMode m_mode;
+};
+
+#endif
diff --git a/tests/auto/tst_qgeoareamonitor/tst_qgeoareamonitor.cpp b/tests/auto/tst_qgeoareamonitor/tst_qgeoareamonitor.cpp
new file mode 100644
index 0000000000..7e25356794
--- /dev/null
+++ b/tests/auto/tst_qgeoareamonitor/tst_qgeoareamonitor.cpp
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qgeoareamonitor.h>
+
+#include <QTest>
+#include <QMetaType>
+
+#include <limits.h>
+
+Q_DECLARE_METATYPE(QGeoCoordinate)
+
+class MyPositionAreaMonitor : public QGeoAreaMonitor
+{
+ Q_OBJECT
+public:
+ ~MyPositionAreaMonitor() {}
+};
+
+class tst_QGeoAreaMonitor : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void setMonitoredArea()
+ {
+ QFETCH(QGeoCoordinate, coord);
+ QFETCH(int, radius);
+
+ MyPositionAreaMonitor mon;
+ mon.setMonitoredArea(coord, radius);
+ QCOMPARE(mon.coordinate(), coord);
+ QCOMPARE(mon.radius(), radius);
+ }
+
+ void setMonitoredArea_data()
+ {
+ QTest::addColumn<QGeoCoordinate>("coord");
+ QTest::addColumn<int>("radius");
+
+ QList<int> radii = QList<int>() << INT_MIN << -1 << 0 << 1 << INT_MAX;
+ for (int i=0; i<radii.count(); i++) {
+ QTest::newRow(qPrintable(QString("null coord, radius %1").arg(radii[i])))
+ << QGeoCoordinate() << radii[i];
+ }
+
+ QTest::newRow("valid coord, 0 radius") << QGeoCoordinate(1, 1, 1) << 0;
+ QTest::newRow("invalid coord, 0 radius") << QGeoCoordinate(-200, 1, 1) << 0;
+ }
+
+ void coordinate()
+ {
+ MyPositionAreaMonitor mon;
+ QCOMPARE(mon.coordinate(), QGeoCoordinate());
+ }
+
+ void radius()
+ {
+ MyPositionAreaMonitor mon;
+ QCOMPARE(mon.radius(), 0);
+ }
+
+ void createMonitor()
+ {
+ QVERIFY(QGeoAreaMonitor::createMonitor() == 0);
+ }
+};
+
+
+QTEST_MAIN(tst_QGeoAreaMonitor)
+#include "tst_qgeoareamonitor.moc"
diff --git a/tests/auto/tst_qgeoareamonitor/tst_qgeoareamonitor.pro b/tests/auto/tst_qgeoareamonitor/tst_qgeoareamonitor.pro
new file mode 100644
index 0000000000..08eedffa1d
--- /dev/null
+++ b/tests/auto/tst_qgeoareamonitor/tst_qgeoareamonitor.pro
@@ -0,0 +1,17 @@
+TEMPLATE = app
+TARGET = tst_qgeoareamonitor
+CONFIG+=testcase
+
+include (../../../common.pri)
+
+INCLUDEPATH += ../../../location
+
+# Input
+SOURCES += tst_qgeoareamonitor.cpp
+
+LIBS += -lQtLocation
+
+symbian {
+ TARGET.CAPABILITY = ALL -TCB
+}
+
diff --git a/tests/auto/tst_qgeocoordinate/tst_qgeocoordinate.cpp b/tests/auto/tst_qgeocoordinate/tst_qgeocoordinate.cpp
new file mode 100644
index 0000000000..9d708387ba
--- /dev/null
+++ b/tests/auto/tst_qgeocoordinate/tst_qgeocoordinate.cpp
@@ -0,0 +1,828 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "../qlocationtestutils_p.h"
+
+#include <qgeocoordinate.h>
+#include <qtest.h>
+
+#include <QMetaType>
+#include <QDebug>
+
+#include <float.h>
+
+Q_DECLARE_METATYPE(QGeoCoordinate)
+Q_DECLARE_METATYPE(QGeoCoordinate::CoordinateFormat)
+Q_DECLARE_METATYPE(QGeoCoordinate::CoordinateType)
+
+static const QGeoCoordinate BRISBANE(-27.46758, 153.027892);
+static const QGeoCoordinate MELBOURNE(-37.814251, 144.963169);
+static const QGeoCoordinate LONDON(51.500152, -0.126236);
+static const QGeoCoordinate NEW_YORK(40.71453, -74.00713);
+static const QGeoCoordinate NORTH_POLE(90, 0);
+static const QGeoCoordinate SOUTH_POLE(-90, 0);
+
+static const QChar DEGREES_SYMB(0x00B0);
+
+
+QByteArray tst_qgeocoordinate_debug;
+
+void tst_qgeocoordinate_messageHandler(QtMsgType type, const char *msg)
+{
+ switch(type) {
+ case QtDebugMsg :
+ tst_qgeocoordinate_debug = QByteArray(msg);
+ break;
+ default:
+ break;
+ }
+}
+
+
+class tst_QGeoCoordinate : public QObject
+{
+ Q_OBJECT
+
+private:
+ enum TestDataType {
+ Latitude,
+ Longitude,
+ Altitude
+ };
+
+private slots:
+ void constructor()
+ {
+ QGeoCoordinate c;
+ QVERIFY(!c.isValid());
+ QCOMPARE(c, QGeoCoordinate());
+ }
+
+ void constructor_lat_long()
+ {
+ QFETCH(double, latitude);
+ QFETCH(double, longitude);
+ QFETCH(QGeoCoordinate::CoordinateType, type);
+
+ QGeoCoordinate c(latitude, longitude);
+ QCOMPARE(c.type(), type);
+ if (type != QGeoCoordinate::InvalidCoordinate) {
+ QVERIFY(c.isValid());
+ QCOMPARE(c.latitude(), latitude);
+ QCOMPARE(c.longitude(), longitude);
+ } else {
+ QVERIFY(!c.isValid());
+ QVERIFY(c.latitude() != latitude);
+ QVERIFY(c.longitude() != longitude);
+ }
+ }
+
+ void constructor_lat_long_data()
+ {
+ QTest::addColumn<double>("latitude");
+ QTest::addColumn<double>("longitude");
+ QTest::addColumn<QGeoCoordinate::CoordinateType>("type");
+
+ QTest::newRow("both zero") << 0.0 << 0.0 << QGeoCoordinate::Coordinate2D;
+ QTest::newRow("both negative") << -1.0 << -1.0 << QGeoCoordinate::Coordinate2D;
+ QTest::newRow("both positive") << 1.0 << 1.0 << QGeoCoordinate::Coordinate2D;
+ QTest::newRow("latitude negative") << -1.0 << 1.0 << QGeoCoordinate::Coordinate2D;
+ QTest::newRow("longitude negative") << 1.0 << -1.0 << QGeoCoordinate::Coordinate2D;
+
+ QTest::newRow("both too high") << 90.1 << 180.1 << QGeoCoordinate::InvalidCoordinate;
+ QTest::newRow("latitude too high") << 90.1 << 0.1 << QGeoCoordinate::InvalidCoordinate;
+ QTest::newRow("longitude too high") << 0.1 << 180.1 << QGeoCoordinate::InvalidCoordinate;
+
+ QTest::newRow("both too low") << -90.1 << -180.1 << QGeoCoordinate::InvalidCoordinate;
+ QTest::newRow("latitude too low") << -90.1 << 0.1 << QGeoCoordinate::InvalidCoordinate;
+ QTest::newRow("longitude too low") << 0.1 << -180.1 << QGeoCoordinate::InvalidCoordinate;
+
+ QTest::newRow("both not too high") << 90.0 << 180.0 << QGeoCoordinate::Coordinate2D;
+ QTest::newRow("both not too low") << -90.0 << -180.0 << QGeoCoordinate::Coordinate2D;
+
+ QTest::newRow("latitude too high and longitude too low") << 90.1 << -180.1 << QGeoCoordinate::InvalidCoordinate;
+ QTest::newRow("latitude too low and longitude too high") << -90.1 << 180.1 << QGeoCoordinate::InvalidCoordinate;
+ }
+
+ void constructor_lat_long_alt()
+ {
+ QFETCH(double, latitude);
+ QFETCH(double, longitude);
+ QFETCH(double, altitude);
+ QFETCH(QGeoCoordinate::CoordinateType, type);
+
+ QGeoCoordinate c(latitude, longitude, altitude);
+ QCOMPARE(c.type(), type);
+ if (type != QGeoCoordinate::InvalidCoordinate) {
+ QCOMPARE(c.latitude(), latitude);
+ QCOMPARE(c.longitude(), longitude);
+ QCOMPARE(c.altitude(), altitude);
+ } else {
+ QVERIFY(!c.isValid());
+ QVERIFY(c.latitude() != latitude);
+ QVERIFY(c.longitude() != longitude);
+ QVERIFY(c.altitude() != altitude);
+ }
+ }
+
+ void constructor_lat_long_alt_data()
+ {
+ QTest::addColumn<double>("latitude");
+ QTest::addColumn<double>("longitude");
+ QTest::addColumn<double>("altitude");
+ QTest::addColumn<QGeoCoordinate::CoordinateType>("type");
+
+ QTest::newRow("all zero") << 0.0 << 0.0 << 0.0 << QGeoCoordinate::Coordinate3D;
+ QTest::newRow("all negative") << -1.0 << -1.0 << -2.0 << QGeoCoordinate::Coordinate3D;
+ QTest::newRow("all positive") << 1.0 << 1.0 << 4.0 << QGeoCoordinate::Coordinate3D;
+
+ QTest::newRow("latitude negative") << -1.0 << 1.0 << 1.0 << QGeoCoordinate::Coordinate3D;
+ QTest::newRow("longitude negative") << 1.0 << -1.0 << 1.0 << QGeoCoordinate::Coordinate3D;
+ QTest::newRow("altitude negative") << 1.0 << 1.0 << -1.0 << QGeoCoordinate::Coordinate3D;
+
+ QTest::newRow("altitude not too high") << 1.0 << 1.0 << DBL_MAX << QGeoCoordinate::Coordinate3D;
+ QTest::newRow("altitude not too low") << 1.0 << 1.0 << DBL_MIN << QGeoCoordinate::Coordinate3D;
+
+ QTest::newRow("all not too high") << 90.0 << 180.0 << DBL_MAX << QGeoCoordinate::Coordinate3D;
+ QTest::newRow("all not too low") << -90.0 << -180.0 << DBL_MIN << QGeoCoordinate::Coordinate3D;
+
+ QTest::newRow("all too high") << 90.1 << 180.1 << DBL_MAX << QGeoCoordinate::InvalidCoordinate;
+ QTest::newRow("all too low") << -90.1 << -180.1 << DBL_MIN << QGeoCoordinate::InvalidCoordinate;
+ }
+
+ void copy_constructor()
+ {
+ QFETCH(QGeoCoordinate, c);
+
+ QGeoCoordinate copy(c);
+ QCOMPARE(copy.type(), c.type());
+ if (c.type() != QGeoCoordinate::InvalidCoordinate) {
+ QCOMPARE(copy.latitude(), c.latitude());
+ QCOMPARE(copy.longitude(), c.longitude());
+ if (c.type() == QGeoCoordinate::Coordinate3D)
+ QCOMPARE(copy.altitude(), c.altitude());
+ }
+ }
+
+ void copy_constructor_data()
+ {
+ QTest::addColumn<QGeoCoordinate>("c");
+
+ QTest::newRow("no argument") << QGeoCoordinate();
+ QTest::newRow("latitude, longitude arguments all zero") << QGeoCoordinate(0.0, 0.0);
+
+ QTest::newRow("latitude, longitude arguments not too high") << QGeoCoordinate(90.0, 180.0);
+ QTest::newRow("latitude, longitude arguments not too low") << QGeoCoordinate(-90.0, -180.0);
+ QTest::newRow("latitude, longitude arguments too high") << QGeoCoordinate(90.1, 180.1);
+ QTest::newRow("latitude, longitude arguments too low") << QGeoCoordinate(-90.1, -180.1);
+
+ QTest::newRow("latitude, longitude, altitude arguments all zero") << QGeoCoordinate(0.0, 0.0, 0.0);
+ QTest::newRow("latitude, longitude, altitude arguments not too high values") << QGeoCoordinate(90.0, 180.0, DBL_MAX);
+ QTest::newRow("latitude, longitude, altitude arguments not too low values") << QGeoCoordinate(-90.0, -180.0, DBL_MIN);
+
+ QTest::newRow("latitude, longitude, altitude arguments too high latitude & longitude") << QGeoCoordinate(90.1, 180.1, DBL_MAX);
+ QTest::newRow("latitude, longitude, altitude arguments too low latitude & longitude") << QGeoCoordinate(-90.1, -180.1, DBL_MAX);
+ }
+
+ void destructor()
+ {
+ QGeoCoordinate *coordinate;
+
+ QLocationTestUtils::uheap_mark();
+ coordinate = new QGeoCoordinate();
+ delete coordinate;
+ QLocationTestUtils::uheap_mark_end();
+
+ QLocationTestUtils::uheap_mark();
+ coordinate = new QGeoCoordinate(0.0, 0.0);
+ delete coordinate;
+ QLocationTestUtils::uheap_mark_end();
+
+ QLocationTestUtils::uheap_mark();
+ coordinate = new QGeoCoordinate(0.0, 0.0, 0.0);
+ delete coordinate;
+ QLocationTestUtils::uheap_mark_end();
+
+ QLocationTestUtils::uheap_mark();
+ coordinate = new QGeoCoordinate(90.0, 180.0);
+ delete coordinate;
+ QLocationTestUtils::uheap_mark_end();
+
+ QLocationTestUtils::uheap_mark();
+ coordinate = new QGeoCoordinate(-90.0, -180.0);
+ delete coordinate;
+ QLocationTestUtils::uheap_mark_end();
+
+ QLocationTestUtils::uheap_mark();
+ coordinate = new QGeoCoordinate(90.1, 180.1);
+ delete coordinate;
+ QLocationTestUtils::uheap_mark_end();
+
+ QLocationTestUtils::uheap_mark();
+ coordinate = new QGeoCoordinate(-90.1, -180.1);
+ delete coordinate;
+ QLocationTestUtils::uheap_mark_end();
+ }
+
+ void destructor2()
+ {
+ QFETCH(QGeoCoordinate, c);
+ QLocationTestUtils::uheap_mark();
+ QGeoCoordinate *coordinate = new QGeoCoordinate(c);
+ delete coordinate;
+ QLocationTestUtils::uheap_mark_end();
+ }
+
+ void destructor2_data()
+ {
+ copy_constructor_data();
+ }
+
+ void assign()
+ {
+ QFETCH(QGeoCoordinate, c);
+
+ QGeoCoordinate c1 = c;
+ QCOMPARE(c.type(), c1.type());
+ if (c.isValid()) {
+ QCOMPARE(c.latitude(), c.latitude());
+ QCOMPARE(c.longitude(), c.longitude());
+ if (c.type() == QGeoCoordinate::Coordinate3D)
+ QCOMPARE(c.altitude(), c.altitude());
+ }
+ }
+
+ void assign_data()
+ {
+ copy_constructor_data();
+ }
+
+ void comparison()
+ {
+ QFETCH(QGeoCoordinate, c1);
+ QFETCH(QGeoCoordinate, c2);
+ QFETCH(bool, result);
+
+ QCOMPARE(c1 == c2, result);
+ }
+
+ void comparison_data()
+ {
+ QTest::addColumn<QGeoCoordinate>("c1");
+ QTest::addColumn<QGeoCoordinate>("c2");
+ QTest::addColumn<bool>("result");
+
+ QTest::newRow("Invalid != BRISBANE")
+ << QGeoCoordinate(-190,-1000) << BRISBANE << false;
+ QTest::newRow("BRISBANE != MELBOURNE")
+ << BRISBANE << MELBOURNE << false;
+ QTest::newRow("equal")
+ << BRISBANE << BRISBANE << true;
+ QTest::newRow("LONDON != uninitialized data")
+ << LONDON << QGeoCoordinate() << false;
+ QTest::newRow("uninitialized data == uninitialized data")
+ << QGeoCoordinate() << QGeoCoordinate() << true;
+ QTest::newRow("invalid == same invalid")
+ << QGeoCoordinate(-190,-1000) << QGeoCoordinate(-190,-1000) << true;
+ QTest::newRow("invalid == different invalid")
+ << QGeoCoordinate(-190,-1000) << QGeoCoordinate(190,1000) << true;
+ QTest::newRow("valid != another valid")
+ << QGeoCoordinate(-90,-180) << QGeoCoordinate(-45,+45) << false;
+ QTest::newRow("valid == same valid")
+ << QGeoCoordinate(-90,-180) << QGeoCoordinate(-90,-180) << true;
+ }
+
+ void type()
+ {
+ QFETCH(QGeoCoordinate, c);
+ QFETCH(QGeoCoordinate::CoordinateType, type);
+
+ QCOMPARE(c.type(), type);
+ }
+
+ void type_data()
+ {
+ QTest::addColumn<QGeoCoordinate>("c");
+ QTest::addColumn<QGeoCoordinate::CoordinateType>("type");
+
+ QGeoCoordinate c;
+
+ QTest::newRow("no values set") << c << QGeoCoordinate::InvalidCoordinate;
+
+ c.setAltitude(1.0);
+ QTest::newRow("only altitude is set") << c << QGeoCoordinate::InvalidCoordinate;
+
+ c.setLongitude(1.0);
+ QTest::newRow("only latitude and altitude is set") << c << QGeoCoordinate::InvalidCoordinate;
+
+ c.setLatitude(-1.0);
+ QTest::newRow("all valid: 3D Coordinate") << c << QGeoCoordinate::Coordinate3D;
+
+ c.setLatitude(-90.1);
+ QTest::newRow("too low latitude and valid longitude") << c << QGeoCoordinate::InvalidCoordinate;
+
+ c.setLongitude(-180.1);
+ c.setLatitude(90.0);
+ QTest::newRow("valid latitude and too low longitude") << c << QGeoCoordinate::InvalidCoordinate;
+
+ c.setLatitude(90.1);
+ c.setLongitude(-180.0);
+ QTest::newRow("too high latitude and valid longitude") << c << QGeoCoordinate::InvalidCoordinate;
+
+ c.setLatitude(-90.0);
+ c.setLongitude(180.1);
+ QTest::newRow("valid latitude and too high longitude") << c << QGeoCoordinate::InvalidCoordinate;
+ }
+
+ void valid()
+ {
+ QFETCH(QGeoCoordinate, c);
+ QCOMPARE(c.isValid(), c.type() != QGeoCoordinate::InvalidCoordinate);
+ }
+
+ void valid_data()
+ {
+ type_data();
+ }
+
+ void addDataValues(TestDataType type)
+ {
+ QTest::addColumn<double>("value");
+ QTest::addColumn<bool>("valid");
+
+ QTest::newRow("negative") << -1.0 << true;
+ QTest::newRow("zero") << 0.0 << true;
+ QTest::newRow("positive") << 1.0 << true;
+
+ switch (type) {
+ case Latitude:
+ QTest::newRow("too low") << -90.1 << false;
+ QTest::newRow("not too low") << -90.0 << true;
+ QTest::newRow("not too hight") << 90.0 << true;
+ QTest::newRow("too high") << 90.1;
+ break;
+ case Longitude:
+ QTest::newRow("too low") << -180.1 << false;
+ QTest::newRow("not too low") << -180.0 << true;
+ QTest::newRow("not too hight") << 180.0 << true;
+ QTest::newRow("too high") << 180.1;
+ break;
+ case Altitude:
+ break;
+ }
+ }
+
+ void latitude()
+ {
+ QFETCH(double, value);
+ QGeoCoordinate c;
+ c.setLatitude(value);
+ QCOMPARE(c.latitude(), value);
+
+ QGeoCoordinate c2 = c;
+ QCOMPARE(c.latitude(), value);
+ QCOMPARE(c2, c);
+ }
+ void latitude_data() { addDataValues(Latitude); }
+
+ void longitude()
+ {
+ QFETCH(double, value);
+ QGeoCoordinate c;
+ c.setLongitude(value);
+ QCOMPARE(c.longitude(), value);
+
+ QGeoCoordinate c2 = c;
+ QCOMPARE(c.longitude(), value);
+ QCOMPARE(c2, c);
+ }
+ void longitude_data() { addDataValues(Longitude); }
+
+ void altitude()
+ {
+ QFETCH(double, value);
+ QGeoCoordinate c;
+ c.setAltitude(value);
+ QCOMPARE(c.altitude(), value);
+
+ QGeoCoordinate c2 = c;
+ QCOMPARE(c.altitude(), value);
+ QCOMPARE(c2, c);
+ }
+ void altitude_data() { addDataValues(Altitude); }
+
+ void distanceTo()
+ {
+ QFETCH(QGeoCoordinate, c1);
+ QFETCH(QGeoCoordinate, c2);
+ QFETCH(double, distance);
+
+ QCOMPARE(qRound(c1.distanceTo(c2)), qRound(distance));
+ }
+
+ void distanceTo_data()
+ {
+ QTest::addColumn<QGeoCoordinate>("c1");
+ QTest::addColumn<QGeoCoordinate>("c2");
+ QTest::addColumn<double>("distance");
+
+ QTest::newRow("invalid coord 1")
+ << QGeoCoordinate() << BRISBANE << 0.0;
+ QTest::newRow("invalid coord 2")
+ << BRISBANE << QGeoCoordinate() << 0.0;
+ QTest::newRow("brisbane -> melbourne")
+ << BRISBANE << MELBOURNE << 1374820.162;
+ QTest::newRow("london -> new york")
+ << LONDON << NEW_YORK << 5570538.499;
+ QTest::newRow("north pole -> south pole")
+ << NORTH_POLE << SOUTH_POLE << 20015109.42;
+ }
+
+ void azimuthTo()
+ {
+ QFETCH(QGeoCoordinate, c1);
+ QFETCH(QGeoCoordinate, c2);
+ QFETCH(double, azimuth);
+
+ QCOMPARE(QString::number(c1.azimuthTo(c2)), QString::number(azimuth));
+ }
+
+ void azimuthTo_data()
+ {
+ QTest::addColumn<QGeoCoordinate>("c1");
+ QTest::addColumn<QGeoCoordinate>("c2");
+ QTest::addColumn<double>("azimuth");
+
+ QTest::newRow("invalid coord 1")
+ << QGeoCoordinate() << BRISBANE << 0.0;
+ QTest::newRow("invalid coord 2")
+ << BRISBANE << QGeoCoordinate() << 0.0;
+ QTest::newRow("brisbane -> melbourne")
+ << BRISBANE << MELBOURNE << 211.1717;
+ QTest::newRow("london -> new york")
+ << LONDON << NEW_YORK << 288.3389;
+ QTest::newRow("north pole -> south pole")
+ << NORTH_POLE << SOUTH_POLE << 180.0;
+ }
+
+ void degreesToString()
+ {
+ QFETCH(QGeoCoordinate, coord);
+ QFETCH(QGeoCoordinate::CoordinateFormat, format);
+ QFETCH(QString, string);
+
+ QCOMPARE(coord.toString(format), string);
+ }
+
+ void degreesToString_data()
+ {
+ QTest::addColumn<QGeoCoordinate>("coord");
+ QTest::addColumn<QGeoCoordinate::CoordinateFormat>("format");
+ QTest::addColumn<QString>("string");
+
+ QGeoCoordinate northEast(27.46758, 153.027892);
+ QGeoCoordinate northEastWithAlt(27.46758, 153.027892, 28.23411);
+ QGeoCoordinate southEast(-27.46758, 153.027892);
+ QGeoCoordinate southEastWithAlt(-27.46758, 153.027892, 28.23411);
+ QGeoCoordinate northWest(27.46758, -153.027892);
+ QGeoCoordinate northWestWithAlt(27.46758, -153.027892, 28.23411);
+ QGeoCoordinate southWest(-27.46758, -153.027892);
+ QGeoCoordinate southWestWithAlt(-27.46758, -153.027892, 28.23411);
+
+ QGeoCoordinate empty;
+ QGeoCoordinate toohigh(90.1, 180.1);
+ QGeoCoordinate toolow(-90.1, -180.1);
+ QGeoCoordinate zeroLatLong(0.0, 0.0);
+ QGeoCoordinate allZero(0.0, 0.0, 0.0);
+
+ QTest::newRow("empty, dd, no hemisphere")
+ << empty << QGeoCoordinate::DecimalDegrees
+ << QString();
+ QTest::newRow("empty, dd, hemisphere")
+ << empty << QGeoCoordinate::DecimalDegreesWithHemisphere
+ << QString();
+ QTest::newRow("empty, dm, no hemisphere")
+ << empty << QGeoCoordinate::DegreesMinutes
+ << QString();
+ QTest::newRow("empty, dm, hemisphere")
+ << empty << QGeoCoordinate::DegreesMinutesWithHemisphere
+ << QString();
+ QTest::newRow("empty, dms, no hemisphere")
+ << empty << QGeoCoordinate::DegreesMinutesSeconds
+ << QString();
+ QTest::newRow("empty, dms, hemisphere")
+ << empty << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
+ << QString();
+
+ QTest::newRow("too low, dd, no hemisphere")
+ << toolow << QGeoCoordinate::DecimalDegrees
+ << QString();
+ QTest::newRow("too low, dd, hemisphere")
+ << toolow << QGeoCoordinate::DecimalDegreesWithHemisphere
+ << QString();
+ QTest::newRow("too low, dm, no hemisphere")
+ << toolow << QGeoCoordinate::DegreesMinutes
+ << QString();
+ QTest::newRow("too low, dm, hemisphere")
+ << toolow << QGeoCoordinate::DegreesMinutesWithHemisphere
+ << QString();
+ QTest::newRow("too low, dms, no hemisphere")
+ << toolow << QGeoCoordinate::DegreesMinutesSeconds
+ << QString();
+ QTest::newRow("too low, dms, hemisphere")
+ << toolow << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
+ << QString();
+
+ QTest::newRow("too high, dd, no hemisphere")
+ << toohigh << QGeoCoordinate::DecimalDegrees
+ << QString();
+ QTest::newRow("too high, dd, hemisphere")
+ << toohigh << QGeoCoordinate::DecimalDegreesWithHemisphere
+ << QString();
+ QTest::newRow("too high, dm, no hemisphere")
+ << toohigh << QGeoCoordinate::DegreesMinutes
+ << QString();
+ QTest::newRow("too high, dm, hemisphere")
+ << toohigh << QGeoCoordinate::DegreesMinutesWithHemisphere
+ << QString();
+ QTest::newRow("too high, dms, no hemisphere")
+ << toohigh << QGeoCoordinate::DegreesMinutesSeconds
+ << QString();
+ QTest::newRow("too high, dms, hemisphere")
+ << toohigh << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
+ << QString();
+
+ QTest::newRow("zeroLatLong, dd, no hemisphere")
+ << zeroLatLong << QGeoCoordinate::DecimalDegrees
+ << QString("0.00000%1, 0.00000%1").arg(DEGREES_SYMB);
+ QTest::newRow("zeroLatLong, dd, hemisphere")
+ << zeroLatLong << QGeoCoordinate::DecimalDegreesWithHemisphere
+ << QString("0.00000%1, 0.00000%1").arg(DEGREES_SYMB);
+ QTest::newRow("zeroLatLong, dm, no hemisphere")
+ << zeroLatLong << QGeoCoordinate::DegreesMinutes
+ << QString("0%1 0.000', 0%1 0.000'").arg(DEGREES_SYMB);
+ QTest::newRow("zeroLatLong, dm, hemisphere")
+ << zeroLatLong << QGeoCoordinate::DegreesMinutesWithHemisphere
+ << QString("0%1 0.000', 0%1 0.000'").arg(DEGREES_SYMB);
+ QTest::newRow("zeroLatLong, dms, no hemisphere")
+ << zeroLatLong << QGeoCoordinate::DegreesMinutesSeconds
+ << QString("0%1 0' 0.0\", 0%1 0' 0.0\"").arg(DEGREES_SYMB);
+ QTest::newRow("zeroLatLong, dms, hemisphere")
+ << zeroLatLong << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
+ << QString("0%1 0' 0.0\", 0%1 0' 0.0\"").arg(DEGREES_SYMB);
+
+ QTest::newRow("allZero, dd, no hemisphere")
+ << allZero << QGeoCoordinate::DecimalDegrees
+ << QString("0.00000%1, 0.00000%1, 0m").arg(DEGREES_SYMB);
+ QTest::newRow("allZero, dd, hemisphere")
+ << allZero << QGeoCoordinate::DecimalDegreesWithHemisphere
+ << QString("0.00000%1, 0.00000%1, 0m").arg(DEGREES_SYMB);
+ QTest::newRow("allZero, dm, no hemisphere")
+ << allZero << QGeoCoordinate::DegreesMinutes
+ << QString("0%1 0.000', 0%1 0.000', 0m").arg(DEGREES_SYMB);
+ QTest::newRow("allZero, dm, hemisphere")
+ << allZero << QGeoCoordinate::DegreesMinutesWithHemisphere
+ << QString("0%1 0.000', 0%1 0.000', 0m").arg(DEGREES_SYMB);
+ QTest::newRow("allZero, dms, no hemisphere")
+ << allZero << QGeoCoordinate::DegreesMinutesSeconds
+ << QString("0%1 0' 0.0\", 0%1 0' 0.0\", 0m").arg(DEGREES_SYMB);
+ QTest::newRow("allZero, dms, hemisphere")
+ << allZero << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
+ << QString("0%1 0' 0.0\", 0%1 0' 0.0\", 0m").arg(DEGREES_SYMB);
+
+ QTest::newRow("NE, dd, no hemisphere")
+ << northEast << QGeoCoordinate::DecimalDegrees
+ << QString("27.46758%1, 153.02789%1").arg(DEGREES_SYMB);
+ QTest::newRow("NE, dd, hemisphere")
+ << northEast << QGeoCoordinate::DecimalDegreesWithHemisphere
+ << QString("27.46758%1 N, 153.02789%1 E").arg(DEGREES_SYMB);
+ QTest::newRow("NE, dm, no hemisphere")
+ << northEast << QGeoCoordinate::DegreesMinutes
+ << QString("27%1 28.055', 153%1 1.674'").arg(DEGREES_SYMB);
+ QTest::newRow("NE, dm, hemisphere")
+ << northEast << QGeoCoordinate::DegreesMinutesWithHemisphere
+ << QString("27%1 28.055' N, 153%1 1.674' E").arg(DEGREES_SYMB);
+ QTest::newRow("NE, dms, no hemisphere")
+ << northEast << QGeoCoordinate::DegreesMinutesSeconds
+ << QString("27%1 28' 3.3\", 153%1 1' 40.4\"").arg(DEGREES_SYMB);
+ QTest::newRow("NE, dms, hemisphere")
+ << northEast << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
+ << QString("27%1 28' 3.3\" N, 153%1 1' 40.4\" E").arg(DEGREES_SYMB);
+
+ QTest::newRow("NE with alt, dd, no hemisphere")
+ << northEastWithAlt << QGeoCoordinate::DecimalDegrees
+ << QString("27.46758%1, 153.02789%1, 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("NE with alt, dd, hemisphere")
+ << northEastWithAlt << QGeoCoordinate::DecimalDegreesWithHemisphere
+ << QString("27.46758%1 N, 153.02789%1 E, 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("NE with alt, dm, no hemisphere")
+ << northEastWithAlt << QGeoCoordinate::DegreesMinutes
+ << QString("27%1 28.055', 153%1 1.674', 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("NE with alt, dm, hemisphere")
+ << northEastWithAlt << QGeoCoordinate::DegreesMinutesWithHemisphere
+ << QString("27%1 28.055' N, 153%1 1.674' E, 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("NE with alt, dms, no hemisphere")
+ << northEastWithAlt << QGeoCoordinate::DegreesMinutesSeconds
+ << QString("27%1 28' 3.3\", 153%1 1' 40.4\", 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("NE with alt, dms, hemisphere")
+ << northEastWithAlt << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
+ << QString("27%1 28' 3.3\" N, 153%1 1' 40.4\" E, 28.2341m").arg(DEGREES_SYMB);
+
+ QTest::newRow("SE, dd, no hemisphere")
+ << southEast << QGeoCoordinate::DecimalDegrees
+ << QString("-27.46758%1, 153.02789%1").arg(DEGREES_SYMB);
+ QTest::newRow("SE, dd, hemisphere")
+ << southEast << QGeoCoordinate::DecimalDegreesWithHemisphere
+ << QString("27.46758%1 S, 153.02789%1 E").arg(DEGREES_SYMB);
+ QTest::newRow("SE, dm, no hemisphere")
+ << southEast << QGeoCoordinate::DegreesMinutes
+ << QString("-27%1 28.055', 153%1 1.674'").arg(DEGREES_SYMB);
+ QTest::newRow("SE, dm, hemisphere")
+ << southEast << QGeoCoordinate::DegreesMinutesWithHemisphere
+ << QString("27%1 28.055' S, 153%1 1.674' E").arg(DEGREES_SYMB);
+ QTest::newRow("SE, dms, no hemisphere")
+ << southEast << QGeoCoordinate::DegreesMinutesSeconds
+ << QString("-27%1 28' 3.3\", 153%1 1' 40.4\"").arg(DEGREES_SYMB);
+ QTest::newRow("SE, dms, hemisphere")
+ << southEast << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
+ << QString("27%1 28' 3.3\" S, 153%1 1' 40.4\" E").arg(DEGREES_SYMB);
+
+ QTest::newRow("SE with alt, dd, no hemisphere, 28.2341m")
+ << southEastWithAlt << QGeoCoordinate::DecimalDegrees
+ << QString("-27.46758%1, 153.02789%1, 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("SE with alt, dd, hemisphere, 28.2341m")
+ << southEastWithAlt << QGeoCoordinate::DecimalDegreesWithHemisphere
+ << QString("27.46758%1 S, 153.02789%1 E, 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("SE with alt, dm, no hemisphere, 28.2341m")
+ << southEastWithAlt << QGeoCoordinate::DegreesMinutes
+ << QString("-27%1 28.055', 153%1 1.674', 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("SE with alt, dm, hemisphere, 28.2341m")
+ << southEastWithAlt << QGeoCoordinate::DegreesMinutesWithHemisphere
+ << QString("27%1 28.055' S, 153%1 1.674' E, 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("SE with alt, dms, no hemisphere, 28.2341m")
+ << southEastWithAlt << QGeoCoordinate::DegreesMinutesSeconds
+ << QString("-27%1 28' 3.3\", 153%1 1' 40.4\", 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("SE with alt, dms, hemisphere, 28.2341m")
+ << southEastWithAlt << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
+ << QString("27%1 28' 3.3\" S, 153%1 1' 40.4\" E, 28.2341m").arg(DEGREES_SYMB);;
+
+ QTest::newRow("NW, dd, no hemisphere")
+ << northWest << QGeoCoordinate::DecimalDegrees
+ << QString("27.46758%1, -153.02789%1").arg(DEGREES_SYMB);
+ QTest::newRow("NW, dd, hemisphere")
+ << northWest << QGeoCoordinate::DecimalDegreesWithHemisphere
+ << QString("27.46758%1 N, 153.02789%1 W").arg(DEGREES_SYMB);
+ QTest::newRow("NW, dm, no hemisphere")
+ << northWest << QGeoCoordinate::DegreesMinutes
+ << QString("27%1 28.055', -153%1 1.674'").arg(DEGREES_SYMB);
+ QTest::newRow("NW, dm, hemisphere")
+ << northWest << QGeoCoordinate::DegreesMinutesWithHemisphere
+ << QString("27%1 28.055' N, 153%1 1.674' W").arg(DEGREES_SYMB);
+ QTest::newRow("NW, dms, no hemisphere")
+ << northWest << QGeoCoordinate::DegreesMinutesSeconds
+ << QString("27%1 28' 3.3\", -153%1 1' 40.4\"").arg(DEGREES_SYMB);
+ QTest::newRow("NW, dms, hemisphere")
+ << northWest << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
+ << QString("27%1 28' 3.3\" N, 153%1 1' 40.4\" W").arg(DEGREES_SYMB);
+
+ QTest::newRow("NW with alt, dd, no hemisphere, 28.2341m")
+ << northWestWithAlt << QGeoCoordinate::DecimalDegrees
+ << QString("27.46758%1, -153.02789%1, 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("NW with alt, dd, hemisphere, 28.2341m")
+ << northWestWithAlt << QGeoCoordinate::DecimalDegreesWithHemisphere
+ << QString("27.46758%1 N, 153.02789%1 W, 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("NW with alt, dm, no hemisphere, 28.2341m")
+ << northWestWithAlt << QGeoCoordinate::DegreesMinutes
+ << QString("27%1 28.055', -153%1 1.674', 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("NW with alt, dm, hemisphere, 28.2341m")
+ << northWestWithAlt << QGeoCoordinate::DegreesMinutesWithHemisphere
+ << QString("27%1 28.055' N, 153%1 1.674' W, 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("NW with alt, dms, no hemisphere, 28.2341m")
+ << northWestWithAlt << QGeoCoordinate::DegreesMinutesSeconds
+ << QString("27%1 28' 3.3\", -153%1 1' 40.4\", 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("NW with alt, dms, hemisphere, 28.2341m")
+ << northWestWithAlt << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
+ << QString("27%1 28' 3.3\" N, 153%1 1' 40.4\" W, 28.2341m").arg(DEGREES_SYMB);
+
+ QTest::newRow("SW, dd, no hemisphere")
+ << southWest << QGeoCoordinate::DecimalDegrees
+ << QString("-27.46758%1, -153.02789%1").arg(DEGREES_SYMB);
+ QTest::newRow("SW, dd, hemisphere")
+ << southWest << QGeoCoordinate::DecimalDegreesWithHemisphere
+ << QString("27.46758%1 S, 153.02789%1 W").arg(DEGREES_SYMB);
+ QTest::newRow("SW, dm, no hemisphere")
+ << southWest << QGeoCoordinate::DegreesMinutes
+ << QString("-27%1 28.055', -153%1 1.674'").arg(DEGREES_SYMB);
+ QTest::newRow("SW, dm, hemisphere")
+ << southWest << QGeoCoordinate::DegreesMinutesWithHemisphere
+ << QString("27%1 28.055' S, 153%1 1.674' W").arg(DEGREES_SYMB);
+ QTest::newRow("SW, dms, no hemisphere")
+ << southWest << QGeoCoordinate::DegreesMinutesSeconds
+ << QString("-27%1 28' 3.3\", -153%1 1' 40.4\"").arg(DEGREES_SYMB);
+ QTest::newRow("SW, dms, hemisphere")
+ << southWest << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
+ << QString("27%1 28' 3.3\" S, 153%1 1' 40.4\" W").arg(DEGREES_SYMB);
+
+ QTest::newRow("SW with alt, dd, no hemisphere, 28.2341m")
+ << southWestWithAlt << QGeoCoordinate::DecimalDegrees
+ << QString("-27.46758%1, -153.02789%1, 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("SW with alt, dd, hemisphere, 28.2341m")
+ << southWestWithAlt << QGeoCoordinate::DecimalDegreesWithHemisphere
+ << QString("27.46758%1 S, 153.02789%1 W, 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("SW with alt, dm, no hemisphere, 28.2341m")
+ << southWestWithAlt << QGeoCoordinate::DegreesMinutes
+ << QString("-27%1 28.055', -153%1 1.674', 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("SW with alt, dm, hemisphere, 28.2341m")
+ << southWestWithAlt << QGeoCoordinate::DegreesMinutesWithHemisphere
+ << QString("27%1 28.055' S, 153%1 1.674' W, 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("SW with alt, dms, no hemisphere, 28.2341m")
+ << southWestWithAlt << QGeoCoordinate::DegreesMinutesSeconds
+ << QString("-27%1 28' 3.3\", -153%1 1' 40.4\", 28.2341m").arg(DEGREES_SYMB);
+ QTest::newRow("SW with alt, dms, hemisphere, 28.2341m")
+ << southWestWithAlt << QGeoCoordinate::DegreesMinutesSecondsWithHemisphere
+ << QString("27%1 28' 3.3\" S, 153%1 1' 40.4\" W, 28.2341m").arg(DEGREES_SYMB);
+ }
+
+ void datastream()
+ {
+ QFETCH(QGeoCoordinate, c);
+
+ QByteArray ba;
+ QDataStream out(&ba, QIODevice::WriteOnly);
+ out << c;
+
+ QDataStream in(&ba, QIODevice::ReadOnly);
+ QGeoCoordinate inCoord;
+ in >> inCoord;
+ QCOMPARE(inCoord, c);
+ }
+
+ void datastream_data()
+ {
+ QTest::addColumn<QGeoCoordinate>("c");
+
+ QTest::newRow("invalid") << QGeoCoordinate();
+ QTest::newRow("valid lat, long") << BRISBANE;
+ QTest::newRow("valid lat, long, alt") << QGeoCoordinate(-1, -1, -1);
+ QTest::newRow("valid lat, long, alt again") << QGeoCoordinate(1, 1, 1);
+ }
+
+ void debug()
+ {
+ QFETCH(QGeoCoordinate, c);
+ QFETCH(QByteArray, debugString);
+
+ qInstallMsgHandler(tst_qgeocoordinate_messageHandler);
+ qDebug() << c;
+ qInstallMsgHandler(0);
+ QCOMPARE(tst_qgeocoordinate_debug, debugString);
+ }
+
+ void debug_data()
+ {
+ QTest::addColumn<QGeoCoordinate>("c");
+ QTest::addColumn<QByteArray>("debugString");
+
+ QTest::newRow("uninitialized") << QGeoCoordinate()
+ << QByteArray("QGeoCoordinate(?, ?)");
+ QTest::newRow("initialized without altitude") << BRISBANE
+ << (QString("QGeoCoordinate(%1, %2)").arg(BRISBANE.latitude())
+ .arg(BRISBANE.longitude())).toLatin1();
+ QTest::newRow("invalid initialization") << QGeoCoordinate(-100,-200)
+ << QByteArray("QGeoCoordinate(?, ?)");
+ QTest::newRow("initialized with altitude") << QGeoCoordinate(1,2,3)
+ << QByteArray("QGeoCoordinate(1, 2, 3)");
+ }
+};
+
+QTEST_MAIN(tst_QGeoCoordinate)
+#include "tst_qgeocoordinate.moc"
diff --git a/tests/auto/tst_qgeocoordinate/tst_qgeocoordinate.pro b/tests/auto/tst_qgeocoordinate/tst_qgeocoordinate.pro
new file mode 100644
index 0000000000..6cf48cab66
--- /dev/null
+++ b/tests/auto/tst_qgeocoordinate/tst_qgeocoordinate.pro
@@ -0,0 +1,19 @@
+TEMPLATE = app
+TARGET = tst_qgeocoordinate
+CONFIG+=testcase
+
+include (../../../common.pri)
+
+INCLUDEPATH += ../../../location
+
+# Input
+HEADERS += ../qlocationtestutils_p.h
+SOURCES += tst_qgeocoordinate.cpp \
+ ../qlocationtestutils.cpp
+
+LIBS += -lQtLocation
+
+symbian {
+ INCLUDEPATH += /epoc32/include/osextensions
+ TARGET.CAPABILITY = ALL -TCB
+}
diff --git a/tests/auto/tst_qgeopositioninfo/tst_qgeopositioninfo.cpp b/tests/auto/tst_qgeopositioninfo/tst_qgeopositioninfo.cpp
new file mode 100644
index 0000000000..4226efa8bd
--- /dev/null
+++ b/tests/auto/tst_qgeopositioninfo/tst_qgeopositioninfo.cpp
@@ -0,0 +1,375 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qgeopositioninfo.h>
+
+#include <QMetaType>
+#include <QObject>
+#include <QDebug>
+#include <QTest>
+
+#include <float.h>
+
+Q_DECLARE_METATYPE(QGeoCoordinate)
+Q_DECLARE_METATYPE(QGeoPositionInfo)
+Q_DECLARE_METATYPE(QGeoPositionInfo::Property)
+
+QByteArray tst_qgeopositioninfo_debug;
+
+void tst_qgeopositioninfo_messageHandler(QtMsgType type, const char *msg)
+{
+ switch(type) {
+ case QtDebugMsg :
+ tst_qgeopositioninfo_debug = QByteArray(msg);
+ break;
+ default:
+ break;
+ }
+}
+
+QList<qreal> tst_qgeopositioninfo_qrealTestValues()
+{
+ QList<qreal> values;
+ if (qreal(DBL_MIN) == DBL_MIN)
+ values << DBL_MIN;
+
+ values << FLT_MIN;
+ values << -1.0 << 0.0 << 1.0;
+ values << FLT_MAX;
+
+ if (qreal(DBL_MAX) == DBL_MAX)
+ values << DBL_MAX;
+ return values;
+}
+
+QList<QGeoPositionInfo::Property> tst_qgeopositioninfo_getProperties()
+{
+ QList<QGeoPositionInfo::Property> properties;
+ properties << QGeoPositionInfo::Heading
+ << QGeoPositionInfo::GroundSpeed
+ << QGeoPositionInfo::VerticalSpeed
+ << QGeoPositionInfo::MagneticVariation
+ << QGeoPositionInfo::HorizontalAccuracy
+ << QGeoPositionInfo::VerticalAccuracy;
+ return properties;
+}
+
+
+class tst_QGeoPositionInfo : public QObject
+{
+ Q_OBJECT
+
+private:
+ QGeoPositionInfo infoWithProperty(QGeoPositionInfo::Property property, qreal value)
+ {
+ QGeoPositionInfo info;
+ info.setProperty(property, value);
+ return info;
+ }
+
+ void addTestData_info()
+ {
+ QTest::addColumn<QGeoPositionInfo>("info");
+
+ QTest::newRow("invalid") << QGeoPositionInfo();
+
+ QTest::newRow("coord") << QGeoPositionInfo(QGeoCoordinate(-27.3422,150.2342), QDateTime());
+ QTest::newRow("datetime") << QGeoPositionInfo(QGeoCoordinate(), QDateTime::currentDateTime());
+
+ QList<QGeoPositionInfo::Property> properties = tst_qgeopositioninfo_getProperties();
+ QList<qreal> values = tst_qgeopositioninfo_qrealTestValues();
+ for (int i=0; i<properties.count(); i++) {
+ QTest::newRow(qPrintable(QString("Property %1 = %2").arg(properties[i]).arg(values[i])))
+ << infoWithProperty(properties[i], values[i]);
+ }
+ }
+
+private slots:
+ void constructor()
+ {
+ QGeoPositionInfo info;
+ QVERIFY(!info.isValid());
+ QVERIFY(!info.coordinate().isValid());
+ QVERIFY(info.dateTime().isNull());
+ }
+
+ void constructor_coord_dateTime()
+ {
+ QFETCH(QGeoCoordinate, coord);
+ QFETCH(QDateTime, dateTime);
+ QFETCH(bool, valid);
+
+ QGeoPositionInfo info(coord, dateTime);
+ QCOMPARE(info.coordinate(), coord);
+ QCOMPARE(info.dateTime(), dateTime);
+ QCOMPARE(info.isValid(), valid);
+ }
+
+ void constructor_coord_dateTime_data()
+ {
+ QTest::addColumn<QGeoCoordinate>("coord");
+ QTest::addColumn<QDateTime>("dateTime");
+ QTest::addColumn<bool>("valid");
+
+ QTest::newRow("both null") << QGeoCoordinate() << QDateTime() << false;
+ QTest::newRow("both valid") << QGeoCoordinate(1,1) << QDateTime::currentDateTime() << true;
+ QTest::newRow("valid coord") << QGeoCoordinate(1,1) << QDateTime() << false;
+ QTest::newRow("valid datetime") << QGeoCoordinate() << QDateTime::currentDateTime() << false;
+ QTest::newRow("valid time but not date == invalid")
+ << QGeoCoordinate() << QDateTime(QDate(), QTime::currentTime()) << false;
+ QTest::newRow("valid date but not time == valid due to QDateTime constructor")
+ << QGeoCoordinate() << QDateTime(QDate::currentDate(), QTime()) << false;
+ }
+
+ void constructor_copy()
+ {
+ QFETCH(QGeoPositionInfo, info);
+
+ QCOMPARE(QGeoPositionInfo(info), info);
+ }
+
+ void constructor_copy_data()
+ {
+ addTestData_info();
+ }
+
+ void operator_assign()
+ {
+ QFETCH(QGeoPositionInfo, info);
+
+ QGeoPositionInfo info2 = info;
+ QCOMPARE(info2, info);
+ }
+
+ void operator_assign_data()
+ {
+ addTestData_info();
+ }
+
+ void operator_equals()
+ {
+ QFETCH(QGeoPositionInfo, info);
+
+ QVERIFY(info == info);
+ if (info.isValid())
+ QCOMPARE(info == QGeoPositionInfo(), false);
+ }
+
+ void operator_equals_data()
+ {
+ addTestData_info();
+ }
+
+ void operator_notEquals()
+ {
+ QFETCH(QGeoPositionInfo, info);
+
+ QCOMPARE(info != info, false);
+ if (info.isValid())
+ QCOMPARE(info != QGeoPositionInfo(), true);
+ }
+
+ void operator_notEquals_data()
+ {
+ addTestData_info();
+ }
+
+ void setDateTime()
+ {
+ QFETCH(QDateTime, dateTime);
+
+ QGeoPositionInfo info;
+ info.setDateTime(dateTime);
+ QCOMPARE(info.dateTime(), dateTime);
+ }
+
+ void setDateTime_data()
+ {
+ QTest::addColumn<QDateTime>("dateTime");
+ QTest::newRow("invalid") << QDateTime();
+ QTest::newRow("now") << QDateTime::currentDateTime();
+ }
+
+ void dateTime()
+ {
+ QGeoPositionInfo info;
+ QVERIFY(info.dateTime().isNull());
+ }
+
+ void setCoordinate()
+ {
+
+ QFETCH(QGeoCoordinate, coord);
+
+ QGeoPositionInfo info;
+ info.setCoordinate(coord);
+ QCOMPARE(info.coordinate(), coord);
+ }
+
+ void setCoordinate_data()
+ {
+ QTest::addColumn<QGeoCoordinate>("coord");
+
+ QTest::newRow("invalid") << QGeoCoordinate();
+ QTest::newRow("valid") << QGeoCoordinate(30,30);
+ }
+
+ void property()
+ {
+ QFETCH(QGeoPositionInfo::Property, property);
+ QFETCH(qreal, value);
+
+ QGeoPositionInfo info;
+ QCOMPARE(info.property(property), qreal(-1.0));
+
+ info.setProperty(property, value);
+ QCOMPARE(info.property(property), value);
+
+ info.removeProperty(property);
+ QCOMPARE(info.property(property), qreal(-1.0));
+ }
+
+ void property_data()
+ {
+ QTest::addColumn<QGeoPositionInfo::Property>("property");
+ QTest::addColumn<qreal>("value");
+
+ QList<QGeoPositionInfo::Property> properties = tst_qgeopositioninfo_getProperties();
+ QList<qreal> values = tst_qgeopositioninfo_qrealTestValues();
+ for (int i=0; i<properties.count(); i++) {
+ QTest::newRow(qPrintable(QString("Property %1 = %2").arg(properties[i]).arg(values[i])))
+ << properties[i] << values[i];
+ }
+ }
+
+ void hasProperty()
+ {
+ QFETCH(QGeoPositionInfo::Property, property);
+ QFETCH(qreal, value);
+
+ QGeoPositionInfo info;
+ QVERIFY(!info.hasProperty(property));
+
+ info.setProperty(property, value);
+ QVERIFY(info.hasProperty(property));
+
+ info.removeProperty(property);
+ QVERIFY(!info.hasProperty(property));
+ }
+
+ void hasProperty_data()
+ {
+ property_data();
+ }
+
+ void removeProperty()
+ {
+ QFETCH(QGeoPositionInfo::Property, property);
+ QFETCH(qreal, value);
+
+ QGeoPositionInfo info;
+ QVERIFY(!info.hasProperty(property));
+
+ info.setProperty(property, value);
+ QVERIFY(info.hasProperty(property));
+
+ info.removeProperty(property);
+ QVERIFY(!info.hasProperty(property));
+
+ info.setProperty(property, value);
+ QVERIFY(info.hasProperty(property));
+ }
+
+ void removeProperty_data()
+ {
+ property_data();
+ }
+
+ void datastream()
+ {
+ QFETCH(QGeoPositionInfo, info);
+
+ QByteArray ba;
+ QDataStream out(&ba, QIODevice::WriteOnly);
+ out << info;
+
+ QDataStream in(&ba, QIODevice::ReadOnly);
+ QGeoPositionInfo inInfo;
+ in >> inInfo;
+ QCOMPARE(inInfo, info);
+ }
+
+ void datastream_data()
+ {
+ addTestData_info();
+ }
+
+ void debug()
+ {
+ QFETCH(QGeoPositionInfo, info);
+ QFETCH(QByteArray, debugStringEnd);
+
+ qInstallMsgHandler(tst_qgeopositioninfo_messageHandler);
+ qDebug() << info;
+ qInstallMsgHandler(0);
+
+ // use endsWith() so we don't depend on QDateTime's debug() implementation
+ QVERIFY(tst_qgeopositioninfo_debug.endsWith(debugStringEnd));
+ }
+
+ void debug_data()
+ {
+ QTest::addColumn<QGeoPositionInfo>("info");
+ QTest::addColumn<QByteArray>("debugStringEnd");
+
+ QTest::newRow("no values") << QGeoPositionInfo()
+ << QString("QGeoCoordinate(?, ?))").toLatin1();
+
+ QGeoCoordinate coord(1, 1);
+ QTest::newRow("coord, time") << QGeoPositionInfo(coord, QDateTime::currentDateTime())
+ << QByteArray("QGeoCoordinate(1, 1))");
+
+ QGeoPositionInfo info;
+ info.setProperty(QGeoPositionInfo::Heading, 1.1);
+ info.setProperty(QGeoPositionInfo::GroundSpeed, 2.1);
+ info.setProperty(QGeoPositionInfo::VerticalSpeed, 3.1);
+ info.setProperty(QGeoPositionInfo::MagneticVariation, 4.1);
+ info.setProperty(QGeoPositionInfo::HorizontalAccuracy, 5.1);
+ info.setProperty(QGeoPositionInfo::VerticalAccuracy, 6.1);
+ QTest::newRow("all properties") << info
+ << QByteArray("QGeoCoordinate(?, ?), Heading=1.1, GroundSpeed=2.1, VerticalSpeed=3.1, MagneticVariation=4.1, HorizontalAccuracy=5.1, VerticalAccuracy=6.1)");
+ }
+};
+
+
+QTEST_MAIN(tst_QGeoPositionInfo)
+#include "tst_qgeopositioninfo.moc"
diff --git a/tests/auto/tst_qgeopositioninfo/tst_qgeopositioninfo.pro b/tests/auto/tst_qgeopositioninfo/tst_qgeopositioninfo.pro
new file mode 100644
index 0000000000..4d54d1482b
--- /dev/null
+++ b/tests/auto/tst_qgeopositioninfo/tst_qgeopositioninfo.pro
@@ -0,0 +1,17 @@
+TEMPLATE = app
+TARGET = tst_qgeopositioninfo
+CONFIG+=testcase
+
+include (../../../common.pri)
+
+INCLUDEPATH += ../../../location
+
+# Input
+SOURCES += tst_qgeopositioninfo.cpp
+
+LIBS += -lQtLocation
+
+symbian {
+ TARGET.CAPABILITY = ALL -TCB
+}
+
diff --git a/tests/auto/tst_qgeopositioninfosource/tst_qgeopositioninfosource.cpp b/tests/auto/tst_qgeopositioninfosource/tst_qgeopositioninfosource.cpp
new file mode 100644
index 0000000000..62dc11747d
--- /dev/null
+++ b/tests/auto/tst_qgeopositioninfosource/tst_qgeopositioninfosource.cpp
@@ -0,0 +1,127 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qgeopositioninfosource.h>
+#include <qgeopositioninfo.h>
+
+#include <QTest>
+#include <QMetaType>
+
+#include <limits.h>
+
+Q_DECLARE_METATYPE(QGeoPositionInfoSource::PositioningMethod)
+Q_DECLARE_METATYPE(QGeoPositionInfoSource::PositioningMethods)
+
+class MyPositionSource : public QGeoPositionInfoSource
+{
+ Q_OBJECT
+public:
+ QGeoPositionInfo lastKnownPosition(bool fromSatellitePositioningMethodsOnly = false) const
+ {
+ return QGeoPositionInfo();
+ }
+
+ virtual PositioningMethods supportedPositioningMethods() const { return 0; }
+ virtual int minimumUpdateInterval() const { return 0; }
+
+ virtual void startUpdates() {}
+ virtual void stopUpdates() {}
+
+ virtual void requestUpdate(int timeout = 5000) {}
+};
+
+class tst_QGeoPositionInfoSource : public QObject
+{
+ Q_OBJECT
+
+private slots:
+
+ void setUpdateInterval()
+ {
+ QFETCH(int, interval);
+
+ MyPositionSource s;
+ s.setUpdateInterval(interval);
+ QCOMPARE(s.updateInterval(), interval);
+ }
+
+ void setUpdateInterval_data()
+ {
+ QTest::addColumn<int>("interval");
+ QTest::newRow("INT_MIN") << INT_MIN;
+ QTest::newRow("-1") << -1;
+ QTest::newRow("0") << 0;
+ QTest::newRow("1") << 1;
+ QTest::newRow("INT_MAX") << INT_MAX;
+ }
+
+ void updateInterval()
+ {
+ MyPositionSource s;
+ QCOMPARE(s.updateInterval(), 0);
+ }
+
+ void setPreferredPositioningMethods()
+ {
+ QFETCH(int, methods);
+
+ MyPositionSource s;
+ s.setPreferredPositioningMethods(static_cast<QGeoPositionInfoSource::PositioningMethods>(methods));
+ QCOMPARE(s.preferredPositioningMethods(), static_cast<QGeoPositionInfoSource::PositioningMethods>(methods));
+ }
+
+ void setPreferredPositioningMethods_data()
+ {
+ QTest::addColumn<int>("methods");
+ QTest::newRow("sat") << int(QGeoPositionInfoSource::SatellitePositioningMethods);
+ QTest::newRow("sat | non-sat") << int(QGeoPositionInfoSource::SatellitePositioningMethods
+ | QGeoPositionInfoSource::NonSatellitePositioningMethods);
+ QTest::newRow("all") << int(QGeoPositionInfoSource::AllPositioningMethods);
+ QTest::newRow("all | sat") << int(QGeoPositionInfoSource::AllPositioningMethods
+ | QGeoPositionInfoSource::NonSatellitePositioningMethods);
+ }
+
+ void preferredPositioningMethods()
+ {
+ MyPositionSource s;
+ QCOMPARE(s.preferredPositioningMethods(), 0);
+ }
+
+ void createSource()
+ {
+ QVERIFY(QGeoPositionInfoSource::createSource() == 0);
+ }
+};
+
+
+QTEST_MAIN(tst_QGeoPositionInfoSource)
+#include "tst_qgeopositioninfosource.moc"
diff --git a/tests/auto/tst_qgeopositioninfosource/tst_qgeopositioninfosource.pro b/tests/auto/tst_qgeopositioninfosource/tst_qgeopositioninfosource.pro
new file mode 100644
index 0000000000..414942e52b
--- /dev/null
+++ b/tests/auto/tst_qgeopositioninfosource/tst_qgeopositioninfosource.pro
@@ -0,0 +1,17 @@
+TEMPLATE = app
+TARGET = tst_qgeopositioninfosource
+CONFIG+=testcase
+
+include (../../../common.pri)
+
+INCLUDEPATH += ../../../location
+
+# Input
+SOURCES += tst_qgeopositioninfosource.cpp
+
+LIBS += -lQtLocation
+
+symbian {
+ TARGET.CAPABILITY = ALL -TCB
+}
+
diff --git a/tests/auto/tst_qlocationutils/tst_qlocationutils.cpp b/tests/auto/tst_qlocationutils/tst_qlocationutils.cpp
new file mode 100644
index 0000000000..959465b0bf
--- /dev/null
+++ b/tests/auto/tst_qlocationutils/tst_qlocationutils.cpp
@@ -0,0 +1,407 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "../../../location/qlocationutils_p.h"
+#include "qgeopositioninfo.h"
+
+#include <QDebug>
+#include <QTest>
+#include <QObject>
+
+#include <math.h>
+
+Q_DECLARE_METATYPE(QGeoPositionInfo)
+Q_DECLARE_METATYPE(QGeoCoordinate)
+
+
+class tst_QLocationUtils : public QObject
+{
+ Q_OBJECT
+private:
+ QString addChecksumEtc(const QString &sentence)
+ {
+ Q_ASSERT(sentence[0] == '$' && sentence[sentence.length()-1] == '*');
+
+ // XOR byte value of all characters between '$' and '*'
+ int result = 0;
+ for (int i=1; i<sentence.length()-1; i++)
+ result ^= sentence[i].toAscii();
+ QString sum;
+ sum.sprintf("%02x", result);
+ return sentence + sum + "\r\n";
+ }
+
+ double nmeaDegreesToDecimal(double nmeaDegrees)
+ {
+ double deg;
+ double min = 100.0 * modf(nmeaDegrees / 100.0, &deg);
+ return deg + (min / 60.0);
+ }
+
+private slots:
+
+ void getPosInfoFromNmea()
+ {
+ QFETCH(QString, nmea);
+ QFETCH(QGeoPositionInfo, expectedInfo);
+ QFETCH(bool, expectedHasFix);
+ QFETCH(bool, expectedResult);
+
+ QGeoPositionInfo info;
+ bool hasFix;
+ bool b = QLocationUtils::getPosInfoFromNmea(nmea.toAscii(), nmea.length(), &info, &hasFix);
+ QCOMPARE(b, expectedResult);
+ QCOMPARE(hasFix, expectedHasFix);
+ QCOMPARE(info, expectedInfo);
+ }
+
+ void getPosInfoFromNmea_data()
+ {
+ QTest::addColumn<QString>("nmea");
+ QTest::addColumn<QGeoPositionInfo>("expectedInfo");
+ QTest::addColumn<bool>("expectedHasFix");
+ QTest::addColumn<bool>("expectedResult");
+
+ QTest::newRow("empty") << QString() << QGeoPositionInfo() << false << false;
+
+ // must use exact double values or comparisons fail
+ double lat = nmeaDegreesToDecimal(2734.7964);
+ double lng = nmeaDegreesToDecimal(15306.0124);
+
+ QList<double> dblValues;
+ dblValues << -1.534 << -1.0 << 0.0 << 0.12123 << 3.23 << 123124.11;
+
+ QGeoPositionInfo info;
+
+ // all types
+ QList<QString> types;
+ types << "$GPGGA*" << "$GPGLL*" << "$GPRMC*" << "$GPVTG*" << "$GPZDA*";
+ for (int i=0; i<types.count(); i++) {
+ // the sentence type is valid even if it is empty so the method still returns true
+ QTest::newRow(qPrintable(types[i])) << addChecksumEtc(types[i])
+ << QGeoPositionInfo() << false << true;
+ }
+
+ // bad type
+ QTest::newRow("unknown type") << addChecksumEtc("$GPZZZ*") << QGeoPositionInfo() << false << false;
+
+ // --GGA:
+
+ QTest::newRow("GGA-time") << addChecksumEtc("$GPGGA,060613.626,,,,,,,,,,,,,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime(QDate(), QTime(6, 6, 13, 626)))
+ << false << true;
+
+ QTest::newRow("GGA-lat/long") << addChecksumEtc("$GPGGA,,2734.7964,S,15306.0124,E,,,,,,,,,*")
+ << QGeoPositionInfo(QGeoCoordinate(-lat, lng), QDateTime())
+ << false << true;
+
+ QTest::newRow("GGA-lat/long/alt") << addChecksumEtc("$GPGGA,,2734.7964,S,15306.0124,E,,,,26.8,,,,,*")
+ << QGeoPositionInfo(QGeoCoordinate(-lat, lng, 26.8), QDateTime())
+ << false << true;
+
+ QTest::newRow("GGA alt but no lat/long") << addChecksumEtc("$GPGGA,,,,,,,,,26.8,,,,,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime())
+ << false << true;
+
+ for (int i=-1; i<10; i++) {
+ bool hasFix = i > 0;
+ QTest::newRow("GGA-fix") << addChecksumEtc(QString("$GPGGA,,,,,,%1,,,,,,,,*").arg(i))
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime())
+ << hasFix << true;
+ }
+
+ QTest::newRow("GGA-all") << addChecksumEtc("$GPGGA,060613.626,2734.7964,S,15306.0124,E,1,03,2.9,-26.8,M,36.8,M,1,0000*")
+ << QGeoPositionInfo(QGeoCoordinate(-lat, lng, -26.8), QDateTime(QDate(), QTime(6,6,13,626)))
+ << true << true;
+
+
+ // --GLL:
+
+ QTest::newRow("GLL-lat/long") << addChecksumEtc("$GPGLL,2734.7964,S,15306.0124,E,,,*")
+ << QGeoPositionInfo(QGeoCoordinate(-lat, lng), QDateTime())
+ << false << true;
+
+ QTest::newRow("GLL-time") << addChecksumEtc("$GPGLL,,,,,060613.626,,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime(QDate(), QTime(6, 6, 13, 626)))
+ << false << true;
+
+ QTest::newRow("GLL-fix-ok") << addChecksumEtc("$GPGLL,,,,,,A,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime())
+ << true << true;
+
+ QTest::newRow("GLL-fix-bad") << addChecksumEtc("$GPGLL,,,,,,V,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime())
+ << false << true;
+
+ QTest::newRow("GLL-all") << addChecksumEtc("$GGGLL,2734.7964,S,15306.0124,E,220125.999,A,,*")
+ << QGeoPositionInfo(QGeoCoordinate(-lat, lng), QDateTime(QDate(), QTime(22,1,25,999)))
+ << true << true;
+
+
+ // --RMC:
+
+ QTest::newRow("RMC-time") << addChecksumEtc("$GPRMC,060613.626,,,,,,,,,,,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime(QDate(), QTime(6, 6, 13, 626)))
+ << false << true;
+
+ QTest::newRow("RMC-fix-ok") << addChecksumEtc("$GPRMC,,A,,,,,,,,,,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime())
+ << true << true;
+
+ QTest::newRow("RMC-fix-bad") << addChecksumEtc("$GPRMC,,V,,,,,,,,,,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime())
+ << false << true;
+
+ QTest::newRow("RMC-lat/long") << addChecksumEtc("$GPRMC,,,2734.7964,S,15306.0124,E,,,,,*")
+ << QGeoPositionInfo(QGeoCoordinate(-lat, lng), QDateTime())
+ << false << true;
+
+ for (int i=0; i<dblValues.count(); i++) {
+ info = QGeoPositionInfo();
+ info.setProperty(QGeoPositionInfo::Heading, dblValues[i]);
+ QTest::newRow(qPrintable(QString("RMC-heading %1").arg(dblValues[i]))) << addChecksumEtc(QString("$GPRMC,,,,,,,,%1,,,,*").arg(dblValues[i], 0, 'g', 10))
+ << info << false << true;
+ }
+
+ for (int i=0; i<dblValues.count(); i++) {
+ info = QGeoPositionInfo();
+ info.setProperty(QGeoPositionInfo::GroundSpeed, dblValues[i] * 1.852 / 3.6);
+ QTest::newRow(qPrintable(QString("RMC-speed %1").arg(dblValues[i]))) << addChecksumEtc(QString("$GPRMC,,,,,,,%1,,,,,*").arg(dblValues[i], 0, 'g', 10))
+ << info << false << true;
+ }
+
+ for (int i=0; i<dblValues.count(); i++) {
+ info = QGeoPositionInfo();
+ info.setProperty(QGeoPositionInfo::MagneticVariation, dblValues[i]);
+ char direction = dblValues[i] > 0 ? 'E' : 'W';
+ QTest::newRow(qPrintable(QString("RMC-magVar %1").arg(dblValues[i]))) << addChecksumEtc(QString("$GPRMC,,,,,,,,,,%1,%2,*").arg(qAbs(dblValues[i]), 0, 'g', 10).arg(direction))
+ << info << false << true;
+ }
+
+ QTest::newRow("RMC-date") << addChecksumEtc("$GPRMC,,,,,,,,,010520,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime(QDate(2020,5,1), QTime(), Qt::UTC))
+ << false << true;
+
+ QTest::newRow("RMC-date bad format") << addChecksumEtc("$GPRMC,,,,,,,,,10520,,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime())
+ << false << true;
+
+ info = QGeoPositionInfo(QGeoCoordinate(-lat, lng), QDateTime(QDate(2008,4,3), QTime(22,1,25,999), Qt::UTC));
+ info.setProperty(QGeoPositionInfo::GroundSpeed, 8.9 * 1.852 / 3.6);
+ info.setProperty(QGeoPositionInfo::Heading, 47.6);
+ info.setProperty(QGeoPositionInfo::MagneticVariation, -11.2);
+ QTest::newRow("RMC-all") << addChecksumEtc("$GPRMC,220125.999,A,2734.7964,S,15306.0124,E,8.9,47.6,030408,11.2,W,A*")
+ << info
+ << true << true;
+
+ // -- VTG:
+
+ for (int i=0; i<dblValues.count(); i++) {
+ info = QGeoPositionInfo();
+ info.setProperty(QGeoPositionInfo::Heading, dblValues[i]);
+ QTest::newRow(qPrintable(QString("VTG-heading %1").arg(dblValues[i]))) << addChecksumEtc(QString("$GPVTG,%1,,,,,,,,*").arg(dblValues[i], 0, 'g', 10))
+ << info << false << true;
+ }
+
+ for (int i=0; i<dblValues.count(); i++) {
+ info = QGeoPositionInfo();
+ info.setProperty(QGeoPositionInfo::GroundSpeed, dblValues[i] / 3.6);
+ QTest::newRow(qPrintable(QString("VTG-speed %1").arg(dblValues[i]))) << addChecksumEtc(QString("$GPVTG,,,,,,,%1,,*").arg(dblValues[i], 0, 'g', 10))
+ << info << false << true;
+ }
+
+ info = QGeoPositionInfo();
+ info.setProperty(QGeoPositionInfo::Heading, 158.7);
+ info.setProperty(QGeoPositionInfo::GroundSpeed, 61.5 / 3.6);
+ QTest::newRow("VTG-all") << addChecksumEtc("$GPVTG,158.7,T,169.9,M,33.2,N,61.5,K,A*")
+ << info
+ << false << true;
+
+ // ZDA:
+
+ QTest::newRow("ZDA-time") << addChecksumEtc("$GPZDA,152333.4,,,,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime(QDate(), QTime(15,23,33, 4), Qt::UTC))
+ << false << true;
+
+ QTest::newRow("ZDA-date day only") << addChecksumEtc("$GPZDA,,1,,,,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime())
+ << false << true;
+
+ QTest::newRow("ZDA-date month only") << addChecksumEtc("$GPZDA,,,12,,,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime())
+ << false << true;
+
+ QTest::newRow("ZDA-date bad year only") << addChecksumEtc("$GPZDA,,,,2005,,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime())
+ << false << true;
+
+ QTest::newRow("ZDA-date") << addChecksumEtc("$GPZDA,,1,12,2005,,*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime(QDate(2005,12,1), QTime(), Qt::UTC))
+ << false << true;
+
+ QTest::newRow("ZDA-all") << addChecksumEtc("$GPZDA,052953.05,03,04,2008,00,00*")
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime(QDate(2008, 4, 3), QTime(5, 29, 53, 5), Qt::UTC))
+ << false << true;
+
+ // test if multiple sentences are passed in, only first is parsed
+ QTest::newRow("multiple") << (addChecksumEtc("$GPZDA,052953.05,03,04,2008,00,00*") + addChecksumEtc("$GPVTG,158.7,T,169.9,M,33.2,N,61.5,K,A*"))
+ << QGeoPositionInfo(QGeoCoordinate(), QDateTime(QDate(2008, 4, 3), QTime(5, 29, 53, 5), Qt::UTC))
+ << false << true;
+ }
+
+ void hasValidNmeaChecksum() {
+ QFETCH(QString, nmea);
+ QFETCH(bool, expectedResult);
+
+ QCOMPARE(QLocationUtils::hasValidNmeaChecksum(nmea.toAscii().constData(), nmea.length()), expectedResult);
+ }
+
+ void hasValidNmeaChecksum_data()
+ {
+ QTest::addColumn<QString>("nmea");
+ QTest::addColumn<bool>("expectedResult");
+
+ QTest::newRow("empty") << QString() << false;
+
+ QString s = addChecksumEtc("$GPGGA,,,,,,,,,,,,,,*");
+ QString trimmed = s.trimmed();
+ QTest::newRow("ok") << s << true;
+ QTest::newRow("too short") << trimmed.mid(0, trimmed.length()-1) << false;
+ QTest::newRow("no asterisk") << s.replace("*", "") << false; // modifies test data!
+ }
+
+ void getNmeaTime()
+ {
+ QFETCH(QString, str);
+ QFETCH(QTime, expectedTime);
+ QFETCH(bool, expectedResult);
+
+ QTime time;
+ bool b = QLocationUtils::getNmeaTime(str.toAscii(), &time);
+ QCOMPARE(time, expectedTime);
+ QCOMPARE(b, expectedResult);
+ }
+
+ void getNmeaTime_data()
+ {
+ QTest::addColumn<QString>("str");
+ QTest::addColumn<QTime>("expectedTime");
+ QTest::addColumn<bool>("expectedResult");
+
+ QTest::newRow("empty") << QString() << QTime() << false;
+ QTest::newRow("no numbers") << QString("asdl") << QTime() << false;
+ QTest::newRow("one number short") << QString("11223") << QTime() << false;
+
+ QTest::newRow("112233") << QString("112233") << QTime(11,22,33) << true;
+ QTest::newRow("000000") << QString("000000") << QTime(0,0,0) << true;
+ QTest::newRow("235959") << QString("235959") << QTime(23,59,59) << true;
+ QTest::newRow("235960") << QString("235960") << QTime() << false;
+ QTest::newRow("236059") << QString("236059") << QTime() << false;
+ QTest::newRow("245959") << QString("24959") << QTime() << false;
+
+ QTest::newRow("112233.0") << QString("112233.0") << QTime(11,22,33) << true;
+ QTest::newRow("112233.1") << QString("112233.1") << QTime(11,22,33, 1) << true;
+ QTest::newRow("112233.12") << QString("112233.12") << QTime(11,22,33, 12) << true;
+ QTest::newRow("112233.123") << QString("112233.123") << QTime(11,22,33, 123) << true;
+ QTest::newRow("112233.999") << QString("112233.999") << QTime(11,22,33, 999) << true;
+ QTest::newRow("112233.9990") << QString("112233.9990") << QTime(11,22,33,999) << true;
+ QTest::newRow("112233.9991") << QString("112233.9991") << QTime(11,22,33,999) << true;
+ }
+
+ void getNmeaLatLong()
+ {
+ QFETCH(QString, str);
+ QFETCH(double, expectedLat);
+ QFETCH(double, expectedLng);
+ QFETCH(bool, expectedResult);
+
+ double lat, lng;
+ QList<QByteArray> parts = str.toAscii().split(',');
+ bool b = QLocationUtils::getNmeaLatLong(parts[0], parts[1][0], parts[2], parts[3][0], &lat, &lng);
+ QCOMPARE(b, expectedResult);
+ if (b) {
+ QCOMPARE(lat, expectedLat);
+ QCOMPARE(lng, expectedLng);
+ }
+ }
+
+ void getNmeaLatLong_data()
+ {
+ QTest::addColumn<QString>("str");
+ QTest::addColumn<double>("expectedLat");
+ QTest::addColumn<double>("expectedLng");
+ QTest::addColumn<bool>("expectedResult");
+
+ QTest::newRow("0.0,S,0.0,E") << "0.0,S,0.0,E" << 0.0 << 0.0 << true;
+ QTest::newRow("0.0,S,0.0,E") << "0.0,S,0.0,E" << 0.0 << 0.0 << true;
+ QTest::newRow("0,N,0,W") << "0,N,0,W" << 0.0 << 0.0 << true;
+ QTest::newRow("0,N,0,W") << "0,N,0,W" << 0.0 << 0.0 << true;
+
+ QTest::newRow("bad N/S indicator") << "0.0,Z,0.0,E" << 0.0 << 0.0 << false;
+ QTest::newRow("bad E/W indicator") << "0.0,S,0.0,P" << 0.0 << 0.0 << false;
+
+ QTest::newRow("lat too big") << "9000.0001,N,0.0,E" << 0.0 << 0.0 << false;
+ QTest::newRow("lat almost too big") << "9000.0000,N,0.0,E" << 90.0 << 0.0 << true;
+ QTest::newRow("lat too small") << "9000.0001,S,0.0,E" << 0.0 << 0.0 << false;
+ QTest::newRow("lat almost too small") << "9000.0000,S,0.0,E" << -90.0 << 0.0 << true;
+
+ QTest::newRow("long too big") << "0.0,N,18000.0001,E" << 0.0 << 0.0 << false;
+ QTest::newRow("long almost too big") << "0.0,N,18000.0000,E" << 0.0 << 180.0 << true;
+ QTest::newRow("long too small") << "0.0,N,18000.0001,W" << 0.0 << 0.0 << false;
+ QTest::newRow("long almost too small") << "0.0,N,18000.0000,W" << 0.0 << -180.0 << true;
+
+ double lat = nmeaDegreesToDecimal(2734.7964);
+ double lng = nmeaDegreesToDecimal(15306.0124);
+
+ QTest::newRow("Lat N, Long E")
+ << "2734.7964,N,15306.0124,E"
+ << lat << lng << true;
+
+ QTest::newRow("Lat S, Long E")
+ << "2734.7964,S,15306.0124,E"
+ << -lat << lng << true;
+
+ QTest::newRow("Lat N, Long W")
+ << "2734.7964,N,15306.0124,W"
+ << lat << -lng << true;
+
+ QTest::newRow("Lat S, Long W")
+ << "2734.7964,S,15306.0124,W"
+ << -lat << -lng << true;
+ }
+
+};
+
+
+QTEST_MAIN(tst_QLocationUtils)
+#include "tst_qlocationutils.moc"
+
diff --git a/tests/auto/tst_qlocationutils/tst_qlocationutils.pro b/tests/auto/tst_qlocationutils/tst_qlocationutils.pro
new file mode 100644
index 0000000000..7666ebab3a
--- /dev/null
+++ b/tests/auto/tst_qlocationutils/tst_qlocationutils.pro
@@ -0,0 +1,17 @@
+TEMPLATE = app
+TARGET = tst_qlocationutils
+CONFIG+=testcase
+
+include (../../../common.pri)
+
+INCLUDEPATH += ../../../location
+
+# Input
+SOURCES += tst_qlocationutils.cpp
+
+LIBS += -lQtLocation
+
+symbian {
+ TARGET.CAPABILITY = ALL -TCB
+}
+
diff --git a/tests/auto/tst_qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp b/tests/auto/tst_qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp
new file mode 100644
index 0000000000..1812941e57
--- /dev/null
+++ b/tests/auto/tst_qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp
@@ -0,0 +1,349 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "../qnmeapositioninfosourceproxyfactory.h"
+#include "../qlocationtestutils_p.h"
+
+#include <qnmeapositioninfosource.h>
+
+#include <QTest>
+#include <QDebug>
+#include <QBuffer>
+#include <QSignalSpy>
+#include <QMetaType>
+#include <QFile>
+#include <QTemporaryFile>
+#include <QHash>
+
+Q_DECLARE_METATYPE(QNmeaPositionInfoSource::UpdateMode)
+Q_DECLARE_METATYPE(QGeoPositionInfo)
+Q_DECLARE_METATYPE(QList<QDateTime>)
+
+class tst_QNmeaPositionInfoSource : public QObject
+{
+ Q_OBJECT
+
+public:
+ enum UpdateTriggerMethod
+ {
+ StartUpdatesMethod,
+ RequestUpdatesMethod
+ };
+
+private slots:
+ void initTestCase();
+
+ void constructor();
+ void constructor_data();
+
+ void supportedPositioningMethods();
+ void supportedPositioningMethods_data();
+
+ void minimumUpdateInterval();
+ void minimumUpdateInterval_data();
+
+ void testWithBufferedData();
+ void testWithBufferedData_data();
+
+ void startUpdates_waitForValidDateTime();
+ void startUpdates_waitForValidDateTime_data();
+
+ void requestUpdate_waitForValidDateTime();
+ void requestUpdate_waitForValidDateTime_data();
+
+ void testWithBadNmea();
+ void testWithBadNmea_data();
+
+private:
+ QHash<QNmeaPositionInfoSource::UpdateMode, QString> m_modes;
+};
+
+Q_DECLARE_METATYPE(tst_QNmeaPositionInfoSource::UpdateTriggerMethod)
+
+
+void tst_QNmeaPositionInfoSource::initTestCase()
+{
+ qRegisterMetaType<QGeoPositionInfo>();
+ qRegisterMetaType<QNmeaPositionInfoSource::UpdateMode>();
+
+ m_modes[QNmeaPositionInfoSource::RealTimeMode] = "[RealTime]";
+ m_modes[QNmeaPositionInfoSource::SimulationMode] = "[Simulation]";
+}
+
+void tst_QNmeaPositionInfoSource::constructor()
+{
+ QFETCH(QNmeaPositionInfoSource::UpdateMode, mode);
+
+ QObject o;
+ QNmeaPositionInfoSource source(mode, &o);
+ QCOMPARE(source.updateMode(), mode);
+ QCOMPARE(source.parent(), &o);
+}
+
+void tst_QNmeaPositionInfoSource::constructor_data()
+{
+ QTest::addColumn<QNmeaPositionInfoSource::UpdateMode>("mode");
+ foreach (QNmeaPositionInfoSource::UpdateMode mode, m_modes.keys())
+ QTest::newRow(qPrintable(m_modes[mode])) << mode;
+}
+
+void tst_QNmeaPositionInfoSource::supportedPositioningMethods()
+{
+ QFETCH(QNmeaPositionInfoSource::UpdateMode, mode);
+
+ QNmeaPositionInfoSource source(mode);
+ QCOMPARE(source.supportedPositioningMethods(), QNmeaPositionInfoSource::SatellitePositioningMethods);
+}
+
+void tst_QNmeaPositionInfoSource::supportedPositioningMethods_data()
+{
+ QTest::addColumn<QNmeaPositionInfoSource::UpdateMode>("mode");
+ foreach (QNmeaPositionInfoSource::UpdateMode mode, m_modes.keys())
+ QTest::newRow(qPrintable(m_modes[mode])) << mode;
+}
+
+void tst_QNmeaPositionInfoSource::minimumUpdateInterval()
+{
+ QFETCH(QNmeaPositionInfoSource::UpdateMode, mode);
+
+ QNmeaPositionInfoSource source(mode);
+ QCOMPARE(source.minimumUpdateInterval(), 0);
+}
+
+void tst_QNmeaPositionInfoSource::minimumUpdateInterval_data()
+{
+ QTest::addColumn<QNmeaPositionInfoSource::UpdateMode>("mode");
+ foreach (QNmeaPositionInfoSource::UpdateMode mode, m_modes.keys())
+ QTest::newRow(qPrintable(m_modes[mode])) << mode;
+}
+
+void tst_QNmeaPositionInfoSource::testWithBufferedData()
+{
+ // In SimulationMode, data stored in the QIODevice is read when
+ // startUpdates() or requestUpdate() is called.
+ // In RealTimeMode, all existing data in the QIODevice is ignored -
+ // only new data will be read.
+
+ QFETCH(QNmeaPositionInfoSource::UpdateMode, mode);
+ QFETCH(QList<QDateTime>, dateTimes);
+ QFETCH(UpdateTriggerMethod, trigger);
+
+ QByteArray bytes;
+ for (int i=0; i<dateTimes.count(); i++)
+ bytes += QLocationTestUtils::createRmcSentence(dateTimes[i]).toLatin1();
+ QBuffer buffer;
+ buffer.setData(bytes);
+
+ QNmeaPositionInfoSource source(mode);
+ QSignalSpy spy(&source, SIGNAL(positionUpdated(QGeoPositionInfo)));
+ source.setDevice(&buffer);
+
+ if (trigger == StartUpdatesMethod)
+ source.startUpdates();
+ else if (trigger == RequestUpdatesMethod)
+ source.requestUpdate();
+
+ if (mode == QNmeaPositionInfoSource::RealTimeMode) {
+ QTest::qWait(300);
+ QCOMPARE(spy.count(), 0);
+ } else {
+ if (trigger == StartUpdatesMethod) {
+ QTRY_COMPARE(spy.count(), dateTimes.count());
+ for (int i=0; i<dateTimes.count(); i++)
+ QCOMPARE(spy.at(i).at(0).value<QGeoPositionInfo>().dateTime(), dateTimes[i]);
+ } else if (trigger == RequestUpdatesMethod) {
+ QTRY_COMPARE(spy.count(), 1);
+ QCOMPARE(spy.at(0).at(0).value<QGeoPositionInfo>().dateTime(), dateTimes.first());
+ }
+ }
+}
+
+void tst_QNmeaPositionInfoSource::testWithBufferedData_data()
+{
+ QTest::addColumn<QNmeaPositionInfoSource::UpdateMode>("mode");
+ QTest::addColumn<QList<QDateTime> >("dateTimes");
+ QTest::addColumn<UpdateTriggerMethod>("trigger");
+
+ foreach (QNmeaPositionInfoSource::UpdateMode mode, m_modes.keys()) {
+ QString m = m_modes[mode] + ' ';
+
+ QList<QDateTime> dateTimes;
+ dateTimes << QDateTime::currentDateTime().toUTC();
+
+ QTest::newRow(qPrintable(m + "startUpdates(), 1 update in buffer")) << mode << dateTimes << StartUpdatesMethod;
+ QTest::newRow(qPrintable(m + "requestUpdate(), 1 update in buffer")) << mode << dateTimes << RequestUpdatesMethod;
+
+ for (int i=1; i<3; i++)
+ dateTimes << dateTimes[0].addDays(i);
+ QTest::newRow(qPrintable(m + "startUpdates(), multiple updates in buffer")) << mode << dateTimes << StartUpdatesMethod;
+ QTest::newRow(qPrintable(m + "requestUpdate(), multiple updates in buffer")) << mode << dateTimes << RequestUpdatesMethod;
+ }
+}
+
+void tst_QNmeaPositionInfoSource::startUpdates_waitForValidDateTime()
+{
+ // Tests that the class does not emit an update until it receives a
+ // sentences with a valid date *and* time. All sentences before this
+ // should be ignored, and any sentences received after this that do
+ // not have a date should use the known date.
+
+ QFETCH(QNmeaPositionInfoSource::UpdateMode, mode);
+ QFETCH(QByteArray, bytes);
+ QFETCH(QList<QDateTime>, dateTimes);
+
+ QNmeaPositionInfoSourceProxyFactory factory(mode);
+ QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(factory.createProxy());
+
+ QSignalSpy spy(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo)));
+ proxy->source()->startUpdates();
+
+ proxy->feedBytes(bytes);
+ QTRY_COMPARE(spy.count(), dateTimes.count());
+
+ for (int i=0; i<spy.count(); i++)
+ QCOMPARE(spy[i][0].value<QGeoPositionInfo>().dateTime(), dateTimes[i]);
+}
+
+void tst_QNmeaPositionInfoSource::startUpdates_waitForValidDateTime_data()
+{
+ QTest::addColumn<QNmeaPositionInfoSource::UpdateMode>("mode");
+ QTest::addColumn<QByteArray>("bytes");
+ QTest::addColumn<QList<QDateTime> >("dateTimes");
+
+ foreach (QNmeaPositionInfoSource::UpdateMode mode, m_modes.keys()) {
+ QString m = m_modes[mode] + ' ';
+
+ QDateTime dt = QDateTime::currentDateTime().toUTC();
+ QByteArray bytes;
+
+ // should only receive RMC sentence and the GGA sentence *after* it
+ bytes += QLocationTestUtils::createGgaSentence(dt.addSecs(1).time()).toLatin1();
+ bytes += QLocationTestUtils::createRmcSentence(dt.addSecs(2)).toLatin1();
+ bytes += QLocationTestUtils::createGgaSentence(dt.addSecs(3).time()).toLatin1();
+ QTest::newRow(qPrintable(m + "Feed GGA,RMC,GGA; expect RMC, second GGA only"))
+ << mode << bytes << (QList<QDateTime>() << dt.addSecs(2) << dt.addSecs(3));
+
+ // should not receive ZDA (has no coordinates) but should get the GGA
+ // sentence after it since it got the date/time from ZDA
+ bytes.clear();
+ bytes += QLocationTestUtils::createGgaSentence(dt.addSecs(1).time()).toLatin1();
+ bytes += QLocationTestUtils::createZdaSentence(dt.addSecs(2)).toLatin1();
+ bytes += QLocationTestUtils::createGgaSentence(dt.addSecs(3).time()).toLatin1();
+ QTest::newRow(qPrintable(m + "Feed GGA,ZDA,GGA; expect second GGA only"))
+ << mode << bytes << (QList<QDateTime>() << dt.addSecs(3));
+
+ if (mode == QNmeaPositionInfoSource::SimulationMode) {
+ // In sim mode, should ignore sentence with a date/time before the known date/time
+ // (in real time mode, everything is passed on regardless)
+ bytes.clear();
+ bytes += QLocationTestUtils::createRmcSentence(dt.addSecs(1)).toLatin1();
+ bytes += QLocationTestUtils::createRmcSentence(dt.addSecs(-2)).toLatin1();
+ bytes += QLocationTestUtils::createRmcSentence(dt.addSecs(2)).toLatin1();
+ QTest::newRow(qPrintable(m + "Feed good RMC, RMC with bad date/time, good RMC; expect first and third RMC only"))
+ << mode << bytes << (QList<QDateTime>() << dt.addSecs(1) << dt.addSecs(2));
+ }
+ }
+}
+
+void tst_QNmeaPositionInfoSource::requestUpdate_waitForValidDateTime()
+{
+ QFETCH(QNmeaPositionInfoSource::UpdateMode, mode);
+ QFETCH(QByteArray, bytes);
+ QFETCH(QList<QDateTime>, dateTimes);
+
+ QNmeaPositionInfoSourceProxyFactory factory(mode);
+ QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(factory.createProxy());
+
+ QSignalSpy spy(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo)));
+ proxy->source()->requestUpdate();
+
+ proxy->feedBytes(bytes);
+ QTRY_COMPARE(spy.count(), 1);
+ QCOMPARE(spy[0][0].value<QGeoPositionInfo>().dateTime(), dateTimes[0]);
+}
+
+void tst_QNmeaPositionInfoSource::requestUpdate_waitForValidDateTime_data()
+{
+ startUpdates_waitForValidDateTime_data();
+}
+
+void tst_QNmeaPositionInfoSource::testWithBadNmea()
+{
+ QFETCH(QNmeaPositionInfoSource::UpdateMode, mode);
+ QFETCH(QByteArray, bytes);
+ QFETCH(QList<QDateTime>, dateTimes);
+ QFETCH(UpdateTriggerMethod, trigger);
+
+ QNmeaPositionInfoSourceProxyFactory factory(mode);
+ QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(factory.createProxy());
+
+ QSignalSpy spy(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo)));
+ if (trigger == StartUpdatesMethod)
+ proxy->source()->startUpdates();
+ else
+ proxy->source()->requestUpdate();
+
+ proxy->feedBytes(bytes);
+ QTRY_COMPARE(spy.count(), dateTimes.count());
+ for (int i=0; i<dateTimes.count(); i++)
+ QCOMPARE(spy[i][0].value<QGeoPositionInfo>().dateTime(), dateTimes[i]);
+}
+
+void tst_QNmeaPositionInfoSource::testWithBadNmea_data()
+{
+ QTest::addColumn<QNmeaPositionInfoSource::UpdateMode>("mode");
+ QTest::addColumn<QByteArray>("bytes");
+ QTest::addColumn<QList<QDateTime> >("dateTimes");
+ QTest::addColumn<UpdateTriggerMethod>("trigger");
+
+ foreach (QNmeaPositionInfoSource::UpdateMode mode, m_modes.keys()) {
+ QString m = m_modes[mode] + ' ';
+
+ QDateTime firstDateTime = QDateTime::currentDateTime().toUTC();
+ QByteArray bad = QLocationTestUtils::createRmcSentence(firstDateTime.addSecs(1)).toLatin1();
+ bad = bad.mid(bad.length()/2);
+ QDateTime lastDateTime = firstDateTime.addSecs(2);
+
+ QByteArray bytes;
+ bytes += QLocationTestUtils::createRmcSentence(firstDateTime).toLatin1();
+ bytes += bad;
+ bytes += QLocationTestUtils::createRmcSentence(lastDateTime).toLatin1();
+ QTest::newRow(qPrintable(m + "requestUpdate(), bad second sentence")) << mode << bytes
+ << (QList<QDateTime>() << firstDateTime) << RequestUpdatesMethod;
+ QTest::newRow(qPrintable(m + "startUpdates(), bad second sentence")) << mode << bytes
+ << (QList<QDateTime>() << firstDateTime << lastDateTime) << StartUpdatesMethod;
+ }
+}
+
+QTEST_MAIN(tst_QNmeaPositionInfoSource)
+
+#include "tst_qnmeapositioninfosource.moc"
diff --git a/tests/auto/tst_qnmeapositioninfosource/tst_qnmeapositioninfosource.pro b/tests/auto/tst_qnmeapositioninfosource/tst_qnmeapositioninfosource.pro
new file mode 100644
index 0000000000..3611514812
--- /dev/null
+++ b/tests/auto/tst_qnmeapositioninfosource/tst_qnmeapositioninfosource.pro
@@ -0,0 +1,21 @@
+TEMPLATE = app
+TARGET = tst_qnmeapositioninfosource
+CONFIG+=testcase
+QT += network
+
+include (../../../common.pri)
+
+INCLUDEPATH += ../../../location
+
+HEADERS += ../qnmeapositioninfosourceproxyfactory.h \
+ ../qlocationtestutils_p.h
+
+SOURCES += ../qnmeapositioninfosourceproxyfactory.cpp \
+ ../qlocationtestutils.cpp \
+ tst_qnmeapositioninfosource.cpp
+
+LIBS += -lQtLocation
+
+symbian {
+ TARGET.CAPABILITY = ALL -TCB
+}
diff --git a/tests/auto/tst_qnmeapositioninfosource_realtime/tst_qnmeapositioninfosource_realtime.cpp b/tests/auto/tst_qnmeapositioninfosource_realtime/tst_qnmeapositioninfosource_realtime.cpp
new file mode 100644
index 0000000000..47829e5ab5
--- /dev/null
+++ b/tests/auto/tst_qnmeapositioninfosource_realtime/tst_qnmeapositioninfosource_realtime.cpp
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "../qnmeapositioninfosourceproxyfactory.h"
+#include "../qgeopositioninfosourcesubclasstest_p.h"
+
+#include <QObject>
+#include <QTest>
+
+class tst_QNmeaPositionInfoSource_RealTime : public QGeoPositionInfoSourceSubclassTest
+{
+ Q_OBJECT
+public:
+ tst_QNmeaPositionInfoSource_RealTime(QObject *parent = 0)
+ : QGeoPositionInfoSourceSubclassTest(new QNmeaPositionInfoSourceProxyFactory(QNmeaPositionInfoSource::RealTimeMode), parent)
+ {
+ }
+
+ ~tst_QNmeaPositionInfoSource_RealTime()
+ {
+ delete factory();
+ }
+};
+
+QTEST_MAIN(tst_QNmeaPositionInfoSource_RealTime)
+
+#include "tst_qnmeapositioninfosource_realtime.moc"
diff --git a/tests/auto/tst_qnmeapositioninfosource_realtime/tst_qnmeapositioninfosource_realtime.pro b/tests/auto/tst_qnmeapositioninfosource_realtime/tst_qnmeapositioninfosource_realtime.pro
new file mode 100644
index 0000000000..6d6304daf7
--- /dev/null
+++ b/tests/auto/tst_qnmeapositioninfosource_realtime/tst_qnmeapositioninfosource_realtime.pro
@@ -0,0 +1,23 @@
+TEMPLATE = app
+TARGET = tst_qnmeapositioninfosource_realtime
+CONFIG+=testcase
+QT += network
+
+include (../../../common.pri)
+
+INCLUDEPATH += ../../../location
+
+HEADERS += ../qgeopositioninfosourcesubclasstest_p.h \
+ ../qnmeapositioninfosourceproxyfactory.h \
+ ../qlocationtestutils_p.h
+
+SOURCES += ../qgeopositioninfosourcesubclasstest.cpp \
+ ../qnmeapositioninfosourceproxyfactory.cpp \
+ ../qlocationtestutils.cpp \
+ tst_qnmeapositioninfosource_realtime.cpp
+
+LIBS += -lQtLocation
+
+symbian {
+ TARGET.CAPABILITY = ALL -TCB
+}
diff --git a/tests/auto/tst_qnmeapositioninfosource_sim/tst_qnmeapositioninfosource_sim.cpp b/tests/auto/tst_qnmeapositioninfosource_sim/tst_qnmeapositioninfosource_sim.cpp
new file mode 100644
index 0000000000..6245f7048e
--- /dev/null
+++ b/tests/auto/tst_qnmeapositioninfosource_sim/tst_qnmeapositioninfosource_sim.cpp
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "../qnmeapositioninfosourceproxyfactory.h"
+#include "../qgeopositioninfosourcesubclasstest_p.h"
+
+#include <QObject>
+#include <QTest>
+
+class tst_QNmeaPositionInfoSource_Sim : public QGeoPositionInfoSourceSubclassTest
+{
+ Q_OBJECT
+public:
+ tst_QNmeaPositionInfoSource_Sim(QObject *parent = 0)
+ : QGeoPositionInfoSourceSubclassTest(new QNmeaPositionInfoSourceProxyFactory(QNmeaPositionInfoSource::SimulationMode), parent)
+ {
+ }
+
+ ~tst_QNmeaPositionInfoSource_Sim()
+ {
+ delete factory();
+ }
+};
+
+QTEST_MAIN(tst_QNmeaPositionInfoSource_Sim)
+
+#include "tst_qnmeapositioninfosource_sim.moc"
diff --git a/tests/auto/tst_qnmeapositioninfosource_sim/tst_qnmeapositioninfosource_sim.pro b/tests/auto/tst_qnmeapositioninfosource_sim/tst_qnmeapositioninfosource_sim.pro
new file mode 100644
index 0000000000..2d4e9224ad
--- /dev/null
+++ b/tests/auto/tst_qnmeapositioninfosource_sim/tst_qnmeapositioninfosource_sim.pro
@@ -0,0 +1,23 @@
+TEMPLATE = app
+TARGET = tst_qnmeapositioninfosource_sim
+CONFIG+=testcase
+QT += network
+
+include (../../../common.pri)
+
+INCLUDEPATH += ../../../location
+
+HEADERS += ../qgeopositioninfosourcesubclasstest_p.h \
+ ../qnmeapositioninfosourceproxyfactory.h \
+ ../qlocationtestutils_p.h
+
+SOURCES += ../qgeopositioninfosourcesubclasstest.cpp \
+ ../qnmeapositioninfosourceproxyfactory.cpp \
+ ../qlocationtestutils.cpp \
+ tst_qnmeapositioninfosource_sim.cpp
+
+LIBS += -lQtLocation
+
+symbian {
+ TARGET.CAPABILITY = ALL -TCB
+}
diff --git a/tests/auto/tst_qsatelliteinfo/tst_qsatelliteinfo.cpp b/tests/auto/tst_qsatelliteinfo/tst_qsatelliteinfo.cpp
new file mode 100644
index 0000000000..2778f83e21
--- /dev/null
+++ b/tests/auto/tst_qsatelliteinfo/tst_qsatelliteinfo.cpp
@@ -0,0 +1,339 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qsatelliteinfo.h>
+
+#include <QMetaType>
+#include <QObject>
+#include <QDebug>
+#include <QTest>
+
+#include <float.h>
+#include <limits.h>
+
+Q_DECLARE_METATYPE(QSatelliteInfo)
+Q_DECLARE_METATYPE(QSatelliteInfo::Property)
+
+QByteArray tst_qsatelliteinfo_debug;
+
+void tst_qsatelliteinfo_messageHandler(QtMsgType type, const char *msg)
+{
+ switch(type) {
+ case QtDebugMsg :
+ tst_qsatelliteinfo_debug = QByteArray(msg);
+ break;
+ default:
+ break;
+ }
+}
+
+
+QList<qreal> tst_qsatelliteinfo_qrealTestValues()
+{
+ QList<qreal> values;
+ if (qreal(DBL_MIN) == DBL_MIN)
+ values << DBL_MIN;
+
+ values << FLT_MIN;
+ values << -1.0 << 0.0 << 1.0;
+ values << FLT_MAX;
+
+ if (qreal(DBL_MAX) == DBL_MAX)
+ values << DBL_MAX;
+ return values;
+}
+
+QList<int> tst_qsatelliteinfo_intTestValues()
+{
+ QList<int> values;
+ values << INT_MIN << -100 << 0 << 100 << INT_MAX;
+ return values;
+}
+
+QList<QSatelliteInfo::Property> tst_qsatelliteinfo_getProperties()
+{
+ QList<QSatelliteInfo::Property> properties;
+ properties << QSatelliteInfo::Elevation
+ << QSatelliteInfo::Azimuth;
+ return properties;
+}
+
+
+class tst_QSatelliteInfo : public QObject
+{
+ Q_OBJECT
+
+private:
+ QSatelliteInfo updateWithProperty(QSatelliteInfo::Property property, qreal value)
+ {
+ QSatelliteInfo info;
+ info.setProperty(property, value);
+ return info;
+ }
+
+ void addTestData_update()
+ {
+ QTest::addColumn<QSatelliteInfo>("info");
+
+ QList<int> intValues = tst_qsatelliteinfo_intTestValues();
+ for (int i=0; i<intValues.count(); i++) {
+ QSatelliteInfo info;
+ info.setPrnNumber(intValues[i]);
+ QTest::newRow("prn") << info;
+ }
+
+ for (int i=0; i<intValues.count(); i++) {
+ QSatelliteInfo info;
+ info.setSignalStrength(intValues[i]);
+ QTest::newRow("signal strength") << info;
+ }
+
+ QList<QSatelliteInfo::Property> properties = tst_qsatelliteinfo_getProperties();
+ QList<qreal> qrealValues = tst_qsatelliteinfo_qrealTestValues();
+ for (int i=0; i<properties.count(); i++) {
+ QTest::newRow(qPrintable(QString("Property %1 = %2").arg(properties[i]).arg(qrealValues[i])))
+ << updateWithProperty(properties[i], qrealValues[i]);
+ }
+ }
+
+private slots:
+ void constructor()
+ {
+ QSatelliteInfo info;
+ QCOMPARE(info.prnNumber(), -1);
+ QCOMPARE(info.signalStrength(), -1);
+ QList<QSatelliteInfo::Property> properties = tst_qsatelliteinfo_getProperties();
+ for (int i=0; i<properties.count(); i++)
+ QCOMPARE(info.property(properties[i]), qreal(-1.0));
+ }
+
+ void constructor_copy()
+ {
+ QFETCH(QSatelliteInfo, info);
+
+ QCOMPARE(QSatelliteInfo(info), info);
+ }
+
+ void constructor_copy_data()
+ {
+ addTestData_update();
+ }
+
+ void operator_comparison()
+ {
+ QFETCH(QSatelliteInfo, info);
+
+ QVERIFY(info == info);
+ QCOMPARE(info != info, false);
+ QCOMPARE(info == QSatelliteInfo(), false);
+ QCOMPARE(info != QSatelliteInfo(), true);
+
+ QVERIFY(QSatelliteInfo() == QSatelliteInfo());
+ }
+
+ void operator_comparison_data()
+ {
+ addTestData_update();
+ }
+
+ void operator_assign()
+ {
+ QFETCH(QSatelliteInfo, info);
+
+ QSatelliteInfo info2 = info;
+ QCOMPARE(info2, info);
+ }
+
+ void operator_assign_data()
+ {
+ addTestData_update();
+ }
+
+ void setPrnNumber()
+ {
+ QFETCH(int, prn);
+
+ QSatelliteInfo info;
+ QCOMPARE(info.prnNumber(), -1);
+
+ info.setPrnNumber(prn);
+ QCOMPARE(info.prnNumber(), prn);
+ }
+
+ void setPrnNumber_data()
+ {
+ QTest::addColumn<int>("prn");
+
+ QList<int> intValues = tst_qsatelliteinfo_intTestValues();
+ for (int i=0; i<intValues.count(); i++)
+ QTest::newRow(qPrintable(QString("%1").arg(intValues[i]))) << intValues[i];
+ }
+
+ void setSignalStrength()
+ {
+ QFETCH(int, signal);
+
+ QSatelliteInfo info;
+ QCOMPARE(info.signalStrength(), -1);
+
+ info.setSignalStrength(signal);
+ QCOMPARE(info.signalStrength(), signal);
+ }
+
+ void setSignalStrength_data()
+ {
+ QTest::addColumn<int>("signal");
+
+ QList<int> intValues = tst_qsatelliteinfo_intTestValues();
+ for (int i=0; i<intValues.count(); i++)
+ QTest::newRow(qPrintable(QString("%1").arg(intValues[i]))) << intValues[i];
+ }
+
+ void property()
+ {
+ QFETCH(QSatelliteInfo::Property, property);
+ QFETCH(qreal, value);
+
+ QSatelliteInfo u;
+ QCOMPARE(u.property(property), qreal(-1.0));
+
+ u.setProperty(property, value);
+ QCOMPARE(u.property(property), value);
+
+ u.removeProperty(property);
+ QCOMPARE(u.property(property), qreal(-1.0));
+ }
+
+ void property_data()
+ {
+ QTest::addColumn<QSatelliteInfo::Property>("property");
+ QTest::addColumn<qreal>("value");
+
+ QList<QSatelliteInfo::Property> props;
+ props << QSatelliteInfo::Elevation
+ << QSatelliteInfo::Azimuth;
+ for (int i=0; i<props.count(); i++) {
+ QTest::newRow(QTest::toString("property " + props[i])) << props[i] << qreal(-1.0);
+ QTest::newRow(QTest::toString("property " + props[i])) << props[i] << qreal(0.0);
+ QTest::newRow(QTest::toString("property " + props[i])) << props[i] << qreal(1.0);
+ }
+ }
+
+ void hasProperty()
+ {
+ QFETCH(QSatelliteInfo::Property, property);
+ QFETCH(qreal, value);
+
+ QSatelliteInfo u;
+ QVERIFY(!u.hasProperty(property));
+
+ u.setProperty(property, value);
+ QVERIFY(u.hasProperty(property));
+
+ u.removeProperty(property);
+ QVERIFY(!u.hasProperty(property));
+ }
+
+ void hasProperty_data()
+ {
+ property_data();
+ }
+
+ void removeProperty()
+ {
+ QFETCH(QSatelliteInfo::Property, property);
+ QFETCH(qreal, value);
+
+ QSatelliteInfo u;
+ QVERIFY(!u.hasProperty(property));
+
+ u.setProperty(property, value);
+ QVERIFY(u.hasProperty(property));
+
+ u.removeProperty(property);
+ QVERIFY(!u.hasProperty(property));
+
+ u.setProperty(property, value);
+ QVERIFY(u.hasProperty(property));
+ }
+
+ void removeProperty_data()
+ {
+ property_data();
+ }
+
+ void debug()
+ {
+ QFETCH(QSatelliteInfo, info);
+ QFETCH(QByteArray, debugString);
+
+ qInstallMsgHandler(tst_qsatelliteinfo_messageHandler);
+ qDebug() << info;
+ qInstallMsgHandler(0);
+ QCOMPARE(QString(tst_qsatelliteinfo_debug), QString(debugString));
+ }
+
+ void debug_data()
+ {
+ QTest::addColumn<QSatelliteInfo>("info");
+ QTest::addColumn<QByteArray>("debugString");
+
+ QSatelliteInfo info;
+
+ QTest::newRow("uninitialized") << info
+ << QByteArray("QSatelliteInfo(PRN=-1, signal-strength=-1)");
+
+ info = QSatelliteInfo();
+ info.setPrnNumber(1);
+ QTest::newRow("with PRN") << info
+ << QByteArray("QSatelliteInfo(PRN=1, signal-strength=-1)");
+
+ info = QSatelliteInfo();
+ info.setSignalStrength(1);
+ QTest::newRow("with PRN") << info
+ << QByteArray("QSatelliteInfo(PRN=-1, signal-strength=1)");
+
+ info = QSatelliteInfo();
+ info.setProperty(QSatelliteInfo::Elevation, 1.1);
+ QTest::newRow("with Elevation") << info
+ << QByteArray("QSatelliteInfo(PRN=-1, signal-strength=-1, Elevation=1.1)");
+
+ info = QSatelliteInfo();
+ info.setProperty(QSatelliteInfo::Azimuth, 1.1);
+ QTest::newRow("with Azimuth") << info
+ << QByteArray("QSatelliteInfo(PRN=-1, signal-strength=-1, Azimuth=1.1)");
+ }
+};
+
+
+QTEST_MAIN(tst_QSatelliteInfo)
+#include "tst_qsatelliteinfo.moc"
diff --git a/tests/auto/tst_qsatelliteinfo/tst_qsatelliteinfo.pro b/tests/auto/tst_qsatelliteinfo/tst_qsatelliteinfo.pro
new file mode 100644
index 0000000000..1400709c65
--- /dev/null
+++ b/tests/auto/tst_qsatelliteinfo/tst_qsatelliteinfo.pro
@@ -0,0 +1,17 @@
+TEMPLATE = app
+TARGET = tst_qsatelliteinfo
+CONFIG+=testcase
+
+include (../../../common.pri)
+
+INCLUDEPATH += ../../../location
+
+# Input
+SOURCES += tst_qsatelliteinfo.cpp
+
+LIBS += -lQtLocation
+
+symbian {
+ TARGET.CAPABILITY = ALL -TCB
+}
+
diff --git a/tests/auto/tst_qsatelliteinfosource/tst_qsatelliteinfosource.cpp b/tests/auto/tst_qsatelliteinfosource/tst_qsatelliteinfosource.cpp
new file mode 100644
index 0000000000..e07dc7c729
--- /dev/null
+++ b/tests/auto/tst_qsatelliteinfosource/tst_qsatelliteinfosource.cpp
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** If you have questions regarding the use of this file, please
+** contact Nokia at http://qt.nokia.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qsatelliteinfosource.h>
+#include <QTest>
+
+class tst_QSatelliteInfoSource : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void createSource()
+ {
+ QVERIFY(QSatelliteInfoSource::createSource() == 0);
+ }
+};
+
+
+QTEST_MAIN(tst_QSatelliteInfoSource)
+#include "tst_qsatelliteinfosource.moc"
diff --git a/tests/auto/tst_qsatelliteinfosource/tst_qsatelliteinfosource.pro b/tests/auto/tst_qsatelliteinfosource/tst_qsatelliteinfosource.pro
new file mode 100644
index 0000000000..db52a37c44
--- /dev/null
+++ b/tests/auto/tst_qsatelliteinfosource/tst_qsatelliteinfosource.pro
@@ -0,0 +1,17 @@
+TEMPLATE = app
+TARGET = tst_qsatelliteinfosource
+CONFIG+=testcase
+
+include (../../../common.pri)
+
+INCLUDEPATH += ../../../location
+
+# Input
+SOURCES += tst_qsatelliteinfosource.cpp
+
+LIBS += -lQtLocation
+
+symbian {
+ TARGET.CAPABILITY = ALL -TCB
+}
+