QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
GPSProvider.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QByteArray>
4#include <QtCore/QLoggingCategory>
5#include <QtCore/QMetaType>
6#include <QtCore/QObject>
7#include <QtCore/QString>
8#include <QtCore/QThread>
9
10#include <gps_helper.h>
12
13#include "satellite_info.h"
15#include "sensor_gps.h"
16
17Q_DECLARE_LOGGING_CATEGORY(GPSProviderLog)
18
19class QSerialPort;
20class GPSBaseStationSupport;
21
22class GPSProvider : public QThread
23{
24 Q_OBJECT
25
26public:
27 enum class GPSType {
28 u_blox,
29 trimble,
31 femto
32 };
33
43
44 GPSProvider(const QString &device, GPSType type, const rtk_data_s &rtkData, const std::atomic_bool &requestStop, QObject *parent = nullptr);
46
47 int callback(GPSCallbackType type, void *data1, int data2);
48
49signals:
52 void sensorGpsUpdate(const sensor_gps_s &message);
53 void RTCMDataUpdate(const QByteArray &message);
54 void surveyInStatus(float duration, float accuracyMM, double latitude, double longitude, float altitude, bool valid, bool active);
55
56private:
57 void run() final;
58
59 bool _connectSerial();
60 GPSBaseStationSupport *_connectGPS();
61 void _publishSensorGPS();
62 void _publishSatelliteInfo();
63 void _publishSensorGNSSRelative();
64
65 void _gotRTCMData(const uint8_t *data, size_t len);
66 void _sendRTCMData();
67
68 static int _callbackEntry(GPSCallbackType type, void *data1, int data2, void *user);
69
70 QString _device;
71 GPSType _type;
72 const std::atomic_bool &_requestStop;
73 rtk_data_s _rtkData{};
74 GPSHelper::GPSConfig _gpsConfig{};
75
76 struct satellite_info_s _satelliteInfo{};
77 struct sensor_gnss_relative_s _sensorGnssRelative{};
78 struct sensor_gps_s _sensorGps{};
79
80 QSerialPort *_serial = nullptr;
81
82 enum GPSReceiveType {
83 Position = 1,
84 Satellite = 2
85 };
86
87 static constexpr uint32_t kGPSReceiveTimeout = 1200;
88 static constexpr float kGPSHeadingOffset = 5.f;
89};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
void RTCMDataUpdate(const QByteArray &message)
void sensorGnssRelativeUpdate(const sensor_gnss_relative_s &message)
int callback(GPSCallbackType type, void *data1, int data2)
void sensorGpsUpdate(const sensor_gps_s &message)
void satelliteInfoUpdate(const satellite_info_s &message)
void surveyInStatus(float duration, float accuracyMM, double latitude, double longitude, float altitude, bool valid, bool active)
Provides functions to access serial ports.
Definition qserialport.h:17
BaseModeDefinition::Mode useFixedBaseLocation
Definition GPSProvider.h:37