9#include <QtCore/QObject>
10#include <QtCore/QPointer>
11#include <QtPositioning/QGeoCoordinate>
12#include <QtPositioning/QGeoPositionInfoSource>
13#include <QtQmlIntegration/QtQmlIntegration>
30 QML_UNCREATABLE(
"Created by QGroundControl")
73 using
SourceFactory = std::function<QGeoPositionInfoSource*(QObject* parent)>;
117 QGeoCoordinate
gcsPosition()
const {
return _published.position; }
125 std::optional<std::chrono::milliseconds> maximumAge = std::nullopt)
const;
138 QGeoCoordinate position;
139 qreal heading = qQNaN();
140 qreal horizontalAccuracy = std::numeric_limits<qreal>::infinity();
147 void _retireReceiver(quint64 token);
148 void _releaseDevice();
149 void _setDeviceActive(
bool active);
150 void _devicePositionUpdated(
const QGeoPositionInfo& position);
151 void _deviceErrorOccurred(QGeoPositionInfoSource::Error
error);
157 void _updateStatus();
159 void _setPositioningError(QGeoPositionInfoSource::Error
error);
160 std::optional<GPSObservation> _accepted(
162 std::optional<std::chrono::milliseconds> maximumAge = std::nullopt)
const;
163 void _setupPositionSources();
164 void _handlePermissionStatus(Qt::PermissionStatus permissionStatus);
165 void _checkPermission();
169 std::optional<qint64> _receiverUsableSinceMs;
171 QPointer<GPSSourceHealth> _receiver;
172 quint64 _receiverSession = 0;
173 quint64 _receiverToken = 0;
175 QPointer<QGeoPositionInfoSource> _device;
177 bool _deviceActive =
false;
178 bool _usingPluginSource =
false;
182 Configuration _configuration;
184 QPointer<GPSSourceHealth> _currentHealth;
185 bool _reselect =
false;
186 quint64 _selectionRevision = 0;
187 bool _authorized =
false;
191 QGeoPositionInfoSource::Error _gcsPositioningError = QGeoPositionInfoSource::NoError;
192 Publication _published;
204 Publication publication;
208 bool _shutdown =
false;
std::shared_ptr< const void > GPSPositionSourceRegistration
Session health is independent of transport readiness and RTK survey-in validity.
void setInternalPositionSource(QGeoPositionInfoSource *source, SourceStatus status, bool custom=false, GPSAltitudeDatum altitudeDatum=GPSAltitudeDatum::Unknown)
QString sourceStatusText() const
qreal gcsPositionHorizontalAccuracy() const
~PositionManager() override
void gcsPositionChanged(QGeoCoordinate gcsPosition)
void gcsPositionHorizontalAccuracyChanged(qreal gcsPositionHorizontalAccuracy)
void shutdown()
Releases the position sources and ignores later configuration; init() does not restart them.
std::optional< GPSObservation > acceptedObservation(GPSObservation::PositionUse use=GPSObservation::PositionUse::GroundStation, std::optional< std::chrono::milliseconds > maximumAge=std::nullopt) const
void setConfiguration(const Configuration &configuration)
Ignored after shutdown().
SourceStatus sourceStatus() const
SelectedSource selectedSource() const
static constexpr std::chrono::milliseconds RECOVERY_DELAY
SourceMode
Values of RTKSettings::gcsPositionSource.
friend class PositionManagerTest
void gcsHeadingChanged(qreal gcsHeading)
GPSPositionSourceRegistration registerReceiver(GPSSourceHealth *producer, quint64 sessionId=0)
std::function< QGeoPositionInfoSource *(QObject *parent)> SourceFactory
Creates a position source parented to parent, or returns null.
QGeoPositionInfoSource::Error gcsPositioningError() const
QGeoCoordinate gcsPosition() const
const Configuration & configuration() const
void setPlatformSourceFactory(SourceFactory factory)
QString selectedSourceName() const
bool operator==(const Configuration &) const =default
bool operator==(const Selection &) const =default