Commit b3c506ed authored by Gus Grubba's avatar Gus Grubba

Flight Plan WIP

Moved flight planning away from "Flight Management" to its own class. Planning does not need a connected vehicle.
parent 719189e9
...@@ -1080,7 +1080,7 @@ contains (DEFINES, QGC_AIRMAP_ENABLED) { ...@@ -1080,7 +1080,7 @@ contains (DEFINES, QGC_AIRMAP_ENABLED) {
HEADERS += \ HEADERS += \
src/AirspaceManagement/AirspaceAdvisoryProvider.h \ src/AirspaceManagement/AirspaceAdvisoryProvider.h \
src/AirspaceManagement/AirspaceAuthorization.h \ src/AirspaceManagement/AirspaceFlightPlanProvider.h \
src/AirspaceManagement/AirspaceManager.h \ src/AirspaceManagement/AirspaceManager.h \
src/AirspaceManagement/AirspaceRestriction.h \ src/AirspaceManagement/AirspaceRestriction.h \
src/AirspaceManagement/AirspaceRestrictionProvider.h \ src/AirspaceManagement/AirspaceRestrictionProvider.h \
...@@ -1090,6 +1090,7 @@ contains (DEFINES, QGC_AIRMAP_ENABLED) { ...@@ -1090,6 +1090,7 @@ contains (DEFINES, QGC_AIRMAP_ENABLED) {
SOURCES += \ SOURCES += \
src/AirspaceManagement/AirspaceAdvisoryProvider.cc \ src/AirspaceManagement/AirspaceAdvisoryProvider.cc \
src/AirspaceManagement/AirspaceFlightPlanProvider.cc \
src/AirspaceManagement/AirspaceManager.cc \ src/AirspaceManagement/AirspaceManager.cc \
src/AirspaceManagement/AirspaceRestriction.cc \ src/AirspaceManagement/AirspaceRestriction.cc \
src/AirspaceManagement/AirspaceRestrictionProvider.cc \ src/AirspaceManagement/AirspaceRestrictionProvider.cc \
...@@ -1107,6 +1108,7 @@ contains (DEFINES, QGC_AIRMAP_ENABLED) { ...@@ -1107,6 +1108,7 @@ contains (DEFINES, QGC_AIRMAP_ENABLED) {
HEADERS += \ HEADERS += \
src/Airmap/AirMapAdvisoryManager.h \ src/Airmap/AirMapAdvisoryManager.h \
src/Airmap/AirMapFlightManager.h \ src/Airmap/AirMapFlightManager.h \
src/Airmap/AirMapFlightPlanManager.h \
src/Airmap/AirMapManager.h \ src/Airmap/AirMapManager.h \
src/Airmap/AirMapRestrictionManager.h \ src/Airmap/AirMapRestrictionManager.h \
src/Airmap/AirMapRulesetsManager.h \ src/Airmap/AirMapRulesetsManager.h \
...@@ -1121,6 +1123,7 @@ contains (DEFINES, QGC_AIRMAP_ENABLED) { ...@@ -1121,6 +1123,7 @@ contains (DEFINES, QGC_AIRMAP_ENABLED) {
SOURCES += \ SOURCES += \
src/Airmap/AirMapAdvisoryManager.cc \ src/Airmap/AirMapAdvisoryManager.cc \
src/Airmap/AirMapFlightManager.cc \ src/Airmap/AirMapFlightManager.cc \
src/Airmap/AirMapFlightPlanManager.cc \
src/Airmap/AirMapManager.cc \ src/Airmap/AirMapManager.cc \
src/Airmap/AirMapRestrictionManager.cc \ src/Airmap/AirMapRestrictionManager.cc \
src/Airmap/AirMapRulesetsManager.cc \ src/Airmap/AirMapRulesetsManager.cc \
......
...@@ -94,7 +94,7 @@ void AirMapFlightManager::createFlight(const QList<MissionItem*>& missionItems) ...@@ -94,7 +94,7 @@ void AirMapFlightManager::createFlight(const QList<MissionItem*>& missionItems)
qCDebug(AirMapManagerLog) << "Got Pilot ID:"<<_pilotID; qCDebug(AirMapManagerLog) << "Got Pilot ID:"<<_pilotID;
_uploadFlight(); _uploadFlight();
} else { } else {
_flightPermitStatus = AirspaceAuthorization::PermitUnknown; _flightPermitStatus = AirspaceFlightPlanProvider::PermitUnknown;
emit flightPermitStatusChanged(); emit flightPermitStatusChanged();
_state = State::Idle; _state = State::Idle;
...@@ -108,7 +108,7 @@ void AirMapFlightManager::createFlight(const QList<MissionItem*>& missionItems) ...@@ -108,7 +108,7 @@ void AirMapFlightManager::createFlight(const QList<MissionItem*>& missionItems)
_uploadFlight(); _uploadFlight();
} }
_flightPermitStatus = AirspaceAuthorization::PermitPending; _flightPermitStatus = AirspaceFlightPlanProvider::PermitPending;
emit flightPermitStatusChanged(); emit flightPermitStatusChanged();
} }
...@@ -252,7 +252,7 @@ void AirMapFlightManager::_checkForValidBriefing() ...@@ -252,7 +252,7 @@ void AirMapFlightManager::_checkForValidBriefing()
if (allValid) { if (allValid) {
_submitPendingFlightPlan(); _submitPendingFlightPlan();
} else { } else {
_flightPermitStatus = AirspaceAuthorization::PermitRejected; _flightPermitStatus = AirspaceFlightPlanProvider::PermitRejected;
emit flightPermitStatusChanged(); emit flightPermitStatusChanged();
_state = State::Idle; _state = State::Idle;
} }
...@@ -337,9 +337,9 @@ void AirMapFlightManager::_pollBriefing() ...@@ -337,9 +337,9 @@ void AirMapFlightManager::_pollBriefing()
if ((rejected || accepted) && !pending) { if ((rejected || accepted) && !pending) {
if (rejected) { // rejected has priority if (rejected) { // rejected has priority
_flightPermitStatus = AirspaceAuthorization::PermitRejected; _flightPermitStatus = AirspaceFlightPlanProvider::PermitRejected;
} else { } else {
_flightPermitStatus = AirspaceAuthorization::PermitAccepted; _flightPermitStatus = AirspaceFlightPlanProvider::PermitAccepted;
} }
_currentFlightId = _pendingFlightId; _currentFlightId = _pendingFlightId;
_pendingFlightPlan = ""; _pendingFlightPlan = "";
...@@ -370,7 +370,7 @@ void AirMapFlightManager::endFlight() ...@@ -370,7 +370,7 @@ void AirMapFlightManager::endFlight()
} }
_endFlight(_currentFlightId); _endFlight(_currentFlightId);
_flightPermitStatus = AirspaceAuthorization::PermitUnknown; _flightPermitStatus = AirspaceFlightPlanProvider::PermitUnknown;
emit flightPermitStatusChanged(); emit flightPermitStatusChanged();
} }
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include "LifetimeChecker.h" #include "LifetimeChecker.h"
#include "AirMapSharedState.h" #include "AirMapSharedState.h"
#include "AirspaceAuthorization.h" #include "AirspaceFlightPlanProvider.h"
#include <QObject> #include <QObject>
#include <QTimer> #include <QTimer>
...@@ -31,7 +31,7 @@ public: ...@@ -31,7 +31,7 @@ public:
/// Send flight path to AirMap /// Send flight path to AirMap
void createFlight(const QList<MissionItem*>& missionItems); void createFlight(const QList<MissionItem*>& missionItems);
AirspaceAuthorization::PermitStatus flightPermitStatus() const { return _flightPermitStatus; } AirspaceFlightPlanProvider::PermitStatus flightPermitStatus() const { return _flightPermitStatus; }
const QString& flightID() const { return _currentFlightId; } const QString& flightID() const { return _currentFlightId; }
...@@ -96,7 +96,7 @@ private: ...@@ -96,7 +96,7 @@ private:
QString _currentFlightId; ///< Flight ID, empty if there is none QString _currentFlightId; ///< Flight ID, empty if there is none
QString _pendingFlightId; ///< current flight ID, not necessarily accepted yet (once accepted, it's equal to _currentFlightId) QString _pendingFlightId; ///< current flight ID, not necessarily accepted yet (once accepted, it's equal to _currentFlightId)
QString _pendingFlightPlan; ///< current flight plan, waiting to be submitted QString _pendingFlightPlan; ///< current flight plan, waiting to be submitted
AirspaceAuthorization::PermitStatus _flightPermitStatus = AirspaceAuthorization::PermitUnknown; AirspaceFlightPlanProvider::PermitStatus _flightPermitStatus = AirspaceFlightPlanProvider::PermitUnknown;
QString _pilotID; ///< Pilot ID in the form "auth0|abc123" QString _pilotID; ///< Pilot ID in the form "auth0|abc123"
bool _noFlightCreatedYet = true; bool _noFlightCreatedYet = true;
QTimer _pollTimer; ///< timer to poll for approval check QTimer _pollTimer; ///< timer to poll for approval check
......
This diff is collapsed.
/****************************************************************************
*
* (c) 2017 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once
#include "LifetimeChecker.h"
#include "AirMapSharedState.h"
#include "AirspaceFlightPlanProvider.h"
#include <QObject>
#include <QTimer>
#include <QList>
#include <QGeoCoordinate>
//-----------------------------------------------------------------------------
/// class to upload a flight
class AirMapFlightPlanManager : public AirspaceFlightPlanProvider, public LifetimeChecker
{
Q_OBJECT
public:
AirMapFlightPlanManager(AirMapSharedState& shared, QObject *parent = nullptr);
PermitStatus flightPermitStatus () const override { return _flightPermitStatus; }
void createFlight (MissionController* missionController) override;
QString flightID () { return _flightPlan; }
signals:
void error (const QString& what, const QString& airmapdMessage, const QString& airmapdDetails);
private slots:
void _pollBriefing ();
void _missionBoundingCubeChanged ();
private:
void _uploadFlightPlan ();
void _createFlightPlan ();
private:
enum class State {
Idle,
GetPilotID,
FlightUpload,
FlightPolling,
};
struct Flight {
QList<QGeoCoordinate> coords;
QGeoCoordinate takeoffCoord;
float maxAltitude = 0;
void reset() {
coords.clear();
maxAltitude = 0;
}
};
Flight _flight; ///< flight pending to be uploaded
State _state = State::Idle;
AirMapSharedState& _shared;
QTimer _pollTimer; ///< timer to poll for approval check
QString _flightPlan; ///< Current flight plan
QString _pilotID; ///< Pilot ID in the form "auth0|abc123"
MissionController* _controller = nullptr;
bool _createPlan = true;
AirspaceFlightPlanProvider::PermitStatus _flightPermitStatus = AirspaceFlightPlanProvider::PermitUnknown;
};
...@@ -7,15 +7,16 @@ ...@@ -7,15 +7,16 @@
* *
****************************************************************************/ ****************************************************************************/
#include "AirMapManager.h"
#include "AirMapAdvisoryManager.h" #include "AirMapAdvisoryManager.h"
#include "AirMapWeatherInfoManager.h" #include "AirMapFlightPlanManager.h"
#include "AirMapManager.h"
#include "AirMapRestrictionManager.h"
#include "AirMapRulesetsManager.h" #include "AirMapRulesetsManager.h"
#include "AirMapSettings.h" #include "AirMapSettings.h"
#include "AirMapTelemetry.h" #include "AirMapTelemetry.h"
#include "AirMapRestrictionManager.h"
#include "AirMapTrafficMonitor.h" #include "AirMapTrafficMonitor.h"
#include "AirMapVehicleManager.h" #include "AirMapVehicleManager.h"
#include "AirMapWeatherInfoManager.h"
#include "QmlObjectListModel.h" #include "QmlObjectListModel.h"
#include "JsonHelper.h" #include "JsonHelper.h"
...@@ -155,8 +156,10 @@ AirMapManager::_instantiateAirspaceRestrictionProvider() ...@@ -155,8 +156,10 @@ AirMapManager::_instantiateAirspaceRestrictionProvider()
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void AirspaceFlightPlanProvider*
AirMapManager::createFlight(MissionController* missionController) AirMapManager::_instantiateAirspaceFlightPlanProvider()
{ {
Q_UNUSED(missionController); AirMapFlightPlanManager* flightPlan = new AirMapFlightPlanManager(_shared);
connect(flightPlan, &AirMapFlightPlanManager::error, this, &AirMapManager::_error);
return flightPlan;
} }
...@@ -19,11 +19,6 @@ ...@@ -19,11 +19,6 @@
#include <memory> #include <memory>
class QGCToolbox; class QGCToolbox;
class AirspaceVehicleManager;
class AirspaceRulesetsProvider;
class AirspaceWeatherInfoProvider;
class AirspaceAdvisoryProvider;
class AirspaceRestrictionProvider;
Q_DECLARE_LOGGING_CATEGORY(AirMapManagerLog) Q_DECLARE_LOGGING_CATEGORY(AirMapManagerLog)
...@@ -45,13 +40,13 @@ public: ...@@ -45,13 +40,13 @@ public:
QString providerName () const override { return QString("AirMap"); } QString providerName () const override { return QString("AirMap"); }
AirspaceVehicleManager* instantiateVehicle (const Vehicle& vehicle) override; AirspaceVehicleManager* instantiateVehicle (const Vehicle& vehicle) override;
void createFlight (MissionController* missionController) override;
protected: protected:
AirspaceRulesetsProvider* _instantiateRulesetsProvider () override; AirspaceRulesetsProvider* _instantiateRulesetsProvider () override;
AirspaceWeatherInfoProvider* _instatiateAirspaceWeatherInfoProvider () override; AirspaceWeatherInfoProvider* _instatiateAirspaceWeatherInfoProvider () override;
AirspaceAdvisoryProvider* _instatiateAirspaceAdvisoryProvider () override; AirspaceAdvisoryProvider* _instatiateAirspaceAdvisoryProvider () override;
AirspaceRestrictionProvider* _instantiateAirspaceRestrictionProvider () override; AirspaceRestrictionProvider* _instantiateAirspaceRestrictionProvider () override;
AirspaceFlightPlanProvider* _instantiateAirspaceFlightPlanProvider () override;
private slots: private slots:
void _error (const QString& what, const QString& airmapdMessage, const QString& airmapdDetails); void _error (const QString& what, const QString& airmapdMessage, const QString& airmapdDetails);
......
...@@ -38,7 +38,7 @@ AirMapVehicleManager::createFlight(const QList<MissionItem*>& missionItems) ...@@ -38,7 +38,7 @@ AirMapVehicleManager::createFlight(const QList<MissionItem*>& missionItems)
_flightManager.createFlight(missionItems); _flightManager.createFlight(missionItems);
} }
AirspaceAuthorization::PermitStatus AirspaceFlightPlanProvider::PermitStatus
AirMapVehicleManager::flightPermitStatus() const AirMapVehicleManager::flightPermitStatus() const
{ {
return _flightManager.flightPermitStatus(); return _flightManager.flightPermitStatus();
...@@ -83,7 +83,7 @@ void ...@@ -83,7 +83,7 @@ void
AirMapVehicleManager::_flightPermitStatusChanged() AirMapVehicleManager::_flightPermitStatusChanged()
{ {
// activate traffic alerts // activate traffic alerts
if (_flightManager.flightPermitStatus() == AirspaceAuthorization::PermitAccepted) { if (_flightManager.flightPermitStatus() == AirspaceFlightPlanProvider::PermitAccepted) {
qCDebug(AirMapManagerLog) << "Subscribing to Traffic Alerts"; qCDebug(AirMapManagerLog) << "Subscribing to Traffic Alerts";
// since we already created the flight, we know that we have a valid login token // since we already created the flight, we know that we have a valid login token
_trafficMonitor.startConnection(_flightManager.flightID()); _trafficMonitor.startConnection(_flightManager.flightID());
......
...@@ -33,7 +33,7 @@ public: ...@@ -33,7 +33,7 @@ public:
void stopTelemetryStream () override; void stopTelemetryStream () override;
bool isTelemetryStreaming () const override; bool isTelemetryStreaming () const override;
AirspaceAuthorization::PermitStatus flightPermitStatus() const override; AirspaceFlightPlanProvider::PermitStatus flightPermitStatus() const override;
signals: signals:
void error (const QString& what, const QString& airmapdMessage, const QString& airmapdDetails); void error (const QString& what, const QString& airmapdMessage, const QString& airmapdDetails);
......
/****************************************************************************
*
* (c) 2017 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#include "AirspaceFlightPlanProvider.h"
AirspaceFlightPlanProvider::AirspaceFlightPlanProvider(QObject *parent)
: QObject(parent)
{
}
/****************************************************************************
*
* (c) 2017 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once
/**
* @file AirspaceFlightPlanProvider.h
* Create and maintain a flight plan
*/
#include <QObject>
class MissionController;
//-----------------------------------------------------------------------------
class AirspaceFlightPlanProvider : public QObject
{
Q_OBJECT
public:
enum PermitStatus {
PermitUnknown = 0,
PermitPending,
PermitAccepted,
PermitRejected,
};
Q_ENUM(PermitStatus)
AirspaceFlightPlanProvider (QObject *parent = nullptr);
virtual ~AirspaceFlightPlanProvider () {}
Q_PROPERTY(PermitStatus flightPermitStatus READ flightPermitStatus NOTIFY flightPermitStatusChanged) ///< state of flight permission
virtual PermitStatus flightPermitStatus () const { return PermitUnknown; }
virtual void createFlight (MissionController* missionController) = 0;
signals:
void flightPermitStatusChanged ();
};
...@@ -8,13 +8,14 @@ ...@@ -8,13 +8,14 @@
****************************************************************************/ ****************************************************************************/
#include "AirspaceManager.h"
#include "AirspaceWeatherInfoProvider.h"
#include "AirspaceAdvisoryProvider.h" #include "AirspaceAdvisoryProvider.h"
#include "AirspaceFlightPlanProvider.h"
#include "AirspaceManager.h"
#include "AirspaceRestriction.h" #include "AirspaceRestriction.h"
#include "AirspaceRulesetsProvider.h"
#include "AirspaceRestrictionProvider.h" #include "AirspaceRestrictionProvider.h"
#include "AirspaceRulesetsProvider.h"
#include "AirspaceVehicleManager.h" #include "AirspaceVehicleManager.h"
#include "AirspaceWeatherInfoProvider.h"
#include "Vehicle.h" #include "Vehicle.h"
#include "QGCApplication.h" #include "QGCApplication.h"
...@@ -29,7 +30,7 @@ AirspaceManager::AirspaceManager(QGCApplication* app, QGCToolbox* toolbox) ...@@ -29,7 +30,7 @@ AirspaceManager::AirspaceManager(QGCApplication* app, QGCToolbox* toolbox)
_roiUpdateTimer.setSingleShot(true); _roiUpdateTimer.setSingleShot(true);
connect(&_roiUpdateTimer, &QTimer::timeout, this, &AirspaceManager::_updateToROI); connect(&_roiUpdateTimer, &QTimer::timeout, this, &AirspaceManager::_updateToROI);
qmlRegisterUncreatableType<AirspaceAdvisoryProvider> ("QGroundControl.Airspace", 1, 0, "AirspaceAdvisoryProvider", "Reference only"); qmlRegisterUncreatableType<AirspaceAdvisoryProvider> ("QGroundControl.Airspace", 1, 0, "AirspaceAdvisoryProvider", "Reference only");
qmlRegisterUncreatableType<AirspaceAuthorization> ("QGroundControl.Airspace", 1, 0, "AirspaceAuthorization", "Reference only"); qmlRegisterUncreatableType<AirspaceFlightPlanProvider> ("QGroundControl.Airspace", 1, 0, "AirspaceFlightPlanProvider", "Reference only");
qmlRegisterUncreatableType<AirspaceManager> ("QGroundControl.Airspace", 1, 0, "AirspaceManager", "Reference only"); qmlRegisterUncreatableType<AirspaceManager> ("QGroundControl.Airspace", 1, 0, "AirspaceManager", "Reference only");
qmlRegisterUncreatableType<AirspaceRestrictionProvider> ("QGroundControl.Airspace", 1, 0, "AirspaceRestrictionProvider", "Reference only"); qmlRegisterUncreatableType<AirspaceRestrictionProvider> ("QGroundControl.Airspace", 1, 0, "AirspaceRestrictionProvider", "Reference only");
qmlRegisterUncreatableType<AirspaceRule> ("QGroundControl.Airspace", 1, 0, "AirspaceRule", "Reference only"); qmlRegisterUncreatableType<AirspaceRule> ("QGroundControl.Airspace", 1, 0, "AirspaceRule", "Reference only");
...@@ -53,6 +54,9 @@ AirspaceManager::~AirspaceManager() ...@@ -53,6 +54,9 @@ AirspaceManager::~AirspaceManager()
if(_airspaces) { if(_airspaces) {
delete _airspaces; delete _airspaces;
} }
if(_flightPlan) {
delete _flightPlan;
}
} }
void AirspaceManager::setToolbox(QGCToolbox* toolbox) void AirspaceManager::setToolbox(QGCToolbox* toolbox)
...@@ -63,6 +67,7 @@ void AirspaceManager::setToolbox(QGCToolbox* toolbox) ...@@ -63,6 +67,7 @@ void AirspaceManager::setToolbox(QGCToolbox* toolbox)
_weatherProvider = _instatiateAirspaceWeatherInfoProvider(); _weatherProvider = _instatiateAirspaceWeatherInfoProvider();
_advisories = _instatiateAirspaceAdvisoryProvider(); _advisories = _instatiateAirspaceAdvisoryProvider();
_airspaces = _instantiateAirspaceRestrictionProvider(); _airspaces = _instantiateAirspaceRestrictionProvider();
_flightPlan = _instantiateAirspaceFlightPlanProvider();
} }
void AirspaceManager::setROI(QGeoCoordinate center, double radiusMeters) void AirspaceManager::setROI(QGeoCoordinate center, double radiusMeters)
......
...@@ -33,14 +33,14 @@ ...@@ -33,14 +33,14 @@
#include <QList> #include <QList>
#include <QTimer> #include <QTimer>
class Vehicle;
class QGCApplication;
class AirspaceWeatherInfoProvider;
class AirspaceRulesetsProvider;
class AirspaceVehicleManager;
class AirspaceAdvisoryProvider; class AirspaceAdvisoryProvider;
class AirspaceFlightPlanProvider;
class AirspaceRestrictionProvider; class AirspaceRestrictionProvider;
class MissionController; class AirspaceRulesetsProvider;
class AirspaceVehicleManager;
class AirspaceWeatherInfoProvider;
class QGCApplication;
class Vehicle;
Q_DECLARE_LOGGING_CATEGORY(AirspaceManagementLog) Q_DECLARE_LOGGING_CATEGORY(AirspaceManagementLog)
...@@ -60,6 +60,7 @@ public: ...@@ -60,6 +60,7 @@ public:
Q_PROPERTY(AirspaceAdvisoryProvider* advisories READ advisories CONSTANT) Q_PROPERTY(AirspaceAdvisoryProvider* advisories READ advisories CONSTANT)
Q_PROPERTY(AirspaceRulesetsProvider* ruleSets READ ruleSets CONSTANT) Q_PROPERTY(AirspaceRulesetsProvider* ruleSets READ ruleSets CONSTANT)
Q_PROPERTY(AirspaceRestrictionProvider* airspaces READ airspaces CONSTANT) Q_PROPERTY(AirspaceRestrictionProvider* airspaces READ airspaces CONSTANT)
Q_PROPERTY(AirspaceFlightPlanProvider* flightPlan READ flightPlan CONSTANT)
Q_PROPERTY(bool airspaceVisible READ airspaceVisible WRITE setAirspaceVisible NOTIFY airspaceVisibleChanged) Q_PROPERTY(bool airspaceVisible READ airspaceVisible WRITE setAirspaceVisible NOTIFY airspaceVisibleChanged)
Q_INVOKABLE void setROI (QGeoCoordinate center, double radius); Q_INVOKABLE void setROI (QGeoCoordinate center, double radius);
...@@ -68,6 +69,7 @@ public: ...@@ -68,6 +69,7 @@ public:
AirspaceAdvisoryProvider* advisories () { return _advisories; } AirspaceAdvisoryProvider* advisories () { return _advisories; }
AirspaceRulesetsProvider* ruleSets () { return _ruleSetsProvider; } AirspaceRulesetsProvider* ruleSets () { return _ruleSetsProvider; }
AirspaceRestrictionProvider* airspaces () { return _airspaces; } AirspaceRestrictionProvider* airspaces () { return _airspaces; }
AirspaceFlightPlanProvider* flightPlan () { return _flightPlan; }
void setToolbox(QGCToolbox* toolbox) override; void setToolbox(QGCToolbox* toolbox) override;
...@@ -81,11 +83,6 @@ public: ...@@ -81,11 +83,6 @@ public:
*/ */
virtual AirspaceVehicleManager* instantiateVehicle (const Vehicle& vehicle) = 0; virtual AirspaceVehicleManager* instantiateVehicle (const Vehicle& vehicle) = 0;
/**
* Create/upload a flight from a mission.
*/
virtual void createFlight (MissionController* missionController) = 0;
signals: signals:
void airspaceVisibleChanged (); void airspaceVisibleChanged ();
...@@ -98,31 +95,21 @@ protected: ...@@ -98,31 +95,21 @@ protected:
virtual void _setROI (const QGeoCoordinate& center, double radiusMeters); virtual void _setROI (const QGeoCoordinate& center, double radiusMeters);
/** /**
* Factory method to create an AirspaceRulesetsProvider object * Factory methods
*/ */
virtual AirspaceRulesetsProvider* _instantiateRulesetsProvider () = 0; virtual AirspaceRulesetsProvider* _instantiateRulesetsProvider () = 0;
/**
* Factory method to create an AirspaceRulesetsProvider object
*/
virtual AirspaceWeatherInfoProvider* _instatiateAirspaceWeatherInfoProvider () = 0; virtual AirspaceWeatherInfoProvider* _instatiateAirspaceWeatherInfoProvider () = 0;
/**
* Factory method to create an AirspaceAdvisoryProvider object
*/
virtual AirspaceAdvisoryProvider* _instatiateAirspaceAdvisoryProvider () = 0; virtual AirspaceAdvisoryProvider* _instatiateAirspaceAdvisoryProvider () = 0;
/**
* Factory method to create an AirspaceRestrictionProvider object
*/
virtual AirspaceRestrictionProvider* _instantiateAirspaceRestrictionProvider () = 0; virtual AirspaceRestrictionProvider* _instantiateAirspaceRestrictionProvider () = 0;
virtual AirspaceFlightPlanProvider* _instantiateAirspaceFlightPlanProvider () = 0;
protected: protected:
bool _airspaceVisible; bool _airspaceVisible;
AirspaceRulesetsProvider* _ruleSetsProvider = nullptr; ///< Rulesets that are shown in the UI AirspaceRulesetsProvider* _ruleSetsProvider = nullptr; ///< Rulesets
AirspaceWeatherInfoProvider* _weatherProvider = nullptr; ///< Weather info that is shown in the UI AirspaceWeatherInfoProvider* _weatherProvider = nullptr; ///< Weather info
AirspaceAdvisoryProvider* _advisories = nullptr; ///< Advisory info that is shown in the UI AirspaceAdvisoryProvider* _advisories = nullptr; ///< Advisory info
AirspaceRestrictionProvider* _airspaces = nullptr; ///< Airspace info that is shown in the UI AirspaceRestrictionProvider* _airspaces = nullptr; ///< Airspace info
AirspaceFlightPlanProvider* _flightPlan = nullptr; ///< Flight plan management
QTimer _roiUpdateTimer; QTimer _roiUpdateTimer;
QGeoCoordinate _roiCenter; QGeoCoordinate _roiCenter;
double _roiRadius; double _roiRadius;
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#pragma once #pragma once
#include "AirspaceAuthorization.h" #include "AirspaceFlightPlanProvider.h"
#include "QGCMAVLink.h" #include "QGCMAVLink.h"
#include <QObject> #include <QObject>
...@@ -40,7 +40,7 @@ public: ...@@ -40,7 +40,7 @@ public:
/** /**
* get the current flight permit status * get the current flight permit status
*/ */
virtual AirspaceAuthorization::PermitStatus flightPermitStatus() const = 0; virtual AirspaceFlightPlanProvider::PermitStatus flightPermitStatus() const = 0;
/** /**
* Setup the connection and start sending telemetry * Setup the connection and start sending telemetry
......
...@@ -634,7 +634,7 @@ QGCView { ...@@ -634,7 +634,7 @@ QGCView {
width: airspaceRow.width + (ScreenTools.defaultFontPixelWidth * 3) width: airspaceRow.width + (ScreenTools.defaultFontPixelWidth * 3)
height: airspaceRow.height * 1.25 height: airspaceRow.height * 1.25
color: qgcPal.globalTheme === QGCPalette.Light ? Qt.rgba(1,1,1,0.95) : Qt.rgba(0,0,0,0.75) color: qgcPal.globalTheme === QGCPalette.Light ? Qt.rgba(1,1,1,0.95) : Qt.rgba(0,0,0,0.75)
visible: QGroundControl.airmapSupported && _mainIsMap && flightPermit && flightPermit !== AirspaceAuthorization.PermitUnknown && !messageArea.visible && !criticalMmessageArea.visible visible: QGroundControl.airmapSupported && _mainIsMap && flightPermit && flightPermit !== AirspaceFlightPlanProvider.PermitUnknown && !messageArea.visible && !criticalMmessageArea.visible
radius: 3 radius: 3
border.width: 1 border.width: 1
border.color: qgcPal.globalTheme === QGCPalette.Light ? Qt.rgba(0,0,0,0.35) : Qt.rgba(1,1,1,0.35) border.color: qgcPal.globalTheme === QGCPalette.Light ? Qt.rgba(0,0,0,0.35) : Qt.rgba(1,1,1,0.35)
...@@ -649,20 +649,20 @@ QGCView { ...@@ -649,20 +649,20 @@ QGCView {
QGCLabel { QGCLabel {
text: { text: {
if(airspaceIndicator.flightPermit) { if(airspaceIndicator.flightPermit) {
if(airspaceIndicator.flightPermit === AirspaceAuthorization.PermitPending) if(airspaceIndicator.flightPermit === AirspaceFlightPlanProvider.PermitPending)
return qsTr("Approval Pending") return qsTr("Approval Pending")
if(airspaceIndicator.flightPermit === AirspaceAuthorization.PermitAccepted) if(airspaceIndicator.flightPermit === AirspaceFlightPlanProvider.PermitAccepted)
return qsTr("Flight Approved") return qsTr("Flight Approved")
if(airspaceIndicator.flightPermit === AirspaceAuthorization.PermitRejected) if(airspaceIndicator.flightPermit === AirspaceFlightPlanProvider.PermitRejected)
return qsTr("Flight Rejected") return qsTr("Flight Rejected")
} }
return "" return ""
} }
color: { color: {
if(airspaceIndicator.flightPermit) { if(airspaceIndicator.flightPermit) {
if(airspaceIndicator.flightPermit === AirspaceAuthorization.PermitPending) if(airspaceIndicator.flightPermit === AirspaceFlightPlanProvider.PermitPending)
return qgcPal.colorOrange return qgcPal.colorOrange
if(airspaceIndicator.flightPermit === AirspaceAuthorization.PermitAccepted) if(airspaceIndicator.flightPermit === AirspaceFlightPlanProvider.PermitAccepted)
return qgcPal.colorGreen return qgcPal.colorGreen
} }
return qgcPal.colorRed return qgcPal.colorRed
...@@ -670,7 +670,7 @@ QGCView { ...@@ -670,7 +670,7 @@ QGCView {
anchors.verticalCenter: parent.verticalCenter; anchors.verticalCenter: parent.verticalCenter;
} }
} }
property var flightPermit: (QGroundControl.airmapSupported && _activeVehicle) ? _activeVehicle.flightPermitStatus : null property var flightPermit: QGroundControl.airmapSupported ? QGroundControl.airspaceManager.flightPlan.flightPermitStatus : null
property var providerName: QGroundControl.airspaceManager.providerName property var providerName: QGroundControl.airspaceManager.providerName
} }
......
...@@ -203,7 +203,7 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque ...@@ -203,7 +203,7 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque
//-- If airspace management enabled, create new flight //-- If airspace management enabled, create new flight
#if defined(QGC_AIRMAP_ENABLED) #if defined(QGC_AIRMAP_ENABLED)
if(qgcApp()->toolbox()->settingsManager()->airMapSettings()->enableAirMap()->rawValue().toBool()) { if(qgcApp()->toolbox()->settingsManager()->airMapSettings()->enableAirMap()->rawValue().toBool()) {
qgcApp()->toolbox()->airspaceManager()->createFlight(this); qgcApp()->toolbox()->airspaceManager()->flightPlan()->createFlight(this);
} }
#endif #endif
} }
...@@ -371,7 +371,7 @@ int MissionController::insertSimpleMissionItem(QGeoCoordinate coordinate, int i) ...@@ -371,7 +371,7 @@ int MissionController::insertSimpleMissionItem(QGeoCoordinate coordinate, int i)
//-- If airspace management enabled and this is the first item, create new flight //-- If airspace management enabled and this is the first item, create new flight
#if defined(QGC_AIRMAP_ENABLED) #if defined(QGC_AIRMAP_ENABLED)
if(_visualItems->count() == 2 && qgcApp()->toolbox()->settingsManager()->airMapSettings()->enableAirMap()->rawValue().toBool()) { if(_visualItems->count() == 2 && qgcApp()->toolbox()->settingsManager()->airMapSettings()->enableAirMap()->rawValue().toBool()) {
qgcApp()->toolbox()->airspaceManager()->createFlight(this); qgcApp()->toolbox()->airspaceManager()->flightPlan()->createFlight(this);
} }
#endif #endif
...@@ -464,7 +464,7 @@ int MissionController::insertComplexMissionItem(QString itemName, QGeoCoordinate ...@@ -464,7 +464,7 @@ int MissionController::insertComplexMissionItem(QString itemName, QGeoCoordinate
//-- If airspace management enabled and this is the first item, create new flight //-- If airspace management enabled and this is the first item, create new flight
#if defined(QGC_AIRMAP_ENABLED) #if defined(QGC_AIRMAP_ENABLED)
if(_visualItems->count() == 2 && qgcApp()->toolbox()->settingsManager()->airMapSettings()->enableAirMap()->rawValue().toBool()) { if(_visualItems->count() == 2 && qgcApp()->toolbox()->settingsManager()->airMapSettings()->enableAirMap()->rawValue().toBool()) {
qgcApp()->toolbox()->airspaceManager()->createFlight(this); qgcApp()->toolbox()->airspaceManager()->flightPlan()->createFlight(this);
} }
#endif #endif
......
...@@ -78,16 +78,6 @@ void PlanManager::writeMissionItems(const QList<MissionItem*>& missionItems) ...@@ -78,16 +78,6 @@ void PlanManager::writeMissionItems(const QList<MissionItem*>& missionItems)
return; return;
} }
if (_planType == MAV_MISSION_TYPE_MISSION) {
#if defined(QGC_AIRMAP_ENABLED)
// upload the flight to the airspace management backend
AirspaceVehicleManager* airspaceManager = _vehicle->airspaceManager();
if (airspaceManager) {
airspaceManager->createFlight(missionItems);
}
#endif
}
_clearAndDeleteWriteMissionItems(); _clearAndDeleteWriteMissionItems();
bool skipFirstItem = _planType == MAV_MISSION_TYPE_MISSION && !_vehicle->firmwarePlugin()->sendHomePositionToVehicle(); bool skipFirstItem = _planType == MAV_MISSION_TYPE_MISSION && !_vehicle->firmwarePlugin()->sendHomePositionToVehicle();
......
...@@ -461,7 +461,6 @@ void Vehicle::_commonInit(void) ...@@ -461,7 +461,6 @@ void Vehicle::_commonInit(void)
_airspaceVehicleManager = airspaceManager->instantiateVehicle(*this); _airspaceVehicleManager = airspaceManager->instantiateVehicle(*this);
if (_airspaceVehicleManager) { if (_airspaceVehicleManager) {
connect(_airspaceVehicleManager, &AirspaceVehicleManager::trafficUpdate, this, &Vehicle::_trafficUpdate); connect(_airspaceVehicleManager, &AirspaceVehicleManager::trafficUpdate, this, &Vehicle::_trafficUpdate);
connect(_airspaceVehicleManager, &AirspaceVehicleManager::flightPermitStatusChanged, this, &Vehicle::flightPermitStatusChanged);
} }
} }
#endif #endif
......
...@@ -357,9 +357,6 @@ public: ...@@ -357,9 +357,6 @@ public:
Q_PROPERTY(QString hobbsMeter READ hobbsMeter NOTIFY hobbsMeterChanged) Q_PROPERTY(QString hobbsMeter READ hobbsMeter NOTIFY hobbsMeterChanged)
Q_PROPERTY(bool vtolInFwdFlight READ vtolInFwdFlight WRITE setVtolInFwdFlight NOTIFY vtolInFwdFlightChanged) Q_PROPERTY(bool vtolInFwdFlight READ vtolInFwdFlight WRITE setVtolInFwdFlight NOTIFY vtolInFwdFlightChanged)
Q_PROPERTY(bool highLatencyLink READ highLatencyLink NOTIFY highLatencyLinkChanged) Q_PROPERTY(bool highLatencyLink READ highLatencyLink NOTIFY highLatencyLinkChanged)
#if defined(QGC_AIRMAP_ENABLED)
Q_PROPERTY(AirspaceAuthorization::PermitStatus flightPermitStatus READ flightPermitStatus NOTIFY flightPermitStatusChanged) ///< state of flight permission
#endif
// Vehicle state used for guided control // Vehicle state used for guided control
Q_PROPERTY(bool flying READ flying NOTIFY flyingChanged) ///< Vehicle is flying Q_PROPERTY(bool flying READ flying NOTIFY flyingChanged) ///< Vehicle is flying
Q_PROPERTY(bool landing READ landing NOTIFY landingChanged) ///< Vehicle is in landing pattern (DO_LAND_START) Q_PROPERTY(bool landing READ landing NOTIFY landingChanged) ///< Vehicle is in landing pattern (DO_LAND_START)
...@@ -762,9 +759,6 @@ public: ...@@ -762,9 +759,6 @@ public:
void prepareDelete(); void prepareDelete();
#if defined(QGC_AIRMAP_ENABLED) #if defined(QGC_AIRMAP_ENABLED)
AirspaceAuthorization::PermitStatus flightPermitStatus() const
{ return _airspaceVehicleManager ? _airspaceVehicleManager->flightPermitStatus() : AirspaceAuthorization::PermitUnknown; }
AirspaceVehicleManager* airspaceManager() const { return _airspaceVehicleManager; } AirspaceVehicleManager* airspaceManager() const { return _airspaceVehicleManager; }
#endif #endif
...@@ -802,9 +796,6 @@ signals: ...@@ -802,9 +796,6 @@ signals:
void capabilityBitsChanged(uint64_t capabilityBits); void capabilityBitsChanged(uint64_t capabilityBits);
void toolBarIndicatorsChanged(void); void toolBarIndicatorsChanged(void);
void highLatencyLinkChanged(bool highLatencyLink); void highLatencyLinkChanged(bool highLatencyLink);
#if defined(QGC_AIRMAP_ENABLED)
void flightPermitStatusChanged();
#endif
void messagesReceivedChanged (); void messagesReceivedChanged ();
void messagesSentChanged (); void messagesSentChanged ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment