Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
319cf9c5
Commit
319cf9c5
authored
Mar 18, 2017
by
DonLakeFlyer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New MissionSettingsComplexItem
parent
019e06d4
Changes
28
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
1336 additions
and
283 deletions
+1336
-283
qgroundcontrol.pro
qgroundcontrol.pro
+2
-0
qgroundcontrol.qrc
qgroundcontrol.qrc
+8
-6
PX4FirmwarePlugin.cc
src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc
+2
-1
FlightDisplayViewMap.qml
src/FlightDisplay/FlightDisplayViewMap.qml
+6
-2
MissionItemView.qml
src/FlightMap/MapItems/MissionItemView.qml
+1
-1
FWLandingPatternEditor.qml
src/MissionEditor/FWLandingPatternEditor.qml
+3
-5
MissionEditor.qml
src/MissionEditor/MissionEditor.qml
+2
-2
MissionItemEditor.qml
src/MissionEditor/MissionItemEditor.qml
+5
-5
MissionSettingsEditor.qml
src/MissionEditor/MissionSettingsEditor.qml
+217
-70
MissionSettingsMapVisual.qml
src/MissionEditor/MissionSettingsMapVisual.qml
+128
-0
SectionHeader.qml
src/MissionEditor/SectionHeader.qml
+42
-7
SurveyItemEditor.qml
src/MissionEditor/SurveyItemEditor.qml
+4
-7
FixedWingLandingComplexItem.cc
src/MissionManager/FixedWingLandingComplexItem.cc
+6
-2
FixedWingLandingComplexItem.h
src/MissionManager/FixedWingLandingComplexItem.h
+1
-1
MavCmdInfoCommon.json
src/MissionManager/MavCmdInfoCommon.json
+50
-3
MissionController.cc
src/MissionManager/MissionController.cc
+91
-116
MissionController.h
src/MissionManager/MissionController.h
+11
-14
MissionManager.cc
src/MissionManager/MissionManager.cc
+6
-8
MissionSettings.FactMetaData.json
src/MissionManager/MissionSettings.FactMetaData.json
+86
-0
MissionSettingsComplexItem.cc
src/MissionManager/MissionSettingsComplexItem.cc
+476
-0
MissionSettingsComplexItem.h
src/MissionManager/MissionSettingsComplexItem.h
+150
-0
SimpleMissionItem.cc
src/MissionManager/SimpleMissionItem.cc
+4
-16
SimpleMissionItem.h
src/MissionManager/SimpleMissionItem.h
+1
-11
SurveyMissionItem.cc
src/MissionManager/SurveyMissionItem.cc
+5
-1
SurveyMissionItem.h
src/MissionManager/SurveyMissionItem.h
+1
-1
VisualMissionItem.cc
src/MissionManager/VisualMissionItem.cc
+14
-0
VisualMissionItem.h
src/MissionManager/VisualMissionItem.h
+13
-2
Vehicle.cc
src/Vehicle/Vehicle.cc
+1
-2
No files found.
qgroundcontrol.pro
View file @
319cf9c5
...
...
@@ -440,6 +440,7 @@ HEADERS += \
src/MissionManager/MissionController.h \
src/MissionManager/MissionItem.h \
src/MissionManager/MissionManager.h \
src/MissionManager/MissionSettingsComplexItem.h \
src/MissionManager/PlanElementController.h \
src/MissionManager/QGCMapPolygon.h \
src/MissionManager/RallyPoint.h \
...
...
@@ -610,6 +611,7 @@ SOURCES += \
src/MissionManager/MissionController.cc \
src/MissionManager/MissionItem.cc \
src/MissionManager/MissionManager.cc \
src/MissionManager/MissionSettingsComplexItem.cc \
src/MissionManager/PlanElementController.cc \
src/MissionManager/QGCMapPolygon.cc \
src/MissionManager/RallyPoint.cc \
...
...
qgroundcontrol.qrc
View file @
319cf9c5
...
...
@@ -38,7 +38,6 @@
<file alias="MainWindowNative.qml">src/ui/MainWindowNative.qml</file>
<file alias="MavlinkSettings.qml">src/ui/preferences/MavlinkSettings.qml</file>
<file alias="MissionEditor.qml">src/MissionEditor/MissionEditor.qml</file>
<file alias="MissionSettingsEditor.qml">src/MissionEditor/MissionSettingsEditor.qml</file>
<file alias="MixersComponent.qml">src/AutoPilotPlugins/Common/MixersComponent.qml</file>
<file alias="MockLink.qml">src/ui/preferences/MockLink.qml</file>
<file alias="MockLinkSettings.qml">src/ui/preferences/MockLinkSettings.qml</file>
...
...
@@ -67,6 +66,7 @@
<file alias="QGroundControl/Controls/MissionItemIndexLabel.qml">src/QmlControls/MissionItemIndexLabel.qml</file>
<file alias="QGroundControl/Controls/MissionItemMapVisual.qml">src/MissionEditor/MissionItemMapVisual.qml</file>
<file alias="QGroundControl/Controls/MissionItemStatus.qml">src/MissionEditor/MissionItemStatus.qml</file>
<file alias="QGroundControl/Controls/MissionSettingsMapVisual.qml">src/MissionEditor/MissionSettingsMapVisual.qml</file>
<file alias="QGroundControl/Controls/ModeSwitchDisplay.qml">src/QmlControls/ModeSwitchDisplay.qml</file>
<file alias="QGroundControl/Controls/MultiRotorMotorDisplay.qml">src/QmlControls/MultiRotorMotorDisplay.qml</file>
<file alias="QGroundControl/Controls/OfflineMapButton.qml">src/QmlControls/OfflineMapButton.qml</file>
...
...
@@ -170,6 +170,7 @@
<file alias="SimpleItemEditor.qml">src/MissionEditor/SimpleItemEditor.qml</file>
<file alias="SurveyItemEditor.qml">src/MissionEditor/SurveyItemEditor.qml</file>
<file alias="FWLandingPatternEditor.qml">src/MissionEditor/FWLandingPatternEditor.qml</file>
<file alias="MissionSettingsEditor.qml">src/MissionEditor/MissionSettingsEditor.qml</file>
<file alias="TcpSettings.qml">src/ui/preferences/TcpSettings.qml</file>
<file alias="test.qml">src/test.qml</file>
<file alias="UdpSettings.qml">src/ui/preferences/UdpSettings.qml</file>
...
...
@@ -183,11 +184,6 @@
<file alias="MavCmdInfoRover.json">src/MissionManager/MavCmdInfoRover.json</file>
<file alias="MavCmdInfoSub.json">src/MissionManager/MavCmdInfoSub.json</file>
<file alias="MavCmdInfoVTOL.json">src/MissionManager/MavCmdInfoVTOL.json</file>
<file alias="Vehicle/VehicleFact.json">src/Vehicle/VehicleFact.json</file>
<file alias="Vehicle/BatteryFact.json">src/Vehicle/BatteryFact.json</file>
<file alias="Vehicle/GPSFact.json">src/Vehicle/GPSFact.json</file>
<file alias="Vehicle/WindFact.json">src/Vehicle/WindFact.json</file>
<file alias="Vehicle/VibrationFact.json">src/Vehicle/VibrationFact.json</file>
<file alias="App.SettingsGroup.json">src/Settings/App.SettingsGroup.json</file>
<file alias="AutoConnect.SettingsGroup.json">src/Settings/AutoConnect.SettingsGroup.json</file>
<file alias="Survey.SettingsGroup.json">src/MissionManager/Survey.SettingsGroup.json</file>
...
...
@@ -196,6 +192,12 @@
<file alias="RallyPoint.FactMetaData.json">src/MissionManager/RallyPoint.FactMetaData.json</file>
<file alias="FWLandingPattern.FactMetaData.json">src/MissionManager/FWLandingPattern.FactMetaData.json</file>
<file alias="USBBoardInfo.json">src/comm/USBBoardInfo.json</file>
<file alias="MissionSettings.FactMetaData.json">src/MissionManager/MissionSettings.FactMetaData.json</file>
<file alias="Vehicle/VehicleFact.json">src/Vehicle/VehicleFact.json</file>
<file alias="Vehicle/BatteryFact.json">src/Vehicle/BatteryFact.json</file>
<file alias="Vehicle/GPSFact.json">src/Vehicle/GPSFact.json</file>
<file alias="Vehicle/WindFact.json">src/Vehicle/WindFact.json</file>
<file alias="Vehicle/VibrationFact.json">src/Vehicle/VibrationFact.json</file>
<file alias="Vehicle/TemperatureFact.json">src/Vehicle/TemperatureFact.json</file>
</qresource>
<qresource prefix="/MockLink">
...
...
src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc
View file @
319cf9c5
...
...
@@ -266,7 +266,8 @@ QList<MAV_CMD> PX4FirmwarePlugin::supportedMissionCommands(void)
<<
MAV_CMD_DO_CHANGE_SPEED
<<
MAV_CMD_DO_LAND_START
<<
MAV_CMD_DO_MOUNT_CONFIGURE
<<
MAV_CMD_DO_MOUNT_CONTROL
;
<<
MAV_CMD_DO_MOUNT_CONTROL
<<
MAV_CMD_IMAGE_START_CAPTURE
<<
MAV_CMD_IMAGE_STOP_CAPTURE
<<
MAV_CMD_VIDEO_START_CAPTURE
<<
MAV_CMD_VIDEO_STOP_CAPTURE
;
return
list
;
}
...
...
src/FlightDisplay/FlightDisplayViewMap.qml
View file @
319cf9c5
...
...
@@ -210,9 +210,13 @@ FlightMap {
}
}
// Add the mission items to the map
MissionItemView
{
// Add the mission item
visual
s to the map
Repeater
{
model
:
_mainIsMap
?
missionController
.
visualItems
:
0
delegate
:
MissionItemMapVisual
{
map
:
flightMap
}
}
// Add lines between waypoints
...
...
src/FlightMap/MapItems/MissionItemView.qml
View file @
319cf9c5
...
...
@@ -25,7 +25,7 @@ MapItemView {
delegate
:
MissionItemIndicator
{
id
:
itemIndicator
coordinate
:
object
.
coordinate
visible
:
object
.
specifiesCoordinate
&&
(
index
!=
0
||
object
.
showHomePosition
)
visible
:
object
.
specifiesCoordinate
z
:
QGroundControl
.
zOrderMapItems
missionItem
:
object
sequenceNumber
:
object
.
sequenceNumber
...
...
src/MissionEditor/FWLandingPatternEditor.qml
View file @
319cf9c5
...
...
@@ -49,9 +49,9 @@ Rectangle {
text
:
qsTr
(
"
WIP (NOT FOR REAL FLIGHT!)
"
)
}
Item
{
width
:
1
;
height
:
_margin
}
SectionHeader
{
text
:
qsTr
(
"
Loiter point
"
)
}
SectionHeader
{
text
:
qsTr
(
"
Loiter point
"
)
}
Item
{
width
:
1
;
height
:
_spacer
}
...
...
@@ -80,8 +80,6 @@ Rectangle {
onClicked
:
missionItem
.
loiterClockwise
=
checked
}
Item
{
width
:
1
;
height
:
ScreenTools
.
defaultFontPixelHeight
/
2
}
SectionHeader
{
text
:
qsTr
(
"
Landing point
"
)
}
Item
{
width
:
1
;
height
:
_spacer
}
...
...
src/MissionEditor/MissionEditor.qml
View file @
319cf9c5
...
...
@@ -585,6 +585,7 @@ QGCView {
highlightMoveDuration
:
250
delegate
:
MissionItemEditor
{
map
:
editorMap
missionItem
:
object
width
:
parent
.
width
readOnly
:
false
...
...
@@ -601,8 +602,7 @@ QGCView {
setCurrentItem
(
removeIndex
)
}
onInsert
:
insertSimpleMissionItem
(
editorMap
.
center
,
index
)
onMoveHomeToMapCenter
:
_visualItems
.
get
(
0
).
coordinate
=
editorMap
.
center
onInsert
:
insertSimpleMissionItem
(
editorMap
.
center
,
index
)
}
}
// QGCListView
}
// Item - Mission Item editor
...
...
src/MissionEditor/MissionItemEditor.qml
View file @
319cf9c5
...
...
@@ -18,13 +18,13 @@ Rectangle {
color
:
_currentItem
?
qgcPal
.
buttonHighlight
:
qgcPal
.
windowShade
radius
:
_radius
property
var
map
///< Map control
property
var
missionItem
///< MissionItem associated with this editor
property
bool
readOnly
///< true: read only view, false: full editing view
signal
clicked
signal
remove
signal
insert
signal
moveHomeToMapCenter
property
bool
_currentItem
:
missionItem
.
isCurrentItem
property
color
_outerTextColor
:
_currentItem
?
"
black
"
:
qgcPal
.
text
...
...
@@ -125,7 +125,7 @@ Rectangle {
anchors.rightMargin
:
ScreenTools
.
defaultFontPixelWidth
anchors.left
:
label
.
right
anchors.top
:
parent
.
top
visible
:
missionItem
.
sequenceNumber
!=
0
&&
missionItem
.
isCurrentItem
&&
!
missionItem
.
rawEdit
&&
missionItem
.
isSimpleItem
visible
:
missionItem
.
isCurrentItem
&&
!
missionItem
.
rawEdit
&&
missionItem
.
isSimpleItem
text
:
missionItem
.
commandName
Component
{
...
...
@@ -141,9 +141,9 @@ Rectangle {
QGCLabel
{
anchors.fill
:
commandPicker
visible
:
missionItem
.
sequenceNumber
==
0
||
!
missionItem
.
isCurrentItem
||
!
missionItem
.
isSimpleItem
visible
:
!
missionItem
.
isCurrentItem
||
!
missionItem
.
isSimpleItem
verticalAlignment
:
Text
.
AlignVCenter
text
:
missionItem
.
sequenceNumber
==
0
?
qsTr
(
"
Mission Settings
"
)
:
missionItem
.
commandName
text
:
missionItem
.
commandName
color
:
_outerTextColor
}
...
...
@@ -154,7 +154,7 @@ Rectangle {
anchors.left
:
parent
.
left
anchors.top
:
commandPicker
.
bottom
height
:
item
?
item
.
height
:
0
source
:
missionItem
.
sequenceNumber
==
0
?
"
qrc:/qml/MissionSettingsEditor.qml
"
:
missionItem
.
editorQml
source
:
missionItem
.
editorQml
onLoaded
:
{
item
.
visible
=
Qt
.
binding
(
function
()
{
return
_currentItem
;
})
...
...
src/MissionEditor/MissionSettingsEditor.qml
View file @
319cf9c5
This diff is collapsed.
Click to expand it.
src/MissionEditor/MissionSettingsMapVisual.qml
0 → 100644
View file @
319cf9c5
/****************************************************************************
*
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
import
QtQuick
2.3
import
QtQuick
.
Controls
1.2
import
QtLocation
5.3
import
QtPositioning
5.3
import
QGroundControl
1.0
import
QGroundControl
.
ScreenTools
1.0
import
QGroundControl
.
Palette
1.0
import
QGroundControl
.
Controls
1.0
import
QGroundControl
.
FlightMap
1.0
/// Mission Settings map visuals
Item
{
property
var
map
///< Map control to place item in
property
var
_missionItem
:
object
property
var
_itemVisual
property
var
_dragArea
property
bool
_itemVisualShowing
:
false
property
bool
_dragAreaShowing
:
false
function
hideItemVisuals
()
{
if
(
_itemVisualShowing
)
{
_itemVisual
.
destroy
()
_itemVisualShowing
=
false
}
}
function
showItemVisuals
()
{
if
(
!
_itemVisualShowing
)
{
_itemVisual
=
indicatorComponent
.
createObject
(
map
)
map
.
addMapItem
(
_itemVisual
)
_itemVisualShowing
=
true
}
}
function
hideDragArea
()
{
if
(
_dragAreaShowing
)
{
_dragArea
.
destroy
()
_dragAreaShowing
=
false
}
}
function
showDragArea
()
{
if
(
!
_dragAreaShowing
&&
_missionItem
.
specifiesCoordinate
)
{
_dragArea
=
dragAreaComponent
.
createObject
(
map
)
_dragAreaShowing
=
true
}
}
Component.onCompleted
:
{
showItemVisuals
()
if
(
_missionItem
.
isCurrentItem
)
{
showDragArea
()
}
}
Component
.
onDestruction
:
{
hideDragArea
()
hideItemVisuals
()
}
Connections
{
target
:
_missionItem
onIsCurrentItemChanged
:
{
if
(
_missionItem
.
isCurrentItem
)
{
showDragArea
()
}
else
{
hideDragArea
()
}
}
}
// Control which is used to drag items
Component
{
id
:
dragAreaComponent
MissionItemIndicatorDrag
{
itemIndicator
:
_itemVisual
itemCoordinate
:
_missionItem
.
coordinate
onItemCoordinateChanged
:
_missionItem
.
coordinate
=
itemCoordinate
}
}
Component
{
id
:
indicatorComponent
MissionItemIndicator
{
coordinate
:
_missionItem
.
coordinate
visible
:
_missionItem
.
showHomePosition
z
:
QGroundControl
.
zOrderMapItems
missionItem
:
_missionItem
onClicked
:
setCurrentItem
(
_missionItem
.
sequenceNumber
)
// These are the non-coordinate child mission items attached to this item
Row
{
anchors.top
:
parent
.
top
anchors.left
:
parent
.
right
Repeater
{
model
:
_missionItem
.
childItems
delegate
:
MissionItemIndexLabel
{
label
:
object
.
abbreviation
checked
:
object
.
isCurrentItem
z
:
2
specifiesCoordinate
:
false
onClicked
:
setCurrentItem
(
object
.
sequenceNumber
)
}
}
}
}
}
}
src/MissionEditor/SectionHeader.qml
View file @
319cf9c5
...
...
@@ -5,20 +5,55 @@ import QtQuick.Layouts 1.2
import
QGroundControl
.
ScreenTools
1.0
import
QGroundControl
.
Palette
1.0
Column
{
QGCMouseArea
{
id
:
_root
anchors.left
:
parent
.
left
anchors.right
:
parent
.
right
height
:
column
.
height
onClicked
:
checked
=
!
checked
property
alias
text
:
label
.
text
property
alias
text
:
label
.
text
property
bool
checked
:
true
property
bool
showSpacer
:
true
property
ExclusiveGroup
exclusiveGroup
:
null
QGCPalette
{
id
:
qgcPal
;
colorGroupEnabled
:
true
}
property
real
_sectionSpacer
:
ScreenTools
.
defaultFontPixelWidth
/
2
// spacing between section headings
onExclusiveGroupChanged
:
{
if
(
exclusiveGroup
)
exclusiveGroup
.
bindCheckable
(
_root
)
}
QGC
Label
{
id
:
label
}
QGC
Palette
{
id
:
qgcPal
;
colorGroupEnabled
:
true
}
Rectangle
{
ColumnLayout
{
id
:
column
anchors.left
:
parent
.
left
anchors.right
:
parent
.
right
height
:
1
color
:
qgcPal
.
text
Item
{
height
:
_sectionSpacer
width
:
1
visible
:
showSpacer
}
QGCLabel
{
id
:
label
Layout.fillWidth
:
true
Image
{
anchors.right
:
parent
.
right
anchors.verticalCenter
:
parent
.
verticalCenter
source
:
"
/qmlimages/arrow-down.png
"
visible
:
!
_root
.
checked
}
}
Rectangle
{
anchors.left
:
parent
.
left
anchors.right
:
parent
.
right
height
:
1
color
:
qgcPal
.
text
}
}
}
src/MissionEditor/SurveyItemEditor.qml
View file @
319cf9c5
...
...
@@ -166,7 +166,10 @@ Rectangle {
anchors.right
:
parent
.
right
spacing
:
_margin
SectionHeader
{
text
:
qsTr
(
"
Camera
"
)
}
SectionHeader
{
text
:
qsTr
(
"
Camera
"
)
showSpacer
:
false
}
QGCComboBox
{
id
:
gridTypeCombo
...
...
@@ -327,8 +330,6 @@ Rectangle {
}
}
Item
{
height
:
_sectionSpacer
;
width
:
1
;
visible
:
!
ScreenTools
.
isTinyScreen
}
SectionHeader
{
text
:
qsTr
(
"
Grid
"
)
}
GridLayout
{
...
...
@@ -395,8 +396,6 @@ Rectangle {
spacing
:
_margin
visible
:
gridTypeCombo
.
currentIndex
==
_gridTypeManual
Item
{
height
:
_sectionSpacer
;
width
:
1
;
visible
:
!
ScreenTools
.
isTinyScreen
}
SectionHeader
{
text
:
qsTr
(
"
Grid
"
)
}
FactTextFieldGrid
{
...
...
@@ -447,8 +446,6 @@ Rectangle {
}
}
Item
{
height
:
_sectionSpacer
;
width
:
1
;
visible
:
!
ScreenTools
.
isTinyScreen
}
SectionHeader
{
text
:
qsTr
(
"
Statistics
"
)
}
Grid
{
...
...
src/MissionManager/FixedWingLandingComplexItem.cc
View file @
319cf9c5
...
...
@@ -105,8 +105,10 @@ void FixedWingLandingComplexItem::setDirty(bool dirty)
}
}
void
FixedWingLandingComplexItem
::
save
(
QJson
Object
&
saveObject
)
const
void
FixedWingLandingComplexItem
::
save
(
QJson
Array
&
missionItems
)
const
{
QJsonObject
saveObject
;
saveObject
[
JsonHelper
::
jsonVersionKey
]
=
1
;
saveObject
[
VisualMissionItem
::
jsonTypeKey
]
=
VisualMissionItem
::
jsonTypeComplexItemValue
;
saveObject
[
ComplexMissionItem
::
jsonComplexItemTypeKey
]
=
jsonComplexItemTypeValue
;
...
...
@@ -128,6 +130,8 @@ void FixedWingLandingComplexItem::save(QJsonObject& saveObject) const
saveObject
[
_jsonLoiterClockwiseKey
]
=
_loiterClockwise
;
saveObject
[
_jsonLoiterAltitudeRelativeKey
]
=
_loiterAltitudeRelative
;
saveObject
[
_jsonLandingAltitudeRelativeKey
]
=
_landingAltitudeRelative
;
missionItems
.
append
(
saveObject
);
}
void
FixedWingLandingComplexItem
::
setSequenceNumber
(
int
sequenceNumber
)
...
...
@@ -236,7 +240,7 @@ QmlObjectListModel* FixedWingLandingComplexItem::getMissionItems(void) const
0.0
,
0.0
,
0.0
,
0.0
,
// param 1-4
_landingCoordinate
.
latitude
(),
_landingCoordinate
.
longitude
(),
0.0
,
// altitude
_landingAltitudeFact
.
rawValue
().
toDouble
(),
true
,
// autoContinue
false
,
// isCurrentItem
pMissionItems
);
// parent - allow delete on pMissionItems to delete everthing
...
...
src/MissionManager/FixedWingLandingComplexItem.h
View file @
319cf9c5
...
...
@@ -80,7 +80,7 @@ public:
void
setDirty
(
bool
dirty
)
final
;
void
setCoordinate
(
const
QGeoCoordinate
&
coordinate
)
final
{
setLoiterCoordinate
(
coordinate
);
}
void
setSequenceNumber
(
int
sequenceNumber
)
final
;
void
save
(
QJson
Object
&
saveObject
)
const
final
;
void
save
(
QJson
Array
&
missionItems
)
const
final
;
static
const
char
*
jsonComplexItemTypeValue
;
...
...
src/MissionManager/MavCmdInfoCommon.json
View file @
319cf9c5
...
...
@@ -965,11 +965,58 @@
{
"id"
:
510
,
"rawName"
:
"MAV_CMD_GET_MESSAGE_INTERVAL", "friendlyName"
:
"Get message interval"
},
{
"id"
:
511
,
"rawName"
:
"MAV_CMD_SET_MESSAGE_INTERVAL", "friendlyName"
:
"Set message interval"
},
{
"id"
:
520
,
"rawName"
:
"MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES", "friendlyName"
:
"Get capabilities"
},
{
"id"
:
2000
,
"rawName"
:
"MAV_CMD_IMAGE_START_CAPTURE", "friendlyName"
:
"Start image capture"
},
{
"id"
:
2000
,
"rawName"
:
"MAV_CMD_IMAGE_START_CAPTURE"
,
"friendlyName"
:
"Start image capture"
,
"description"
:
"Start taking one or more photos."
,
"category"
:
"Camera"
,
"param1"
:
{
"label"
:
"Interval"
,
"default"
:
0
,
"units"
:
"secs"
,
"decimalPlaces"
:
0
},
"param2"
:
{
"label"
:
"Photo count"
,
"default"
:
1
,
"decimalPlaces"
:
0
},
"param3"
:
{
"label"
:
"Resolution"
,
"default"
:
-1
,
"decimalPlaces"
:
0
},
"param6"
:
{
"label"
:
"Camera id"
,
"default"
:
0
,
"decimalPlaces"
:
0
}
},
{
"id"
:
2001
,
"rawName"
:
"MAV_CMD_IMAGE_STOP_CAPTURE", "friendlyName"
:
"Stop image capture"
},
{
"id"
:
2003
,
"rawName"
:
"MAV_CMD_DO_TRIGGER_CONTROL", "friendlyName"
:
"Trigger control"
},
{
"id"
:
2500
,
"rawName"
:
"MAV_CMD_VIDEO_START_CAPTURE", "friendlyName"
:
"Start video capture"
},
{
"id"
:
2501
,
"rawName"
:
"MAV_CMD_VIDEO_STOP_CAPTURE", "friendlyName"
:
"Stop video cpture"
},
{
"id"
:
2500
,
"rawName"
:
"MAV_CMD_VIDEO_START_CAPTURE"
,
"friendlyName"
:
"Start video capture"
,
"description"
:
"Start taking video."
,
"category"
:
"Camera"
,
"param1"
:
{
"label"
:
"Camera id"
,
"default"
:
0
,
"decimalPlaces"
:
0
},
"param2"
:
{
"label"
:
"FPS"
,
"default"
:
-1
,
"decimalPlaces"
:
0
},
"param3"
:
{
"label"
:
"Resolution"
,
"default"
:
-1
,
"decimalPlaces"
:
0
}
},
{
"id"
:
2800
,
"rawName"
:
"MAV_CMD_PANORAMA_CREATE", "friendlyName"
:
"Create panorama"
},
{
"id"
:
3000
,
...
...
src/MissionManager/MissionController.cc
View file @
319cf9c5
This diff is collapsed.
Click to expand it.
src/MissionManager/MissionController.h
View file @
319cf9c5
...
...
@@ -34,11 +34,10 @@ public:
MissionController
(
QObject
*
parent
=
NULL
);
~
MissionController
();
Q_PROPERTY
(
QGeoCoordinate
plannedHomePosition
READ
plannedHomePosition
NOTIFY
plannedHomePositionChanged
)
Q_PROPERTY
(
QmlObjectListModel
*
visualItems
READ
visualItems
NOTIFY
visualItemsChanged
)
Q_PROPERTY
(
QmlObjectListModel
*
complexVisualItems
READ
complexVisualItems
NOTIFY
complexVisualItemsChanged
)
Q_PROPERTY
(
QmlObjectListModel
*
waypointLines
READ
waypointLines
NOTIFY
waypointLinesChanged
)
// Mission settings
Q_PROPERTY
(
QGeoCoordinate
plannedHomePosition
READ
plannedHomePosition
NOTIFY
plannedHomePositionChanged
)
Q_PROPERTY
(
QmlObjectListModel
*
visualItems
READ
visualItems
NOTIFY
visualItemsChanged
)
Q_PROPERTY
(
QmlObjectListModel
*
waypointLines
READ
waypointLines
NOTIFY
waypointLinesChanged
)
Q_PROPERTY
(
QStringList
complexMissionItemNames
MEMBER
_complexMissionItemNames
CONSTANT
)
Q_PROPERTY
(
double
missionDistance
READ
missionDistance
NOTIFY
missionDistanceChanged
)
...
...
@@ -67,9 +66,8 @@ public:
/// @param[in] vehicle Vehicle we are loading items for
/// @param[in] filename File to load from
/// @param[out] visualItems Visual items loaded, returns NULL if error
/// @param[out] complexItems Complex items loaded, returns NULL if error
/// @return success/fail
static
bool
loadItemsFromFile
(
Vehicle
*
vehicle
,
const
QString
&
filename
,
QmlObjectListModel
**
visualItems
,
QmlObjectListModel
**
complexItems
);
static
bool
loadItemsFromFile
(
Vehicle
*
vehicle
,
const
QString
&
filename
,
QmlObjectListModel
**
visualItems
);
/// Sends the mission items to the specified vehicle
static
void
sendItemsToVehicle
(
Vehicle
*
vehicle
,
QmlObjectListModel
*
visualMissionItems
);
...
...
@@ -94,7 +92,6 @@ public:
QGeoCoordinate
plannedHomePosition
(
void
);
QmlObjectListModel
*
visualItems
(
void
)
{
return
_visualItems
;
}
QmlObjectListModel
*
complexVisualItems
(
void
)
{
return
_complexItems
;
}
QmlObjectListModel
*
waypointLines
(
void
)
{
return
&
_waypointLines
;
}
double
missionDistance
(
void
)
const
{
return
_missionDistance
;
}
...
...
@@ -110,7 +107,6 @@ public:
signals:
void
plannedHomePositionChanged
(
QGeoCoordinate
plannedHomePosition
);
void
visualItemsChanged
(
void
);
void
complexVisualItemsChanged
(
void
);
void
waypointLinesChanged
(
void
);
void
newItemsFromVehicle
(
void
);
void
missionDistanceChanged
(
double
missionDistance
);
...
...
@@ -151,10 +147,10 @@ private:
bool
_findPreviousAltitude
(
int
newIndex
,
double
*
prevAltitude
,
MAV_FRAME
*
prevFrame
);
static
double
_normalizeLat
(
double
lat
);
static
double
_normalizeLon
(
double
lon
);
static
void
_add
PlannedHomePosition
(
Vehicle
*
vehicle
,
QmlObjectListModel
*
visualItems
,
bool
addToCenter
);
static
bool
_loadJsonMissionFile
(
Vehicle
*
vehicle
,
const
QByteArray
&
bytes
,
QmlObjectListModel
*
visualItems
,
Q
mlObjectListModel
*
complexItems
,
Q
String
&
errorString
);
static
bool
_loadJsonMissionFileV1
(
Vehicle
*
vehicle
,
const
QJsonObject
&
json
,
QmlObjectListModel
*
visualItems
,
Q
mlObjectListModel
*
complexItems
,
Q
String
&
errorString
);
static
bool
_loadJsonMissionFileV2
(
Vehicle
*
vehicle
,
const
QJsonObject
&
json
,
QmlObjectListModel
*
visualItems
,
Q
mlObjectListModel
*
complexItems
,
Q
String
&
errorString
);
static
void
_add
MissionSettings
(
Vehicle
*
vehicle
,
QmlObjectListModel
*
visualItems
,
bool
addToCenter
);
static
bool
_loadJsonMissionFile
(
Vehicle
*
vehicle
,
const
QByteArray
&
bytes
,
QmlObjectListModel
*
visualItems
,
QString
&
errorString
);
static
bool
_loadJsonMissionFileV1
(
Vehicle
*
vehicle
,
const
QJsonObject
&
json
,
QmlObjectListModel
*
visualItems
,
QString
&
errorString
);
static
bool
_loadJsonMissionFileV2
(
Vehicle
*
vehicle
,
const
QJsonObject
&
json
,
QmlObjectListModel
*
visualItems
,
QString
&
errorString
);
static
bool
_loadTextMissionFile
(
Vehicle
*
vehicle
,
QTextStream
&
stream
,
QmlObjectListModel
*
visualItems
,
QString
&
errorString
);
int
_nextSequenceNumber
(
void
);
void
_setMissionDistance
(
double
missionDistance
);
...
...
@@ -171,7 +167,6 @@ private:
private:
QmlObjectListModel
*
_visualItems
;
QmlObjectListModel
*
_complexItems
;
QmlObjectListModel
_waypointLines
;
CoordVectHashTable
_linesTable
;
bool
_firstItemsFromVehicle
;
...
...
@@ -189,6 +184,8 @@ private:
QStringList
_complexMissionItemNames
;
static
const
char
*
_settingsGroup
;
// Json file keys for persistence
static
const
char
*
_jsonFileTypeValue
;
static
const
char
*
_jsonFirmwareTypeKey
;
static
const
char
*
_jsonVehicleTypeKey
;
...
...
src/MissionManager/MissionManager.cc
View file @
319cf9c5
...
...
@@ -91,7 +91,7 @@ void MissionManager::writeMissionItems(const QList<MissionItem*>& missionItems)
/// This begins the write sequence with the vehicle. This may be called during a retry.
void
MissionManager
::
_writeMissionCount
(
void
)
{
qCDebug
(
MissionManagerLog
)
<<
"_writeMissionCount
retry count"
<<
_retryCount
;
qCDebug
(
MissionManagerLog
)
<<
"_writeMissionCount
count:_retryCount"
<<
_missionItems
.
count
()
<<
_retryCount
;
mavlink_message_t
message
;
mavlink_mission_count_t
missionCount
;
...
...
@@ -427,7 +427,7 @@ void MissionManager::_handleMissionItem(const mavlink_message_t& message, bool m
seq
=
missionItem
.
seq
;
}
qCDebug
(
MissionManagerLog
)
<<
"_handleMissionItem sequenceNumber:"
<<
seq
;
qCDebug
(
MissionManagerLog
)
<<
"_handleMissionItem sequenceNumber:"
<<
seq
<<
command
;
if
(
_itemIndicesToRead
.
contains
(
seq
))
{
_itemIndicesToRead
.
removeOne
(
seq
);
...
...
@@ -483,8 +483,6 @@ void MissionManager::_handleMissionRequest(const mavlink_message_t& message, boo
mavlink_msg_mission_request_decode
(
&
message
,
&
missionRequest
);
qCDebug
(
MissionManagerLog
)
<<
"_handleMissionRequest sequenceNumber:"
<<
missionRequest
.
seq
;
if
(
!
_itemIndicesToWrite
.
contains
(
missionRequest
.
seq
))
{
if
(
missionRequest
.
seq
>
_missionItems
.
count
())
{
_sendError
(
RequestRangeError
,
QString
(
"Vehicle requested item outside range, count:request %1:%2. Send to Vehicle failed."
).
arg
(
_missionItems
.
count
()).
arg
(
missionRequest
.
seq
));
...
...
@@ -497,11 +495,13 @@ void MissionManager::_handleMissionRequest(const mavlink_message_t& message, boo
_itemIndicesToWrite
.
removeOne
(
missionRequest
.
seq
);
}
mavlink_message_t
messageOut
;
MissionItem
*
item
=
_missionItems
[
missionRequest
.
seq
];
qCDebug
(
MissionManagerLog
)
<<
"_handleMissionRequest sequenceNumber:"
<<
missionRequest
.
seq
<<
item
->
command
();
mavlink_message_t
messageOut
;
if
(
missionItemInt
)
{
mavlink_mission_item_int_t
missionItem
;
MissionItem
*
item
=
_missionItems
[
missionRequest
.
seq
];
missionItem
.
target_system
=
_vehicle
->
id
();
missionItem
.
target_component
=
MAV_COMP_ID_MISSIONPLANNER
;
...
...
@@ -526,8 +526,6 @@ void MissionManager::_handleMissionRequest(const mavlink_message_t& message, boo
}
else
{
mavlink_mission_item_t
missionItem
;
MissionItem
*
item
=
_missionItems
[
missionRequest
.
seq
];
missionItem
.
target_system
=
_vehicle
->
id
();
missionItem
.
target_component
=
MAV_COMP_ID_MISSIONPLANNER
;
missionItem
.
seq
=
missionRequest
.
seq
;
...
...
src/MissionManager/MissionSettings.FactMetaData.json
0 → 100644
View file @
319cf9c5
[
{
"name"
:
"PlannedHomePositionLatitude"
,
"shortDescription"
:
"Planned home position latitude"
,
"type"
:
"double"
,
"decimalPlaces"
:
7
,
"defaultValue"
:
37.803784
},
{
"name"
:
"PlannedHomePositionLongitude"
,
"shortDescription"
:
"Planned home position longitude"
,
"type"
:
"double"
,
"decimalPlaces"
:
7
,
"defaultValue"
:
-122.462276
},
{
"name"
:
"PlannedHomePositionAltitude"
,
"shortDescription"
:
"Planned home position altitude"
,
"type"
:
"double"
,
"units"
:
"m"
,
"decimalPlaces"
:
1
,
"defaultValue"
:
0
},
{
"name"
:
"FlightSpeed"
,
"shortDescription"
:
"Flight speed for mission."
,
"type"
:
"double"
,
"units"
:
"m/s"
,
"min"
:
0
,
"decimalPlaces"
:
1
},
{
"name"
:
"CameraAction"
,
"shortDescription"
:
"Specify whether the camera should take photos or video"
,
"type"
:
"uint32"
,
"enumStrings"
:
"No camera action,Take photos (time),Take photos (distance),Take video"
,
"enumValues"
:
"0,1,2,3"
,
"defaultValue"
:
0
},
{
"name"
:
"CameraPhotoIntervalDistance"
,
"shortDescription"
:
"Specify the distance between each photo"
,
"type"
:
"double"
,
"units"
:
"m"
,
"min"
:
0
,
"decimalPlaces"
:
1
,
"defaultValue"
:
1
},
{
"name"
:
"CameraPhotoIntervalTime"
,
"shortDescription"
:
"Specify the time between each photo"
,
"type"
:
"uint32"
,
"units"
:
"secs"
,
"min"
:
1
,
"decimalPlaces"
:
0
,
"defaultValue"
:
10
},
{
"name"
:
"GimbalPitch"
,
"shortDescription"
:
"Gimbal pitch rotation."
,
"type"
:
"double"
,
"units"
:
"deg"
,
"min"
:
0.0
,
"max"
:
360.0
,
"decimalPlaces"
:
0
,
"defaultValue"
:
0
},
{
"name"
:
"GimbalYaw"
,
"shortDescription"
:
"Gimbal yaw rotation."
,
"type"
:
"double"
,
"units"
:
"deg"
,
"min"
:
0.0
,
"max"
:
360.0
,
"decimalPlaces"
:
0
,
"defaultValue"
:
0
},
{
"name"
:
"MissionEndAction"
,
"shortDescription"
:
"The action to take when the mission completed."
,
"type"
:
"uint32"
,
"enumStrings"
:
"No action on mission completion,Loiter after mission completes,RTL after mission completes,Land after mission completes"
,
"enumValues"
:
"0,1,2,3"
,
"defaultValue"
:
0
}
]
src/MissionManager/MissionSettingsComplexItem.cc
0 → 100644
View file @
319cf9c5
This diff is collapsed.
Click to expand it.
src/MissionManager/MissionSettingsComplexItem.h
0 → 100644
View file @
319cf9c5
/****************************************************************************
*
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#ifndef MissionSettingsComplexItem_H
#define MissionSettingsComplexItem_H
#include "ComplexMissionItem.h"
#include "MissionItem.h"
#include "Fact.h"
#include "QGCLoggingCategory.h"
Q_DECLARE_LOGGING_CATEGORY
(
MissionSettingsComplexItemLog
)
class
MissionSettingsComplexItem
:
public
ComplexMissionItem
{
Q_OBJECT
public:
MissionSettingsComplexItem
(
Vehicle
*
vehicle
,
QObject
*
parent
=
NULL
);
enum
MissionEndAction
{
MissionEndNoAction
,
MissionEndLoiter
,
MissionEndRTL
,
MissionEndLand
};
Q_ENUMS
(
MissionEndAction
)
enum
CameraAction
{
CameraActionNone
,
TakePhotosIntervalTime
,
TakePhotoIntervalDistance
,
TakeVideo
};
Q_ENUMS
(
CameraAction
)
Q_PROPERTY
(
bool
specifyMissionFlightSpeed
READ
specifyMissionFlightSpeed
WRITE
setSpecifyMissionFlightSpeed
NOTIFY
specifyMissionFlightSpeedChanged
)
Q_PROPERTY
(
Fact
*
missionFlightSpeed
READ
missionFlightSpeed
CONSTANT
)
Q_PROPERTY
(
bool
specifyGimbal
READ
specifyGimbal
WRITE
setSpecifyGimbal
NOTIFY
specifyGimbalChanged
)
Q_PROPERTY
(
Fact
*
gimbalPitch
READ
gimbalPitch
CONSTANT
)
Q_PROPERTY
(
Fact
*
gimbalYaw
READ
gimbalYaw
CONSTANT
)
Q_PROPERTY
(
Fact
*
cameraAction
READ
cameraAction
CONSTANT
)
Q_PROPERTY
(
Fact
*
cameraPhotoIntervalTime
READ
cameraPhotoIntervalTime
CONSTANT
)
Q_PROPERTY
(
Fact
*
cameraPhotoIntervalDistance
READ
cameraPhotoIntervalDistance
CONSTANT
)
Q_PROPERTY
(
Fact
*
missionEndAction
READ
missionEndAction
CONSTANT
)
Q_PROPERTY
(
Fact
*
plannedHomePositionLatitude
READ
plannedHomePositionLatitude
CONSTANT
)
Q_PROPERTY
(
Fact
*
plannedHomePositionLongitude
READ
plannedHomePositionLongitude
CONSTANT
)
Q_PROPERTY
(
Fact
*
plannedHomePositionAltitude
READ
plannedHomePositionAltitude
CONSTANT
)
bool
specifyMissionFlightSpeed
(
void
)
const
{
return
_specifyMissionFlightSpeed
;
}
bool
specifyGimbal
(
void
)
const
{
return
_specifyGimbal
;
}
Fact
*
plannedHomePositionLatitude
(
void
)
{
return
&
_plannedHomePositionLatitudeFact
;
}
Fact
*
plannedHomePositionLongitude
(
void
)
{
return
&
_plannedHomePositionLongitudeFact
;
}
Fact
*
plannedHomePositionAltitude
(
void
)
{
return
&
_plannedHomePositionAltitudeFact
;
}
Fact
*
missionFlightSpeed
(
void
)
{
return
&
_missionFlightSpeedFact
;
}
Fact
*
gimbalYaw
(
void
)
{
return
&
_gimbalYawFact
;
}
Fact
*
gimbalPitch
(
void
)
{
return
&
_gimbalPitchFact
;
}
Fact
*
cameraAction
(
void
)
{
return
&
_cameraActionFact
;
}
Fact
*
cameraPhotoIntervalTime
(
void
)
{
return
&
_cameraPhotoIntervalTimeFact
;
}
Fact
*
cameraPhotoIntervalDistance
(
void
)
{
return
&
_cameraPhotoIntervalDistanceFact
;
}
Fact
*
missionEndAction
(
void
)
{
return
&
_missionEndActionFact
;
}
void
setSpecifyMissionFlightSpeed
(
bool
specifyMissionFlightSpeed
);
void
setSpecifyGimbal
(
bool
specifyGimbal
);
/// Scans the loaded items for the settings items
static
void
scanForMissionSettings
(
QmlObjectListModel
*
visualItems
,
Vehicle
*
vehicle
);
// Overrides from ComplexMissionItem
double
complexDistance
(
void
)
const
final
;
int
lastSequenceNumber
(
void
)
const
final
;
QmlObjectListModel
*
getMissionItems
(
void
)
const
final
;
bool
load
(
const
QJsonObject
&
complexObject
,
int
sequenceNumber
,
QString
&
errorString
)
final
;
double
greatestDistanceTo
(
const
QGeoCoordinate
&
other
)
const
final
;
void
setCruiseSpeed
(
double
cruiseSpeed
)
final
;
QString
mapVisualQML
(
void
)
const
final
{
return
QStringLiteral
(
"MissionSettingsMapVisual.qml"
);
}
// Overrides from VisualMissionItem
bool
dirty
(
void
)
const
final
{
return
_dirty
;
}
bool
isSimpleItem
(
void
)
const
final
{
return
false
;
}
bool
isStandaloneCoordinate
(
void
)
const
final
{
return
false
;
}
bool
specifiesCoordinate
(
void
)
const
final
;
QString
commandDescription
(
void
)
const
final
{
return
"Mission Settings"
;
}
QString
commandName
(
void
)
const
final
{
return
"Mission Settings"
;
}
QString
abbreviation
(
void
)
const
final
{
return
"H"
;
}
QGeoCoordinate
coordinate
(
void
)
const
final
;
QGeoCoordinate
exitCoordinate
(
void
)
const
final
{
return
coordinate
();
}
int
sequenceNumber
(
void
)
const
final
{
return
_sequenceNumber
;
}
double
flightSpeed
(
void
)
final
{
return
std
::
numeric_limits
<
double
>::
quiet_NaN
();
}
bool
coordinateHasRelativeAltitude
(
void
)
const
final
{
return
true
;
}
bool
exitCoordinateHasRelativeAltitude
(
void
)
const
final
{
return
true
;
}
bool
exitCoordinateSameAsEntry
(
void
)
const
final
{
return
true
;
}
void
setDirty
(
bool
dirty
)
final
;
void
setCoordinate
(
const
QGeoCoordinate
&
coordinate
)
final
;
void
setSequenceNumber
(
int
sequenceNumber
)
final
;
void
save
(
QJsonArray
&
missionItems
)
const
final
;
static
const
char
*
jsonComplexItemTypeValue
;
signals:
bool
specifyMissionFlightSpeedChanged
(
bool
specifyMissionFlightSpeed
);
bool
specifyGimbalChanged
(
bool
specifyGimbal
);
private
slots
:
void
_setDirtyAndUpdateLastSequenceNumber
(
void
);
void
_setDirtyAndUpdateCoordinate
(
void
);
void
_setDirty
(
void
);
private:
bool
_specifyMissionFlightSpeed
;
bool
_specifyGimbal
;
Fact
_plannedHomePositionLatitudeFact
;
Fact
_plannedHomePositionLongitudeFact
;
Fact
_plannedHomePositionAltitudeFact
;
Fact
_missionFlightSpeedFact
;
Fact
_gimbalYawFact
;
Fact
_gimbalPitchFact
;
Fact
_cameraActionFact
;
Fact
_cameraPhotoIntervalDistanceFact
;
Fact
_cameraPhotoIntervalTimeFact
;
Fact
_missionEndActionFact
;
int
_sequenceNumber
;
bool
_dirty
;
static
QMap
<
QString
,
FactMetaData
*>
_metaDataMap
;
static
const
char
*
_plannedHomePositionLatitudeName
;
static
const
char
*
_plannedHomePositionLongitudeName
;
static
const
char
*
_plannedHomePositionAltitudeName
;
static
const
char
*
_missionFlightSpeedName
;
static
const
char
*
_gimbalPitchName
;
static
const
char
*
_gimbalYawName
;
static
const
char
*
_cameraActionName
;
static
const
char
*
_cameraPhotoIntervalDistanceName
;
static
const
char
*
_cameraPhotoIntervalTimeName
;
static
const
char
*
_missionEndActionName
;
};
#endif
src/MissionManager/SimpleMissionItem.cc
View file @
319cf9c5
...
...
@@ -50,8 +50,6 @@ static const struct EnumInfo_s _rgMavFrameInfo[] = {
SimpleMissionItem
::
SimpleMissionItem
(
Vehicle
*
vehicle
,
QObject
*
parent
)
:
VisualMissionItem
(
vehicle
,
parent
)
,
_rawEdit
(
false
)
,
_homePositionSpecialCase
(
false
)
,
_showHomePosition
(
false
)
,
_commandTree
(
qgcApp
()
->
toolbox
()
->
missionCommandTree
())
,
_altitudeRelativeToHomeFact
(
0
,
"Altitude is relative to home"
,
FactMetaData
::
valueTypeUint32
)
,
_supportedCommandFact
(
0
,
"Command:"
,
FactMetaData
::
valueTypeUint32
)
...
...
@@ -82,8 +80,6 @@ SimpleMissionItem::SimpleMissionItem(Vehicle* vehicle, const MissionItem& missio
,
_missionItem
(
missionItem
)
,
_rawEdit
(
false
)
,
_dirty
(
false
)
,
_homePositionSpecialCase
(
false
)
,
_showHomePosition
(
false
)
,
_commandTree
(
qgcApp
()
->
toolbox
()
->
missionCommandTree
())
,
_altitudeRelativeToHomeFact
(
0
,
"Altitude is relative to home"
,
FactMetaData
::
valueTypeUint32
)
,
_supportedCommandFact
(
0
,
"Command:"
,
FactMetaData
::
valueTypeUint32
)
...
...
@@ -112,8 +108,6 @@ SimpleMissionItem::SimpleMissionItem(const SimpleMissionItem& other, QObject* pa
,
_missionItem
(
other
.
_vehicle
)
,
_rawEdit
(
false
)
,
_dirty
(
false
)
,
_homePositionSpecialCase
(
false
)
,
_showHomePosition
(
false
)
,
_commandTree
(
qgcApp
()
->
toolbox
()
->
missionCommandTree
())
,
_altitudeRelativeToHomeFact
(
0
,
"Altitude is relative to home"
,
FactMetaData
::
valueTypeUint32
)
,
_supportedCommandFact
(
0
,
"Command:"
,
FactMetaData
::
valueTypeUint32
)
...
...
@@ -246,9 +240,11 @@ SimpleMissionItem::~SimpleMissionItem()
{
}
void
SimpleMissionItem
::
save
(
QJson
Object
&
saveObject
)
const
void
SimpleMissionItem
::
save
(
QJson
Array
&
missionItems
)
const
{
_missionItem
.
save
(
saveObject
);
QJsonObject
itemObject
;
_missionItem
.
save
(
itemObject
);
missionItems
.
append
(
itemObject
);
}
bool
SimpleMissionItem
::
load
(
QTextStream
&
loadStream
)
...
...
@@ -584,14 +580,6 @@ QString SimpleMissionItem::category(void) const
return
_commandTree
->
getUIInfo
(
_vehicle
,
(
MAV_CMD
)
command
())
->
category
();
}
void
SimpleMissionItem
::
setShowHomePosition
(
bool
showHomePosition
)
{
if
(
showHomePosition
!=
_showHomePosition
)
{
_showHomePosition
=
showHomePosition
;
emit
showHomePositionChanged
(
_showHomePosition
);
}
}
void
SimpleMissionItem
::
setCommand
(
MavlinkQmlSingleton
::
Qml_MAV_CMD
command
)
{
if
((
MAV_CMD
)
command
!=
_missionItem
.
command
())
{
...
...
src/MissionManager/SimpleMissionItem.h
View file @
319cf9c5
...
...
@@ -32,10 +32,8 @@ public:
Q_PROPERTY
(
QString
category
READ
category
NOTIFY
commandChanged
)
Q_PROPERTY
(
MavlinkQmlSingleton
::
Qml_MAV_CMD
command
READ
command
WRITE
setCommand
NOTIFY
commandChanged
)
Q_PROPERTY
(
bool
friendlyEditAllowed
READ
friendlyEditAllowed
NOTIFY
friendlyEditAllowedChanged
)
Q_PROPERTY
(
bool
homePosition
READ
homePosition
CONSTANT
)
///< true: This item is being used as a home position indicator
Q_PROPERTY
(
bool
rawEdit
READ
rawEdit
WRITE
setRawEdit
NOTIFY
rawEditChanged
)
///< true: raw item editing with all params
Q_PROPERTY
(
bool
relativeAltitude
READ
relativeAltitude
NOTIFY
frameChanged
)
Q_PROPERTY
(
bool
showHomePosition
READ
showHomePosition
WRITE
setShowHomePosition
NOTIFY
showHomePositionChanged
)
// These properties are used to display the editing ui
Q_PROPERTY
(
QmlObjectListModel
*
checkboxFacts
READ
checkboxFacts
NOTIFY
uiModelChanged
)
...
...
@@ -47,9 +45,7 @@ public:
QString
category
(
void
)
const
;
MavlinkQmlSingleton
::
Qml_MAV_CMD
command
(
void
)
const
{
return
(
MavlinkQmlSingleton
::
Qml_MAV_CMD
)
_missionItem
.
_commandFact
.
cookedValue
().
toInt
();
}
bool
friendlyEditAllowed
(
void
)
const
;
bool
homePosition
(
void
)
const
{
return
_homePositionSpecialCase
;
}
bool
rawEdit
(
void
)
const
;
bool
showHomePosition
(
void
)
const
{
return
_showHomePosition
;
}
QmlObjectListModel
*
textFieldFacts
(
void
);
...
...
@@ -62,9 +58,6 @@ public:
void
setCommand
(
MavlinkQmlSingleton
::
Qml_MAV_CMD
command
);
void
setHomePositionSpecialCase
(
bool
homePositionSpecialCase
)
{
_homePositionSpecialCase
=
homePositionSpecialCase
;
}
void
setShowHomePosition
(
bool
showHomePosition
);
void
setAltDifference
(
double
altDifference
);
void
setAltPercent
(
double
altPercent
);
void
setAzimuth
(
double
azimuth
);
...
...
@@ -99,7 +92,7 @@ public:
void
setDirty
(
bool
dirty
)
final
;
void
setCoordinate
(
const
QGeoCoordinate
&
coordinate
)
final
;
void
setSequenceNumber
(
int
sequenceNumber
)
final
;
void
save
(
QJson
Object
&
saveObject
)
const
final
;
void
save
(
QJson
Array
&
missionItems
)
const
final
;
public
slots
:
void
setDefaultsForCommand
(
void
);
...
...
@@ -111,7 +104,6 @@ signals:
void
headingDegreesChanged
(
double
heading
);
void
rawEditChanged
(
bool
rawEdit
);
void
uiModelChanged
(
void
);
void
showHomePositionChanged
(
bool
showHomePosition
);
private
slots
:
void
_setDirtyFromSignal
(
void
);
...
...
@@ -132,8 +124,6 @@ private:
MissionItem
_missionItem
;
bool
_rawEdit
;
bool
_dirty
;
bool
_homePositionSpecialCase
;
///< true: This item is being used as a ui home position indicator
bool
_showHomePosition
;
MissionCommandTree
*
_commandTree
;
...
...
src/MissionManager/SurveyMissionItem.cc
View file @
319cf9c5
...
...
@@ -293,8 +293,10 @@ void SurveyMissionItem::setDirty(bool dirty)
}
}
void
SurveyMissionItem
::
save
(
QJson
Object
&
saveObject
)
const
void
SurveyMissionItem
::
save
(
QJson
Array
&
missionItems
)
const
{
QJsonObject
saveObject
;
saveObject
[
JsonHelper
::
jsonVersionKey
]
=
3
;
saveObject
[
VisualMissionItem
::
jsonTypeKey
]
=
VisualMissionItem
::
jsonTypeComplexItemValue
;
saveObject
[
ComplexMissionItem
::
jsonComplexItemTypeKey
]
=
jsonComplexItemTypeValue
;
...
...
@@ -344,6 +346,8 @@ void SurveyMissionItem::save(QJsonObject& saveObject) const
}
saveObject
[
_jsonPolygonObjectKey
]
=
polygonArray
;
missionItems
.
append
(
saveObject
);
}
void
SurveyMissionItem
::
setSequenceNumber
(
int
sequenceNumber
)
...
...
src/MissionManager/SurveyMissionItem.h
View file @
319cf9c5
...
...
@@ -127,7 +127,7 @@ public:
void
setCoordinate
(
const
QGeoCoordinate
&
coordinate
)
final
;
void
setSequenceNumber
(
int
sequenceNumber
)
final
;
void
setTurnaroundDist
(
double
dist
)
{
_turnaroundDistFact
.
setRawValue
(
dist
);
}
void
save
(
QJson
Object
&
saveObject
)
const
final
;
void
save
(
QJson
Array
&
missionItems
)
const
final
;
static
const
char
*
jsonComplexItemTypeValue
;
...
...
src/MissionManager/VisualMissionItem.cc
View file @
319cf9c5
...
...
@@ -25,6 +25,8 @@ VisualMissionItem::VisualMissionItem(Vehicle* vehicle, QObject* parent)
,
_vehicle
(
vehicle
)
,
_isCurrentItem
(
false
)
,
_dirty
(
false
)
,
_homePositionSpecialCase
(
false
)
,
_showHomePosition
(
false
)
,
_altDifference
(
0.0
)
,
_altPercent
(
0.0
)
,
_azimuth
(
0.0
)
...
...
@@ -38,6 +40,8 @@ VisualMissionItem::VisualMissionItem(const VisualMissionItem& other, QObject* pa
,
_vehicle
(
NULL
)
,
_isCurrentItem
(
false
)
,
_dirty
(
false
)
,
_homePositionSpecialCase
(
false
)
,
_showHomePosition
(
false
)
,
_altDifference
(
0.0
)
,
_altPercent
(
0.0
)
,
_azimuth
(
0.0
)
...
...
@@ -52,6 +56,8 @@ const VisualMissionItem& VisualMissionItem::operator=(const VisualMissionItem& o
setIsCurrentItem
(
other
.
_isCurrentItem
);
setDirty
(
other
.
_dirty
);
_homePositionSpecialCase
=
other
.
_homePositionSpecialCase
;
setShowHomePosition
(
other
.
showHomePosition
());
setAltDifference
(
other
.
_altDifference
);
setAltPercent
(
other
.
_altPercent
);
setAzimuth
(
other
.
_azimuth
);
...
...
@@ -103,3 +109,11 @@ void VisualMissionItem::setAzimuth(double azimuth)
emit
azimuthChanged
(
_azimuth
);
}
}
void
VisualMissionItem
::
setShowHomePosition
(
bool
showHomePosition
)
{
if
(
showHomePosition
!=
_showHomePosition
)
{
_showHomePosition
=
showHomePosition
;
emit
showHomePositionChanged
(
_showHomePosition
);
}
}
src/MissionManager/VisualMissionItem.h
View file @
319cf9c5
...
...
@@ -40,6 +40,9 @@ public:
const
VisualMissionItem
&
operator
=
(
const
VisualMissionItem
&
other
);
Q_PROPERTY
(
bool
homePosition
READ
homePosition
CONSTANT
)
///< true: This item is being used as a home position indicator
Q_PROPERTY
(
bool
showHomePosition
READ
showHomePosition
WRITE
setShowHomePosition
NOTIFY
showHomePositionChanged
)
// 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
...
...
@@ -87,6 +90,11 @@ public:
// Property accesors
bool
homePosition
(
void
)
const
{
return
_homePositionSpecialCase
;
}
bool
showHomePosition
(
void
)
const
{
return
_showHomePosition
;
}
void
setHomePositionSpecialCase
(
bool
homePositionSpecialCase
)
{
_homePositionSpecialCase
=
homePositionSpecialCase
;
}
void
setShowHomePosition
(
bool
showHomePosition
);
double
altDifference
(
void
)
const
{
return
_altDifference
;
}
double
altPercent
(
void
)
const
{
return
_altPercent
;
}
double
azimuth
(
void
)
const
{
return
_azimuth
;
}
...
...
@@ -126,8 +134,8 @@ public:
virtual
void
setSequenceNumber
(
int
sequenceNumber
)
=
0
;
/// Save the item(s) in Json format
/// @param
saveObject Save the item to this json object
virtual
void
save
(
QJson
Object
&
saveObject
)
const
=
0
;
/// @param
missionItems Current set of mission items, new items should be appended to the end
virtual
void
save
(
QJson
Array
&
missionItems
)
const
=
0
;
/// @return The QML resource file which contains the control which visualizes the item on the map.
virtual
QString
mapVisualQML
(
void
)
const
=
0
;
...
...
@@ -137,6 +145,7 @@ public:
static
const
char
*
jsonTypeComplexItemValue
;
///< Item type is Complex Item
signals:
void
showHomePositionChanged
(
bool
showHomePosition
);
void
altDifferenceChanged
(
double
altDifference
);
void
altPercentChanged
(
double
altPercent
);
void
azimuthChanged
(
double
azimuth
);
...
...
@@ -162,6 +171,8 @@ protected:
Vehicle
*
_vehicle
;
bool
_isCurrentItem
;
bool
_dirty
;
bool
_homePositionSpecialCase
;
///< true: This item is being used as a ui home position indicator
bool
_showHomePosition
;
double
_altDifference
;
///< Difference in altitude from previous waypoint
double
_altPercent
;
///< Percent of total altitude change in mission
double
_azimuth
;
///< Azimuth to previous waypoint
...
...
src/Vehicle/Vehicle.cc
View file @
319cf9c5
...
...
@@ -1661,10 +1661,9 @@ void Vehicle::_startMissionRequest(void)
_missionManager
->
requestMissionItems
();
}
else
{
QmlObjectListModel
*
visualItems
=
NULL
;
QmlObjectListModel
*
complexItems
=
NULL
;
QDir
missionAutoLoadDir
(
missionAutoLoadDirPath
);
QString
autoloadFilename
=
missionAutoLoadDir
.
absoluteFilePath
(
tr
(
"AutoLoad%1.mission"
).
arg
(
_id
));
if
(
MissionController
::
loadItemsFromFile
(
this
,
autoloadFilename
,
&
visualItems
,
&
complexItems
))
{
if
(
MissionController
::
loadItemsFromFile
(
this
,
autoloadFilename
,
&
visualItems
))
{
MissionController
::
sendItemsToVehicle
(
this
,
visualItems
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment