QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MissionItem.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QObject>
4#include <QtCore/QString>
5#include <QtCore/QTextStream>
6#include <QtCore/QJsonObject>
7#include <QtPositioning/QGeoCoordinate>
8#include <QtQmlIntegration/QtQmlIntegration>
9
10#include "Fact.h"
11#include "QGCMAVLink.h"
12
16#ifdef QGC_UNITTEST_BUILD
17 class MissionItemTest;
18#endif
19
20// Represents a Mavlink mission command.
21class MissionItem : public QObject
22{
23 Q_OBJECT
24 QML_ELEMENT
25 QML_UNCREATABLE("")
26public:
27 MissionItem(QObject* parent = nullptr);
28
30 MAV_CMD command,
31 MAV_FRAME frame,
32 double param1,
33 double param2,
34 double param3,
35 double param4,
36 double param5,
37 double param6,
38 double param7,
39 bool autoContinue,
40 bool isCurrentItem,
41 QObject* parent = nullptr);
42
43 MissionItem(const MissionItem& other, QObject* parent = nullptr);
44
46
47 const MissionItem& operator=(const MissionItem& other);
48
49 MAV_CMD command (void) const { return (MAV_CMD)_commandFact.rawValue().toInt(); }
50 bool isCurrentItem (void) const { return _isCurrentItem; }
51 int sequenceNumber (void) const { return _sequenceNumber; }
52 MAV_FRAME frame (void) const { return (MAV_FRAME)_frameFact.rawValue().toInt(); }
53 bool autoContinue (void) const { return _autoContinueFact.rawValue().toBool(); }
54 double param1 (void) const { return _param1Fact.rawValue().toDouble(); }
55 double param2 (void) const { return _param2Fact.rawValue().toDouble(); }
56 double param3 (void) const { return _param3Fact.rawValue().toDouble(); }
57 double param4 (void) const { return _param4Fact.rawValue().toDouble(); }
58 double param5 (void) const { return _param5Fact.rawValue().toDouble(); }
59 double param6 (void) const { return _param6Fact.rawValue().toDouble(); }
60 double param7 (void) const { return _param7Fact.rawValue().toDouble(); }
61 QGeoCoordinate coordinate (void) const;
62 int doJumpId (void) const { return _doJumpId; }
63
65 double specifiedFlightSpeed(void) const;
66
68 double specifiedGimbalYaw(void) const;
69
71 double specifiedGimbalPitch(void) const;
72
73 void setCommand (MAV_CMD command);
76 void setFrame (MAV_FRAME frame);
77 void setAutoContinue (bool autoContinue);
78 void setParam1 (double param1);
79 void setParam2 (double param2);
80 void setParam3 (double param3);
81 void setParam4 (double param4);
82 void setParam5 (double param5);
83 void setParam6 (double param6);
84 void setParam7 (double param7);
85
86 void save(QJsonObject& json) const;
87 bool load(QTextStream &loadStream);
88 bool load(const QJsonObject& json, int sequenceNumber, QString& errorString);
89
90 bool relativeAltitude(void) const { return frame() == MAV_FRAME_GLOBAL_RELATIVE_ALT; }
91
92signals:
95 void specifiedFlightSpeedChanged(double flightSpeed);
96 void specifiedGimbalYawChanged (double gimbalYaw);
97 void specifiedGimbalPitchChanged(double gimbalPitch);
98
99private slots:
100 void _param1Changed(QVariant value);
101 void _param2Changed(QVariant value);
102 void _param3Changed(QVariant value);
103
104private:
105 bool _convertJsonV1ToV2(const QJsonObject& json, QJsonObject& v2Json, QString& errorString);
106 bool _convertJsonV2ToV3(QJsonObject& json, QString& errorString);
107
108 int _sequenceNumber;
109 int _doJumpId;
110 bool _isCurrentItem;
111
112 Fact _autoContinueFact;
113 Fact _commandFact;
114 Fact _frameFact;
115 Fact _param1Fact;
116 Fact _param2Fact;
117 Fact _param3Fact;
118 Fact _param4Fact;
119 Fact _param5Fact;
120 Fact _param6Fact;
121 Fact _param7Fact;
122
123 // Keys for Json save
124 static constexpr const char* _jsonFrameKey = "frame";
125 static constexpr const char* _jsonCommandKey = "command";
126 static constexpr const char* _jsonAutoContinueKey = "autoContinue";
127 static constexpr const char* _jsonParamsKey = "params";
128 static constexpr const char* _jsonDoJumpIdKey = "doJumpId";
129
130 // Deprecated V1 format keys
131 static constexpr const char* _jsonParam1Key = "param1";
132 static constexpr const char* _jsonParam2Key = "param2";
133 static constexpr const char* _jsonParam3Key = "param3";
134 static constexpr const char* _jsonParam4Key = "param4";
135
136 // Deprecated V2 format keys
137 static constexpr const char* _jsonCoordinateKey = "coordinate";
138
139 friend class SurveyComplexItem;
140 friend class SimpleMissionItem;
141 friend class MissionController;
142#ifdef QGC_UNITTEST_BUILD
143 friend class MissionItemTest;
144#endif
145};
QString errorString
A Fact is used to hold a single value within the system.
Definition Fact.h:19
double specifiedGimbalPitch(void) const
MAV_CMD command(void) const
Definition MissionItem.h:49
double specifiedFlightSpeed(void) const
void isCurrentItemChanged(bool isCurrentItem)
void specifiedGimbalYawChanged(double gimbalYaw)
void specifiedFlightSpeedChanged(double flightSpeed)
void setFrame(MAV_FRAME frame)
double param5(void) const
Definition MissionItem.h:58
void setParam7(double param7)
void setParam4(double param4)
double specifiedGimbalYaw(void) const
void setAutoContinue(bool autoContinue)
bool relativeAltitude(void) const
Definition MissionItem.h:90
void setParam6(double param6)
double param7(void) const
Definition MissionItem.h:60
void setParam1(double param1)
MAV_FRAME frame(void) const
Definition MissionItem.h:52
void save(QJsonObject &json) const
const MissionItem & operator=(const MissionItem &other)
void setParam3(double param3)
void setIsCurrentItem(bool isCurrentItem)
bool autoContinue(void) const
Definition MissionItem.h:53
bool isCurrentItem(void) const
Definition MissionItem.h:50
double param3(void) const
Definition MissionItem.h:56
double param6(void) const
Definition MissionItem.h:59
double param1(void) const
Definition MissionItem.h:54
QGeoCoordinate coordinate(void) const
void setParam2(double param2)
int doJumpId(void) const
Definition MissionItem.h:62
int sequenceNumber(void) const
Definition MissionItem.h:51
double param4(void) const
Definition MissionItem.h:57
void specifiedGimbalPitchChanged(double gimbalPitch)
void setSequenceNumber(int sequenceNumber)
double param2(void) const
Definition MissionItem.h:55
void sequenceNumberChanged(int sequenceNumber)
bool load(QTextStream &loadStream)
void setParam5(double param5)
void setCommand(MAV_CMD command)
A SimpleMissionItem is used to represent a single MissionItem to the ui.