Commit 98088b35 authored by Gus Grubba's avatar Gus Grubba

Make PlanMasterController in charge of initializing Airspace flight planning.

parent abab26cc
...@@ -12,8 +12,9 @@ ...@@ -12,8 +12,9 @@
#include "AirMapRulesetsManager.h" #include "AirMapRulesetsManager.h"
#include "AirMapAdvisoryManager.h" #include "AirMapAdvisoryManager.h"
#include "QGCApplication.h" #include "QGCApplication.h"
#include "SettingsManager.h"
#include "MissionController.h" #include "PlanMasterController.h"
#include "QGCMAVLink.h" #include "QGCMAVLink.h"
#include "airmap/pilots.h" #include "airmap/pilots.h"
...@@ -72,7 +73,7 @@ AirMapFlightPlanManager::setFlightEndTime(QDateTime end) ...@@ -72,7 +73,7 @@ AirMapFlightPlanManager::setFlightEndTime(QDateTime end)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void void
AirMapFlightPlanManager::createFlightPlan(MissionController* missionController) AirMapFlightPlanManager::startFlightPlanning(PlanMasterController *planController)
{ {
if (!_shared.client()) { if (!_shared.client()) {
qCDebug(AirMapManagerLog) << "No AirMap client instance. Will not create a flight"; qCDebug(AirMapManagerLog) << "No AirMap client instance. Will not create a flight";
...@@ -85,11 +86,10 @@ AirMapFlightPlanManager::createFlightPlan(MissionController* missionController) ...@@ -85,11 +86,10 @@ AirMapFlightPlanManager::createFlightPlan(MissionController* missionController)
} }
//-- TODO: Check if there is an ongoing flight plan and do something about it (Delete it?) //-- TODO: Check if there is an ongoing flight plan and do something about it (Delete it?)
_createPlan = true; if(!_planController) {
if(!_controller) { _planController = planController;
_controller = missionController;
//-- Get notified of mission changes //-- Get notified of mission changes
connect(missionController, &MissionController::missionBoundingCubeChanged, this, &AirMapFlightPlanManager::_missionChanged); connect(planController->missionController(), &MissionController::missionBoundingCubeChanged, this, &AirMapFlightPlanManager::_missionChanged);
} }
} }
...@@ -100,18 +100,21 @@ AirMapFlightPlanManager::_createFlightPlan() ...@@ -100,18 +100,21 @@ AirMapFlightPlanManager::_createFlightPlan()
_flight.reset(); _flight.reset();
//-- Get flight bounding cube and prepare (box) polygon //-- Get flight bounding cube and prepare (box) polygon
QGCGeoBoundingCube bc = _planController->missionController()->travelBoundingCube();
if(!bc.area()) {
//-- TODO: If single point, we need to set a point and a radius instead //-- TODO: If single point, we need to set a point and a radius instead
return;
}
QGCGeoBoundingCube bc = _controller->travelBoundingCube();
_flight.maxAltitude = fmax(bc.pointNW.altitude(), bc.pointSE.altitude()); _flight.maxAltitude = fmax(bc.pointNW.altitude(), bc.pointSE.altitude());
_flight.takeoffCoord = _controller->takeoffCoordinate(); _flight.takeoffCoord = _planController->missionController()->takeoffCoordinate();
_flight.coords = bc.polygon2D(); _flight.coords = bc.polygon2D();
//-- Flight Date/Time
if(_flightStartTime.isNull() || _flightStartTime < QDateTime::currentDateTime()) { if(_flightStartTime.isNull() || _flightStartTime < QDateTime::currentDateTime()) {
_flightStartTime = QDateTime::currentDateTime().addSecs(5 * 60); _flightStartTime = QDateTime::currentDateTime().addSecs(5 * 60);
emit flightStartTimeChanged(); emit flightStartTimeChanged();
} }
if(_flightEndTime.isNull() || _flightEndTime < _flightStartTime) { if(_flightEndTime.isNull() || _flightEndTime < _flightStartTime) {
_flightEndTime = _flightStartTime.addSecs(30 * 60); _flightEndTime = _flightStartTime.addSecs(30 * 60);
emit flightEndTimeChanged(); emit flightEndTimeChanged();
...@@ -469,11 +472,21 @@ AirMapFlightPlanManager::_deleteFlightPlan() ...@@ -469,11 +472,21 @@ AirMapFlightPlanManager::_deleteFlightPlan()
void void
AirMapFlightPlanManager::_missionChanged() AirMapFlightPlanManager::_missionChanged()
{ {
//-- Are we enabled?
if(!qgcApp()->toolbox()->settingsManager()->airMapSettings()->enableAirMap()->rawValue().toBool()) {
return;
}
//-- Do we have a license?
if(!_shared.hasAPIKey()) {
return;
}
//-- Creating a new flight plan? //-- Creating a new flight plan?
if(_createPlan) { if(_state == State::Idle) {
_createPlan = false; if(_flightPlan.isEmpty()) {
_createFlightPlan(); _createFlightPlan();
} } else {
//-- Plan is being modified //-- Plan is being modified
// _updateFlightPlan(); // _updateFlightPlan();
}
}
} }
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
#include <QList> #include <QList>
#include <QGeoCoordinate> #include <QGeoCoordinate>
class PlanMasterController;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
/// class to upload a flight /// class to upload a flight
class AirMapFlightPlanManager : public AirspaceFlightPlanProvider, public LifetimeChecker class AirMapFlightPlanManager : public AirspaceFlightPlanProvider, public LifetimeChecker
...@@ -36,7 +38,7 @@ public: ...@@ -36,7 +38,7 @@ public:
QmlObjectListModel* ruleSets () override { return &_rulesets; } QmlObjectListModel* ruleSets () override { return &_rulesets; }
AirspaceAdvisoryProvider::AdvisoryColor airspaceColor () override { return _airspaceColor; } AirspaceAdvisoryProvider::AdvisoryColor airspaceColor () override { return _airspaceColor; }
void createFlightPlan (MissionController* missionController) override; void startFlightPlanning (PlanMasterController* planController) override;
void setFlightStartTime (QDateTime start) override; void setFlightStartTime (QDateTime start) override;
void setFlightEndTime (QDateTime end) override; void setFlightEndTime (QDateTime end) override;
...@@ -79,8 +81,7 @@ private: ...@@ -79,8 +81,7 @@ private:
QTimer _pollTimer; ///< timer to poll for approval check QTimer _pollTimer; ///< timer to poll for approval check
QString _flightPlan; ///< Current flight plan QString _flightPlan; ///< Current flight plan
QString _pilotID; ///< Pilot ID in the form "auth0|abc123" QString _pilotID; ///< Pilot ID in the form "auth0|abc123"
MissionController* _controller = nullptr; PlanMasterController* _planController = nullptr;
bool _createPlan = true;
bool _valid = false; bool _valid = false;
QDateTime _flightStartTime; QDateTime _flightStartTime;
QDateTime _flightEndTime; QDateTime _flightEndTime;
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include <QObject> #include <QObject>
#include <QDateTime> #include <QDateTime>
class MissionController; class PlanMasterController;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
class AirspaceFlightPlanProvider : public QObject class AirspaceFlightPlanProvider : public QObject
...@@ -58,7 +58,7 @@ public: ...@@ -58,7 +58,7 @@ public:
virtual void setFlightStartTime (QDateTime start) = 0; virtual void setFlightStartTime (QDateTime start) = 0;
virtual void setFlightEndTime (QDateTime end) = 0; virtual void setFlightEndTime (QDateTime end) = 0;
virtual void createFlightPlan (MissionController* missionController) = 0; virtual void startFlightPlanning (PlanMasterController* planController) = 0;
signals: signals:
void flightPermitStatusChanged (); void flightPermitStatusChanged ();
......
...@@ -40,6 +40,7 @@ class AirspaceRestrictionProvider; ...@@ -40,6 +40,7 @@ class AirspaceRestrictionProvider;
class AirspaceRulesetsProvider; class AirspaceRulesetsProvider;
class AirspaceVehicleManager; class AirspaceVehicleManager;
class AirspaceWeatherInfoProvider; class AirspaceWeatherInfoProvider;
class PlanMasterController;
class QGCApplication; class QGCApplication;
class Vehicle; class Vehicle;
......
...@@ -199,13 +199,6 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque ...@@ -199,13 +199,6 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque
_initAllVisualItems(); _initAllVisualItems();
_updateContainsItems(); _updateContainsItems();
emit newItemsFromVehicle(); emit newItemsFromVehicle();
//-- If airspace management enabled, create new flight
#if defined(QGC_AIRMAP_ENABLED)
if(qgcApp()->toolbox()->settingsManager()->airMapSettings()->enableAirMap()->rawValue().toBool()) {
qgcApp()->toolbox()->airspaceManager()->flightPlan()->createFlightPlan(this);
}
#endif
} }
_itemsRequested = false; _itemsRequested = false;
} }
...@@ -367,14 +360,6 @@ int MissionController::insertSimpleMissionItem(QGeoCoordinate coordinate, int i) ...@@ -367,14 +360,6 @@ int MissionController::insertSimpleMissionItem(QGeoCoordinate coordinate, int i)
_visualItems->insert(i, newItem); _visualItems->insert(i, newItem);
_recalcAll(); _recalcAll();
//-- If airspace management enabled and this is the first item, create new flight
#if defined(QGC_AIRMAP_ENABLED)
if(_visualItems->count() == 2 && qgcApp()->toolbox()->settingsManager()->airMapSettings()->enableAirMap()->rawValue().toBool()) {
qgcApp()->toolbox()->airspaceManager()->flightPlan()->createFlightPlan(this);
}
#endif
return newItem->sequenceNumber(); return newItem->sequenceNumber();
} }
...@@ -461,13 +446,6 @@ int MissionController::insertComplexMissionItem(QString itemName, QGeoCoordinate ...@@ -461,13 +446,6 @@ int MissionController::insertComplexMissionItem(QString itemName, QGeoCoordinate
_visualItems->insert(i, newItem); _visualItems->insert(i, newItem);
_recalcAll(); _recalcAll();
//-- If airspace management enabled and this is the first item, create new flight
#if defined(QGC_AIRMAP_ENABLED)
if(_visualItems->count() == 2 && qgcApp()->toolbox()->settingsManager()->airMapSettings()->enableAirMap()->rawValue().toBool()) {
qgcApp()->toolbox()->airspaceManager()->flightPlan()->createFlightPlan(this);
}
#endif
return newItem->sequenceNumber(); return newItem->sequenceNumber();
} }
......
...@@ -71,6 +71,13 @@ void PlanMasterController::start(bool editMode) ...@@ -71,6 +71,13 @@ void PlanMasterController::start(bool editMode)
connect(_multiVehicleMgr, &MultiVehicleManager::activeVehicleChanged, this, &PlanMasterController::_activeVehicleChanged); connect(_multiVehicleMgr, &MultiVehicleManager::activeVehicleChanged, this, &PlanMasterController::_activeVehicleChanged);
_activeVehicleChanged(_multiVehicleMgr->activeVehicle()); _activeVehicleChanged(_multiVehicleMgr->activeVehicle());
#if defined(QGC_AIRMAP_ENABLED)
//-- This assumes there is one single instance of PlanMasterController in edit mode.
if(editMode) {
qgcApp()->toolbox()->airspaceManager()->flightPlan()->startFlightPlanning(this);
}
#endif
} }
void PlanMasterController::startStaticActiveVehicle(Vehicle* vehicle) void PlanMasterController::startStaticActiveVehicle(Vehicle* vehicle)
...@@ -123,6 +130,7 @@ void PlanMasterController::_activeVehicleChanged(Vehicle* activeVehicle) ...@@ -123,6 +130,7 @@ void PlanMasterController::_activeVehicleChanged(Vehicle* activeVehicle)
connect(_managerVehicle->geoFenceManager(), &GeoFenceManager::sendComplete, this, &PlanMasterController::_sendGeoFenceComplete); connect(_managerVehicle->geoFenceManager(), &GeoFenceManager::sendComplete, this, &PlanMasterController::_sendGeoFenceComplete);
connect(_managerVehicle->rallyPointManager(), &RallyPointManager::sendComplete, this, &PlanMasterController::_sendRallyPointsComplete); connect(_managerVehicle->rallyPointManager(), &RallyPointManager::sendComplete, this, &PlanMasterController::_sendRallyPointsComplete);
} }
if (newOffline != _offline) { if (newOffline != _offline) {
_offline = newOffline; _offline = newOffline;
emit offlineEditingChanged(newOffline); emit offlineEditingChanged(newOffline);
...@@ -504,7 +512,7 @@ void PlanMasterController::_showPlanFromManagerVehicle(void) ...@@ -504,7 +512,7 @@ void PlanMasterController::_showPlanFromManagerVehicle(void)
_managerVehicle->forceInitialPlanRequestComplete(); _managerVehicle->forceInitialPlanRequestComplete();
} }
// The crazy if structure is to handle the load propogating by itself through the system // The crazy if structure is to handle the load propagating by itself through the system
if (!_missionController.showPlanFromManagerVehicle()) { if (!_missionController.showPlanFromManagerVehicle()) {
if (!_geoFenceController.showPlanFromManagerVehicle()) { if (!_geoFenceController.showPlanFromManagerVehicle()) {
_rallyPointController.showPlanFromManagerVehicle(); _rallyPointController.showPlanFromManagerVehicle();
......
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