WimaController.h 4.56 KB
Newer Older
1
#pragma once
2 3

#include <QObject>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
4 5
#include <QScopedPointer>

6
#include "QGCMapPolygon.h"
7
#include "QmlObjectListModel.h"
8

9
#include "Geometry/WimaCorridorData.h"
10
#include "Geometry/WimaMeasurementAreaData.h"
11
#include "Geometry/WimaServiceAreaData.h"
12

13
#include "SettingsFact.h"
14

15
#include "Geometry/GeoPoint3D.h"
16
#include "RoutingThread.h"
Valentin Platzgummer's avatar
Valentin Platzgummer committed
17
#include "Snake/NemoInterface.h"
Valentin Platzgummer's avatar
Valentin Platzgummer committed
18

19
#include "WaypointManager/EmptyManager.h"
20
#include "WaypointManager/RTLManager.h"
21

Valentin Platzgummer's avatar
Valentin Platzgummer committed
22
#include "utilities.h"
23 24

#include <map>
25

Valentin Platzgummer's avatar
Valentin Platzgummer committed
26 27
typedef std::unique_ptr<rapidjson::Document> JsonDocUPtr;

28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
class WimaController : public QObject {
  Q_OBJECT
public:
  WimaController(QObject *parent = nullptr);

  // Controllers.
  Q_PROPERTY(PlanMasterController *masterController READ masterController WRITE
                 setMasterController NOTIFY masterControllerChanged)
  Q_PROPERTY(MissionController *missionController READ missionController WRITE
                 setMissionController NOTIFY missionControllerChanged)
  // Wima Data.
  Q_PROPERTY(QmlObjectListModel *visualItems READ visualItems NOTIFY
                 visualItemsChanged)
  Q_PROPERTY(QmlObjectListModel *missionItems READ missionItems NOTIFY
                 missionItemsChanged)
  Q_PROPERTY(
      QVariantList waypointPath READ waypointPath NOTIFY waypointPathChanged)
  Q_PROPERTY(Fact *enableWimaController READ enableWimaController CONSTANT)
  // Waypoint navigaton.
  Q_PROPERTY(Fact *flightSpeed READ flightSpeed CONSTANT)
  Q_PROPERTY(Fact *altitude READ altitude CONSTANT)

  // Controllers.
  PlanMasterController *masterController(void);
  MissionController *missionController(void);
  // Wima Data
  QmlObjectListModel *visualItems(void);
  QGCMapPolygon joinedArea(void) const;
  // Waypoints.
  QmlObjectListModel *missionItems(void);
  QVariantList waypointPath(void);
  // Settings facts.
  Fact *enableWimaController(void);
  Fact *flightSpeed(void);
  Fact *altitude(void);

  bool uploadOverrideRequired(void) const;
  bool vehicleHasLowBattery(void) const;

  // Property setters
  void setMasterController(PlanMasterController *masterController);
  void setMissionController(MissionController *missionController);

  // Member Methodes
  Q_INVOKABLE WimaController *thisPointer();
  // Other.
  Q_INVOKABLE void removeVehicleTrajectoryHistory();
  Q_INVOKABLE bool upload();
  Q_INVOKABLE bool forceUpload();
  Q_INVOKABLE void removeFromVehicle();

  // static Members
  static const char *areaItemsName;
  static const char *missionItemsName;
  static const char *settingsGroup;
  static const char *enableWimaControllerName;
  static const char *flightSpeedName;
  static const char *altitudeName;
86

87
signals:
88 89 90 91 92 93 94 95 96 97
  // Controllers.
  void masterControllerChanged(void);
  void missionControllerChanged(void);
  // Wima data.
  void visualItemsChanged(void);
  // Waypoints.
  void missionItemsChanged(void);
  void waypointPathChanged(void);
  // Upload.
  void forceUploadConfirm(void);
98

99
private slots:
100 101
  void planDataChangedHandler();
  void progressChangedHandler();
102 103 104 105 106 107
  bool _calcShortestPath(const QGeoCoordinate &start,
                         const QGeoCoordinate &destination,
                         QVector<QGeoCoordinate> &path);
  void _updateflightSpeed(void);
  void _updateAltitude(void);
  // Snake.
Valentin Platzgummer's avatar
Valentin Platzgummer committed
108
  void _switchWaypointManager(WaypointManager::ManagerBase &manager);
109 110
  // Periodic tasks.
  void _eventTimerHandler(void);
111 112

private:
113 114 115 116 117 118
  // Controllers.
  PlanMasterController *_masterController;
  MissionController *_missionController;

  // Wima Data.
  QmlObjectListModel _areas; // contains all visible areas
119 120
  // joined area fromed by opArea, serArea, _corridor
  WimaJoinedAreaData _joinedArea;
121 122 123
  WimaMeasurementAreaData _measurementArea; // measurement area
  WimaServiceAreaData _serviceArea;         // area for supplying
  WimaCorridorData _corridor; // corridor connecting opArea and serArea
124
  bool _planDataValid;
125 126 127 128

  // Waypoint Managers.
  WaypointManager::AreaInterface _areaInterface;
  WaypointManager::Settings _WMSettings; // Waypoint Manager Settings
129
  WaypointManager::EmptyManager _emptyWM;
130 131 132 133 134 135 136 137
  WaypointManager::RTLManager _rtlWM;
  WaypointManager::ManagerBase *_currentWM;
  using ManagerList = QList<WaypointManager::ManagerBase *>;
  ManagerList _WMList;

  // Settings Facts.
  QMap<QString, FactMetaData *> _metaDataMap;
  SettingsFact _enableWimaController; // enables or disables the wimaControler
138 139
  // determines the number of overlapping waypoints between two consecutive
  // mission phases
140 141
  SettingsFact _flightSpeed; // mission flight speed
  SettingsFact _altitude;    // mission altitude
142 143 144 145

  // Periodic tasks.
  QTimer _eventTimer;
  EventTicker _batteryLevelTicker;
146
};