You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
5.8 KiB
163 lines
5.8 KiB
/**************************************************************************** |
|
* |
|
* (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. |
|
* |
|
****************************************************************************/ |
|
|
|
|
|
#ifndef MissionItem_H |
|
#define MissionItem_H |
|
|
|
#include <QObject> |
|
#include <QString> |
|
#include <QtQml> |
|
#include <QTextStream> |
|
#include <QJsonObject> |
|
#include <QGeoCoordinate> |
|
|
|
#include "QGCMAVLink.h" |
|
#include "QGC.h" |
|
#include "MavlinkQmlSingleton.h" |
|
#include "QmlObjectListModel.h" |
|
#include "Fact.h" |
|
#include "QGCLoggingCategory.h" |
|
#include "QmlObjectListModel.h" |
|
|
|
class SurveyMissionItem; |
|
class SimpleMissionItem; |
|
class MissionController; |
|
#ifdef UNITTEST_BUILD |
|
class MissionItemTest; |
|
#endif |
|
|
|
// Represents a Mavlink mission command. |
|
class MissionItem : public QObject |
|
{ |
|
Q_OBJECT |
|
|
|
public: |
|
MissionItem(QObject* parent = NULL); |
|
|
|
MissionItem(int sequenceNumber, |
|
MAV_CMD command, |
|
MAV_FRAME frame, |
|
double param1, |
|
double param2, |
|
double param3, |
|
double param4, |
|
double param5, |
|
double param6, |
|
double param7, |
|
bool autoContinue, |
|
bool isCurrentItem, |
|
QObject* parent = NULL); |
|
|
|
MissionItem(const MissionItem& other, QObject* parent = NULL); |
|
|
|
~MissionItem(); |
|
|
|
const MissionItem& operator=(const MissionItem& other); |
|
|
|
MAV_CMD command (void) const { return (MAV_CMD)_commandFact.rawValue().toInt(); } |
|
bool isCurrentItem (void) const { return _isCurrentItem; } |
|
int sequenceNumber (void) const { return _sequenceNumber; } |
|
MAV_FRAME frame (void) const { return (MAV_FRAME)_frameFact.rawValue().toInt(); } |
|
bool autoContinue (void) const { return _autoContinueFact.rawValue().toBool(); } |
|
double param1 (void) const { return _param1Fact.rawValue().toDouble(); } |
|
double param2 (void) const { return _param2Fact.rawValue().toDouble(); } |
|
double param3 (void) const { return _param3Fact.rawValue().toDouble(); } |
|
double param4 (void) const { return _param4Fact.rawValue().toDouble(); } |
|
double param5 (void) const { return _param5Fact.rawValue().toDouble(); } |
|
double param6 (void) const { return _param6Fact.rawValue().toDouble(); } |
|
double param7 (void) const { return _param7Fact.rawValue().toDouble(); } |
|
QGeoCoordinate coordinate (void) const; |
|
int doJumpId (void) const { return _doJumpId; } |
|
|
|
/// @return Flight speed change value if this item supports it. If not it returns NaN. |
|
double specifiedFlightSpeed(void) const; |
|
|
|
/// @return Flight gimbal yaw change value if this item supports it. If not it returns NaN. |
|
double specifiedGimbalYaw(void) const; |
|
|
|
/// @return Flight gimbal pitch change value if this item supports it. If not it returns NaN. |
|
double specifiedGimbalPitch(void) const; |
|
|
|
void setCommand (MAV_CMD command); |
|
void setSequenceNumber (int sequenceNumber); |
|
void setIsCurrentItem (bool isCurrentItem); |
|
void setFrame (MAV_FRAME frame); |
|
void setAutoContinue (bool autoContinue); |
|
void setParam1 (double param1); |
|
void setParam2 (double param2); |
|
void setParam3 (double param3); |
|
void setParam4 (double param4); |
|
void setParam5 (double param5); |
|
void setParam6 (double param6); |
|
void setParam7 (double param7); |
|
void setCoordinate (const QGeoCoordinate& coordinate); |
|
|
|
void save(QJsonObject& json) const; |
|
bool load(QTextStream &loadStream); |
|
bool load(const QJsonObject& json, int sequenceNumber, QString& errorString); |
|
|
|
bool relativeAltitude(void) const { return frame() == MAV_FRAME_GLOBAL_RELATIVE_ALT; } |
|
|
|
signals: |
|
void isCurrentItemChanged (bool isCurrentItem); |
|
void sequenceNumberChanged (int sequenceNumber); |
|
void specifiedFlightSpeedChanged(double flightSpeed); |
|
void specifiedGimbalYawChanged (double gimbalYaw); |
|
void specifiedGimbalPitchChanged(double gimbalPitch); |
|
|
|
private slots: |
|
void _param1Changed(QVariant value); |
|
void _param2Changed(QVariant value); |
|
void _param3Changed(QVariant value); |
|
|
|
private: |
|
bool _convertJsonV1ToV2(const QJsonObject& json, QJsonObject& v2Json, QString& errorString); |
|
bool _convertJsonV2ToV3(QJsonObject& json, QString& errorString); |
|
|
|
int _sequenceNumber; |
|
int _doJumpId; |
|
bool _isCurrentItem; |
|
|
|
Fact _autoContinueFact; |
|
Fact _commandFact; |
|
Fact _frameFact; |
|
Fact _param1Fact; |
|
Fact _param2Fact; |
|
Fact _param3Fact; |
|
Fact _param4Fact; |
|
Fact _param5Fact; |
|
Fact _param6Fact; |
|
Fact _param7Fact; |
|
|
|
// Keys for Json save |
|
static const char* _jsonFrameKey; |
|
static const char* _jsonCommandKey; |
|
static const char* _jsonAutoContinueKey; |
|
static const char* _jsonParamsKey; |
|
static const char* _jsonDoJumpIdKey; |
|
|
|
// Deprecated V2 format keys |
|
static const char* _jsonCoordinateKey; |
|
|
|
// Deprecated V1 format keys |
|
static const char* _jsonParam1Key; |
|
static const char* _jsonParam2Key; |
|
static const char* _jsonParam3Key; |
|
static const char* _jsonParam4Key; |
|
|
|
friend class SurveyMissionItem; |
|
friend class SimpleMissionItem; |
|
friend class MissionController; |
|
#ifdef UNITTEST_BUILD |
|
friend class MissionItemTest; |
|
#endif |
|
}; |
|
|
|
#endif
|
|
|