QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
PositionManager Class Reference

#include <PositionManager.h>

+ Inheritance diagram for PositionManager:
+ Collaboration diagram for PositionManager:

Classes

struct  Configuration
 

Public Types

enum class  SourceMode { Automatic = 0 , ReceiverOnly = 1 , InternalOnly = 2 }
 Values of RTKSettings::gcsPositionSource. More...
 
enum class  SelectedSource { None , Receiver , Internal }
 
enum class  SourceStatus {
  NoSource , PermissionRequired , PermissionDenied , BackendUnavailable ,
  WaitingForFix , Active , Stale , InvalidFix
}
 
using SourceFactory = std::function< QGeoPositionInfoSource *(QObject *parent)>
 Creates a position source parented to parent, or returns null.
 

Signals

void selectionChanged ()
 
void gcsPositionChanged (QGeoCoordinate gcsPosition)
 
void gcsHeadingChanged (qreal gcsHeading)
 
void gcsPositionHorizontalAccuracyChanged (qreal gcsPositionHorizontalAccuracy)
 

Public Member Functions

 PositionManager (QObject *parent=nullptr, RuntimeScheduler *scheduler=nullptr)
 
 ~PositionManager () override
 
void setConfiguration (const Configuration &configuration)
 Ignored after shutdown().
 
const Configuration & configuration () const
 
void setPlatformSourceFactory (SourceFactory factory)
 
void init ()
 
void shutdown ()
 Releases the position sources and ignores later configuration; init() does not restart them.
 
SelectedSource selectedSource () const
 
QString selectedSourceName () const
 
SourceStatus sourceStatus () const
 
QString sourceStatusText () const
 
void setInternalPositionSource (QGeoPositionInfoSource *source, SourceStatus status, bool custom=false, GPSAltitudeDatum altitudeDatum=GPSAltitudeDatum::Unknown)
 
GPSPositionSourceRegistration registerReceiver (GPSSourceHealth *producer, quint64 sessionId=0)
 
QGeoCoordinate gcsPosition () const
 
qreal gcsHeading () const
 
qreal gcsPositionHorizontalAccuracy () const
 
std::optional< GPSObservation > acceptedObservation (GPSObservation::PositionUse use=GPSObservation::PositionUse::GroundStation, std::optional< std::chrono::milliseconds > maximumAge=std::nullopt) const
 
QGeoPositionInfoSource::Error gcsPositioningError () const
 

Static Public Attributes

static constexpr std::chrono::milliseconds RECOVERY_DELAY {5000}
 

Friends

class PositionManagerTest
 

Detailed Description

Chooses the ground-station position between a GNSS receiver and this device's position source, and publishes it. Automatic mode prefers a usable receiver, returning to it only after it has stayed usable for RECOVERY_DELAY; the pinned modes publish only observations made after the selection. init() requests location permission and binds the platform source; tests bind their own with setInternalPositionSource() instead. Use from the manager's thread only.

Definition at line 26 of file PositionManager.h.

Member Typedef Documentation

◆ SourceFactory

using PositionManager::SourceFactory = std::function<QGeoPositionInfoSource*(QObject* parent)>

Creates a position source parented to parent, or returns null.

Definition at line 73 of file PositionManager.h.

Member Enumeration Documentation

◆ SelectedSource

Enumerator
None 
Receiver 
Internal 

Definition at line 51 of file PositionManager.h.

◆ SourceMode

enum class PositionManager::SourceMode
strong

Values of RTKSettings::gcsPositionSource.

Enumerator
Automatic 
ReceiverOnly 
InternalOnly 

Definition at line 43 of file PositionManager.h.

◆ SourceStatus

enum class PositionManager::SourceStatus
strong
Enumerator
NoSource 
PermissionRequired 
PermissionDenied 
BackendUnavailable 
WaitingForFix 
Active 
Stale 
InvalidFix 

Definition at line 59 of file PositionManager.h.

Constructor & Destructor Documentation

◆ PositionManager()

PositionManager::PositionManager ( QObject *  parent = nullptr,
RuntimeScheduler *  scheduler = nullptr 
)
explicit

Definition at line 32 of file PositionManager.cc.

References Internal, and GPSSourceHealth::positionChanged().

◆ ~PositionManager()

PositionManager::~PositionManager ( )
override

Definition at line 42 of file PositionManager.cc.

Member Function Documentation

◆ acceptedObservation()

std::optional< GPSObservation > PositionManager::acceptedObservation ( GPSObservation::PositionUse  use = GPSObservation::PositionUse::GroundStation,
std::optional< std::chrono::milliseconds >  maximumAge = std::nullopt 
) const

Definition at line 428 of file PositionManager.cc.

◆ configuration()

const Configuration & PositionManager::configuration ( ) const
inline

Definition at line 89 of file PositionManager.h.

Referenced by setConfiguration().

◆ gcsHeading()

qreal PositionManager::gcsHeading ( ) const
inline

Definition at line 119 of file PositionManager.h.

◆ gcsHeadingChanged

void PositionManager::gcsHeadingChanged ( qreal  gcsHeading)
signal

◆ gcsPosition()

QGeoCoordinate PositionManager::gcsPosition ( ) const
inline

Definition at line 117 of file PositionManager.h.

◆ gcsPositionChanged

void PositionManager::gcsPositionChanged ( QGeoCoordinate  gcsPosition)
signal

◆ gcsPositionHorizontalAccuracy()

qreal PositionManager::gcsPositionHorizontalAccuracy ( ) const
inline

Definition at line 121 of file PositionManager.h.

◆ gcsPositionHorizontalAccuracyChanged

void PositionManager::gcsPositionHorizontalAccuracyChanged ( qreal  gcsPositionHorizontalAccuracy)
signal

◆ gcsPositioningError()

QGeoPositionInfoSource::Error PositionManager::gcsPositioningError ( ) const
inline

Definition at line 127 of file PositionManager.h.

◆ init()

void PositionManager::init ( )

Definition at line 73 of file PositionManager.cc.

Referenced by GPSManager::init().

◆ registerReceiver()

GPSPositionSourceRegistration PositionManager::registerReceiver ( GPSSourceHealth *  producer,
quint64  sessionId = 0 
)

The receiver publishes observations through producer and runs independently of selection; its observations must carry sessionId when it is nonzero. The binding lasts until the registration is reset.

Definition at line 163 of file PositionManager.cc.

Referenced by GPSReceiverSession::registerPosition().

◆ selectedSource()

SelectedSource PositionManager::selectedSource ( ) const
inline

Definition at line 99 of file PositionManager.h.

◆ selectedSourceName()

QString PositionManager::selectedSourceName ( ) const

Definition at line 459 of file PositionManager.cc.

References Internal, None, and Receiver.

◆ selectionChanged

void PositionManager::selectionChanged ( )
signal

◆ setConfiguration()

void PositionManager::setConfiguration ( const Configuration &  configuration)

◆ setInternalPositionSource()

void PositionManager::setInternalPositionSource ( QGeoPositionInfoSource *  source,
SourceStatus  status,
bool  custom = false,
GPSAltitudeDatum  altitudeDatum = GPSAltitudeDatum::Unknown 
)

Borrows this device's position source, which runs unless the mode is ReceiverOnly. The application owns permission requests and source creation; custom marks a plugin-provided source. altitudeDatum is the datum of the source's altitudes, applied to fixes that report their vertical accuracy.

Definition at line 133 of file PositionManager.cc.

References Internal, ReceiverOnly, and PositionManager::Configuration::sourceMode.

Referenced by shutdown().

◆ setPlatformSourceFactory()

void PositionManager::setPlatformSourceFactory ( SourceFactory  factory)

Creates the platform source once location permission is granted; without a factory, or when it returns null, Qt's default source is used.

Definition at line 68 of file PositionManager.cc.

◆ shutdown()

void PositionManager::shutdown ( )

Releases the position sources and ignores later configuration; init() does not restart them.

Definition at line 81 of file PositionManager.cc.

References NoSource, and setInternalPositionSource().

Referenced by GPSManager::shutdown().

◆ sourceStatus()

SourceStatus PositionManager::sourceStatus ( ) const
inline

Definition at line 103 of file PositionManager.h.

◆ sourceStatusText()

QString PositionManager::sourceStatusText ( ) const

Friends And Related Symbol Documentation

◆ PositionManagerTest

friend class PositionManagerTest
friend

Definition at line 39 of file PositionManager.h.

Member Data Documentation

◆ RECOVERY_DELAY

constexpr std::chrono::milliseconds PositionManager::RECOVERY_DELAY {5000}
staticconstexpr

Definition at line 81 of file PositionManager.h.


The documentation for this class was generated from the following files: