MissionController.h 5.28 KB
Newer Older
1 2 3 4 5 6 7 8
/****************************************************************************
 *
 *   (c) 2009-2016 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.
 *
 ****************************************************************************/
9 10 11 12 13 14 15 16 17


#ifndef MissionController_H
#define MissionController_H

#include <QObject>

#include "QmlObjectListModel.h"
#include "Vehicle.h"
18
#include "QGCLoggingCategory.h"
19
#include "MavlinkQmlSingleton.h"
20
#include "VisualMissionItem.h"
21 22

Q_DECLARE_LOGGING_CATEGORY(MissionControllerLog)
23 24 25 26

class MissionController : public QObject
{
    Q_OBJECT
27

28 29 30 31
public:
    MissionController(QObject* parent = NULL);
    ~MissionController();

32 33 34 35 36
    Q_PROPERTY(QmlObjectListModel*  visualItems         READ visualItems                                NOTIFY visualItemsChanged)
    Q_PROPERTY(QmlObjectListModel*  complexVisualItems  READ complexVisualItems                         NOTIFY complexVisualItemsChanged)
    Q_PROPERTY(QmlObjectListModel*  waypointLines       READ waypointLines                              NOTIFY waypointLinesChanged)
    Q_PROPERTY(bool                 autoSync            READ autoSync               WRITE setAutoSync   NOTIFY autoSyncChanged)
    Q_PROPERTY(bool                 syncInProgress      READ syncInProgress                             NOTIFY syncInProgressChanged)
37

38
    Q_INVOKABLE void start(bool editMode);
39 40
    Q_INVOKABLE void getMissionItems(void);
    Q_INVOKABLE void sendMissionItems(void);
Don Gagne's avatar
Don Gagne committed
41 42 43 44
    Q_INVOKABLE void loadMissionFromFilePicker(void);
    Q_INVOKABLE void loadMissionFromFile(const QString& filename);
    Q_INVOKABLE void saveMissionToFilePicker(void);
    Q_INVOKABLE void saveMissionToFile(const QString& filename);
45
    Q_INVOKABLE void removeMissionItem(int index);
46
    Q_INVOKABLE void removeAllMissionItems(void);
47

48 49 50
    /// Add a new simple mission item to the list
    ///     @param i: index to insert at
    /// @return Sequence number for new item
51 52
    Q_INVOKABLE int insertSimpleMissionItem(QGeoCoordinate coordinate, int i);

53 54 55
    /// Add a new complex mission item to the list
    ///     @param i: index to insert at
    /// @return Sequence number for new item
56
    Q_INVOKABLE int insertComplexMissionItem(QGeoCoordinate coordinate, int i);
57

58 59
    // Property accessors

60 61 62 63
    QmlObjectListModel* visualItems         (void) { return _visualItems; }
    QmlObjectListModel* complexVisualItems  (void) { return _complexItems; }
    QmlObjectListModel* waypointLines       (void) { return &_waypointLines; }

64 65
    bool autoSync(void) { return _autoSync; }
    void setAutoSync(bool autoSync);
66
    bool syncInProgress(void);
67

68 69
    static const char* jsonSimpleItemsKey;  ///< Key for simple items in a json file

70
signals:
71 72
    void visualItemsChanged(void);
    void complexVisualItemsChanged(void);
73
    void waypointLinesChanged(void);
74
    void autoSyncChanged(bool autoSync);
75
    void newItemsFromVehicle(void);
76
    void syncInProgressChanged(bool syncInProgress);
77

78
private slots:
79
    void _newMissionItemsAvailableFromVehicle();
80
    void _itemCoordinateChanged(const QGeoCoordinate& coordinate);
81
    void _itemCommandChanged(void);
82
    void _activeVehicleChanged(Vehicle* activeVehicle);
83 84 85 86
    void _activeVehicleHomePositionAvailableChanged(bool homePositionAvailable);
    void _activeVehicleHomePositionChanged(const QGeoCoordinate& homePosition);
    void _dirtyChanged(bool dirty);
    void _inProgressChanged(bool inProgress);
87
    void _currentMissionItemChanged(int sequenceNumber);
88
    void _recalcWaypointLines(void);
89 90

private:
91
    void _recalcSequence(void);
92 93
    void _recalcChildItems(void);
    void _recalcAll(void);
94 95 96 97
    void _initAllVisualItems(void);
    void _deinitAllVisualItems(void);
    void _initVisualItem(VisualMissionItem* item);
    void _deinitVisualItem(VisualMissionItem* item);
98
    void _autoSyncSend(void);
Don Gagne's avatar
Don Gagne committed
99
    void _setupActiveVehicle(Vehicle* activeVehicle, bool forceLoadFromVehicle);
100
    void _calcPrevWaypointValues(double homeAlt, VisualMissionItem* currentItem, VisualMissionItem* prevItem, double* azimuth, double* distance, double* altDifference);
101 102
    bool _findLastAltitude(double* lastAltitude);
    bool _findLastAcceptanceRadius(double* lastAcceptanceRadius);
103
    void _addPlannedHomePosition(QmlObjectListModel* visualItems, bool addToCenter);
104 105
    double _normalizeLat(double lat);
    double _normalizeLon(double lon);
106
    bool _loadJsonMissionFile(const QByteArray& bytes, QmlObjectListModel* visualItems, QmlObjectListModel* complexItems, QString& errorString);
107
    bool _loadTextMissionFile(QTextStream& stream, QmlObjectListModel* visualItems, QString& errorString);
108
    int _nextSequenceNumber(void);
109 110

private:
111
    bool                _editMode;
112 113
    QmlObjectListModel* _visualItems;
    QmlObjectListModel* _complexItems;
114 115
    QmlObjectListModel  _waypointLines;
    Vehicle*            _activeVehicle;
116
    bool                _autoSync;
117
    bool                _firstItemsFromVehicle;
118 119 120
    bool                _missionItemsRequested;
    bool                _queuedSend;

121 122 123 124
    static const char*  _settingsGroup;
    static const char*  _jsonVersionKey;
    static const char*  _jsonGroundStationKey;
    static const char*  _jsonMavAutopilotKey;
125
    static const char*  _jsonComplexItemsKey;
126
    static const char*  _jsonPlannedHomePositionKey;
127 128 129
};

#endif