|
|
@ -24,14 +24,13 @@ QGC_LOGGING_CATEGORY(MissionSettingsComplexItemLog, "MissionSettingsComplexItemL |
|
|
|
const char* MissionSettingsItem::jsonComplexItemTypeValue = "MissionSettings"; |
|
|
|
const char* MissionSettingsItem::jsonComplexItemTypeValue = "MissionSettings"; |
|
|
|
|
|
|
|
|
|
|
|
const char* MissionSettingsItem::_plannedHomePositionAltitudeName = "PlannedHomePositionAltitude"; |
|
|
|
const char* MissionSettingsItem::_plannedHomePositionAltitudeName = "PlannedHomePositionAltitude"; |
|
|
|
const char* MissionSettingsItem::_missionEndActionName = "MissionEndAction"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QMap<QString, FactMetaData*> MissionSettingsItem::_metaDataMap; |
|
|
|
QMap<QString, FactMetaData*> MissionSettingsItem::_metaDataMap; |
|
|
|
|
|
|
|
|
|
|
|
MissionSettingsItem::MissionSettingsItem(Vehicle* vehicle, QObject* parent) |
|
|
|
MissionSettingsItem::MissionSettingsItem(Vehicle* vehicle, QObject* parent) |
|
|
|
: ComplexMissionItem (vehicle, parent) |
|
|
|
: ComplexMissionItem (vehicle, parent) |
|
|
|
, _plannedHomePositionAltitudeFact (0, _plannedHomePositionAltitudeName, FactMetaData::valueTypeDouble) |
|
|
|
, _plannedHomePositionAltitudeFact (0, _plannedHomePositionAltitudeName, FactMetaData::valueTypeDouble) |
|
|
|
, _missionEndActionFact (0, _missionEndActionName, FactMetaData::valueTypeUint32) |
|
|
|
, _missionEndRTL (false) |
|
|
|
, _cameraSection (vehicle) |
|
|
|
, _cameraSection (vehicle) |
|
|
|
, _speedSection (vehicle) |
|
|
|
, _speedSection (vehicle) |
|
|
|
, _sequenceNumber (0) |
|
|
|
, _sequenceNumber (0) |
|
|
@ -44,21 +43,19 @@ MissionSettingsItem::MissionSettingsItem(Vehicle* vehicle, QObject* parent) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
_plannedHomePositionAltitudeFact.setMetaData (_metaDataMap[_plannedHomePositionAltitudeName]); |
|
|
|
_plannedHomePositionAltitudeFact.setMetaData (_metaDataMap[_plannedHomePositionAltitudeName]); |
|
|
|
_missionEndActionFact.setMetaData (_metaDataMap[_missionEndActionName]); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_plannedHomePositionAltitudeFact.setRawValue (_plannedHomePositionAltitudeFact.rawDefaultValue()); |
|
|
|
_plannedHomePositionAltitudeFact.setRawValue (_plannedHomePositionAltitudeFact.rawDefaultValue()); |
|
|
|
_missionEndActionFact.setRawValue (_missionEndActionFact.rawDefaultValue()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setHomePositionSpecialCase(true); |
|
|
|
setHomePositionSpecialCase(true); |
|
|
|
|
|
|
|
|
|
|
|
connect(this, &MissionSettingsItem::specifyMissionFlightSpeedChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber); |
|
|
|
connect(this, &MissionSettingsItem::specifyMissionFlightSpeedChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber); |
|
|
|
|
|
|
|
connect(this, &MissionSettingsItem::missionEndRTLChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber); |
|
|
|
connect(&_cameraSection, &CameraSection::itemCountChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber); |
|
|
|
connect(&_cameraSection, &CameraSection::itemCountChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber); |
|
|
|
connect(&_speedSection, &CameraSection::itemCountChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber); |
|
|
|
connect(&_speedSection, &CameraSection::itemCountChanged, this, &MissionSettingsItem::_setDirtyAndUpdateLastSequenceNumber); |
|
|
|
|
|
|
|
|
|
|
|
connect(&_plannedHomePositionAltitudeFact, &Fact::valueChanged, this, &MissionSettingsItem::_setDirty); |
|
|
|
connect(&_plannedHomePositionAltitudeFact, &Fact::valueChanged, this, &MissionSettingsItem::_setDirty); |
|
|
|
connect(&_plannedHomePositionAltitudeFact, &Fact::valueChanged, this, &MissionSettingsItem::_updateAltitudeInCoordinate); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
connect(&_missionEndActionFact, &Fact::valueChanged, this, &MissionSettingsItem::_setDirty); |
|
|
|
connect(&_plannedHomePositionAltitudeFact, &Fact::valueChanged, this, &MissionSettingsItem::_updateAltitudeInCoordinate); |
|
|
|
|
|
|
|
|
|
|
|
connect(&_cameraSection, &CameraSection::dirtyChanged, this, &MissionSettingsItem::_sectionDirtyChanged); |
|
|
|
connect(&_cameraSection, &CameraSection::dirtyChanged, this, &MissionSettingsItem::_sectionDirtyChanged); |
|
|
|
connect(&_speedSection, &SpeedSection::dirtyChanged, this, &MissionSettingsItem::_sectionDirtyChanged); |
|
|
|
connect(&_speedSection, &SpeedSection::dirtyChanged, this, &MissionSettingsItem::_sectionDirtyChanged); |
|
|
@ -184,23 +181,7 @@ bool MissionSettingsItem::addMissionEndAction(QList<MissionItem*>& items, int se |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
switch(_missionEndActionFact.rawValue().toInt()) { |
|
|
|
if (_missionEndRTL) { |
|
|
|
case MissionEndLoiter: |
|
|
|
|
|
|
|
qCDebug(MissionSettingsComplexItemLog) << "Appending end action Loiter seqNum" << seqNum; |
|
|
|
|
|
|
|
item = new MissionItem(seqNum, |
|
|
|
|
|
|
|
MAV_CMD_NAV_LOITER_UNLIM, |
|
|
|
|
|
|
|
lastWaypointFrame, |
|
|
|
|
|
|
|
0, 0, // param 1-2 unused
|
|
|
|
|
|
|
|
0, // use default loiter radius
|
|
|
|
|
|
|
|
0, // param 4 not used
|
|
|
|
|
|
|
|
lastWaypointCoord.latitude(), |
|
|
|
|
|
|
|
lastWaypointCoord.longitude(), |
|
|
|
|
|
|
|
lastWaypointCoord.altitude(), |
|
|
|
|
|
|
|
true, // autoContinue
|
|
|
|
|
|
|
|
false, // isCurrentItem
|
|
|
|
|
|
|
|
missionItemParent); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case MissionEndRTL: |
|
|
|
|
|
|
|
qCDebug(MissionSettingsComplexItemLog) << "Appending end action RTL seqNum" << seqNum; |
|
|
|
qCDebug(MissionSettingsComplexItemLog) << "Appending end action RTL seqNum" << seqNum; |
|
|
|
item = new MissionItem(seqNum, |
|
|
|
item = new MissionItem(seqNum, |
|
|
|
MAV_CMD_NAV_RETURN_TO_LAUNCH, |
|
|
|
MAV_CMD_NAV_RETURN_TO_LAUNCH, |
|
|
@ -209,12 +190,6 @@ bool MissionSettingsItem::addMissionEndAction(QList<MissionItem*>& items, int se |
|
|
|
true, // autoContinue
|
|
|
|
true, // autoContinue
|
|
|
|
false, // isCurrentItem
|
|
|
|
false, // isCurrentItem
|
|
|
|
missionItemParent); |
|
|
|
missionItemParent); |
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (item) { |
|
|
|
|
|
|
|
items.append(item); |
|
|
|
items.append(item); |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} else { |
|
|
|
} else { |
|
|
@ -248,26 +223,12 @@ bool MissionSettingsItem::scanForMissionSettings(QmlObjectListModel* visualItems |
|
|
|
if (item) { |
|
|
|
if (item) { |
|
|
|
MissionItem& missionItem = item->missionItem(); |
|
|
|
MissionItem& missionItem = item->missionItem(); |
|
|
|
|
|
|
|
|
|
|
|
switch ((MAV_CMD)item->command()) { |
|
|
|
if (item->command() == MAV_CMD_NAV_RETURN_TO_LAUNCH && |
|
|
|
case MAV_CMD_NAV_LOITER_UNLIM: |
|
|
|
missionItem.param1() == 0 && missionItem.param2() == 0 && missionItem.param3() == 0 && missionItem.param4() == 0 && missionItem.param5() == 0 && missionItem.param6() == 0 && missionItem.param7() == 0) { |
|
|
|
if (missionItem.param1() == 0 && missionItem.param2() == 0 && missionItem.param3() == 0 && missionItem.param4() == 0) { |
|
|
|
|
|
|
|
qCDebug(MissionSettingsComplexItemLog) << "Scan: Found end action Loiter"; |
|
|
|
|
|
|
|
settingsItem->missionEndAction()->setRawValue(MissionEndLoiter); |
|
|
|
|
|
|
|
visualItems->removeAt(lastIndex)->deleteLater(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case MAV_CMD_NAV_RETURN_TO_LAUNCH: |
|
|
|
|
|
|
|
if (missionItem.param1() == 0 && missionItem.param2() == 0 && missionItem.param3() == 0 && missionItem.param4() == 0 && missionItem.param5() == 0 && missionItem.param6() == 0 && missionItem.param7() == 0) { |
|
|
|
|
|
|
|
qCDebug(MissionSettingsComplexItemLog) << "Scan: Found end action RTL"; |
|
|
|
qCDebug(MissionSettingsComplexItemLog) << "Scan: Found end action RTL"; |
|
|
|
settingsItem->missionEndAction()->setRawValue(MissionEndRTL); |
|
|
|
settingsItem->_missionEndRTL = true; |
|
|
|
visualItems->removeAt(lastIndex)->deleteLater(); |
|
|
|
visualItems->removeAt(lastIndex)->deleteLater(); |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return foundSpeedSection || foundCameraSection; |
|
|
|
return foundSpeedSection || foundCameraSection; |
|
|
|