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
edc89cdd
Commit
edc89cdd
authored
Dec 17, 2015
by
Don Gagne
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2421 from DonLakeFlyer/SupportedCommands
Firmware specific supported mission commands list
parents
1e105f0c
b1ea165d
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
340 additions
and
130 deletions
+340
-130
qgroundcontrol.pro
qgroundcontrol.pro
+4
-2
Fact.h
src/FactSystem/Fact.h
+1
-1
SettingsFact.cc
src/FactSystem/SettingsFact.cc
+73
-0
SettingsFact.h
src/FactSystem/SettingsFact.h
+51
-0
PX4FirmwarePlugin.cc
src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc
+2
-7
MissionCommands.cc
src/MissionManager/MissionCommands.cc
+78
-10
MissionCommands.h
src/MissionManager/MissionCommands.h
+11
-12
MissionItem.cc
src/MissionManager/MissionItem.cc
+0
-44
MissionItem.h
src/MissionManager/MissionItem.h
+0
-6
QGCApplication.cc
src/QGCApplication.cc
+5
-1
MissionCommandDialog.qml
src/QmlControls/MissionCommandDialog.qml
+4
-3
QGroundControlQmlGlobal.cc
src/QmlControls/QGroundControlQmlGlobal.cc
+37
-8
QGroundControlQmlGlobal.h
src/QmlControls/QGroundControlQmlGlobal.h
+26
-14
GeneralSettings.qml
src/ui/preferences/GeneralSettings.qml
+48
-22
No files found.
qgroundcontrol.pro
View file @
edc89cdd
...
...
@@ -662,19 +662,21 @@ INCLUDEPATH += \
HEADERS
+=
\
src
/
FactSystem
/
Fact
.
h
\
src
/
FactSystem
/
FactControls
/
FactPanelController
.
h
\
src
/
FactSystem
/
FactMetaData
.
h
\
src
/
FactSystem
/
FactSystem
.
h
\
src
/
FactSystem
/
FactValidator
.
h
\
src
/
FactSystem
/
ParameterLoader
.
h
\
src
/
FactSystem
/
FactControls
/
FactPanelController
.
h
\
src
/
FactSystem
/
SettingsFact
.
h
\
SOURCES
+=
\
src
/
FactSystem
/
Fact
.
cc
\
src
/
FactSystem
/
FactControls
/
FactPanelController
.
cc
\
src
/
FactSystem
/
FactMetaData
.
cc
\
src
/
FactSystem
/
FactSystem
.
cc
\
src
/
FactSystem
/
FactValidator
.
cc
\
src
/
FactSystem
/
ParameterLoader
.
cc
\
src
/
FactSystem
/
FactControls
/
FactPanelController
.
cc
\
src
/
FactSystem
/
SettingsFact
.
cc
\
#-------------------------------------------------------------------------------------
#
Video
Streaming
...
...
src/FactSystem/Fact.h
View file @
edc89cdd
...
...
@@ -136,7 +136,7 @@ signals:
/// This signal is meant for use by Fact container implementations.
void
_containerRawValueChanged
(
const
QVariant
&
value
);
pr
ivate
:
pr
otected
:
QString
_variantToString
(
const
QVariant
&
variant
)
const
;
QString
_name
;
...
...
src/FactSystem/SettingsFact.cc
0 → 100644
View file @
edc89cdd
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009 - 2014 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
#include "SettingsFact.h"
#include <QSettings>
SettingsFact
::
SettingsFact
(
QObject
*
parent
)
:
Fact
(
parent
)
{
}
SettingsFact
::
SettingsFact
(
QString
settingGroup
,
QString
settingName
,
FactMetaData
::
ValueType_t
type
,
const
QVariant
&
defaultValue
,
QObject
*
parent
)
:
Fact
(
0
,
settingName
,
type
,
parent
)
,
_settingGroup
(
settingGroup
)
{
QSettings
settings
;
if
(
!
_settingGroup
.
isEmpty
())
{
settings
.
beginGroup
(
_settingGroup
);
}
_rawValue
=
settings
.
value
(
_name
,
defaultValue
);
connect
(
this
,
&
Fact
::
valueChanged
,
this
,
&
SettingsFact
::
_valueChanged
);
}
SettingsFact
::
SettingsFact
(
const
SettingsFact
&
other
,
QObject
*
parent
)
:
Fact
(
other
,
parent
)
{
*
this
=
other
;
}
const
SettingsFact
&
SettingsFact
::
operator
=
(
const
SettingsFact
&
other
)
{
Fact
::
operator
=
(
other
);
_settingGroup
=
other
.
_settingGroup
;
return
*
this
;
}
void
SettingsFact
::
_valueChanged
(
QVariant
value
)
{
QSettings
settings
;
if
(
!
_settingGroup
.
isEmpty
())
{
settings
.
beginGroup
(
_settingGroup
);
}
settings
.
setValue
(
_name
,
value
);
}
src/FactSystem/SettingsFact.h
0 → 100644
View file @
edc89cdd
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009 - 2014 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/// @file
/// @author Don Gagne <don@thegagnes.com>
#ifndef SettingsFact_H
#define SettingsFact_H
#include "Fact.h"
/// @brief A SettingsFact is Fact which holds a QSettings value.
class
SettingsFact
:
public
Fact
{
Q_OBJECT
public:
SettingsFact
(
QObject
*
parent
=
NULL
);
SettingsFact
(
QString
settingGroup
,
QString
settingName
,
FactMetaData
::
ValueType_t
type
,
const
QVariant
&
defaultValue
,
QObject
*
parent
=
NULL
);
SettingsFact
(
const
SettingsFact
&
other
,
QObject
*
parent
=
NULL
);
const
SettingsFact
&
operator
=
(
const
SettingsFact
&
other
);
private
slots
:
void
_valueChanged
(
QVariant
value
);
private:
QString
_settingGroup
;
};
#endif
src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc
View file @
edc89cdd
...
...
@@ -216,12 +216,7 @@ QList<MAV_CMD> PX4FirmwarePlugin::supportedMissionCommands(void)
<<
MAV_CMD_NAV_LOITER_UNLIM
<<
MAV_CMD_NAV_LOITER_TURNS
<<
MAV_CMD_NAV_LOITER_TIME
<<
MAV_CMD_NAV_RETURN_TO_LAUNCH
<<
MAV_CMD_NAV_LAND
<<
MAV_CMD_NAV_TAKEOFF
<<
MAV_CMD_NAV_ROI
<<
MAV_CMD_NAV_GUIDED_ENABLE
<<
MAV_CMD_DO_SET_ROI
<<
MAV_CMD_DO_GUIDED_LIMITS
<<
MAV_CMD_DO_JUMP
<<
MAV_CMD_DO_CHANGE_SPEED
<<
MAV_CMD_DO_SET_CAM_TRIGG_DIST
<<
MAV_CMD_DO_SET_RELAY
<<
MAV_CMD_DO_REPEAT_RELAY
<<
MAV_CMD_DO_SET_SERVO
<<
MAV_CMD_DO_REPEAT_SERVO
<<
MAV_CMD_DO_DIGICAM_CONFIGURE
<<
MAV_CMD_DO_DIGICAM_CONTROL
<<
MAV_CMD_DO_MOUNT_CONTROL
<<
MAV_CMD_CONDITION_DELAY
<<
MAV_CMD_CONDITION_CHANGE_ALT
<<
MAV_CMD_CONDITION_DISTANCE
<<
MAV_CMD_CONDITION_YAW
;
<<
MAV_CMD_DO_JUMP
<<
MAV_CMD_CONDITION_DELAY
;
return
list
;
}
src/MissionManager/MissionCommands.cc
View file @
edc89cdd
...
...
@@ -22,6 +22,10 @@ This file is part of the QGROUNDCONTROL project
#include "MissionCommands.h"
#include "FactMetaData.h"
#include "Vehicle.h"
#include "FirmwarePluginManager.h"
#include "QGCApplication.h"
#include "QGroundControlQmlGlobal.h"
#include <QStringList>
#include <QJsonDocument>
...
...
@@ -60,7 +64,14 @@ const QString MissionCommands::_degreesUnits (QStringLiteral("deg
MissionCommands
::
MissionCommands
(
QGCApplication
*
app
)
:
QGCTool
(
app
)
{
}
void
MissionCommands
::
setToolbox
(
QGCToolbox
*
toolbox
)
{
QGCTool
::
setToolbox
(
toolbox
);
_loadMavCmdInfoJson
();
_createFirmwareSpecificLists
();
}
bool
MissionCommands
::
_validateKeyTypes
(
QJsonObject
&
jsonObject
,
const
QStringList
&
keys
,
const
QList
<
QJsonValue
::
Type
>&
types
)
...
...
@@ -165,7 +176,6 @@ void MissionCommands::_loadMavCmdInfoJson(void)
}
_mavCmdInfoMap
[
mavCmdInfo
->
_command
]
=
mavCmdInfo
;
_commandList
.
append
(
mavCmdInfo
);
// Read params
...
...
@@ -234,16 +244,13 @@ void MissionCommands::_loadMavCmdInfoJson(void)
if
(
mavCmdInfo
->
_command
!=
MAV_CMD_NAV_LAST
)
{
// Don't add fake home postion command to categories
if
(
!
_categories
.
contains
(
mavCmdInfo
->
category
())
&&
mavCmdInfo
->
friendlyEdit
())
{
// Only friendly edit commands go in category list
qCDebug
(
MissionCommandsLog
)
<<
"Adding new category"
;
_categories
.
append
(
mavCmdInfo
->
category
());
_categoryToMavCmdInfoListMap
[
mavCmdInfo
->
category
()]
=
new
QmlObjectListModel
(
this
);
}
if
(
mavCmdInfo
->
friendlyEdit
())
{
// Only friendly edit commands go in category list
_categoryToMavCmdInfoListMap
[
mavCmdInfo
->
category
()]
->
append
(
mavCmdInfo
);
// Only friendly edit commands go in category list. We use MAV_AUTOPILOT_GENERIC key to store full list.
if
(
!
_categoryToMavCmdInfoListMap
.
contains
(
MAV_AUTOPILOT_GENERIC
)
||
!
_categoryToMavCmdInfoListMap
[
MAV_AUTOPILOT_GENERIC
].
contains
(
mavCmdInfo
->
category
()))
{
qCDebug
(
MissionCommandsLog
)
<<
"Adding new category"
;
_categoryToMavCmdInfoListMap
[
MAV_AUTOPILOT_GENERIC
][
mavCmdInfo
->
category
()]
=
new
QmlObjectListModel
(
this
);
}
_categoryToMavCmdInfoListMap
[
MAV_AUTOPILOT_GENERIC
][
mavCmdInfo
->
category
()]
->
append
(
mavCmdInfo
);
}
}
...
...
@@ -259,3 +266,64 @@ void MissionCommands::_loadMavCmdInfoJson(void)
}
}
}
MAV_AUTOPILOT
MissionCommands
::
_firmwareTypeFromVehicle
(
Vehicle
*
vehicle
)
const
{
if
(
vehicle
)
{
return
vehicle
->
firmwareType
();
}
else
{
QSettings
settings
;
// FIXME: Hack duplicated code from QGroundControlQmlGlobal. Had to do this for now since
// QGroundControlQmlGlobal is not available from C++ side.
return
(
MAV_AUTOPILOT
)
settings
.
value
(
"OfflineEditingFirmwareType"
,
MAV_AUTOPILOT_ARDUPILOTMEGA
).
toInt
();
}
}
QString
MissionCommands
::
categoryFromCommand
(
MavlinkQmlSingleton
::
Qml_MAV_CMD
command
)
const
{
return
_mavCmdInfoMap
[(
MAV_CMD
)
command
]
->
category
();
}
QVariant
MissionCommands
::
getCommandsForCategory
(
Vehicle
*
vehicle
,
const
QString
&
category
)
const
{
return
QVariant
::
fromValue
(
_categoryToMavCmdInfoListMap
[
_firmwareTypeFromVehicle
(
vehicle
)][
category
]);
}
const
QStringList
MissionCommands
::
categories
(
Vehicle
*
vehicle
)
const
{
QStringList
list
;
foreach
(
QString
category
,
_categoryToMavCmdInfoListMap
[
_firmwareTypeFromVehicle
(
vehicle
)].
keys
())
{
list
<<
category
;
}
return
list
;
}
void
MissionCommands
::
_createFirmwareSpecificLists
(
void
)
{
QList
<
MAV_AUTOPILOT
>
firmwareList
;
firmwareList
<<
MAV_AUTOPILOT_PX4
<<
MAV_AUTOPILOT_ARDUPILOTMEGA
;
foreach
(
MAV_AUTOPILOT
firmwareType
,
firmwareList
)
{
FirmwarePlugin
*
plugin
=
_toolbox
->
firmwarePluginManager
()
->
firmwarePluginForAutopilot
(
firmwareType
,
MAV_TYPE_QUADROTOR
);
QList
<
MAV_CMD
>
cmdList
=
plugin
->
supportedMissionCommands
();
foreach
(
MAV_CMD
command
,
cmdList
)
{
MavCmdInfo
*
mavCmdInfo
=
_mavCmdInfoMap
[
command
];
if
(
mavCmdInfo
->
friendlyEdit
())
{
if
(
!
_categoryToMavCmdInfoListMap
.
contains
(
firmwareType
)
||
!
_categoryToMavCmdInfoListMap
[
firmwareType
].
contains
(
mavCmdInfo
->
category
()))
{
qCDebug
(
MissionCommandsLog
)
<<
"Adding new category"
<<
firmwareType
;
_categoryToMavCmdInfoListMap
[
firmwareType
][
mavCmdInfo
->
category
()]
=
new
QmlObjectListModel
(
this
);
}
_categoryToMavCmdInfoListMap
[
firmwareType
][
mavCmdInfo
->
category
()]
->
append
(
mavCmdInfo
);
}
else
{
qWarning
()
<<
"Attempt to add non friendly edit supported command"
;
}
}
}
}
src/MissionManager/MissionCommands.h
View file @
edc89cdd
...
...
@@ -38,6 +38,7 @@
Q_DECLARE_LOGGING_CATEGORY
(
MissionCommandsLog
)
class
MissionCommands
;
class
Vehicle
;
class
MavCmdParamInfo
:
public
QObject
{
...
...
@@ -129,17 +130,15 @@ class MissionCommands : public QGCTool
public:
MissionCommands
(
QGCApplication
*
app
);
Q_PROPERTY
(
QStringList
categories
READ
categories
CONSTANT
)
Q_PROPERTY
(
const
QmlObjectListModel
*
commands
READ
commands
CONSTANT
)
Q_INVOKABLE
QString
categoryFromCommand
(
MavlinkQmlSingleton
::
Qml_MAV_CMD
command
)
{
return
_mavCmdInfoMap
[(
MAV_CMD
)
command
]
->
category
();
}
Q_INVOKABLE
const
QVariant
getCommandsForCategory
(
const
QString
&
category
)
const
{
return
QVariant
::
fromValue
(
_categoryToMavCmdInfoListMap
[
category
]);
}
const
QStringList
categories
(
void
)
const
{
return
_categories
;
}
const
QmlObjectListModel
*
commands
(
void
)
const
{
return
&
_commandList
;
}
Q_INVOKABLE
const
QStringList
categories
(
Vehicle
*
vehicle
)
const
;
Q_INVOKABLE
QString
categoryFromCommand
(
MavlinkQmlSingleton
::
Qml_MAV_CMD
command
)
const
;
Q_INVOKABLE
QVariant
getCommandsForCategory
(
Vehicle
*
vehicle
,
const
QString
&
category
)
const
;
const
QMap
<
MAV_CMD
,
MavCmdInfo
*>&
commandInfoMap
(
void
)
const
{
return
_mavCmdInfoMap
;
};
// Overrides from QGCTool
virtual
void
setToolbox
(
QGCToolbox
*
toolbox
);
static
const
QString
_degreesUnits
;
static
const
QString
_degreesConvertUnits
;
...
...
@@ -147,14 +146,14 @@ signals:
private:
void
_loadMavCmdInfoJson
(
void
);
void
_createFirmwareSpecificLists
(
void
);
void
_setupMetaData
(
void
);
bool
_validateKeyTypes
(
QJsonObject
&
jsonObject
,
const
QStringList
&
keys
,
const
QList
<
QJsonValue
::
Type
>&
types
);
MAV_AUTOPILOT
_firmwareTypeFromVehicle
(
Vehicle
*
vehicle
)
const
;
private:
QStringList
_categories
;
QMap
<
QString
,
QmlObjectListModel
*>
_categoryToMavCmdInfoListMap
;
QmlObjectListModel
_commandList
;
QMap
<
MAV_CMD
,
MavCmdInfo
*>
_mavCmdInfoMap
;
QMap
<
MAV_AUTOPILOT
,
QMap
<
QString
,
QmlObjectListModel
*>
>
_categoryToMavCmdInfoListMap
;
QMap
<
MAV_CMD
,
MavCmdInfo
*>
_mavCmdInfoMap
;
static
const
QString
_categoryJsonKey
;
static
const
QString
_decimalPlacesJsonKey
;
...
...
src/MissionManager/MissionItem.cc
View file @
edc89cdd
...
...
@@ -37,7 +37,6 @@ FactMetaData* MissionItem::_defaultParamMetaData = NULL;
FactMetaData
*
MissionItem
::
_frameMetaData
=
NULL
;
FactMetaData
*
MissionItem
::
_latitudeMetaData
=
NULL
;
FactMetaData
*
MissionItem
::
_longitudeMetaData
=
NULL
;
FactMetaData
*
MissionItem
::
_supportedCommandMetaData
=
NULL
;
struct
EnumInfo_s
{
const
char
*
label
;
...
...
@@ -108,7 +107,6 @@ MissionItem::MissionItem(QObject* parent)
,
_param7MetaData
(
FactMetaData
::
valueTypeDouble
)
,
_syncingAltitudeRelativeToHomeAndFrame
(
false
)
,
_syncingHeadingDegreesAndParam4
(
false
)
,
_syncingSupportedCommandAndCommand
(
false
)
,
_mavCmdInfoMap
(
qgcApp
()
->
toolbox
()
->
missionCommands
()
->
commandInfoMap
())
{
// Need a good command and frame before we start passing signals around
...
...
@@ -167,7 +165,6 @@ MissionItem::MissionItem(int sequenceNumber,
,
_param7MetaData
(
FactMetaData
::
valueTypeDouble
)
,
_syncingAltitudeRelativeToHomeAndFrame
(
false
)
,
_syncingHeadingDegreesAndParam4
(
false
)
,
_syncingSupportedCommandAndCommand
(
false
)
,
_mavCmdInfoMap
(
qgcApp
()
->
toolbox
()
->
missionCommands
()
->
commandInfoMap
())
{
// Need a good command and frame before we start passing signals around
...
...
@@ -183,7 +180,6 @@ MissionItem::MissionItem(int sequenceNumber,
setAutoContinue
(
autoContinue
);
_syncFrameToAltitudeRelativeToHome
();
_syncCommandToSupportedCommand
(
QVariant
(
this
->
command
()));
_param1Fact
.
setRawValue
(
param1
);
_param2Fact
.
setRawValue
(
param2
);
...
...
@@ -223,7 +219,6 @@ MissionItem::MissionItem(const MissionItem& other, QObject* parent)
,
_param4MetaData
(
FactMetaData
::
valueTypeDouble
)
,
_syncingAltitudeRelativeToHomeAndFrame
(
false
)
,
_syncingHeadingDegreesAndParam4
(
false
)
,
_syncingSupportedCommandAndCommand
(
false
)
,
_mavCmdInfoMap
(
qgcApp
()
->
toolbox
()
->
missionCommands
()
->
commandInfoMap
())
{
// Need a good command and frame before we start passing signals around
...
...
@@ -254,7 +249,6 @@ const MissionItem& MissionItem::operator=(const MissionItem& other)
setHomePositionValid
(
other
.
_homePositionValid
);
_syncFrameToAltitudeRelativeToHome
();
_syncCommandToSupportedCommand
(
QVariant
(
this
->
command
()));
_param1Fact
.
setRawValue
(
other
.
_param1Fact
.
rawValue
());
_param2Fact
.
setRawValue
(
other
.
_param2Fact
.
rawValue
());
...
...
@@ -282,8 +276,6 @@ void MissionItem::_connectSignals(void)
connect
(
this
,
&
MissionItem
::
sequenceNumberChanged
,
this
,
&
MissionItem
::
_setDirtyFromSignal
);
// Values from these facts must propogate back and forth between the real object storage
connect
(
&
_supportedCommandFact
,
&
Fact
::
valueChanged
,
this
,
&
MissionItem
::
_syncSupportedCommandToCommand
);
connect
(
&
_commandFact
,
&
Fact
::
valueChanged
,
this
,
&
MissionItem
::
_syncCommandToSupportedCommand
);
connect
(
&
_altitudeRelativeToHomeFact
,
&
Fact
::
valueChanged
,
this
,
&
MissionItem
::
_syncAltitudeRelativeToHomeToFrame
);
connect
(
this
,
&
MissionItem
::
frameChanged
,
this
,
&
MissionItem
::
_syncFrameToAltitudeRelativeToHome
);
...
...
@@ -351,28 +343,10 @@ void MissionItem::_setupMetaData(void)
_longitudeMetaData
->
setUnits
(
"deg"
);
_longitudeMetaData
->
setDecimalPlaces
(
7
);
enumStrings
.
clear
();
enumValues
.
clear
();
// FIXME: Hack hardcode to PX4
QList
<
MAV_CMD
>
supportedCommands
=
qgcApp
()
->
toolbox
()
->
firmwarePluginManager
()
->
firmwarePluginForAutopilot
(
MAV_AUTOPILOT_PX4
,
MAV_TYPE_QUADROTOR
)
->
supportedMissionCommands
();
if
(
supportedCommands
.
count
())
{
foreach
(
MAV_CMD
command
,
supportedCommands
)
{
enumStrings
.
append
(
_mavCmdInfoMap
[
command
]
->
friendlyName
());
enumValues
.
append
(
QVariant
(
command
));
}
}
else
{
foreach
(
const
MavCmdInfo
*
mavCmdInfo
,
_mavCmdInfoMap
)
{
enumStrings
.
append
(
mavCmdInfo
->
friendlyName
());
enumValues
.
append
(
QVariant
(
mavCmdInfo
->
command
()));
}
}
_supportedCommandMetaData
=
new
FactMetaData
(
FactMetaData
::
valueTypeUint32
);
_supportedCommandMetaData
->
setEnumInfo
(
enumStrings
,
enumValues
);
}
_commandFact
.
setMetaData
(
_commandMetaData
);
_frameFact
.
setMetaData
(
_frameMetaData
);
_supportedCommandFact
.
setMetaData
(
_supportedCommandMetaData
);
}
MissionItem
::~
MissionItem
()
...
...
@@ -787,24 +761,6 @@ void MissionItem::_syncFrameToAltitudeRelativeToHome(void)
}
}
void
MissionItem
::
_syncSupportedCommandToCommand
(
const
QVariant
&
value
)
{
if
(
!
_syncingSupportedCommandAndCommand
)
{
_syncingSupportedCommandAndCommand
=
true
;
_commandFact
.
setRawValue
(
value
.
toInt
());
_syncingSupportedCommandAndCommand
=
false
;
}
}
void
MissionItem
::
_syncCommandToSupportedCommand
(
const
QVariant
&
value
)
{
if
(
!
_syncingSupportedCommandAndCommand
)
{
_syncingSupportedCommandAndCommand
=
true
;
_supportedCommandFact
.
setRawValue
(
value
.
toInt
());
_syncingSupportedCommandAndCommand
=
false
;
}
}
void
MissionItem
::
setDefaultsForCommand
(
void
)
{
// We set these global defaults first, then if there are param defaults they will get reset
...
...
src/MissionManager/MissionItem.h
View file @
edc89cdd
...
...
@@ -87,7 +87,6 @@ public:
Q_PROPERTY
(
int
sequenceNumber
READ
sequenceNumber
WRITE
setSequenceNumber
NOTIFY
sequenceNumberChanged
)
Q_PROPERTY
(
bool
standaloneCoordinate
READ
standaloneCoordinate
NOTIFY
commandChanged
)
Q_PROPERTY
(
bool
specifiesCoordinate
READ
specifiesCoordinate
NOTIFY
commandChanged
)
Q_PROPERTY
(
Fact
*
supportedCommand
READ
supportedCommand
NOTIFY
commandChanged
)
// These properties are used to display the editing ui
Q_PROPERTY
(
QmlObjectListModel
*
checkboxFacts
READ
checkboxFacts
NOTIFY
uiModelChanged
)
...
...
@@ -118,7 +117,6 @@ public:
int
sequenceNumber
(
void
)
const
{
return
_sequenceNumber
;
}
bool
standaloneCoordinate
(
void
)
const
;
bool
specifiesCoordinate
(
void
)
const
;
Fact
*
supportedCommand
(
void
)
{
return
&
_supportedCommandFact
;
}
QmlObjectListModel
*
textFieldFacts
(
void
);
...
...
@@ -206,9 +204,7 @@ private slots:
void
_sendFriendlyEditAllowedChanged
(
void
);
void
_sendUiModelChanged
(
void
);
void
_syncAltitudeRelativeToHomeToFrame
(
const
QVariant
&
value
);
void
_syncCommandToSupportedCommand
(
const
QVariant
&
value
);
void
_syncFrameToAltitudeRelativeToHome
(
void
);
void
_syncSupportedCommandToCommand
(
const
QVariant
&
value
);
private:
void
_clearParamMetaData
(
void
);
...
...
@@ -249,7 +245,6 @@ private:
static
FactMetaData
*
_frameMetaData
;
static
FactMetaData
*
_latitudeMetaData
;
static
FactMetaData
*
_longitudeMetaData
;
static
FactMetaData
*
_supportedCommandMetaData
;
FactMetaData
_param1MetaData
;
FactMetaData
_param2MetaData
;
...
...
@@ -264,7 +259,6 @@ private:
bool
_syncingAltitudeRelativeToHomeAndFrame
;
///< true: already in a sync signal, prevents signal loop
bool
_syncingHeadingDegreesAndParam4
;
///< true: already in a sync signal, prevents signal loop
bool
_syncingSupportedCommandAndCommand
;
///< true: already in a sync signal, prevents signal loop
const
QMap
<
MAV_CMD
,
MavCmdInfo
*>&
_mavCmdInfoMap
;
};
...
...
src/QGCApplication.cc
View file @
edc89cdd
...
...
@@ -145,7 +145,11 @@ static QObject* mavlinkQmlSingletonFactory(QQmlEngine*, QJSEngine*)
static
QObject
*
qgroundcontrolQmlGlobalSingletonFactory
(
QQmlEngine
*
,
QJSEngine
*
)
{
return
new
QGroundControlQmlGlobal
(
qgcApp
()
->
toolbox
());
// We create this object as a QGCTool even though it isn't int he toolbox
QGroundControlQmlGlobal
*
qmlGlobal
=
new
QGroundControlQmlGlobal
(
qgcApp
());
qmlGlobal
->
setToolbox
(
qgcApp
()
->
toolbox
());
return
qmlGlobal
;
}
/**
...
...
src/QmlControls/MissionCommandDialog.qml
View file @
edc89cdd
...
...
@@ -32,6 +32,8 @@ import QGroundControl.Palette 1.0
QGCViewDialog
{
property
var
missionItem
property
var
_vehicle
:
QGroundControl
.
multiVehicleManager
.
activeVehicle
QGCPalette
{
id
:
qgcPal
}
QGCLabel
{
...
...
@@ -45,10 +47,10 @@ QGCViewDialog {
anchors.margins
:
ScreenTools
.
defaultFontPixelWidth
anchors.left
:
categoryLabel
.
right
anchors.right
:
parent
.
right
model
:
QGroundControl
.
missionCommands
.
categories
model
:
QGroundControl
.
missionCommands
.
categories
(
_vehicle
)
function
categorySelected
(
category
)
{
commandList
.
model
=
QGroundControl
.
missionCommands
.
getCommandsForCategory
(
category
)
commandList
.
model
=
QGroundControl
.
missionCommands
.
getCommandsForCategory
(
_vehicle
,
category
)
}
Component.onCompleted
:
{
...
...
@@ -109,5 +111,4 @@ QGCViewDialog {
}
}
}
// ListView
}
// QGCViewDialog
src/QmlControls/QGroundControlQmlGlobal.cc
View file @
edc89cdd
...
...
@@ -25,7 +25,6 @@
/// @author Don Gagne <don@thegagnes.com>
#include "QGroundControlQmlGlobal.h"
#include "QGCApplication.h"
#include <QSettings>
...
...
@@ -33,19 +32,49 @@ static const char* kQmlGlobalKeyName = "QGCQml";
const
char
*
QGroundControlQmlGlobal
::
_virtualTabletJoystickKey
=
"VirtualTabletJoystick"
;
QGroundControlQmlGlobal
::
QGroundControlQmlGlobal
(
QGC
Toolbox
*
toolbox
,
QObject
*
parent
)
:
Q
Object
(
parent
)
,
_flightMapSettings
(
toolbox
->
flightMapSettings
()
)
,
_homePositionManager
(
toolbox
->
homePositionManager
()
)
,
_linkManager
(
toolbox
->
linkManager
()
)
,
_missionCommands
(
toolbox
->
missionCommands
()
)
,
_multiVehicleManager
(
toolbox
->
multiVehicleManager
()
)
QGroundControlQmlGlobal
::
QGroundControlQmlGlobal
(
QGC
Application
*
app
)
:
Q
GCTool
(
app
)
,
_flightMapSettings
(
NULL
)
,
_homePositionManager
(
NULL
)
,
_linkManager
(
NULL
)
,
_missionCommands
(
NULL
)
,
_multiVehicleManager
(
NULL
)
,
_virtualTabletJoystick
(
false
)
,
_offlineEditingFirmwareTypeFact
(
QString
(),
"OfflineEditingFirmwareType"
,
FactMetaData
::
valueTypeUint32
,
(
uint32_t
)
MAV_AUTOPILOT_ARDUPILOTMEGA
)
,
_offlineEditingFirmwareTypeMetaData
(
FactMetaData
::
valueTypeUint32
)
{
QSettings
settings
;
_virtualTabletJoystick
=
settings
.
value
(
_virtualTabletJoystickKey
,
false
).
toBool
();
QStringList
firmwareEnumStrings
;
QVariantList
firmwareEnumValues
;
firmwareEnumStrings
<<
"APM Flight Stack"
<<
"PX4 Flight Stack"
<<
"Mavlink Generic Flight Stack"
;
firmwareEnumValues
<<
QVariant
::
fromValue
((
uint32_t
)
MAV_AUTOPILOT_ARDUPILOTMEGA
)
<<
QVariant
::
fromValue
((
uint32_t
)
MAV_AUTOPILOT_PX4
)
<<
QVariant
::
fromValue
((
uint32_t
)
MAV_AUTOPILOT_GENERIC
);
_offlineEditingFirmwareTypeMetaData
.
setEnumInfo
(
firmwareEnumStrings
,
firmwareEnumValues
);
_offlineEditingFirmwareTypeFact
.
setMetaData
(
&
_offlineEditingFirmwareTypeMetaData
);
}
QGroundControlQmlGlobal
::~
QGroundControlQmlGlobal
()
{
}
void
QGroundControlQmlGlobal
::
setToolbox
(
QGCToolbox
*
toolbox
)
{
QGCTool
::
setToolbox
(
toolbox
);
_flightMapSettings
=
toolbox
->
flightMapSettings
();
_homePositionManager
=
toolbox
->
homePositionManager
();
_linkManager
=
toolbox
->
linkManager
();
_missionCommands
=
toolbox
->
missionCommands
();
_multiVehicleManager
=
toolbox
->
multiVehicleManager
();
}
void
QGroundControlQmlGlobal
::
saveGlobalSetting
(
const
QString
&
key
,
const
QString
&
value
)
{
QSettings
settings
;
...
...
src/QmlControls/QGroundControlQmlGlobal.h
View file @
edc89cdd
...
...
@@ -27,13 +27,13 @@
#ifndef QGroundControlQmlGlobal_H
#define QGroundControlQmlGlobal_H
#include <QObject>
#include "QGCToolbox.h"
#include "QGCApplication.h"
#include "LinkManager.h"
#include "HomePositionManager.h"
#include "FlightMapSettings.h"
#include "MissionCommands.h"
#include "SettingsFact.h"
#ifdef QT_DEBUG
#include "MockLink.h"
...
...
@@ -41,12 +41,14 @@
class
QGCToolbox
;
class
QGroundControlQmlGlobal
:
public
Q
Object
class
QGroundControlQmlGlobal
:
public
Q
GCTool
{
Q_OBJECT
public:
QGroundControlQmlGlobal
(
QGCToolbox
*
toolbox
,
QObject
*
parent
=
NULL
);
QGroundControlQmlGlobal
(
QGCApplication
*
app
);
~
QGroundControlQmlGlobal
();
Q_PROPERTY
(
FlightMapSettings
*
flightMapSettings
READ
flightMapSettings
CONSTANT
)
Q_PROPERTY
(
HomePositionManager
*
homePositionManager
READ
homePositionManager
CONSTANT
)
...
...
@@ -72,13 +74,15 @@ public:
Q_PROPERTY
(
bool
isVersionCheckEnabled
READ
isVersionCheckEnabled
WRITE
setIsVersionCheckEnabled
NOTIFY
isVersionCheckEnabledChanged
)
Q_PROPERTY
(
int
mavlinkSystemID
READ
mavlinkSystemID
WRITE
setMavlinkSystemID
NOTIFY
mavlinkSystemIDChanged
)
Q_PROPERTY
(
Fact
*
offlineEditingFirmwareType
READ
offlineEditingFirmwareType
CONSTANT
)
Q_INVOKABLE
void
saveGlobalSetting
(
const
QString
&
key
,
const
QString
&
value
);
Q_INVOKABLE
QString
loadGlobalSetting
(
const
QString
&
key
,
const
QString
&
defaultValue
);
Q_INVOKABLE
void
saveBoolGlobalSetting
(
const
QString
&
key
,
bool
value
);
Q_INVOKABLE
bool
loadBoolGlobalSetting
(
const
QString
&
key
,
bool
defaultValue
);
Q_INVOKABLE
void
deleteAllSettingsNextBoot
()
{
qgcApp
()
->
deleteAllSettingsNextBoot
();
}
Q_INVOKABLE
void
clearDeleteAllSettingsNextBoot
()
{
qgcApp
()
->
clearDeleteAllSettingsNextBoot
();
}
Q_INVOKABLE
void
deleteAllSettingsNextBoot
()
{
_app
->
deleteAllSettingsNextBoot
();
}
Q_INVOKABLE
void
clearDeleteAllSettingsNextBoot
()
{
_app
->
clearDeleteAllSettingsNextBoot
();
}
Q_INVOKABLE
void
startPX4MockLink
(
bool
sendStatusText
);
Q_INVOKABLE
void
startGenericMockLink
(
bool
sendStatusText
);
...
...
@@ -98,16 +102,18 @@ public:
qreal
zOrderWidgets
()
{
return
100
;
}
qreal
zOrderMapItems
()
{
return
50
;
}
bool
isDarkStyle
()
{
return
qgcApp
()
->
styleIsDark
();
}
bool
isAudioMuted
()
{
return
qgcApp
()
->
toolbox
()
->
audioOutput
()
->
isMuted
();
}
bool
isSaveLogPrompt
()
{
return
qgcApp
()
->
promptFlightDataSave
();
}
bool
isSaveLogPromptNotArmed
()
{
return
qgcApp
()
->
promptFlightDataSaveNotArmed
();
}
bool
isDarkStyle
()
{
return
_app
->
styleIsDark
();
}
bool
isAudioMuted
()
{
return
_toolbox
->
audioOutput
()
->
isMuted
();
}
bool
isSaveLogPrompt
()
{
return
_app
->
promptFlightDataSave
();
}
bool
isSaveLogPromptNotArmed
()
{
return
_app
->
promptFlightDataSaveNotArmed
();
}
bool
virtualTabletJoystick
()
{
return
_virtualTabletJoystick
;
}
bool
isHeartBeatEnabled
()
{
return
qgcApp
()
->
toolbox
()
->
mavlinkProtocol
()
->
heartbeatsEnabled
();
}
bool
isMultiplexingEnabled
()
{
return
qgcApp
()
->
toolbox
()
->
mavlinkProtocol
()
->
multiplexingEnabled
();
}
bool
isVersionCheckEnabled
()
{
return
qgcApp
()
->
toolbox
()
->
mavlinkProtocol
()
->
versionCheckEnabled
();
}
int
mavlinkSystemID
()
{
return
qgcApp
()
->
toolbox
()
->
mavlinkProtocol
()
->
getSystemId
();
}
bool
isHeartBeatEnabled
()
{
return
_toolbox
->
mavlinkProtocol
()
->
heartbeatsEnabled
();
}
bool
isMultiplexingEnabled
()
{
return
_toolbox
->
mavlinkProtocol
()
->
multiplexingEnabled
();
}
bool
isVersionCheckEnabled
()
{
return
_toolbox
->
mavlinkProtocol
()
->
versionCheckEnabled
();
}
int
mavlinkSystemID
()
{
return
_toolbox
->
mavlinkProtocol
()
->
getSystemId
();
}
Fact
*
offlineEditingFirmwareType
()
{
return
&
_offlineEditingFirmwareTypeFact
;
}
//-- TODO: Make this into an actual preference.
bool
isAdvancedMode
()
{
return
false
;
}
...
...
@@ -123,6 +129,9 @@ public:
void
setIsVersionCheckEnabled
(
bool
enable
);
void
setMavlinkSystemID
(
int
id
);
// Overrides from QGCTool
virtual
void
setToolbox
(
QGCToolbox
*
toolbox
);
signals:
void
isDarkStyleChanged
(
bool
dark
);
void
isAudioMutedChanged
(
bool
muted
);
...
...
@@ -144,6 +153,9 @@ private:
bool
_virtualTabletJoystick
;
SettingsFact
_offlineEditingFirmwareTypeFact
;
FactMetaData
_offlineEditingFirmwareTypeMetaData
;
static
const
char
*
_virtualTabletJoystickKey
;
};
...
...
src/ui/preferences/GeneralSettings.qml
View file @
edc89cdd
...
...
@@ -28,6 +28,7 @@ import QtQuick.Dialogs 1.1
import
QGroundControl
1.0
import
QGroundControl
.
FactSystem
1.0
import
QGroundControl
.
FactControls
1.0
import
QGroundControl
.
Controls
1.0
import
QGroundControl
.
ScreenTools
1.0
import
QGroundControl
.
MultiVehicleManager
1.0
...
...
@@ -194,31 +195,35 @@ Rectangle {
//-- Autoconnect settings
QGCLabel
{
text
:
"
Autoconnect to the following devices:
"
}
QGCCheckBox
{
text
:
"
Pixhawk
"
visible
:
!
ScreenTools
.
isiOS
checked
:
QGroundControl
.
linkManager
.
autoconnectPixhawk
onClicked
:
QGroundControl
.
linkManager
.
autoconnectPixhawk
=
checked
}
Row
{
spacing
:
ScreenTools
.
defaultFontPixelWidth
*
2
QGCCheckBox
{
text
:
"
3DR Radio
"
visible
:
!
ScreenTools
.
isiOS
checked
:
QGroundControl
.
linkManager
.
autoconnect3DRRadio
onClicked
:
QGroundControl
.
linkManager
.
autoconnect3DRRadio
=
checked
}
QGCCheckBox
{
text
:
"
Pixhawk
"
visible
:
!
ScreenTools
.
isiOS
checked
:
QGroundControl
.
linkManager
.
autoconnectPixhawk
onClicked
:
QGroundControl
.
linkManager
.
autoconnectPixhawk
=
checked
}
QGCCheckBox
{
text
:
"
PX4 Flow
"
visible
:
!
ScreenTools
.
isiOS
checked
:
QGroundControl
.
linkManager
.
autoconnectPX4Flow
onClicked
:
QGroundControl
.
linkManager
.
autoconnectPX4Flow
=
checked
}
QGCCheckBox
{
text
:
"
3DR Radio
"
visible
:
!
ScreenTools
.
isiOS
checked
:
QGroundControl
.
linkManager
.
autoconnect3DRRadio
onClicked
:
QGroundControl
.
linkManager
.
autoconnect3DRRadio
=
checked
}
QGCCheckBox
{
text
:
"
UDP
"
checked
:
QGroundControl
.
linkManager
.
autoconnectUDP
onClicked
:
QGroundControl
.
linkManager
.
autoconnectUDP
=
checked
QGCCheckBox
{
text
:
"
PX4 Flow
"
visible
:
!
ScreenTools
.
isiOS
checked
:
QGroundControl
.
linkManager
.
autoconnectPX4Flow
onClicked
:
QGroundControl
.
linkManager
.
autoconnectPX4Flow
=
checked
}
QGCCheckBox
{
text
:
"
UDP
"
checked
:
QGroundControl
.
linkManager
.
autoconnectUDP
onClicked
:
QGroundControl
.
linkManager
.
autoconnectUDP
=
checked
}
}
Item
{
...
...
@@ -233,6 +238,27 @@ Rectangle {
checked
:
QGroundControl
.
virtualTabletJoystick
onClicked
:
QGroundControl
.
virtualTabletJoystick
=
checked
}
Item
{
height
:
ScreenTools
.
defaultFontPixelHeight
/
2
width
:
parent
.
width
}
Row
{
spacing
:
ScreenTools
.
defaultFontPixelWidth
QGCLabel
{
text
:
"
Offline mission editing vehicle type:
"
anchors.baseline
:
offlineTypeCombo
.
baseline
}
FactComboBox
{
id
:
offlineTypeCombo
width
:
ScreenTools
.
defaultFontPixelWidth
*
25
fact
:
QGroundControl
.
offlineEditingFirmwareType
indexModel
:
false
}
}
}
}
}
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