QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
PX4ParameterMetaData.cc
Go to the documentation of this file.
3
4#include <QtCore/QJsonArray>
5#include <QtCore/QJsonObject>
6
7using namespace Qt::StringLiterals;
8
9QGC_LOGGING_CATEGORY(PX4ParameterMetaDataLog, "FirmwarePlugin.PX4ParameterMetaData")
10
12 : ParameterMetaData(parent)
13{
14 qCDebug(PX4ParameterMetaDataLog) << this;
15}
16
18{
19 qCDebug(PX4ParameterMetaDataLog) << this;
20}
21
22void PX4ParameterMetaData::parseParameterJson(const QJsonObject &json)
23{
24 const int version = json.value(u"version").toInt();
25 if (version < 1) {
26 qCWarning(PX4ParameterMetaDataLog) << "Parameter JSON version too old:" << version;
27 return;
28 }
29
30 const QJsonArray parameters = json.value(u"parameters").toArray();
31
32 for (const QJsonValue &paramVal : parameters) {
33 if (!paramVal.isObject()) {
34 continue;
35 }
36
37 const QJsonObject param = paramVal.toObject();
38 const QString name = param.value(u"name").toString();
39 if (name.isEmpty()) {
40 continue;
41 }
42
43 if (_cachedMetaData.contains(name)) {
44 qCWarning(PX4ParameterMetaDataLog) << "Duplicate parameter:" << name;
45 _cachedMetaData.take(name)->deleteLater();
46 }
47
49 if (metaData->name().isEmpty()) {
50 qCWarning(PX4ParameterMetaDataLog) << "Skipping invalid parameter metadata:" << name;
51 metaData->deleteLater();
52 continue;
53 }
54 _postProcessMetaData(name, metaData); // applied here; getMetaDataForFact() hits cache so won't re-apply
55 _cachedMetaData[name] = metaData;
56 }
57}
58
59void PX4ParameterMetaData::_postProcessMetaData(const QString &name, FactMetaData *metaData)
60{
61 Q_UNUSED(name)
62
63 if (metaData->category().isEmpty() || metaData->category() == FactMetaData::defaultCategory()) {
64 metaData->setCategory(u"Standard"_s);
65 }
66
67 if (metaData->volatileValue()) {
68 metaData->setReadOnly(true);
69 }
70
71 QString shortDesc = metaData->shortDescription();
72 if (shortDesc.contains(u'\n')) {
73 metaData->setShortDescription(shortDesc.replace(u'\n', u' '));
74 }
75 QString longDesc = metaData->longDescription();
76 if (longDesc.contains(u'\n')) {
77 metaData->setLongDescription(longDesc.replace(u'\n', u' '));
78 }
79}
#define QGC_LOGGING_CATEGORY(name, categoryStr)
Holds the meta data associated with a Fact.
static FactMetaData * createFromJsonObject(const QJsonObject &json, const QMap< QString, QString > &defineMap, QObject *metaDataParent)
void setShortDescription(const QString &shortDescription)
void setLongDescription(const QString &longDescription)
QString shortDescription() const
void setCategory(const QString &category)
static const QString defaultCategory()
QString category() const
QString longDescription() const
QString name() const
bool volatileValue() const
void setReadOnly(bool bValue)
void parseParameterJson(const QJsonObject &json) override
void _postProcessMetaData(const QString &name, FactMetaData *metaData) override
static const FactMetaData::DefineMap_t kEmptyDefines
FactMetaData::NameToMetaDataMap_t _cachedMetaData