3#include <QtCore/QApplicationStatic>
4#include <QtCore/QPointer>
21#ifndef QGC_NO_SERIAL_LINK
34#ifndef QGC_NO_SERIAL_LINK
47 , _receiver(new
GPSReceiver(this, _scheduler, receiverDependencies(_corrections, _positionManager)))
52 qCDebug(GPSManagerLog) <<
this;
53 _positionManager->setPlatformSourceFactory(
57 _scheduler->setParent(
this);
64 qCDebug(GPSManagerLog) <<
this;
79 _receiver->
facts()->_setCurrentBasePositionSaved(
true);
81 settings->fixedBasePositionLatitude()->setRawValue(base->position.latitudeDegrees);
82 settings->fixedBasePositionLongitude()->setRawValue(base->position.longitudeDegrees);
83 settings->fixedBasePositionAltitude()->setRawValue(base->position.altitudeMeters);
84 settings->fixedBasePositionAccuracy()->setRawValue(base->accuracyMeters);
90 if (_initialized || _shutdown) {
95 _positionManager->
init();
100 _ntripManager->
init();
110 qCDebug(GPSManagerLog) <<
"Shutting down GPS sources and correction outputs";
117void GPSManager::_initGgaSources()
120 using Observation = std::optional<GPSObservation>;
121 _vehicleGga->
attach(_ntripManager);
123 Source::RTKReceiver, [
receiver = QPointer<GPSReceiver>(_receiver)]() -> Observation {
127 Source::GCSPosition, [
positionManager = QPointer<PositionManager>(_positionManager)]() -> Observation {
Q_APPLICATION_STATIC(GPSManager, _gpsManager)
#define QGC_LOGGING_CATEGORY(name, categoryStr)
void shutdown()
Stops the GPS services, then the position manager.
Q_INVOKABLE bool saveCurrentBasePosition()
static GPSManager * instance()
GPSManager(QObject *parent=nullptr, RuntimeScheduler *scheduler=nullptr)
scheduler runs the timers of every GPS service; the manager creates one when none is given.
PositionManager * positionManager() const
GPSReceiver * receiver() const
std::optional< GPSBaseStationConfig::Fixed > currentBasePosition() const
void startConnectionPolling(std::function< bool()> suspended={})
Runs tick() every POLL_INTERVAL until shutdown(), skipping ticks while suspended returns true.
GPSReceiverFactGroup * facts() const
The receiver's reported state; with no receiver, every Fact is at its metadata default.
std::optional< GPSObservation > acceptedPositionObservation(GPSObservation::PositionUse use) const
Latest receiver solution that passes the consumer's gates; empty without a fresh fix.
static void bindReceiver(RTKSettings *settings, GPSReceiver *receiver)
static void bindPosition(RTKSettings *settings, PositionManager *positions)
static void bindCorrections(GPSCorrectionSettings *settings, GPSCorrectionManager *corrections)
Applies the correction settings to corrections now and whenever they change.
static void bindNtrip(NTRIPSettings *settings, NTRIPManager *ntrip)
bool connectionsSuspended() const
static LinkManager * instance()
void setGgaPositionProvider(NTRIPGgaReporter::PositionSource source, NTRIPGgaReporter::PositionProvider provider)
void init()
Applies the configuration; call once the position providers are installed.
void shutdown()
Permanently retire this manager, including deferred settings work.
void attach(NTRIPManager *ntrip)
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
virtual QGeoPositionInfoSource * createPositionSource(QObject *parent)
static QGCCorePlugin * instance()
static SerialPortManager * instance()
RTKSettings * rtkSettings() const
static SettingsManager * instance()
Services a GPSReceiver uses, which must outlive it.
GPSCorrectionManager * corrections
Receives a forwarding receiver's RTCM output as the local correction source.