diff --git a/src/MissionManager/MavCmdInfo.json b/src/MissionManager/MavCmdInfo.json index 91dd41a9c01b3ed995959151e513883a038ba953..b3737f3a0f41c4743d1310ead247455ff6f2a429 100644 --- a/src/MissionManager/MavCmdInfo.json +++ b/src/MissionManager/MavCmdInfo.json @@ -25,6 +25,12 @@ "units": "seconds", "default": 0, "decimalPlaces": 0 + }, + "param2": { + "label": "Accept radius:", + "units": "meters", + "default": 3.0, + "decimalPlaces": 2 } }, { diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 38811c5c39a07642c7327f49c6146962192c799b..6b385dfbe88a9983a855ebc6907b9e3e5f446e14 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -169,7 +169,14 @@ int MissionController::addMissionItem(QGeoCoordinate coordinate) } newItem->setDefaultsForCommand(); if ((MAV_CMD)newItem->command() == MAV_CMD_NAV_WAYPOINT) { - newItem->setParam7(_findLastAltitude()); + double lastValue; + + if (_findLastAcceptanceRadius(&lastValue)) { + newItem->setParam2(lastValue); + } + if (_findLastAltitude(&lastValue)) { + newItem->setParam7(lastValue); + } } _missionItems->append(newItem); @@ -611,17 +618,44 @@ QmlObjectListModel* MissionController::missionItems(void) return _missionItems; } -double MissionController::_findLastAltitude(void) +bool MissionController::_findLastAltitude(double* lastAltitude) { - double lastAltitude = MissionItem::defaultAltitude; + bool found = false; + double foundAltitude; for (int i=0; i<_missionItems->count(); i++) { MissionItem* item = qobject_cast(_missionItems->get(i)); if (item->specifiesCoordinate()) { - lastAltitude = item->param7(); + foundAltitude = item->param7(); + found = true; } } - return lastAltitude; + if (found) { + *lastAltitude = foundAltitude; + } + + return found; +} + +bool MissionController::_findLastAcceptanceRadius(double* lastAcceptanceRadius) +{ + bool found = false; + double foundAcceptanceRadius; + + for (int i=0; i<_missionItems->count(); i++) { + MissionItem* item = qobject_cast(_missionItems->get(i)); + + if ((MAV_CMD)item->command() == MAV_CMD_NAV_WAYPOINT) { + foundAcceptanceRadius = item->param2(); + found = true; + } + } + + if (found) { + *lastAcceptanceRadius = foundAcceptanceRadius; + } + + return found; } diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h index daeea3f23a08c128dd43bf37c1bb0e5f5e0bb0f8..3c023617c2d7d9fbfdda514c44efaf511b084204 100644 --- a/src/MissionManager/MissionController.h +++ b/src/MissionManager/MissionController.h @@ -95,7 +95,8 @@ private: void _setupMissionItems(bool loadFromVehicle, bool forceLoad); void _setupActiveVehicle(Vehicle* activeVehicle, bool forceLoadFromVehicle); void _calcPrevWaypointValues(bool homePositionValid, double homeAlt, MissionItem* item1, MissionItem* item2, double* azimuth, double* distance); - double _findLastAltitude(void); + bool _findLastAltitude(double* lastAltitude); + bool _findLastAcceptanceRadius(double* lastAcceptanceRadius); private: bool _editMode; diff --git a/src/MissionManager/MissionItem.cc b/src/MissionManager/MissionItem.cc index f8f7c031752f151ee9c45d387e7cb20ae61acd8a..dbc135e16c32cb5a210d8f51f81ff1e9221cafca 100644 --- a/src/MissionManager/MissionItem.cc +++ b/src/MissionManager/MissionItem.cc @@ -29,12 +29,7 @@ This file is part of the QGROUNDCONTROL project QGC_LOGGING_CATEGORY(MissionItemLog, "MissionItemLog") -const double MissionItem::defaultTakeoffPitch = 15.0; -const double MissionItem::defaultHeading = 0.0; const double MissionItem::defaultAltitude = 25.0; -const double MissionItem::defaultAcceptanceRadius = 3.0; -const double MissionItem::defaultLoiterOrbitRadius = 10.0; -const double MissionItem::defaultLoiterTurns = 1.0; FactMetaData* MissionItem::_altitudeMetaData = NULL; FactMetaData* MissionItem::_commandMetaData = NULL; @@ -122,6 +117,7 @@ MissionItem::MissionItem(QObject* parent) _connectSignals(); setAutoContinue(true); + setDefaultsForCommand(); } MissionItem::MissionItem(int sequenceNumber, @@ -770,13 +766,15 @@ void MissionItem::_syncCommandToSupportedCommand(const QVariant& value) void MissionItem::setDefaultsForCommand(void) { + // We set these global defaults first, then if there are param defaults they will get reset + setParam7(defaultAltitude); + foreach (const MavCmdParamInfo* paramInfo, _mavCmdInfoMap[(MAV_CMD)command()]->paramInfoMap()) { Fact* rgParamFacts[7] = { &_param1Fact, &_param2Fact, &_param3Fact, &_param4Fact, &_param5Fact, &_param6Fact, &_param7Fact }; rgParamFacts[paramInfo->param()-1]->setRawValue(paramInfo->defaultValue()); } - setParam7(defaultAltitude); setAutoContinue(true); setFrame(specifiesCoordinate() ? MAV_FRAME_GLOBAL_RELATIVE_ALT : MAV_FRAME_MISSION); setRawEdit(false); diff --git a/src/MissionManager/MissionItem.h b/src/MissionManager/MissionItem.h index f79d302babb306f448212b355fe99bcc3c53c0d2..9573b69947b60f91614d02a4b098ea743ff8beaf 100644 --- a/src/MissionManager/MissionItem.h +++ b/src/MissionManager/MissionItem.h @@ -167,12 +167,7 @@ public: bool relativeAltitude(void) { return frame() == MAV_FRAME_GLOBAL_RELATIVE_ALT; } - static const double defaultTakeoffPitch; - static const double defaultHeading; static const double defaultAltitude; - static const double defaultAcceptanceRadius; - static const double defaultLoiterOrbitRadius; - static const double defaultLoiterTurns; public slots: void setDefaultsForCommand(void);