8#include <QtCore/QFileInfo>
16QString _apmFileVehicleName(
const QString &vehicleType)
18 if (vehicleType == QStringLiteral(
"ArduCopter")) {
return QStringLiteral(
"Copter"); }
19 if (vehicleType == QStringLiteral(
"ArduPlane")) {
return QStringLiteral(
"Plane"); }
20 if (vehicleType == QStringLiteral(
"ArduRover")) {
return QStringLiteral(
"Rover"); }
21 if (vehicleType == QStringLiteral(
"ArduSub")) {
return QStringLiteral(
"Sub"); }
27QString _findAPMMetaDataFile(
const QString &fileVehicleName,
int major,
int minor)
29 int currMajor = major;
30 int currMinor = minor;
32 while (currMajor >= 4 && currMinor > 0) {
33 const QString file = QStringLiteral(
":/FirmwarePlugin/APM/APMParameterFactMetaData.%1.%2.%3.json")
34 .arg(fileVehicleName).arg(currMajor).arg(currMinor);
35 if (QFileInfo::exists(file)) {
46 for (
int i = 0; i < 10; i++) {
47 const QString file = QStringLiteral(
":/FirmwarePlugin/APM/APMParameterFactMetaData.%1.4.%2.json")
48 .arg(fileVehicleName).arg(i);
49 if (QFileInfo::exists(file)) {
59 for (
int i = 0; i < parameters.size(); i++) {
60 QVariantMap row = parameters[i].toMap();
62 const QString name = row.value(QStringLiteral(
"name")).toString();
63 const bool isFloat = row.value(QStringLiteral(
"isFloat"),
false).toBool();
74 row[QStringLiteral(
"decimalPlaces")] = factMeta->
decimalPlaces();
75 row[QStringLiteral(
"units")] = factMeta->
rawUnits();
77 row[QStringLiteral(
"enumStrings")] = QVariant::fromValue(factMeta->
enumStrings());
78 row[QStringLiteral(
"enumValues")] = QVariant::fromValue(factMeta->
enumValues());
88 if (parameters.isEmpty()) {
94 QStringLiteral(
":/FirmwarePlugin/PX4/PX4ParameterFactMetaData.json"));
96 _enrichRows(parameters, metaData);
102 const QString &vehicleType,
106 if (parameters.isEmpty()) {
110 const QString fileVehicleName = _apmFileVehicleName(vehicleType);
111 if (fileVehicleName.isEmpty()) {
112 qCDebug(LogViewerParamMetaDataLog) <<
"Unknown APM vehicle type:" << vehicleType;
118 const int startMajor = (major >= 4) ? major : 9;
119 const int startMinor = (minor >= 0) ? minor : 99;
121 const QString metaDataFile = _findAPMMetaDataFile(fileVehicleName, startMajor, startMinor);
122 if (metaDataFile.isEmpty()) {
123 qCDebug(LogViewerParamMetaDataLog) <<
"No APM metadata file found for" << vehicleType
124 << major <<
"." << minor;
128 qCDebug(LogViewerParamMetaDataLog) <<
"Loading APM metadata:" << metaDataFile;
133 _enrichRows(parameters, metaData);
#define QGC_LOGGING_CATEGORY(name, categoryStr)