From 1e201fff082daaa25e23dfa372c13f8802316bd9 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Wed, 11 Jan 2017 09:37:19 -0800 Subject: [PATCH] Track changes by DO_CHANGE_SPEED items --- src/MissionManager/MavCmdInfoCommon.json | 8 ++++---- src/MissionManager/MissionController.cc | 1 + src/MissionManager/MissionItem.cc | 26 ++++++++++++++++++++++++ src/MissionManager/MissionItem.h | 11 ++++++++-- src/MissionManager/SimpleMissionItem.cc | 7 +++++++ src/MissionManager/SimpleMissionItem.h | 1 + src/MissionManager/SurveyMissionItem.h | 1 + src/MissionManager/VisualMissionItem.h | 7 ++++++- 8 files changed, 55 insertions(+), 7 deletions(-) diff --git a/src/MissionManager/MavCmdInfoCommon.json b/src/MissionManager/MavCmdInfoCommon.json index c831f7e1b..622e1cff1 100644 --- a/src/MissionManager/MavCmdInfoCommon.json +++ b/src/MissionManager/MavCmdInfoCommon.json @@ -503,23 +503,23 @@ "label": "Type:", "enumStrings": "Airspeed,Ground Speed", "enumValues": "0,1", - "default": 1 + "default": 0 }, "param2": { "label": "Speed:", "units": "m/s", - "default": -1 + "default": 0 }, "param3": { "label": "Throttle:", "units": "%", - "default": -1 + "default": 0 }, "param4": { "label": "Offset:", "enumStrings": "Relative,Absolute", "enumValues": "1,0", - "default": 1 + "default": 0 } }, { diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 791e365b2..38355adc3 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -1155,6 +1155,7 @@ void MissionController::_initVisualItem(VisualMissionItem* visualItem) connect(visualItem, &VisualMissionItem::specifiesCoordinateChanged, this, &MissionController::_recalcWaypointLines); connect(visualItem, &VisualMissionItem::coordinateHasRelativeAltitudeChanged, this, &MissionController::_recalcWaypointLines); connect(visualItem, &VisualMissionItem::exitCoordinateHasRelativeAltitudeChanged, this, &MissionController::_recalcWaypointLines); + connect(visualItem, &VisualMissionItem::flightSpeedChanged, this, &MissionController::_recalcAltitudeRangeBearing); if (visualItem->isSimpleItem()) { // We need to track commandChanged on simple item since recalc has special handling for takeoff command diff --git a/src/MissionManager/MissionItem.cc b/src/MissionManager/MissionItem.cc index 0a50253a9..bf8de33f9 100644 --- a/src/MissionManager/MissionItem.cc +++ b/src/MissionManager/MissionItem.cc @@ -51,6 +51,8 @@ MissionItem::MissionItem(QObject* parent) _frameFact.setRawValue(MAV_FRAME_GLOBAL_RELATIVE_ALT); setAutoContinue(true); + + connect(&_param2Fact, &Fact::rawValueChanged, this, &MissionItem::_param2Changed); } MissionItem::MissionItem(int sequenceNumber, @@ -95,6 +97,8 @@ MissionItem::MissionItem(int sequenceNumber, _param5Fact.setRawValue(param5); _param6Fact.setRawValue(param6); _param7Fact.setRawValue(param7); + + connect(&_param2Fact, &Fact::rawValueChanged, this, &MissionItem::_param2Changed); } MissionItem::MissionItem(const MissionItem& other, QObject* parent) @@ -117,6 +121,8 @@ MissionItem::MissionItem(const MissionItem& other, QObject* parent) _frameFact.setRawValue(MAV_FRAME_GLOBAL_RELATIVE_ALT); *this = other; + + connect(&_param2Fact, &Fact::rawValueChanged, this, &MissionItem::_param2Changed); } const MissionItem& MissionItem::operator=(const MissionItem& other) @@ -139,8 +145,10 @@ const MissionItem& MissionItem::operator=(const MissionItem& other) return *this; } + MissionItem::~MissionItem() { + } void MissionItem::save(QJsonObject& json) const @@ -375,3 +383,21 @@ QGeoCoordinate MissionItem::coordinate(void) const { return QGeoCoordinate(param5(), param6(), param7()); } + +double MissionItem::flightSpeed(void) const +{ + double flightSpeed = std::numeric_limits::quiet_NaN(); + + if (_commandFact.rawValue().toInt() == MAV_CMD_DO_CHANGE_SPEED && _param2Fact.rawValue().toDouble() > 0) { + flightSpeed = _param2Fact.rawValue().toDouble(); + } + + return flightSpeed; +} + +void MissionItem::_param2Changed(QVariant value) +{ + if (_commandFact.rawValue().toInt() == MAV_CMD_DO_CHANGE_SPEED && _param2Fact.rawValue().toDouble() > 0) { + emit flightSpeedChanged(value.toDouble()); + } +} diff --git a/src/MissionManager/MissionItem.h b/src/MissionManager/MissionItem.h index 5d4b0f2dc..5ed2b4ef0 100644 --- a/src/MissionManager/MissionItem.h +++ b/src/MissionManager/MissionItem.h @@ -76,6 +76,9 @@ public: 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 flightSpeed (void) const; + void setCommand (MAV_CMD command); void setSequenceNumber (int sequenceNumber); void setIsCurrentItem (bool isCurrentItem); @@ -97,8 +100,12 @@ public: bool relativeAltitude(void) const { return frame() == MAV_FRAME_GLOBAL_RELATIVE_ALT; } signals: - void isCurrentItemChanged (bool isCurrentItem); - void sequenceNumberChanged (int sequenceNumber); + void isCurrentItemChanged (bool isCurrentItem); + void sequenceNumberChanged (int sequenceNumber); + void flightSpeedChanged (double flightSpeed); + +private slots: + void _param2Changed (QVariant value); private: bool _convertJsonV1ToV2(const QJsonObject& json, QJsonObject& v2Json, QString& errorString); diff --git a/src/MissionManager/SimpleMissionItem.cc b/src/MissionManager/SimpleMissionItem.cc index 22ecd6252..ccfdde11d 100644 --- a/src/MissionManager/SimpleMissionItem.cc +++ b/src/MissionManager/SimpleMissionItem.cc @@ -71,6 +71,8 @@ SimpleMissionItem::SimpleMissionItem(Vehicle* vehicle, QObject* parent) _connectSignals(); setDefaultsForCommand(); + + connect(&_missionItem, &MissionItem::flightSpeedChanged, this, &SimpleMissionItem::flightSpeedChanged); } SimpleMissionItem::SimpleMissionItem(Vehicle* vehicle, const MissionItem& missionItem, QObject* parent) @@ -607,3 +609,8 @@ void SimpleMissionItem::setSequenceNumber(int sequenceNumber) emit abbreviationChanged(); } } + +double SimpleMissionItem::flightSpeed(void) +{ + return missionItem().flightSpeed(); +} diff --git a/src/MissionManager/SimpleMissionItem.h b/src/MissionManager/SimpleMissionItem.h index 9d3650c0c..7efca0a64 100644 --- a/src/MissionManager/SimpleMissionItem.h +++ b/src/MissionManager/SimpleMissionItem.h @@ -91,6 +91,7 @@ public: QGeoCoordinate coordinate (void) const final { return _missionItem.coordinate(); } QGeoCoordinate exitCoordinate (void) const final { return coordinate(); } int sequenceNumber (void) const final { return _missionItem.sequenceNumber(); } + double flightSpeed (void) final; bool coordinateHasRelativeAltitude (void) const final { return _missionItem.relativeAltitude(); } bool exitCoordinateHasRelativeAltitude (void) const final { return coordinateHasRelativeAltitude(); } diff --git a/src/MissionManager/SurveyMissionItem.h b/src/MissionManager/SurveyMissionItem.h index d00974e77..7f46a28ca 100644 --- a/src/MissionManager/SurveyMissionItem.h +++ b/src/MissionManager/SurveyMissionItem.h @@ -97,6 +97,7 @@ public: QGeoCoordinate coordinate (void) const final { return _coordinate; } QGeoCoordinate exitCoordinate (void) const final { return _exitCoordinate; } int sequenceNumber (void) const final { return _sequenceNumber; } + double flightSpeed (void) final { return std::numeric_limits::quiet_NaN(); } bool coordinateHasRelativeAltitude (void) const final { return _gridAltitudeRelative; } bool exitCoordinateHasRelativeAltitude (void) const final { return _gridAltitudeRelative; } diff --git a/src/MissionManager/VisualMissionItem.h b/src/MissionManager/VisualMissionItem.h index 32bc65aad..ab2612b78 100644 --- a/src/MissionManager/VisualMissionItem.h +++ b/src/MissionManager/VisualMissionItem.h @@ -40,13 +40,16 @@ public: const VisualMissionItem& operator=(const VisualMissionItem& other); - // The following properties are calculated/set by the MissionControll recalc methods + // The following properties are calculated/set by the MissionController recalc methods Q_PROPERTY(double altDifference READ altDifference WRITE setAltDifference NOTIFY altDifferenceChanged) ///< Change in altitude from previous waypoint Q_PROPERTY(double altPercent READ altPercent WRITE setAltPercent NOTIFY altPercentChanged) ///< Percent of total altitude change in mission altitude Q_PROPERTY(double azimuth READ azimuth WRITE setAzimuth NOTIFY azimuthChanged) ///< Azimuth to previous waypoint Q_PROPERTY(double distance READ distance WRITE setDistance NOTIFY distanceChanged) ///< Distance to previous waypoint + /// This property returns whether the item supports changing flight speed. If it does not it will return NaN. + Q_PROPERTY(double flightSpeed READ flightSpeed NOTIFY flightSpeedChanged) + // Visual mission items have two coordinates associated with them: /// This is the entry point for a waypoint line into the item. For a simple item it is also the location of the item @@ -110,6 +113,7 @@ public: virtual QGeoCoordinate coordinate (void) const = 0; virtual QGeoCoordinate exitCoordinate (void) const = 0; virtual int sequenceNumber (void) const = 0; + virtual double flightSpeed (void) = 0; virtual bool coordinateHasRelativeAltitude (void) const = 0; virtual bool exitCoordinateHasRelativeAltitude (void) const = 0; @@ -143,6 +147,7 @@ signals: void isSimpleItemChanged (bool isSimpleItem); void specifiesCoordinateChanged (void); void isStandaloneCoordinateChanged (void); + void flightSpeedChanged (double flightSpeed); void coordinateHasRelativeAltitudeChanged (bool coordinateHasRelativeAltitude); void exitCoordinateHasRelativeAltitudeChanged (bool exitCoordinateHasRelativeAltitude); -- 2.22.0