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/QMetaType>
5#include <QtCore/QObject>
6#include <QtCore/QString>
7#include <QtCore/QThread>
8
9#include <gps_helper.h>
11
12#include "satellite_info.h"
14#include "sensor_gps.h"
15
16class QSerialPort;
17class GPSBaseStationSupport;
18
19class GPSProvider : public QThread
20{
21 Q_OBJECT
22
23public:
24 enum class GPSType {
25 u_blox,
26 trimble,
28 femto
29 };
30
40
41 GPSProvider(const QString &device, GPSType type, const rtk_data_s &rtkData, const std::atomic_bool &requestStop, QObject *parent = nullptr);
43
44 int callback(GPSCallbackType type, void *data1, int data2);
45
46signals:
49 void sensorGpsUpdate(const sensor_gps_s &message);
50 void RTCMDataUpdate(const QByteArray &message);
51 void surveyInStatus(float duration, float accuracyMM, double latitude, double longitude, float altitude, bool valid, bool active);
52
53private:
54 void run() final;
55
56 bool _connectSerial();
57 GPSBaseStationSupport *_connectGPS();
58 void _publishSensorGPS();
59 void _publishSatelliteInfo();
60 void _publishSensorGNSSRelative();
61
62 void _gotRTCMData(const uint8_t *data, size_t len);
63 void _sendRTCMData();
64
65 static int _callbackEntry(GPSCallbackType type, void *data1, int data2, void *user);
66
67 QString _device;
68 GPSType _type;
69 const std::atomic_bool &_requestStop;
70 rtk_data_s _rtkData{};
71 GPSHelper::GPSConfig _gpsConfig{};
72
73 struct satellite_info_s _satelliteInfo{};
74 struct sensor_gnss_relative_s _sensorGnssRelative{};
75 struct sensor_gps_s _sensorGps{};
76
77 QSerialPort *_serial = nullptr;
78
79 enum GPSReceiveType {
80 Position = 1,
81 Satellite = 2
82 };
83
84 static constexpr uint32_t kGPSReceiveTimeout = 1200;
85 static constexpr float kGPSHeadingOffset = 5.f;
86};
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:34