blob: b874b7bd829e4eb80a5349ecd862c4afc807b5a7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
#ifndef NMEASOURCE_H
#define NMEASOURCE_H
#include <QtCore/QObject>
#include <QtCore/QString>
#include <QtPositioning/QGeoPositionInfo>
#include <QtPositioning/QGeoPositionInfoSource>
#include <QtPositioning/QGeoSatelliteInfoSource>
class NmeaSource : public QObject
{
Q_OBJECT
public:
explicit NmeaSource(QObject *parent = 0);
~NmeaSource();
signals:
void dataReady(const QString& data);
public slots:
void start();
void stop();
protected:
static const double H_UERE = 15.0;
static const double V_UERE = 23.0;
static const double P_UERE = 19.0;
enum PositionAccuracyDirection {
Spherical,
Horizontal,
Vertical
};
static QString formatFixMode(const QGeoCoordinate& coord);
static QString formatTimestamp(const QTime& time);
static QString formatDatestamp(const QDate& date);
static QString formatLatitude(const QGeoCoordinate& coord);
static QString formatLatitudeNS(const QGeoCoordinate& coord);
static QString formatLongitude(const QGeoCoordinate& coord);
static QString formatLongitudeEW(const QGeoCoordinate& coord);
static QString formatAltitude(const QGeoCoordinate& coord);
static QString formatAltitudeUnits(const QGeoCoordinate& coord);
static QString formatSpeedKnots(const QGeoPositionInfo& pos);
static QString formatSpeedKmH(const QGeoPositionInfo& pos);
static QString formatTrueCourse(const QGeoPositionInfo& pos);
static QString formatMagCourse(const QGeoPositionInfo& pos);
static QString formatMagVariation(const QGeoPositionInfo& pos);
static QString formatMagVariationEW(const QGeoPositionInfo& pos);
static QString formatHDOP(const QGeoPositionInfo& pos);
static QString formatVDOP(const QGeoPositionInfo& pos);
static QString formatPDOP(const QGeoPositionInfo& pos);
static QString formatError(const QGeoPositionInfo& pos,
PositionAccuracyDirection which = Spherical);
static QString formatErrorUnits(const QGeoPositionInfo& pos,
PositionAccuracyDirection which = Spherical);
static QString formatSatPrn(const QGeoSatelliteInfo& sat);
static QString formatSatElev(const QGeoSatelliteInfo& sat);
static QString formatSatAz(const QGeoSatelliteInfo& sat);
static QString formatSatSnr(const QGeoSatelliteInfo& sat);
void emitSentence(const QString& sentence);
void generateGPRMC(const QGeoPositionInfo& pos);
void generateGPGGA(const QGeoPositionInfo& pos);
void generateGPGLL(const QGeoPositionInfo& pos);
void generateGPVTG(const QGeoPositionInfo& pos);
void generatePGRME(const QGeoPositionInfo& pos);
void generateGPGSA(const QGeoPositionInfo& pos, const QList<QGeoSatelliteInfo>& info);
void generateGPGSV(const QGeoPositionInfo& pos, const QList<QGeoSatelliteInfo>& info);
protected slots:
void handlePosition(const QGeoPositionInfo& pos);
void handleSatsInUse(const QList<QGeoSatelliteInfo>& info);
void handleSatsInView(const QList<QGeoSatelliteInfo>& info);
private:
QGeoPositionInfoSource *m_possrc;
QGeoSatelliteInfoSource *m_satsrc;
QGeoPositionInfo m_last_pos;
int m_last_satsinview;
};
#endif // NMEASOURCE_H
|