c0b0bb5fee530e61ecc2b0045901253056db47cf
[situare] / src / gps / gpspositionprivate.h
1 /*
2    Situare - A location system for Facebook
3    Copyright (C) 2010  Ixonos Plc. Authors:
4
5        Jussi Laitinen - jussi.laitinen@ixonos.com
6
7    Situare is free software; you can redistribute it and/or
8    modify it under the terms of the GNU General Public License
9    version 2 as published by the Free Software Foundation.
10
11    Situare is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with Situare; if not, write to the Free Software
18    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
19    USA.
20 */
21
22 #ifndef GPSPOSITIONPRIVATE_H
23 #define GPSPOSITIONPRIVATE_H
24
25 #include <QPointF>
26
27 #include <QGeoPositionInfo>
28 #include <QGeoPositionInfoSource>
29 #include <QNmeaPositionInfoSource>
30
31 #include "gpsposition.h"
32
33 QTM_USE_NAMESPACE
34
35 /**
36 * @brief GPSPositionPrivate class use GPS to receive location information.
37 */
38 class GPSPositionPrivate : public QObject
39 {
40     Q_OBJECT
41
42 public:
43     /**
44     * @brief Constructor creates GPS source.
45     *
46     * @param parent QObject
47     */
48     GPSPositionPrivate(QObject *parent);
49
50 /******************************************************************************
51 * MEMBER FUNCTIONS AND SLOTS
52 ******************************************************************************/
53 public:
54     /**
55     * @brief Checks if GPS is running.
56     *
57     * @return true if GPS running, false otherwise
58     */
59     bool isRunning();
60
61     /**
62     * @brief Return last known position.
63     */
64     QPointF lastPosition();
65
66     /**
67     * @brief Informs gps to emit last known position.
68     */
69     void requestLastPosition();
70
71     /**
72     * @brief Set GPS mode.
73     *
74     * Modes: default and simulation.
75     * @param mode GPS mode
76     * @param filePath file path to NMEA file if simulation mode is used
77     */
78     void setMode(GPSPosition::Mode mode, const QString &filePath = 0);
79
80     /**
81     * @brief Set GPS update interval
82     *
83     * @return interval interval in milliseconds
84     */
85     void setUpdateInterval(int interval);
86
87     /**
88     * @brief Start GPS.
89     */
90     void start();
91
92     /**
93     * @brief Stop GPS.
94     */
95     void stop();
96
97 private:
98     /**
99     * @brief Return horizontal accuracy
100     *
101     * @param positionInfo geo position info
102     * @return accuracy value, -1 if undefined. Returns -1 also is timestamp is not valid
103     *         (when using network positioning)
104     */
105     qreal accuracy(const QGeoPositionInfo &positionInfo);
106
107 private slots:
108
109     /**
110     * @brief Slot for received position update.
111     *
112     * @param positionInfo Geo position info.
113     */
114     void positionUpdated(const QGeoPositionInfo &positionInfo);
115
116     /**
117     * @brief Slot for update timeout.
118     *
119     * Called when request timeout occurs.
120     */
121     void updateTimeout();
122
123 /*******************************************************************************
124  * DATA MEMBERS
125  ******************************************************************************/
126 private:
127     QGeoPositionInfoSource *m_gpsSource;        ///< GPS position info source
128     GPSPosition *m_parent;                      ///< Parent object
129     bool m_running;                             ///< GPS is running
130     int m_updateInterval;                       ///< GPS update interval
131 };
132
133 const int DEFAULT_UPDATE_INTERVAL = 5000;       ///< Default update interval
134
135 #endif // GPSPOSITIONPRIVATE_H