31 changed files with 1441 additions and 1027 deletions
@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
|
||||
{ |
||||
"version": 1, |
||||
|
||||
"mavCmdInfo": [ |
||||
] |
||||
} |
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
{ |
||||
"version": 1, |
||||
|
||||
"mavCmdInfo": [ |
||||
{ |
||||
"id": 22, |
||||
"rawName": "MAV_CMD_NAV_TAKEOFF", |
||||
"friendlyName": "Takeoff", |
||||
"description": "Take off from the ground.", |
||||
"specifiesCoordinate": true, |
||||
"friendlyEdit": true, |
||||
"category": "Basic", |
||||
"param1": { |
||||
"label": "Pitch:", |
||||
"units": "radians", |
||||
"default": 0.26179939, |
||||
"decimalPlaces": 2 |
||||
} |
||||
} |
||||
] |
||||
} |
@ -0,0 +1,59 @@
@@ -0,0 +1,59 @@
|
||||
{ |
||||
"version": 1, |
||||
|
||||
"mavCmdInfo": [ |
||||
{ |
||||
"id": 22, |
||||
"rawName": "MAV_CMD_NAV_TAKEOFF", |
||||
"friendlyName": "Takeoff", |
||||
"description": "Take off from the ground.", |
||||
"specifiesCoordinate": true, |
||||
"friendlyEdit": true, |
||||
"category": "Basic" |
||||
}, |
||||
{ |
||||
"id": 17, |
||||
"rawName": "MAV_CMD_NAV_LOITER_UNLIM", |
||||
"friendlyName": "Loiter", |
||||
"description": "Travel to a position and Loiter indefinitely.", |
||||
"specifiesCoordinate": true, |
||||
"friendlyEdit": true, |
||||
"category": "Basic" |
||||
}, |
||||
{ |
||||
"id": 18, |
||||
"rawName": "MAV_CMD_NAV_LOITER_TURNS", |
||||
"friendlyName": "Loiter (turns)", |
||||
"description": "Travel to a position and Circle with the specified radius for a number of turns.", |
||||
"specifiesCoordinate": true, |
||||
"friendlyEdit": true, |
||||
"category": "Basic", |
||||
"param1": { |
||||
"label": "Turns:", |
||||
"default": 1, |
||||
"decimalPlaces": 0 |
||||
}, |
||||
"param3": { |
||||
"label": "Radius:", |
||||
"units": "meters", |
||||
"default": 10.0, |
||||
"decimalPlaces": 2 |
||||
} |
||||
}, |
||||
{ |
||||
"id": 19, |
||||
"rawName": "MAV_CMD_NAV_LOITER_TIME", |
||||
"friendlyName": "Loiter (time)", |
||||
"description": "Travel to a position and Loiter for an amount of time.", |
||||
"specifiesCoordinate": true, |
||||
"friendlyEdit": true, |
||||
"category": "Basic", |
||||
"param1": { |
||||
"label": "Hold:", |
||||
"units": "seconds", |
||||
"default": 30, |
||||
"decimalPlaces": 0 |
||||
} |
||||
} |
||||
] |
||||
} |
@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
|
||||
{ |
||||
"version": 1, |
||||
|
||||
"mavCmdInfo": [ |
||||
] |
||||
} |
@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
|
||||
{ |
||||
"version": 1, |
||||
|
||||
"mavCmdInfo": [ |
||||
] |
||||
} |
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
{ |
||||
"version": 1, |
||||
|
||||
"mavCmdInfo": [ |
||||
{ |
||||
"id": 17, |
||||
"rawName": "MAV_CMD_NAV_LOITER_UNLIM", |
||||
"friendlyName": "Loiter", |
||||
"description": "Travel to a position and Loiter indefinitely.", |
||||
"specifiesCoordinate": true, |
||||
"friendlyEdit": true, |
||||
"category": "Basic" |
||||
}, |
||||
{ |
||||
"id": 18, |
||||
"rawName": "MAV_CMD_NAV_LOITER_TURNS", |
||||
"friendlyName": "Loiter (turns)", |
||||
"description": "Travel to a position and Loiter for a number of turns.", |
||||
"specifiesCoordinate": true, |
||||
"friendlyEdit": true, |
||||
"category": "Basic", |
||||
"param1": { |
||||
"label": "Turns:", |
||||
"default": 1, |
||||
"decimalPlaces": 0 |
||||
} |
||||
}, |
||||
{ |
||||
"id": 19, |
||||
"rawName": "MAV_CMD_NAV_LOITER_TIME", |
||||
"friendlyName": "Loiter (time)", |
||||
"description": "Travel to a position and Loiter for an amount of time.", |
||||
"specifiesCoordinate": true, |
||||
"friendlyEdit": true, |
||||
"category": "Basic", |
||||
"param1": { |
||||
"label": "Hold:", |
||||
"units": "seconds", |
||||
"default": 30, |
||||
"decimalPlaces": 0 |
||||
} |
||||
} |
||||
] |
||||
} |
@ -0,0 +1,274 @@
@@ -0,0 +1,274 @@
|
||||
/*===================================================================
|
||||
QGroundControl Open Source Ground Control Station |
||||
|
||||
(c) 2009, 2010 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 "MissionCommandList.h" |
||||
#include "FactMetaData.h" |
||||
#include "Vehicle.h" |
||||
#include "FirmwarePluginManager.h" |
||||
#include "QGCApplication.h" |
||||
#include "QGroundControlQmlGlobal.h" |
||||
|
||||
#include <QStringList> |
||||
#include <QJsonDocument> |
||||
#include <QJsonParseError> |
||||
#include <QJsonArray> |
||||
#include <QDebug> |
||||
#include <QFile> |
||||
|
||||
const QString MissionCommandList::_categoryJsonKey (QStringLiteral("category")); |
||||
const QString MissionCommandList::_decimalPlacesJsonKey (QStringLiteral("decimalPlaces")); |
||||
const QString MissionCommandList::_defaultJsonKey (QStringLiteral("default")); |
||||
const QString MissionCommandList::_descriptionJsonKey (QStringLiteral("description")); |
||||
const QString MissionCommandList::_enumStringsJsonKey (QStringLiteral("enumStrings")); |
||||
const QString MissionCommandList::_enumValuesJsonKey (QStringLiteral("enumValues")); |
||||
const QString MissionCommandList::_friendlyEditJsonKey (QStringLiteral("friendlyEdit")); |
||||
const QString MissionCommandList::_friendlyNameJsonKey (QStringLiteral("friendlyName")); |
||||
const QString MissionCommandList::_idJsonKey (QStringLiteral("id")); |
||||
const QString MissionCommandList::_labelJsonKey (QStringLiteral("label")); |
||||
const QString MissionCommandList::_mavCmdInfoJsonKey (QStringLiteral("mavCmdInfo")); |
||||
const QString MissionCommandList::_param1JsonKey (QStringLiteral("param1")); |
||||
const QString MissionCommandList::_param2JsonKey (QStringLiteral("param2")); |
||||
const QString MissionCommandList::_param3JsonKey (QStringLiteral("param3")); |
||||
const QString MissionCommandList::_param4JsonKey (QStringLiteral("param4")); |
||||
const QString MissionCommandList::_paramJsonKeyFormat (QStringLiteral("param%1")); |
||||
const QString MissionCommandList::_rawNameJsonKey (QStringLiteral("rawName")); |
||||
const QString MissionCommandList::_standaloneCoordinateJsonKey (QStringLiteral("standaloneCoordinate")); |
||||
const QString MissionCommandList::_specifiesCoordinateJsonKey (QStringLiteral("specifiesCoordinate")); |
||||
const QString MissionCommandList::_unitsJsonKey (QStringLiteral("units")); |
||||
const QString MissionCommandList::_versionJsonKey (QStringLiteral("version")); |
||||
|
||||
MissionCommandList::MissionCommandList(const QString& jsonFilename, QObject* parent) |
||||
: QObject(parent) |
||||
{ |
||||
_loadMavCmdInfoJson(jsonFilename); |
||||
} |
||||
|
||||
bool MissionCommandList::_validateKeyTypes(QJsonObject& jsonObject, const QStringList& keys, const QList<QJsonValue::Type>& types) |
||||
{ |
||||
for (int i=0; i<keys.count(); i++) { |
||||
if (jsonObject.contains(keys[i])) { |
||||
if (jsonObject.value(keys[i]).type() != types[i]) { |
||||
qWarning() << "Incorrect type key:type:expected" << keys[i] << jsonObject.value(keys[i]).type() << types[i]; |
||||
return false; |
||||
} |
||||
} |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
void MissionCommandList::_loadMavCmdInfoJson(const QString& jsonFilename) |
||||
{ |
||||
if (jsonFilename.isEmpty()) { |
||||
return; |
||||
} |
||||
|
||||
qCDebug(MissionCommandsLog) << "Loading" << jsonFilename; |
||||
|
||||
QFile jsonFile(jsonFilename); |
||||
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) { |
||||
qWarning() << "Unable to open file" << jsonFilename << jsonFile.errorString(); |
||||
return; |
||||
} |
||||
|
||||
QByteArray bytes = jsonFile.readAll(); |
||||
jsonFile.close(); |
||||
QJsonParseError jsonParseError; |
||||
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError); |
||||
if (jsonParseError.error != QJsonParseError::NoError) { |
||||
qWarning() << "Unable to open json document" << jsonParseError.errorString(); |
||||
return; |
||||
} |
||||
|
||||
QJsonObject json = doc.object(); |
||||
|
||||
int version = json.value(_versionJsonKey).toInt(); |
||||
if (version != 1) { |
||||
qWarning() << "Invalid version" << version; |
||||
return; |
||||
} |
||||
|
||||
QJsonValue jsonValue = json.value(_mavCmdInfoJsonKey); |
||||
if (!jsonValue.isArray()) { |
||||
qWarning() << "mavCmdInfo not array"; |
||||
return; |
||||
} |
||||
|
||||
QJsonArray jsonArray = jsonValue.toArray(); |
||||
foreach(QJsonValue info, jsonArray) { |
||||
if (!info.isObject()) { |
||||
qWarning() << "mavCmdArray should contain objects"; |
||||
return; |
||||
} |
||||
QJsonObject jsonObject = info.toObject(); |
||||
|
||||
// Make sure we have the required keys
|
||||
QStringList requiredKeys; |
||||
requiredKeys << _idJsonKey << _rawNameJsonKey; |
||||
foreach (const QString &key, requiredKeys) { |
||||
if (!jsonObject.contains(key)) { |
||||
qWarning() << "Mission required key" << key; |
||||
return; |
||||
} |
||||
} |
||||
|
||||
// Validate key types
|
||||
|
||||
QStringList keys; |
||||
QList<QJsonValue::Type> types; |
||||
keys << _idJsonKey << _rawNameJsonKey << _friendlyNameJsonKey << _descriptionJsonKey << _standaloneCoordinateJsonKey << _specifiesCoordinateJsonKey <<_friendlyEditJsonKey |
||||
<< _param1JsonKey << _param2JsonKey << _param3JsonKey << _param4JsonKey << _categoryJsonKey; |
||||
types << QJsonValue::Double << QJsonValue::String << QJsonValue::String<< QJsonValue::String << QJsonValue::Bool << QJsonValue::Bool << QJsonValue::Bool |
||||
<< QJsonValue::Object << QJsonValue::Object << QJsonValue::Object << QJsonValue::Object << QJsonValue::String; |
||||
if (!_validateKeyTypes(jsonObject, keys, types)) { |
||||
return; |
||||
} |
||||
|
||||
MavCmdInfo* mavCmdInfo = new MavCmdInfo(this); |
||||
|
||||
mavCmdInfo->_command = (MAV_CMD) jsonObject.value(_idJsonKey).toInt(); |
||||
mavCmdInfo->_category = jsonObject.value(_categoryJsonKey).toString("Advanced"); |
||||
mavCmdInfo->_rawName = jsonObject.value(_rawNameJsonKey).toString(); |
||||
mavCmdInfo->_friendlyName = jsonObject.value(_friendlyNameJsonKey).toString(QString()); |
||||
mavCmdInfo->_description = jsonObject.value(_descriptionJsonKey).toString(QString()); |
||||
mavCmdInfo->_standaloneCoordinate = jsonObject.value(_standaloneCoordinateJsonKey).toBool(false); |
||||
mavCmdInfo->_specifiesCoordinate = jsonObject.value(_specifiesCoordinateJsonKey).toBool(false); |
||||
mavCmdInfo->_friendlyEdit = jsonObject.value(_friendlyEditJsonKey).toBool(false); |
||||
|
||||
qCDebug(MissionCommandsLog) << "Command" |
||||
<< mavCmdInfo->_command |
||||
<< mavCmdInfo->_category |
||||
<< mavCmdInfo->_rawName |
||||
<< mavCmdInfo->_friendlyName |
||||
<< mavCmdInfo->_description |
||||
<< mavCmdInfo->_standaloneCoordinate |
||||
<< mavCmdInfo->_specifiesCoordinate |
||||
<< mavCmdInfo->_friendlyEdit; |
||||
|
||||
if (_mavCmdInfoMap.contains((MAV_CMD)mavCmdInfo->command())) { |
||||
qWarning() << "Duplicate command" << mavCmdInfo->command(); |
||||
return; |
||||
} |
||||
|
||||
_mavCmdInfoMap[mavCmdInfo->_command] = mavCmdInfo; |
||||
|
||||
// Read params
|
||||
|
||||
for (int i=1; i<=7; i++) { |
||||
QString paramKey = QString(_paramJsonKeyFormat).arg(i); |
||||
|
||||
if (jsonObject.contains(paramKey)) { |
||||
QJsonObject paramObject = jsonObject.value(paramKey).toObject(); |
||||
|
||||
// Validate key types
|
||||
QStringList keys; |
||||
QList<QJsonValue::Type> types; |
||||
keys << _defaultJsonKey << _decimalPlacesJsonKey << _enumStringsJsonKey << _enumValuesJsonKey << _labelJsonKey << _unitsJsonKey; |
||||
types << QJsonValue::Double << QJsonValue::Double << QJsonValue::String << QJsonValue::String << QJsonValue::String << QJsonValue::String; |
||||
if (!_validateKeyTypes(paramObject, keys, types)) { |
||||
return; |
||||
} |
||||
|
||||
mavCmdInfo->_friendlyEdit = true; // Assume friendly edit if we have params
|
||||
|
||||
if (!paramObject.contains(_labelJsonKey)) { |
||||
qWarning() << "param object missing label key" << mavCmdInfo->rawName() << paramKey; |
||||
return; |
||||
} |
||||
|
||||
MavCmdParamInfo* paramInfo = new MavCmdParamInfo(this); |
||||
|
||||
paramInfo->_label = paramObject.value(_labelJsonKey).toString(); |
||||
paramInfo->_defaultValue = paramObject.value(_defaultJsonKey).toDouble(0.0); |
||||
paramInfo->_decimalPlaces = paramObject.value(_decimalPlacesJsonKey).toInt(FactMetaData::defaultDecimalPlaces); |
||||
paramInfo->_enumStrings = paramObject.value(_enumStringsJsonKey).toString().split(",", QString::SkipEmptyParts); |
||||
paramInfo->_param = i; |
||||
paramInfo->_units = paramObject.value(_unitsJsonKey).toString(); |
||||
|
||||
QStringList enumValues = paramObject.value(_enumValuesJsonKey).toString().split(",", QString::SkipEmptyParts); |
||||
foreach (const QString &enumValue, enumValues) { |
||||
bool convertOk; |
||||
double value = enumValue.toDouble(&convertOk); |
||||
|
||||
if (!convertOk) { |
||||
qWarning() << "Bad enumValue" << enumValue; |
||||
return; |
||||
} |
||||
|
||||
paramInfo->_enumValues << QVariant(value); |
||||
} |
||||
if (paramInfo->_enumValues.count() != paramInfo->_enumStrings.count()) { |
||||
qWarning() << "enum strings/values count mismatch" << paramInfo->_enumStrings.count() << paramInfo->_enumValues.count(); |
||||
return; |
||||
} |
||||
|
||||
qCDebug(MissionCommandsLog) << "Param" |
||||
<< paramInfo->_label |
||||
<< paramInfo->_defaultValue |
||||
<< paramInfo->_decimalPlaces |
||||
<< paramInfo->_param |
||||
<< paramInfo->_units |
||||
<< paramInfo->_enumStrings |
||||
<< paramInfo->_enumValues; |
||||
|
||||
mavCmdInfo->_paramInfoMap[i] = paramInfo; |
||||
} |
||||
} |
||||
|
||||
if (mavCmdInfo->friendlyEdit()) { |
||||
if (mavCmdInfo->description().isEmpty()) { |
||||
qWarning() << "Missing description" << mavCmdInfo->rawName(); |
||||
return; |
||||
} |
||||
if (mavCmdInfo->rawName() == mavCmdInfo->friendlyName()) { |
||||
qWarning() << "Missing friendly name" << mavCmdInfo->rawName() << mavCmdInfo->friendlyName(); |
||||
return; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
bool MissionCommandList::contains(MAV_CMD command) const |
||||
{ |
||||
return _mavCmdInfoMap.contains(command); |
||||
} |
||||
|
||||
MavCmdInfo* MissionCommandList::getMavCmdInfo(MAV_CMD command) const |
||||
{ |
||||
if (!contains(command)) { |
||||
qWarning() << "Unknown command" << command; |
||||
return NULL; |
||||
} |
||||
|
||||
return _mavCmdInfoMap[command]; |
||||
} |
||||
|
||||
QList<MAV_CMD> MissionCommandList::commandsIds(void) const |
||||
{ |
||||
QList<MAV_CMD> list; |
||||
|
||||
foreach (const MavCmdInfo* mavCmdInfo, _mavCmdInfoMap) { |
||||
list << (MAV_CMD)mavCmdInfo->command(); |
||||
} |
||||
|
||||
return list; |
||||
} |
@ -0,0 +1,174 @@
@@ -0,0 +1,174 @@
|
||||
/*=====================================================================
|
||||
|
||||
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/>.
|
||||
|
||||
======================================================================*/ |
||||
|
||||
#ifndef MissionCommandList_H |
||||
#define MissionCommandList_H |
||||
|
||||
#include "QGCToolbox.h" |
||||
#include "QGCMAVLink.h" |
||||
#include "QGCLoggingCategory.h" |
||||
#include "QmlObjectListModel.h" |
||||
#include "MavlinkQmlSingleton.h" |
||||
|
||||
#include <QObject> |
||||
#include <QString> |
||||
#include <QJsonObject> |
||||
#include <QJsonValue> |
||||
|
||||
class MissionCommandList; |
||||
class Vehicle; |
||||
|
||||
/// The information associated with a mission command parameter.
|
||||
class MavCmdParamInfo : public QObject { |
||||
|
||||
Q_OBJECT |
||||
|
||||
public: |
||||
MavCmdParamInfo(QObject* parent = NULL) |
||||
: QObject(parent) |
||||
{ |
||||
|
||||
} |
||||
|
||||
Q_PROPERTY(int decimalPlaces READ decimalPlaces CONSTANT) |
||||
Q_PROPERTY(double defaultValue READ defaultValue CONSTANT) |
||||
Q_PROPERTY(QStringList enumStrings READ enumStrings CONSTANT) |
||||
Q_PROPERTY(QVariantList enumValues READ enumValues CONSTANT) |
||||
Q_PROPERTY(QString label READ label CONSTANT) |
||||
Q_PROPERTY(int param READ param CONSTANT) |
||||
Q_PROPERTY(QString units READ units CONSTANT) |
||||
|
||||
int decimalPlaces (void) const { return _decimalPlaces; } |
||||
double defaultValue (void) const { return _defaultValue; } |
||||
QStringList enumStrings (void) const { return _enumStrings; } |
||||
QVariantList enumValues (void) const { return _enumValues; } |
||||
QString label (void) const { return _label; } |
||||
int param (void) const { return _param; } |
||||
QString units (void) const { return _units; } |
||||
|
||||
private: |
||||
int _decimalPlaces; |
||||
double _defaultValue; |
||||
QStringList _enumStrings; |
||||
QVariantList _enumValues; |
||||
QString _label; |
||||
int _param; |
||||
QString _units; |
||||
|
||||
friend class MissionCommandList; |
||||
}; |
||||
|
||||
// The information associated with a mission command.
|
||||
class MavCmdInfo : public QObject { |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
MavCmdInfo(QObject* parent = NULL) |
||||
: QObject(parent) |
||||
{ |
||||
|
||||
} |
||||
|
||||
Q_PROPERTY(QString category READ category CONSTANT) |
||||
Q_PROPERTY(MavlinkQmlSingleton::Qml_MAV_CMD command READ qmlCommand CONSTANT) |
||||
Q_PROPERTY(QString description READ description CONSTANT) |
||||
Q_PROPERTY(bool friendlyEdit READ friendlyEdit CONSTANT) |
||||
Q_PROPERTY(QString friendlyName READ friendlyName CONSTANT) |
||||
Q_PROPERTY(QString rawName READ rawName CONSTANT) |
||||
Q_PROPERTY(bool standaloneCoordinate READ standaloneCoordinate CONSTANT) |
||||
Q_PROPERTY(bool specifiesCoordinate READ specifiesCoordinate CONSTANT) |
||||
|
||||
MavlinkQmlSingleton::Qml_MAV_CMD qmlCommand(void) const { return (MavlinkQmlSingleton::Qml_MAV_CMD)_command; } |
||||
MAV_CMD command(void) const { return _command; } |
||||
|
||||
QString category (void) const { return _category; } |
||||
QString description (void) const { return _description; } |
||||
bool friendlyEdit (void) const { return _friendlyEdit; } |
||||
QString friendlyName (void) const { return _friendlyName; } |
||||
QString rawName (void) const { return _rawName; } |
||||
bool standaloneCoordinate(void) const { return _standaloneCoordinate; } |
||||
bool specifiesCoordinate (void) const { return _specifiesCoordinate; } |
||||
|
||||
const QMap<int, MavCmdParamInfo*>& paramInfoMap(void) const { return _paramInfoMap; } |
||||
|
||||
private: |
||||
QString _category; |
||||
MAV_CMD _command; |
||||
QString _description; |
||||
bool _friendlyEdit; |
||||
QString _friendlyName; |
||||
QMap<int, MavCmdParamInfo*> _paramInfoMap; |
||||
QString _rawName; |
||||
bool _standaloneCoordinate; |
||||
bool _specifiesCoordinate; |
||||
|
||||
friend class MissionCommandList; |
||||
}; |
||||
|
||||
// A list of mission command info loaded from a json file.
|
||||
class MissionCommandList : public QObject |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
MissionCommandList(const QString& jsonFilename, QObject* parent = NULL); |
||||
|
||||
Q_INVOKABLE bool contains(MavlinkQmlSingleton::Qml_MAV_CMD command) const { return contains((MAV_CMD)command); } |
||||
bool contains(MAV_CMD command) const; |
||||
|
||||
Q_INVOKABLE QVariant getMavCmdInfo(MavlinkQmlSingleton::Qml_MAV_CMD command) const { return QVariant::fromValue(getMavCmdInfo((MAV_CMD)command)); } |
||||
MavCmdInfo* getMavCmdInfo(MAV_CMD command) const; |
||||
|
||||
QList<MAV_CMD> commandsIds(void) const; |
||||
|
||||
private: |
||||
void _loadMavCmdInfoJson(const QString& jsonFilename); |
||||
bool _validateKeyTypes(QJsonObject& jsonObject, const QStringList& keys, const QList<QJsonValue::Type>& types); |
||||
|
||||
private: |
||||
QMap<MAV_CMD, MavCmdInfo*> _mavCmdInfoMap; |
||||
|
||||
static const QString _categoryJsonKey; |
||||
static const QString _decimalPlacesJsonKey; |
||||
static const QString _defaultJsonKey; |
||||
static const QString _descriptionJsonKey; |
||||
static const QString _enumStringsJsonKey; |
||||
static const QString _enumValuesJsonKey; |
||||
static const QString _friendlyNameJsonKey; |
||||
static const QString _friendlyEditJsonKey; |
||||
static const QString _idJsonKey; |
||||
static const QString _labelJsonKey; |
||||
static const QString _mavCmdInfoJsonKey; |
||||
static const QString _param1JsonKey; |
||||
static const QString _param2JsonKey; |
||||
static const QString _param3JsonKey; |
||||
static const QString _param4JsonKey; |
||||
static const QString _paramJsonKeyFormat; |
||||
static const QString _rawNameJsonKey; |
||||
static const QString _standaloneCoordinateJsonKey; |
||||
static const QString _specifiesCoordinateJsonKey; |
||||
static const QString _unitsJsonKey; |
||||
static const QString _versionJsonKey; |
||||
}; |
||||
|
||||
#endif |
Loading…
Reference in new issue