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

Track changes by DO_CHANGE_SPEED items

parent e3566933
......@@ -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
}
},
{
......
......@@ -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
......
......@@ -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<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:
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);
......
......@@ -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();
}
......@@ -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(); }
......
......@@ -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<double>::quiet_NaN(); }
bool coordinateHasRelativeAltitude (void) const final { return _gridAltitudeRelative; }
bool exitCoordinateHasRelativeAltitude (void) const final { return _gridAltitudeRelative; }
......
......@@ -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);
......
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