Commit 46582548 authored by Don Gagne's avatar Don Gagne

Mission Unit Test

parent 6b5e89ca
...@@ -511,40 +511,42 @@ INCLUDEPATH += \ ...@@ -511,40 +511,42 @@ INCLUDEPATH += \
src/qgcunittest src/qgcunittest
HEADERS += \ HEADERS += \
src/qgcunittest/FlightGearTest.h \
src/qgcunittest/MultiSignalSpy.h \
src/qgcunittest/TCPLinkTest.h \
src/qgcunittest/TCPLoopBackServer.h \
src/FactSystem/FactSystemTestBase.h \ src/FactSystem/FactSystemTestBase.h \
src/FactSystem/FactSystemTestGeneric.h \ src/FactSystem/FactSystemTestGeneric.h \
src/FactSystem/FactSystemTestPX4.h \ src/FactSystem/FactSystemTestPX4.h \
src/MissionItemTest.h \
src/qgcunittest/FileDialogTest.h \ src/qgcunittest/FileDialogTest.h \
src/qgcunittest/FileManagerTest.h \
src/qgcunittest/FlightGearTest.h \
src/qgcunittest/LinkManagerTest.h \ src/qgcunittest/LinkManagerTest.h \
src/qgcunittest/MainWindowTest.h \ src/qgcunittest/MainWindowTest.h \
src/qgcunittest/MavlinkLogTest.h \ src/qgcunittest/MavlinkLogTest.h \
src/qgcunittest/MessageBoxTest.h \ src/qgcunittest/MessageBoxTest.h \
src/qgcunittest/MultiSignalSpy.h \
src/qgcunittest/PX4RCCalibrationTest.h \
src/qgcunittest/TCPLinkTest.h \
src/qgcunittest/TCPLoopBackServer.h \
src/qgcunittest/UnitTest.h \ src/qgcunittest/UnitTest.h \
src/VehicleSetup/SetupViewTest.h \ src/VehicleSetup/SetupViewTest.h \
src/qgcunittest/FileManagerTest.h \
src/qgcunittest/PX4RCCalibrationTest.h \
SOURCES += \ SOURCES += \
src/qgcunittest/FlightGearTest.cc \
src/qgcunittest/MultiSignalSpy.cc \
src/qgcunittest/TCPLinkTest.cc \
src/qgcunittest/TCPLoopBackServer.cc \
src/FactSystem/FactSystemTestBase.cc \ src/FactSystem/FactSystemTestBase.cc \
src/FactSystem/FactSystemTestGeneric.cc \ src/FactSystem/FactSystemTestGeneric.cc \
src/FactSystem/FactSystemTestPX4.cc \ src/FactSystem/FactSystemTestPX4.cc \
src/MissionItemTest.cc \
src/qgcunittest/FileDialogTest.cc \ src/qgcunittest/FileDialogTest.cc \
src/qgcunittest/FileManagerTest.cc \
src/qgcunittest/FlightGearTest.cc \
src/qgcunittest/LinkManagerTest.cc \ src/qgcunittest/LinkManagerTest.cc \
src/qgcunittest/MainWindowTest.cc \ src/qgcunittest/MainWindowTest.cc \
src/qgcunittest/MavlinkLogTest.cc \ src/qgcunittest/MavlinkLogTest.cc \
src/qgcunittest/MessageBoxTest.cc \ src/qgcunittest/MessageBoxTest.cc \
src/qgcunittest/MultiSignalSpy.cc \
src/qgcunittest/PX4RCCalibrationTest.cc \
src/qgcunittest/TCPLinkTest.cc \
src/qgcunittest/TCPLoopBackServer.cc \
src/qgcunittest/UnitTest.cc \ src/qgcunittest/UnitTest.cc \
src/VehicleSetup/SetupViewTest.cc \ src/VehicleSetup/SetupViewTest.cc \
src/qgcunittest/FileManagerTest.cc \
src/qgcunittest/PX4RCCalibrationTest.cc \
} # DebugBuild|WindowsDebugAndRelease } # DebugBuild|WindowsDebugAndRelease
} # MobileBuild } # MobileBuild
......
...@@ -104,7 +104,8 @@ int MissionEditor::addMissionItem(QGeoCoordinate coordinate) ...@@ -104,7 +104,8 @@ int MissionEditor::addMissionItem(QGeoCoordinate coordinate)
qWarning() << "addMissionItem called with _canEdit == false"; qWarning() << "addMissionItem called with _canEdit == false";
} }
MissionItem * newItem = new MissionItem(this, _missionItems->count(), coordinate); MissionItem * newItem = new MissionItem(this, _missionItems->count(), coordinate, MAV_CMD_NAV_WAYPOINT);
newItem->setAltitude(30);
if (_missionItems->count() == 0) { if (_missionItems->count() == 0) {
newItem->setCommand(MavlinkQmlSingleton::MAV_CMD_NAV_TAKEOFF); newItem->setCommand(MavlinkQmlSingleton::MAV_CMD_NAV_TAKEOFF);
} }
......
...@@ -67,16 +67,17 @@ const MissionItem::MavCmd2Name_t MissionItem::_rgMavCmd2Name[_cMavCmd2Name] = { ...@@ -67,16 +67,17 @@ const MissionItem::MavCmd2Name_t MissionItem::_rgMavCmd2Name[_cMavCmd2Name] = {
MissionItem::MissionItem(QObject* parent, MissionItem::MissionItem(QObject* parent,
int sequenceNumber, int sequenceNumber,
QGeoCoordinate coordinate, QGeoCoordinate coordinate,
int command,
double param1, double param1,
double param2, double param2,
double param3, double param3,
double param4, double param4,
bool autocontinue, bool autocontinue,
bool isCurrentItem, bool isCurrentItem,
int frame, int frame)
int command)
: QObject(parent) : QObject(parent)
, _sequenceNumber(sequenceNumber) , _sequenceNumber(sequenceNumber)
, _frame(-1) // Forces set of _altitudeRelativeToHomeFact
, _command((MavlinkQmlSingleton::Qml_MAV_CMD)command) , _command((MavlinkQmlSingleton::Qml_MAV_CMD)command)
, _autocontinue(autocontinue) , _autocontinue(autocontinue)
, _isCurrentItem(isCurrentItem) , _isCurrentItem(isCurrentItem)
...@@ -219,7 +220,7 @@ void MissionItem::save(QTextStream &saveStream) ...@@ -219,7 +220,7 @@ void MissionItem::save(QTextStream &saveStream)
position = position.arg(y(), 0, 'g', 18); position = position.arg(y(), 0, 'g', 18);
position = position.arg(z(), 0, 'g', 18); position = position.arg(z(), 0, 'g', 18);
QString parameters("%1\t%2\t%3\t%4"); QString parameters("%1\t%2\t%3\t%4");
parameters = parameters.arg(param2(), 0, 'g', 18).arg(param2(), 0, 'g', 18).arg(loiterOrbitRadius(), 0, 'g', 18).arg(yawRadians(), 0, 'g', 18); parameters = parameters.arg(param1(), 0, 'g', 18).arg(param2(), 0, 'g', 18).arg(loiterOrbitRadius(), 0, 'g', 18).arg(yawRadians(), 0, 'g', 18);
// FORMAT: <INDEX> <CURRENT WP> <COORD FRAME> <COMMAND> <PARAM1> <PARAM2> <PARAM3> <PARAM4> <PARAM5/X/LONGITUDE> <PARAM6/Y/LATITUDE> <PARAM7/Z/ALTITUDE> <AUTOCONTINUE> <DESCRIPTION> // FORMAT: <INDEX> <CURRENT WP> <COORD FRAME> <COMMAND> <PARAM1> <PARAM2> <PARAM3> <PARAM4> <PARAM5/X/LONGITUDE> <PARAM6/Y/LATITUDE> <PARAM7/Z/ALTITUDE> <AUTOCONTINUE> <DESCRIPTION>
// as documented here: http://qgroundcontrol.org/waypoint_protocol // as documented here: http://qgroundcontrol.org/waypoint_protocol
saveStream << this->sequenceNumber() << "\t" << this->isCurrentItem() << "\t" << this->frame() << "\t" << this->command() << "\t" << parameters << "\t" << position << "\t" << this->autoContinue() << "\r\n"; //"\t" << this->getDescription() << "\r\n"; saveStream << this->sequenceNumber() << "\t" << this->isCurrentItem() << "\t" << this->frame() << "\t" << this->command() << "\t" << parameters << "\t" << position << "\t" << this->autoContinue() << "\r\n"; //"\t" << this->getDescription() << "\r\n";
...@@ -280,7 +281,7 @@ void MissionItem::setZ(double z) ...@@ -280,7 +281,7 @@ void MissionItem::setZ(double z)
void MissionItem::setLatitude(double lat) void MissionItem::setLatitude(double lat)
{ {
if (_latitudeFact->value().toDouble() != lat && ((_frame == MAV_FRAME_GLOBAL) || (_frame == MAV_FRAME_GLOBAL_RELATIVE_ALT))) if (_latitudeFact->value().toDouble() != lat)
{ {
_latitudeFact->setValue(lat); _latitudeFact->setValue(lat);
emit changed(this); emit changed(this);
...@@ -290,7 +291,7 @@ void MissionItem::setLatitude(double lat) ...@@ -290,7 +291,7 @@ void MissionItem::setLatitude(double lat)
void MissionItem::setLongitude(double lon) void MissionItem::setLongitude(double lon)
{ {
if (_longitudeFact->value().toDouble() != lon && ((_frame == MAV_FRAME_GLOBAL) || (_frame == MAV_FRAME_GLOBAL_RELATIVE_ALT))) if (_longitudeFact->value().toDouble() != lon)
{ {
_longitudeFact->setValue(lon); _longitudeFact->setValue(lon);
emit changed(this); emit changed(this);
...@@ -300,7 +301,7 @@ void MissionItem::setLongitude(double lon) ...@@ -300,7 +301,7 @@ void MissionItem::setLongitude(double lon)
void MissionItem::setAltitude(double altitude) void MissionItem::setAltitude(double altitude)
{ {
if (_altitudeFact->value().toDouble() != altitude && ((_frame == MAV_FRAME_GLOBAL) || (_frame == MAV_FRAME_GLOBAL_RELATIVE_ALT))) if (_altitudeFact->value().toDouble() != altitude)
{ {
_altitudeFact->setValue(altitude); _altitudeFact->setValue(altitude);
emit changed(this); emit changed(this);
...@@ -349,7 +350,7 @@ int MissionItem::frame(void) const ...@@ -349,7 +350,7 @@ int MissionItem::frame(void) const
void MissionItem::setFrame(int /*MAV_FRAME*/ frame) void MissionItem::setFrame(int /*MAV_FRAME*/ frame)
{ {
if (_frame != frame) { if (_frame != frame) {
_altitudeRelativeToHomeFact->setValue(_frame == MAV_FRAME_GLOBAL_RELATIVE_ALT); _altitudeRelativeToHomeFact->setValue(frame == MAV_FRAME_GLOBAL_RELATIVE_ALT);
_frame = frame; _frame = frame;
emit changed(this); emit changed(this);
} }
......
...@@ -47,14 +47,14 @@ public: ...@@ -47,14 +47,14 @@ public:
MissionItem(QObject *parent = 0, MissionItem(QObject *parent = 0,
int sequenceNumber = 0, int sequenceNumber = 0,
QGeoCoordinate coordiante = QGeoCoordinate(), QGeoCoordinate coordiante = QGeoCoordinate(),
int action = MAV_CMD_NAV_WAYPOINT,
double param1 = 0.0, double param1 = 0.0,
double param2 = 0.0, double param2 = 0.0,
double param3 = 0.0, double param3 = 0.0,
double param4 = 0.0, double param4 = 0.0,
bool autocontinue = true, bool autocontinue = true,
bool isCurrentItem = false, bool isCurrentItem = false,
int frame = MAV_FRAME_GLOBAL, int frame = MAV_FRAME_GLOBAL_RELATIVE_ALT);
int action = MAV_CMD_NAV_WAYPOINT);
MissionItem(const MissionItem& other, QObject* parent = NULL); MissionItem(const MissionItem& other, QObject* parent = NULL);
~MissionItem(); ~MissionItem();
......
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009 - 2014 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
#include "MissionItemTest.h"
UT_REGISTER_TEST(MissionItemTest)
const MissionItemTest::ItemInfo_t MissionItemTest::_rgItemInfo[] = {
{ 1, QGeoCoordinate(-10.0, -20.0, -30.0), MAV_CMD_NAV_WAYPOINT, 10.0, 20.0, 30.0, 40.0, true, false, MAV_FRAME_GLOBAL_RELATIVE_ALT },
{ 1, QGeoCoordinate(-10.0, -20.0, -30.0), MAV_CMD_NAV_LOITER_UNLIM, 10.0, 20.0, 30.0, 40.0, true, false, MAV_FRAME_GLOBAL_RELATIVE_ALT },
{ 1, QGeoCoordinate(-10.0, -20.0, -30.0), MAV_CMD_NAV_LOITER_TURNS, 10.0, 20.0, 30.0, 40.0, true, false, MAV_FRAME_GLOBAL_RELATIVE_ALT },
{ 1, QGeoCoordinate(-10.0, -20.0, -30.0), MAV_CMD_NAV_LOITER_TIME, 10.0, 20.0, 30.0, 40.0, true, false, MAV_FRAME_GLOBAL_RELATIVE_ALT },
{ 1, QGeoCoordinate(-10.0, -20.0, -30.0), MAV_CMD_NAV_LAND, 10.0, 20.0, 30.0, 40.0, true, false, MAV_FRAME_GLOBAL_RELATIVE_ALT },
{ 1, QGeoCoordinate(-10.0, -20.0, -30.0), MAV_CMD_NAV_TAKEOFF, 10.0, 20.0, 30.0, 40.0, true, false, MAV_FRAME_GLOBAL_RELATIVE_ALT },
{ 1, QGeoCoordinate(-10.0, -20.0, -30.0), MAV_CMD_CONDITION_DELAY, 10.0, 20.0, 30.0, 40.0, true, false, MAV_FRAME_MISSION },
{ 1, QGeoCoordinate(-10.0, -20.0, -30.0), MAV_CMD_DO_JUMP, 10.0, 20.0, 30.0, 40.0, true, false, MAV_FRAME_MISSION },
};
const MissionItemTest::FactValue_t MissionItemTest::_rgFactValuesWaypoint[] = {
{ "Latitude:", -10.0 },
{ "Longitude:", -20.0 },
{ "Altitude:", -30.0 },
{ "Heading:", 40.0 },
{ "Radius:", 20.0 },
{ "Hold:", 10.0 },
};
const MissionItemTest::FactValue_t MissionItemTest::_rgFactValuesLoiterUnlim[] = {
{ "Latitude:", -10.0 },
{ "Longitude:", -20.0 },
{ "Altitude:", -30.0 },
{ "Heading:", 40.0 },
{ "Radius:", 30.0 },
};
const MissionItemTest::FactValue_t MissionItemTest::_rgFactValuesLoiterTurns[] = {
{ "Latitude:", -10.0 },
{ "Longitude:", -20.0 },
{ "Altitude:", -30.0 },
{ "Heading:", 40.0 },
{ "Radius:", 30.0 },
{ "Turns:", 10.0 },
};
const MissionItemTest::FactValue_t MissionItemTest::_rgFactValuesLoiterTime[] = {
{ "Latitude:", -10.0 },
{ "Longitude:", -20.0 },
{ "Altitude:", -30.0 },
{ "Heading:", 40.0 },
{ "Radius:", 30.0 },
{ "Seconds:", 10.0 },
};
const MissionItemTest::FactValue_t MissionItemTest::_rgFactValuesLand[] = {
{ "Latitude:", -10.0 },
{ "Longitude:", -20.0 },
{ "Altitude:", -30.0 },
{ "Heading:", 40.0 },
};
const MissionItemTest::FactValue_t MissionItemTest::_rgFactValuesTakeoff[] = {
{ "Latitude:", -10.0 },
{ "Longitude:", -20.0 },
{ "Altitude:", -30.0 },
{ "Heading:", 40.0 },
{ "Pitch:", 10.0 },
};
const MissionItemTest::FactValue_t MissionItemTest::_rgFactValuesConditionDelay[] = {
{ "Seconds:", 10.0 },
};
const MissionItemTest::FactValue_t MissionItemTest::_rgFactValuesDoJump[] = {
{ "Seq #:", 10.0 },
{ "Repeat:", 20.0 },
};
const MissionItemTest::ItemExpected_t MissionItemTest::_rgItemExpected[] = {
{ "1\t0\t3\t16\t10\t20\t30\t40\t-10\t-20\t-30\t1\r\n", sizeof(MissionItemTest::_rgFactValuesWaypoint)/sizeof(MissionItemTest::_rgFactValuesWaypoint[0]), MissionItemTest::_rgFactValuesWaypoint },
{ "1\t0\t3\t17\t10\t20\t30\t40\t-10\t-20\t-30\t1\r\n", sizeof(MissionItemTest::_rgFactValuesLoiterUnlim)/sizeof(MissionItemTest::_rgFactValuesLoiterUnlim[0]), MissionItemTest::_rgFactValuesLoiterUnlim },
{ "1\t0\t3\t18\t10\t20\t30\t40\t-10\t-20\t-30\t1\r\n", sizeof(MissionItemTest::_rgFactValuesLoiterTurns)/sizeof(MissionItemTest::_rgFactValuesLoiterTurns[0]), MissionItemTest::_rgFactValuesLoiterTurns },
{ "1\t0\t3\t19\t10\t20\t30\t40\t-10\t-20\t-30\t1\r\n", sizeof(MissionItemTest::_rgFactValuesLoiterTime)/sizeof(MissionItemTest::_rgFactValuesLoiterTime[0]), MissionItemTest::_rgFactValuesLoiterTime },
{ "1\t0\t3\t21\t10\t20\t30\t40\t-10\t-20\t-30\t1\r\n", sizeof(MissionItemTest::_rgFactValuesLand)/sizeof(MissionItemTest::_rgFactValuesLand[0]), MissionItemTest::_rgFactValuesLand },
{ "1\t0\t3\t22\t10\t20\t30\t40\t-10\t-20\t-30\t1\r\n", sizeof(MissionItemTest::_rgFactValuesTakeoff)/sizeof(MissionItemTest::_rgFactValuesTakeoff[0]), MissionItemTest::_rgFactValuesTakeoff },
{ "1\t0\t2\t112\t10\t20\t30\t40\t-10\t-20\t-30\t1\r\n", sizeof(MissionItemTest::_rgFactValuesConditionDelay)/sizeof(MissionItemTest::_rgFactValuesConditionDelay[0]), MissionItemTest::_rgFactValuesConditionDelay },
{ "1\t0\t2\t177\t10\t20\t30\t40\t-10\t-20\t-30\t1\r\n", sizeof(MissionItemTest::_rgFactValuesDoJump)/sizeof(MissionItemTest::_rgFactValuesDoJump[0]), MissionItemTest::_rgFactValuesDoJump },
};
MissionItemTest::MissionItemTest(void)
{
}
void MissionItemTest::_test(void)
{
for (size_t i=0; i<sizeof(_rgItemInfo)/sizeof(_rgItemInfo[0]); i++) {
const ItemInfo_t* info = &_rgItemInfo[i];
const ItemExpected_t* expected = &_rgItemExpected[i];
qDebug() << "Command:" << info->command;
MissionItem* item = new MissionItem(NULL,
info->sequenceNumber,
info->coordinate,
info->command,
info->param1,
info->param2,
info->param3,
info->param4,
info->autocontinue,
info->isCurrentItem,
info->frame);
// Validate the saving is working correctly
QString savedItemString;
QTextStream saveStream(&savedItemString, QIODevice::WriteOnly);
item->save(saveStream);
QCOMPARE(savedItemString, QString(expected->streamString));
// Validate that the fact values are correctly returned
size_t factCount = 0;
for (int i=0; i<item->textFieldFacts()->count(); i++) {
Fact* fact = qobject_cast<Fact*>(item->textFieldFacts()->get(i));
bool found = false;
for (size_t j=0; j<expected->cFactValues; j++) {
const FactValue_t* factValue = &expected->rgFactValues[j];
if (factValue->name == fact->name()) {
qDebug() << factValue->name;
QCOMPARE(fact->value().toDouble(), factValue->value);
factCount ++;
found = true;
break;
}
}
QVERIFY(found);
}
QCOMPARE(factCount, expected->cFactValues);
// Validate that loading is working correctly
MissionItem* loadedItem = new MissionItem();
QTextStream loadStream(&savedItemString, QIODevice::ReadOnly);
QVERIFY(loadedItem->load(loadStream));
//qDebug() << savedItemString;
QCOMPARE(loadedItem->coordinate().latitude(), item->coordinate().latitude());
QCOMPARE(loadedItem->coordinate().longitude(), item->coordinate().longitude());
QCOMPARE(loadedItem->coordinate().altitude(), item->coordinate().altitude());
QCOMPARE(loadedItem->command(), item->command());
QCOMPARE(loadedItem->param1(), item->param1());
QCOMPARE(loadedItem->param2(), item->param2());
QCOMPARE(loadedItem->param3(), item->param3());
QCOMPARE(loadedItem->param4(), item->param4());
QCOMPARE(loadedItem->autoContinue(), item->autoContinue());
QCOMPARE(loadedItem->isCurrentItem(), item->isCurrentItem());
QCOMPARE(loadedItem->frame(), item->frame());
delete item;
delete loadedItem;
}
}
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009 - 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
#ifndef MissionItemTest_H
#define MissionItemTest_H
#include "UnitTest.h"
#include "TCPLink.h"
#include "MultiSignalSpy.h"
/// @file
/// @brief FlightGear HIL Simulation unit tests
///
/// @author Don Gagne <don@thegagnes.com>
class MissionItemTest : public UnitTest
{
Q_OBJECT
public:
MissionItemTest(void);
private slots:
void _test(void);
private:
typedef struct {
int sequenceNumber;
QGeoCoordinate coordinate;
int command;
double param1;
double param2;
double param3;
double param4;
bool autocontinue;
bool isCurrentItem;
int frame;
} ItemInfo_t;
typedef struct {
const char* name;
double value;
} FactValue_t;
typedef struct {
const char* streamString;
size_t cFactValues;
const FactValue_t* rgFactValues;
} ItemExpected_t;
static const ItemInfo_t _rgItemInfo[];
static const ItemExpected_t _rgItemExpected[];
static const FactValue_t _rgFactValuesWaypoint[];
static const FactValue_t _rgFactValuesLoiterUnlim[];
static const FactValue_t _rgFactValuesLoiterTurns[];
static const FactValue_t _rgFactValuesLoiterTime[];
static const FactValue_t _rgFactValuesLand[];
static const FactValue_t _rgFactValuesTakeoff[];
static const FactValue_t _rgFactValuesConditionDelay[];
static const FactValue_t _rgFactValuesDoJump[];
};
#endif
...@@ -222,14 +222,14 @@ void MissionManager::_handleMissionItem(const mavlink_message_t& message) ...@@ -222,14 +222,14 @@ void MissionManager::_handleMissionItem(const mavlink_message_t& message)
MissionItem* item = new MissionItem(this, MissionItem* item = new MissionItem(this,
missionItem.seq, missionItem.seq,
QGeoCoordinate(missionItem.x, missionItem.y, missionItem.z), QGeoCoordinate(missionItem.x, missionItem.y, missionItem.z),
missionItem.command,
missionItem.param1, missionItem.param1,
missionItem.param2, missionItem.param2,
missionItem.param3, missionItem.param3,
missionItem.param3, missionItem.param3,
missionItem.autocontinue, missionItem.autocontinue,
missionItem.current, missionItem.current,
missionItem.frame, missionItem.frame);
missionItem.command);
_missionItems.append(item); _missionItems.append(item);
if (!item->canEdit()) { if (!item->canEdit()) {
......
...@@ -162,7 +162,9 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting) ...@@ -162,7 +162,9 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting)
, _runningUnitTests(unitTesting) , _runningUnitTests(unitTesting)
, _styleIsDark(true) , _styleIsDark(true)
, _fakeMobile(false) , _fakeMobile(false)
, _useNewMissionEditor(false) #ifdef UNITTEST_BUILD
, _useNewMissionEditor(true) // Unit Tests run new mission editor
#endif
#ifdef QT_DEBUG #ifdef QT_DEBUG
, _testHighDPI(false) , _testHighDPI(false)
#endif #endif
......
...@@ -199,14 +199,14 @@ void UASWaypointManager::handleWaypoint(quint8 systemId, quint8 compId, mavlink_ ...@@ -199,14 +199,14 @@ void UASWaypointManager::handleWaypoint(quint8 systemId, quint8 compId, mavlink_
MissionItem *lwp_vo = new MissionItem(NULL, MissionItem *lwp_vo = new MissionItem(NULL,
wp->seq, wp->seq,
QGeoCoordinate(wp->x, wp->y, wp->z), QGeoCoordinate(wp->x, wp->y, wp->z),
(MAV_CMD) wp->command,
wp->param1, wp->param1,
wp->param2, wp->param2,
wp->param3, wp->param3,
wp->param4, wp->param4,
wp->autocontinue, wp->autocontinue,
wp->current, wp->current,
(MAV_FRAME) wp->frame, (MAV_FRAME) wp->frame);
(MAV_CMD) wp->command);
addWaypointViewOnly(lwp_vo); addWaypointViewOnly(lwp_vo);
...@@ -214,14 +214,14 @@ void UASWaypointManager::handleWaypoint(quint8 systemId, quint8 compId, mavlink_ ...@@ -214,14 +214,14 @@ void UASWaypointManager::handleWaypoint(quint8 systemId, quint8 compId, mavlink_
MissionItem *lwp_ed = new MissionItem(NULL, MissionItem *lwp_ed = new MissionItem(NULL,
wp->seq, wp->seq,
QGeoCoordinate(wp->x, wp->y, wp->z), QGeoCoordinate(wp->x, wp->y, wp->z),
(MAV_CMD) wp->command,
wp->param1, wp->param1,
wp->param2, wp->param2,
wp->param3, wp->param3,
wp->param4, wp->param4,
wp->autocontinue, wp->autocontinue,
wp->current, wp->current,
(MAV_FRAME) wp->frame, (MAV_FRAME) wp->frame);
(MAV_CMD) wp->command);
addWaypointEditable(lwp_ed, false); addWaypointEditable(lwp_ed, false);
if (wp->current == 1) currentWaypointEditable = lwp_ed; if (wp->current == 1) currentWaypointEditable = lwp_ed;
} }
...@@ -256,14 +256,14 @@ void UASWaypointManager::handleWaypoint(quint8 systemId, quint8 compId, mavlink_ ...@@ -256,14 +256,14 @@ void UASWaypointManager::handleWaypoint(quint8 systemId, quint8 compId, mavlink_
MissionItem *lwp_vo = new MissionItem(NULL, MissionItem *lwp_vo = new MissionItem(NULL,
wp->seq, wp->seq,
QGeoCoordinate(wp->x, wp->y, wp->z), QGeoCoordinate(wp->x, wp->y, wp->z),
(MAV_CMD) wp->command,
wp->param1, wp->param1,
wp->param2, wp->param2,
wp->param3, wp->param3,
wp->param4, wp->param4,
wp->autocontinue, wp->autocontinue,
wp->current, wp->current,
(MAV_FRAME) wp->frame, (MAV_FRAME) wp->frame);
(MAV_CMD) wp->command);
waypointsViewOnly.replace(wp->seq, lwp_vo); waypointsViewOnly.replace(wp->seq, lwp_vo);
emit waypointViewOnlyListChanged(); emit waypointViewOnlyListChanged();
......
...@@ -304,9 +304,17 @@ void WaypointList::addEditable(bool onCurrentPosition) ...@@ -304,9 +304,17 @@ void WaypointList::addEditable(bool onCurrentPosition)
} else { } else {
updateStatusLabel(tr("Added default GLOBAL (Relative alt.) waypoint.")); updateStatusLabel(tr("Added default GLOBAL (Relative alt.) waypoint."));
} }
wp = new MissionItem(NULL, 0, wp = new MissionItem(NULL,
0,
QGeoCoordinate(uas->getLatitude(), uas->getLongitude(), uas->getAltitudeAMSL()), QGeoCoordinate(uas->getLatitude(), uas->getLongitude(), uas->getAltitudeAMSL()),
0, WPM->getAcceptanceRadiusRecommendation(), 0, 0,true, true, (MAV_FRAME)WPM->getFrameRecommendation(), MAV_CMD_NAV_WAYPOINT); MAV_CMD_NAV_WAYPOINT,
0,
WPM->getAcceptanceRadiusRecommendation(),
0,
0,
true,
true,
(MAV_FRAME)WPM->getFrameRecommendation());
WPM->addWaypointEditable(wp); WPM->addWaypointEditable(wp);
} else { } else {
...@@ -316,9 +324,17 @@ void WaypointList::addEditable(bool onCurrentPosition) ...@@ -316,9 +324,17 @@ void WaypointList::addEditable(bool onCurrentPosition)
} else { } else {
updateStatusLabel(tr("Added default GLOBAL (Relative alt.) waypoint.")); updateStatusLabel(tr("Added default GLOBAL (Relative alt.) waypoint."));
} }
wp = new MissionItem(NULL, 0, wp = new MissionItem(NULL,
0,
QGeoCoordinate(HomePositionManager::instance()->getHomeLatitude(), HomePositionManager::instance()->getHomeLongitude(), WPM->getAltitudeRecommendation()), QGeoCoordinate(HomePositionManager::instance()->getHomeLatitude(), HomePositionManager::instance()->getHomeLongitude(), WPM->getAltitudeRecommendation()),
0, WPM->getAcceptanceRadiusRecommendation(), 0, 0,true, true, (MAV_FRAME)WPM->getFrameRecommendation(), MAV_CMD_NAV_WAYPOINT); MAV_CMD_NAV_WAYPOINT,
0,
WPM->getAcceptanceRadiusRecommendation(),
0,
0,
true,
true,
(MAV_FRAME)WPM->getFrameRecommendation());
WPM->addWaypointEditable(wp); WPM->addWaypointEditable(wp);
} }
} }
...@@ -327,15 +343,31 @@ void WaypointList::addEditable(bool onCurrentPosition) ...@@ -327,15 +343,31 @@ void WaypointList::addEditable(bool onCurrentPosition)
if (onCurrentPosition) if (onCurrentPosition)
{ {
updateStatusLabel(tr("Added default LOCAL (NED) waypoint.")); updateStatusLabel(tr("Added default LOCAL (NED) waypoint."));
wp = new MissionItem(NULL, 0, wp = new MissionItem(NULL,
0,
QGeoCoordinate(uas->getLocalX(), uas->getLocalY(), uas->getLocalZ()), QGeoCoordinate(uas->getLocalX(), uas->getLocalY(), uas->getLocalZ()),
0, WPM->getAcceptanceRadiusRecommendation(), 0, 0,true, true, MAV_FRAME_LOCAL_NED, MAV_CMD_NAV_WAYPOINT); MAV_CMD_NAV_WAYPOINT,
0,
WPM->getAcceptanceRadiusRecommendation(),
0,
0,
true,
true,
MAV_FRAME_LOCAL_NED);
WPM->addWaypointEditable(wp); WPM->addWaypointEditable(wp);
} else { } else {
updateStatusLabel(tr("Added default LOCAL (NED) waypoint.")); updateStatusLabel(tr("Added default LOCAL (NED) waypoint."));
wp = new MissionItem(0, 0, wp = new MissionItem(0,
0,
QGeoCoordinate(0, 0, -0.50), QGeoCoordinate(0, 0, -0.50),
0, WPM->getAcceptanceRadiusRecommendation(), 0, 0,true, true, MAV_FRAME_LOCAL_NED, MAV_CMD_NAV_WAYPOINT); MAV_CMD_NAV_WAYPOINT,
0,
WPM->getAcceptanceRadiusRecommendation(),
0,
0,
true,
true,
MAV_FRAME_LOCAL_NED);
WPM->addWaypointEditable(wp); WPM->addWaypointEditable(wp);
} }
} }
...@@ -343,9 +375,17 @@ void WaypointList::addEditable(bool onCurrentPosition) ...@@ -343,9 +375,17 @@ void WaypointList::addEditable(bool onCurrentPosition)
{ {
// MAV connected, but position unknown, add default waypoint // MAV connected, but position unknown, add default waypoint
updateStatusLabel(tr("WARNING: No position known. Adding default LOCAL (NED) waypoint")); updateStatusLabel(tr("WARNING: No position known. Adding default LOCAL (NED) waypoint"));
wp = new MissionItem(NULL, 0, wp = new MissionItem(NULL,
0,
QGeoCoordinate(HomePositionManager::instance()->getHomeLatitude(), HomePositionManager::instance()->getHomeLongitude(), WPM->getAltitudeRecommendation()), QGeoCoordinate(HomePositionManager::instance()->getHomeLatitude(), HomePositionManager::instance()->getHomeLongitude(), WPM->getAltitudeRecommendation()),
0, WPM->getAcceptanceRadiusRecommendation(), 0, 0,true, true, (MAV_FRAME)WPM->getFrameRecommendation(), MAV_CMD_NAV_WAYPOINT); MAV_CMD_NAV_WAYPOINT,
0,
WPM->getAcceptanceRadiusRecommendation(),
0,
0,
true,
true,
(MAV_FRAME)WPM->getFrameRecommendation());
WPM->addWaypointEditable(wp); WPM->addWaypointEditable(wp);
} }
} }
...@@ -353,9 +393,17 @@ void WaypointList::addEditable(bool onCurrentPosition) ...@@ -353,9 +393,17 @@ void WaypointList::addEditable(bool onCurrentPosition)
{ {
//Since no UAV available, create first default waypoint. //Since no UAV available, create first default waypoint.
updateStatusLabel(tr("No UAV connected. Adding default GLOBAL (NED) waypoint")); updateStatusLabel(tr("No UAV connected. Adding default GLOBAL (NED) waypoint"));
wp = new MissionItem(NULL, 0, wp = new MissionItem(NULL,
0,
QGeoCoordinate(HomePositionManager::instance()->getHomeLatitude(), HomePositionManager::instance()->getHomeLongitude(), WPM->getAltitudeRecommendation()), QGeoCoordinate(HomePositionManager::instance()->getHomeLatitude(), HomePositionManager::instance()->getHomeLongitude(), WPM->getAltitudeRecommendation()),
0, WPM->getAcceptanceRadiusRecommendation(), 0, 0,true, true, (MAV_FRAME)WPM->getFrameRecommendation(), MAV_CMD_NAV_WAYPOINT); MAV_CMD_NAV_WAYPOINT,
0,
WPM->getAcceptanceRadiusRecommendation(),
0,
0,
true,
true,
(MAV_FRAME)WPM->getFrameRecommendation());
WPM->addWaypointEditable(wp); WPM->addWaypointEditable(wp);
} }
} }
......
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