Commit 1e201fff authored by Don Gagne's avatar Don Gagne

Track changes by DO_CHANGE_SPEED items

parent e3566933
...@@ -503,23 +503,23 @@ ...@@ -503,23 +503,23 @@
"label": "Type:", "label": "Type:",
"enumStrings": "Airspeed,Ground Speed", "enumStrings": "Airspeed,Ground Speed",
"enumValues": "0,1", "enumValues": "0,1",
"default": 1 "default": 0
}, },
"param2": { "param2": {
"label": "Speed:", "label": "Speed:",
"units": "m/s", "units": "m/s",
"default": -1 "default": 0
}, },
"param3": { "param3": {
"label": "Throttle:", "label": "Throttle:",
"units": "%", "units": "%",
"default": -1 "default": 0
}, },
"param4": { "param4": {
"label": "Offset:", "label": "Offset:",
"enumStrings": "Relative,Absolute", "enumStrings": "Relative,Absolute",
"enumValues": "1,0", "enumValues": "1,0",
"default": 1 "default": 0
} }
}, },
{ {
......
...@@ -1155,6 +1155,7 @@ void MissionController::_initVisualItem(VisualMissionItem* visualItem) ...@@ -1155,6 +1155,7 @@ void MissionController::_initVisualItem(VisualMissionItem* visualItem)
connect(visualItem, &VisualMissionItem::specifiesCoordinateChanged, this, &MissionController::_recalcWaypointLines); connect(visualItem, &VisualMissionItem::specifiesCoordinateChanged, this, &MissionController::_recalcWaypointLines);
connect(visualItem, &VisualMissionItem::coordinateHasRelativeAltitudeChanged, this, &MissionController::_recalcWaypointLines); connect(visualItem, &VisualMissionItem::coordinateHasRelativeAltitudeChanged, this, &MissionController::_recalcWaypointLines);
connect(visualItem, &VisualMissionItem::exitCoordinateHasRelativeAltitudeChanged, this, &MissionController::_recalcWaypointLines); connect(visualItem, &VisualMissionItem::exitCoordinateHasRelativeAltitudeChanged, this, &MissionController::_recalcWaypointLines);
connect(visualItem, &VisualMissionItem::flightSpeedChanged, this, &MissionController::_recalcAltitudeRangeBearing);
if (visualItem->isSimpleItem()) { if (visualItem->isSimpleItem()) {
// We need to track commandChanged on simple item since recalc has special handling for takeoff command // We need to track commandChanged on simple item since recalc has special handling for takeoff command
......
...@@ -51,6 +51,8 @@ MissionItem::MissionItem(QObject* parent) ...@@ -51,6 +51,8 @@ MissionItem::MissionItem(QObject* parent)
_frameFact.setRawValue(MAV_FRAME_GLOBAL_RELATIVE_ALT); _frameFact.setRawValue(MAV_FRAME_GLOBAL_RELATIVE_ALT);
setAutoContinue(true); setAutoContinue(true);
connect(&_param2Fact, &Fact::rawValueChanged, this, &MissionItem::_param2Changed);
} }
MissionItem::MissionItem(int sequenceNumber, MissionItem::MissionItem(int sequenceNumber,
...@@ -95,6 +97,8 @@ MissionItem::MissionItem(int sequenceNumber, ...@@ -95,6 +97,8 @@ MissionItem::MissionItem(int sequenceNumber,
_param5Fact.setRawValue(param5); _param5Fact.setRawValue(param5);
_param6Fact.setRawValue(param6); _param6Fact.setRawValue(param6);
_param7Fact.setRawValue(param7); _param7Fact.setRawValue(param7);
connect(&_param2Fact, &Fact::rawValueChanged, this, &MissionItem::_param2Changed);
} }
MissionItem::MissionItem(const MissionItem& other, QObject* parent) MissionItem::MissionItem(const MissionItem& other, QObject* parent)
...@@ -117,6 +121,8 @@ 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); _frameFact.setRawValue(MAV_FRAME_GLOBAL_RELATIVE_ALT);
*this = other; *this = other;
connect(&_param2Fact, &Fact::rawValueChanged, this, &MissionItem::_param2Changed);
} }
const MissionItem& MissionItem::operator=(const MissionItem& other) const MissionItem& MissionItem::operator=(const MissionItem& other)
...@@ -139,8 +145,10 @@ const MissionItem& MissionItem::operator=(const MissionItem& other) ...@@ -139,8 +145,10 @@ const MissionItem& MissionItem::operator=(const MissionItem& other)
return *this; return *this;
} }
MissionItem::~MissionItem() MissionItem::~MissionItem()
{ {
} }
void MissionItem::save(QJsonObject& json) const void MissionItem::save(QJsonObject& json) const
...@@ -375,3 +383,21 @@ QGeoCoordinate MissionItem::coordinate(void) const ...@@ -375,3 +383,21 @@ QGeoCoordinate MissionItem::coordinate(void) const
{ {
return QGeoCoordinate(param5(), param6(), param7()); return QGeoCoordinate(param5(), param6(), param7());
} }
double MissionItem::flightSpeed(void) const
{
double flightSpeed = std::numeric_limits<double>::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());
}
}
...@@ -76,6 +76,9 @@ public: ...@@ -76,6 +76,9 @@ public:
QGeoCoordinate coordinate (void) const; QGeoCoordinate coordinate (void) const;
int doJumpId (void) const { return _doJumpId; } 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 setCommand (MAV_CMD command);
void setSequenceNumber (int sequenceNumber); void setSequenceNumber (int sequenceNumber);
void setIsCurrentItem (bool isCurrentItem); void setIsCurrentItem (bool isCurrentItem);
...@@ -97,8 +100,12 @@ public: ...@@ -97,8 +100,12 @@ public:
bool relativeAltitude(void) const { return frame() == MAV_FRAME_GLOBAL_RELATIVE_ALT; } bool relativeAltitude(void) const { return frame() == MAV_FRAME_GLOBAL_RELATIVE_ALT; }
signals: signals:
void isCurrentItemChanged (bool isCurrentItem); void isCurrentItemChanged (bool isCurrentItem);
void sequenceNumberChanged (int sequenceNumber); void sequenceNumberChanged (int sequenceNumber);
void flightSpeedChanged (double flightSpeed);
private slots:
void _param2Changed (QVariant value);
private: private:
bool _convertJsonV1ToV2(const QJsonObject& json, QJsonObject& v2Json, QString& errorString); bool _convertJsonV1ToV2(const QJsonObject& json, QJsonObject& v2Json, QString& errorString);
......
...@@ -71,6 +71,8 @@ SimpleMissionItem::SimpleMissionItem(Vehicle* vehicle, QObject* parent) ...@@ -71,6 +71,8 @@ SimpleMissionItem::SimpleMissionItem(Vehicle* vehicle, QObject* parent)
_connectSignals(); _connectSignals();
setDefaultsForCommand(); setDefaultsForCommand();
connect(&_missionItem, &MissionItem::flightSpeedChanged, this, &SimpleMissionItem::flightSpeedChanged);
} }
SimpleMissionItem::SimpleMissionItem(Vehicle* vehicle, const MissionItem& missionItem, QObject* parent) SimpleMissionItem::SimpleMissionItem(Vehicle* vehicle, const MissionItem& missionItem, QObject* parent)
...@@ -607,3 +609,8 @@ void SimpleMissionItem::setSequenceNumber(int sequenceNumber) ...@@ -607,3 +609,8 @@ void SimpleMissionItem::setSequenceNumber(int sequenceNumber)
emit abbreviationChanged(); emit abbreviationChanged();
} }
} }
double SimpleMissionItem::flightSpeed(void)
{
return missionItem().flightSpeed();
}
...@@ -91,6 +91,7 @@ public: ...@@ -91,6 +91,7 @@ public:
QGeoCoordinate coordinate (void) const final { return _missionItem.coordinate(); } QGeoCoordinate coordinate (void) const final { return _missionItem.coordinate(); }
QGeoCoordinate exitCoordinate (void) const final { return coordinate(); } QGeoCoordinate exitCoordinate (void) const final { return coordinate(); }
int sequenceNumber (void) const final { return _missionItem.sequenceNumber(); } int sequenceNumber (void) const final { return _missionItem.sequenceNumber(); }
double flightSpeed (void) final;
bool coordinateHasRelativeAltitude (void) const final { return _missionItem.relativeAltitude(); } bool coordinateHasRelativeAltitude (void) const final { return _missionItem.relativeAltitude(); }
bool exitCoordinateHasRelativeAltitude (void) const final { return coordinateHasRelativeAltitude(); } bool exitCoordinateHasRelativeAltitude (void) const final { return coordinateHasRelativeAltitude(); }
......
...@@ -97,6 +97,7 @@ public: ...@@ -97,6 +97,7 @@ public:
QGeoCoordinate coordinate (void) const final { return _coordinate; } QGeoCoordinate coordinate (void) const final { return _coordinate; }
QGeoCoordinate exitCoordinate (void) const final { return _exitCoordinate; } QGeoCoordinate exitCoordinate (void) const final { return _exitCoordinate; }
int sequenceNumber (void) const final { return _sequenceNumber; } int sequenceNumber (void) const final { return _sequenceNumber; }
double flightSpeed (void) final { return std::numeric_limits<double>::quiet_NaN(); }
bool coordinateHasRelativeAltitude (void) const final { return _gridAltitudeRelative; } bool coordinateHasRelativeAltitude (void) const final { return _gridAltitudeRelative; }
bool exitCoordinateHasRelativeAltitude (void) const final { return _gridAltitudeRelative; } bool exitCoordinateHasRelativeAltitude (void) const final { return _gridAltitudeRelative; }
......
...@@ -40,13 +40,16 @@ public: ...@@ -40,13 +40,16 @@ public:
const VisualMissionItem& operator=(const VisualMissionItem& other); 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 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 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 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 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: // 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 /// 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: ...@@ -110,6 +113,7 @@ public:
virtual QGeoCoordinate coordinate (void) const = 0; virtual QGeoCoordinate coordinate (void) const = 0;
virtual QGeoCoordinate exitCoordinate (void) const = 0; virtual QGeoCoordinate exitCoordinate (void) const = 0;
virtual int sequenceNumber (void) const = 0; virtual int sequenceNumber (void) const = 0;
virtual double flightSpeed (void) = 0;
virtual bool coordinateHasRelativeAltitude (void) const = 0; virtual bool coordinateHasRelativeAltitude (void) const = 0;
virtual bool exitCoordinateHasRelativeAltitude (void) const = 0; virtual bool exitCoordinateHasRelativeAltitude (void) const = 0;
...@@ -143,6 +147,7 @@ signals: ...@@ -143,6 +147,7 @@ signals:
void isSimpleItemChanged (bool isSimpleItem); void isSimpleItemChanged (bool isSimpleItem);
void specifiesCoordinateChanged (void); void specifiesCoordinateChanged (void);
void isStandaloneCoordinateChanged (void); void isStandaloneCoordinateChanged (void);
void flightSpeedChanged (double flightSpeed);
void coordinateHasRelativeAltitudeChanged (bool coordinateHasRelativeAltitude); void coordinateHasRelativeAltitudeChanged (bool coordinateHasRelativeAltitude);
void exitCoordinateHasRelativeAltitudeChanged (bool exitCoordinateHasRelativeAltitude); void exitCoordinateHasRelativeAltitudeChanged (bool exitCoordinateHasRelativeAltitude);
......
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