QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
NTRIPSourceTable.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QObject>
4#include <QtNetwork/QNetworkReply>
5#include <QtPositioning/QGeoCoordinate>
6
8class QNetworkAccessManager;
9
10class NTRIPMountpointModel : public QObject
11{
12 Q_OBJECT
13 Q_PROPERTY(QString mountpoint READ mountpoint CONSTANT)
14 Q_PROPERTY(QString identifier READ identifier CONSTANT)
15 Q_PROPERTY(QString format READ format CONSTANT)
16 Q_PROPERTY(QString formatDetails READ formatDetails CONSTANT)
17 Q_PROPERTY(int carrier READ carrier CONSTANT)
18 Q_PROPERTY(QString navSystem READ navSystem CONSTANT)
19 Q_PROPERTY(QString network READ network CONSTANT)
20 Q_PROPERTY(QString country READ country CONSTANT)
21 Q_PROPERTY(double latitude READ latitude CONSTANT)
22 Q_PROPERTY(double longitude READ longitude CONSTANT)
23 Q_PROPERTY(bool nmea READ nmea CONSTANT)
24 Q_PROPERTY(bool solution READ solution CONSTANT)
25 Q_PROPERTY(QString generator READ generator CONSTANT)
26 Q_PROPERTY(QString compression READ compression CONSTANT)
27 Q_PROPERTY(QString authentication READ authentication CONSTANT)
28 Q_PROPERTY(bool fee READ fee CONSTANT)
29 Q_PROPERTY(int bitrate READ bitrate CONSTANT)
30 Q_PROPERTY(double distanceKm READ distanceKm NOTIFY distanceKmChanged)
31
32public:
33 explicit NTRIPMountpointModel(QObject* parent = nullptr) : QObject(parent) {}
34
35 QString mountpoint() const { return _mountpoint; }
36 QString identifier() const { return _identifier; }
37 QString format() const { return _format; }
38 QString formatDetails() const { return _formatDetails; }
39 int carrier() const { return _carrier; }
40 QString navSystem() const { return _navSystem; }
41 QString network() const { return _network; }
42 QString country() const { return _country; }
43 double latitude() const { return _latitude; }
44 double longitude() const { return _longitude; }
45 bool nmea() const { return _nmea; }
46 bool solution() const { return _solution; }
47 QString generator() const { return _generator; }
48 QString compression() const { return _compression; }
49 QString authentication() const { return _authentication; }
50 bool fee() const { return _fee; }
51 int bitrate() const { return _bitrate; }
52 double distanceKm() const { return _distanceKm; }
53
54 static NTRIPMountpointModel* fromSourceTableLine(const QString& line, QObject* parent = nullptr);
55 void updateDistance(const QGeoCoordinate& from);
56
57signals:
59
60private:
61 QString _mountpoint;
62 QString _identifier;
63 QString _format;
64 QString _formatDetails;
65 int _carrier = 0;
66 QString _navSystem;
67 QString _network;
68 QString _country;
69 double _latitude = 0.0;
70 double _longitude = 0.0;
71 bool _nmea = false;
72 bool _solution = false;
73 QString _generator;
74 QString _compression;
75 QString _authentication;
76 bool _fee = false;
77 int _bitrate = 0;
78 double _distanceKm = -1.0;
79};
80
81// ---------------------------------------------------------------------------
82// NTRIPSourceTableModel
83// ---------------------------------------------------------------------------
84
85class NTRIPSourceTableModel : public QObject
86{
87 Q_OBJECT
88 Q_PROPERTY(QmlObjectListModel* mountpoints READ mountpoints CONSTANT)
89 Q_PROPERTY(int count READ count NOTIFY countChanged)
90
91public:
92 explicit NTRIPSourceTableModel(QObject* parent = nullptr);
93
94 QmlObjectListModel* mountpoints() const { return _mountpoints; }
95 int count() const;
96
97 void parseSourceTable(const QString& raw);
98 void updateDistances(const QGeoCoordinate& from);
99 void sortByDistance();
100 void clear();
101
102signals:
104
105private:
106 QmlObjectListModel* _mountpoints = nullptr;
107};
108
109// ---------------------------------------------------------------------------
110// NTRIPSourceTableFetcher
111// ---------------------------------------------------------------------------
112
113class NTRIPSourceTableFetcher : public QObject
114{
115 Q_OBJECT
116
117public:
118 static constexpr int kFetchTimeoutMs = 10000;
119
120 NTRIPSourceTableFetcher(const QString& host, int port,
121 const QString& username, const QString& password,
122 bool useTls = false,
123 QObject* parent = nullptr);
124 ~NTRIPSourceTableFetcher() override = default;
125
126 void fetch();
127
128signals:
129 void sourceTableReceived(const QString& table);
130 void error(const QString& errorMsg);
131 void finished();
132
133private:
134 void _onReplyFinished();
135
136 QNetworkAccessManager* _networkManager = nullptr;
137 QNetworkReply* _reply = nullptr;
138 QString _host;
139 int _port;
140 QString _username;
141 QString _password;
142 bool _useTls = false;
143};
void error(const QString &errorMsg)
static constexpr int kFetchTimeoutMs
void sourceTableReceived(const QString &table)
~NTRIPSourceTableFetcher() override=default