|
|
@ -37,10 +37,12 @@ |
|
|
|
QGC_LOGGING_CATEGORY(PX4AirframeLoaderLog, "PX4AirframeLoaderLog") |
|
|
|
QGC_LOGGING_CATEGORY(PX4AirframeLoaderLog, "PX4AirframeLoaderLog") |
|
|
|
|
|
|
|
|
|
|
|
bool PX4AirframeLoader::_airframeMetaDataLoaded = false; |
|
|
|
bool PX4AirframeLoader::_airframeMetaDataLoaded = false; |
|
|
|
//QMap<QString, FactMetaData*> PX4AirframeLoader::_mapParameterName2FactMetaData;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PX4AirframeLoader::PX4AirframeLoader(AutoPilotPlugin* autopilot, UASInterface* uas, QObject* parent) |
|
|
|
PX4AirframeLoader::PX4AirframeLoader(AutoPilotPlugin* autopilot, UASInterface* uas, QObject* parent) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
Q_UNUSED(autopilot); |
|
|
|
|
|
|
|
Q_UNUSED(uas); |
|
|
|
|
|
|
|
Q_UNUSED(parent); |
|
|
|
Q_ASSERT(uas); |
|
|
|
Q_ASSERT(uas); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -52,175 +54,130 @@ void PX4AirframeLoader::loadAirframeFactMetaData(void) |
|
|
|
if (_airframeMetaDataLoaded) { |
|
|
|
if (_airframeMetaDataLoaded) { |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
_airframeMetaDataLoaded = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
qCDebug(PX4AirframeLoaderLog) << "Loading PX4 airframe fact meta data"; |
|
|
|
qCDebug(PX4AirframeLoaderLog) << "Loading PX4 airframe fact meta data"; |
|
|
|
|
|
|
|
qDebug() << "LOADING META DATA"; |
|
|
|
|
|
|
|
|
|
|
|
Q_ASSERT(AirframeComponentAirframes::rgAirframeTypes.count() == 0); |
|
|
|
Q_ASSERT(AirframeComponentAirframes::get().count() == 0); |
|
|
|
|
|
|
|
|
|
|
|
// QString parameterFilename;
|
|
|
|
QString airframeFilename; |
|
|
|
|
|
|
|
|
|
|
|
// // We want unit test builds to always use the resource based meta data to provide repeatable results
|
|
|
|
// We want unit test builds to always use the resource based meta data to provide repeatable results
|
|
|
|
// if (!qgcApp()->runningUnitTests()) {
|
|
|
|
if (!qgcApp()->runningUnitTests()) { |
|
|
|
// // First look for meta data that comes from a firmware download. Fall back to resource if not there.
|
|
|
|
// First look for meta data that comes from a firmware download. Fall back to resource if not there.
|
|
|
|
// QSettings settings;
|
|
|
|
QSettings settings; |
|
|
|
// QDir parameterDir = QFileInfo(settings.fileName()).dir();
|
|
|
|
QDir parameterDir = QFileInfo(settings.fileName()).dir(); |
|
|
|
// parameterFilename = parameterDir.filePath("PX4AirframeFactMetaData.xml");
|
|
|
|
airframeFilename = parameterDir.filePath("PX4AirframeFactMetaData.xml"); |
|
|
|
// }
|
|
|
|
} |
|
|
|
// if (parameterFilename.isEmpty() || !QFile(parameterFilename).exists()) {
|
|
|
|
if (airframeFilename.isEmpty() || !QFile(airframeFilename).exists()) { |
|
|
|
// parameterFilename = ":/AutoPilotPlugins/PX4/AirframeFactMetaData.xml";
|
|
|
|
airframeFilename = ":/AutopilotPlugins/PX4/AirframeFactMetaData.xml"; |
|
|
|
// }
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// qCDebug(PX4AirframeLoaderLog) << "Loading meta data file:" << parameterFilename;
|
|
|
|
qCDebug(PX4AirframeLoaderLog) << "Loading meta data file:" << airframeFilename; |
|
|
|
|
|
|
|
|
|
|
|
// QFile xmlFile(parameterFilename);
|
|
|
|
QFile xmlFile(airframeFilename); |
|
|
|
// Q_ASSERT(xmlFile.exists());
|
|
|
|
Q_ASSERT(xmlFile.exists()); |
|
|
|
|
|
|
|
|
|
|
|
// bool success = xmlFile.open(QIODevice::ReadOnly);
|
|
|
|
|
|
|
|
// Q_UNUSED(success);
|
|
|
|
|
|
|
|
// Q_ASSERT(success);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// QXmlStreamReader xml(xmlFile.readAll());
|
|
|
|
|
|
|
|
// xmlFile.close();
|
|
|
|
|
|
|
|
// if (xml.hasError()) {
|
|
|
|
|
|
|
|
// qWarning() << "Badly formed XML" << xml.errorString();
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// QString factGroup;
|
|
|
|
|
|
|
|
// QString errorString;
|
|
|
|
|
|
|
|
// FactMetaData* metaData = NULL;
|
|
|
|
|
|
|
|
// int xmlState = XmlStateNone;
|
|
|
|
|
|
|
|
// bool badMetaData = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// while (!xml.atEnd()) {
|
|
|
|
|
|
|
|
// if (xml.isStartElement()) {
|
|
|
|
|
|
|
|
// QString elementName = xml.name().toString();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (elementName == "parameters") {
|
|
|
|
|
|
|
|
// if (xmlState != XmlStateNone) {
|
|
|
|
|
|
|
|
// qWarning() << "Badly formed XML";
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// xmlState = XmlStateFoundParameters;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// } else if (elementName == "version") {
|
|
|
|
|
|
|
|
// if (xmlState != XmlStateFoundParameters) {
|
|
|
|
|
|
|
|
// qWarning() << "Badly formed XML";
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// xmlState = XmlStateFoundVersion;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// bool convertOk;
|
|
|
|
|
|
|
|
// QString strVersion = xml.readElementText();
|
|
|
|
|
|
|
|
// int intVersion = strVersion.toInt(&convertOk);
|
|
|
|
|
|
|
|
// if (!convertOk) {
|
|
|
|
|
|
|
|
// qWarning() << "Badly formed XML";
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if (intVersion <= 2) {
|
|
|
|
|
|
|
|
// // We can't read these old files
|
|
|
|
|
|
|
|
// qDebug() << "Parameter version stamp too old, skipping load. Found:" << intVersion << "Want: 3 File:" << parameterFilename;
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// } else if (elementName == "group") {
|
|
|
|
|
|
|
|
// if (xmlState != XmlStateFoundVersion) {
|
|
|
|
|
|
|
|
// // We didn't get a version stamp, assume older version we can't read
|
|
|
|
|
|
|
|
// qDebug() << "Parameter version stamp not found, skipping load" << parameterFilename;
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// xmlState = XmlStateFoundGroup;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (!xml.attributes().hasAttribute("name")) {
|
|
|
|
|
|
|
|
// qWarning() << "Badly formed XML";
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// factGroup = xml.attributes().value("name").toString();
|
|
|
|
|
|
|
|
// qCDebug(PX4AirframeLoaderLog) << "Found group: " << factGroup;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// } else if (elementName == "parameter") {
|
|
|
|
|
|
|
|
// if (xmlState != XmlStateFoundGroup) {
|
|
|
|
|
|
|
|
// qWarning() << "Badly formed XML";
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// xmlState = XmlStateFoundParameter;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (!xml.attributes().hasAttribute("name") || !xml.attributes().hasAttribute("type")) {
|
|
|
|
|
|
|
|
// qWarning() << "Badly formed XML";
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// QString name = xml.attributes().value("name").toString();
|
|
|
|
|
|
|
|
// QString type = xml.attributes().value("type").toString();
|
|
|
|
|
|
|
|
// QString strDefault = xml.attributes().value("default").toString();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// qCDebug(PX4AirframeLoaderLog) << "Found parameter name:" << name << " type:" << type << " default:" << strDefault;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Convert type from string to FactMetaData::ValueType_t
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// struct String2Type {
|
|
|
|
|
|
|
|
// const char* strType;
|
|
|
|
|
|
|
|
// FactMetaData::ValueType_t type;
|
|
|
|
|
|
|
|
// };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// static const struct String2Type rgString2Type[] = {
|
|
|
|
|
|
|
|
// { "FLOAT", FactMetaData::valueTypeFloat },
|
|
|
|
|
|
|
|
// { "INT32", FactMetaData::valueTypeInt32 },
|
|
|
|
|
|
|
|
// };
|
|
|
|
|
|
|
|
// static const size_t crgString2Type = sizeof(rgString2Type) / sizeof(rgString2Type[0]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// bool found = false;
|
|
|
|
|
|
|
|
// FactMetaData::ValueType_t foundType;
|
|
|
|
|
|
|
|
// for (size_t i=0; i<crgString2Type; i++) {
|
|
|
|
|
|
|
|
// const struct String2Type* info = &rgString2Type[i];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (type == info->strType) {
|
|
|
|
|
|
|
|
// found = true;
|
|
|
|
|
|
|
|
// foundType = info->type;
|
|
|
|
|
|
|
|
// break;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if (!found) {
|
|
|
|
|
|
|
|
// qWarning() << "Parameter meta data with bad type:" << type << " name:" << name;
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // Now that we know type we can create meta data object and add it to the system
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// metaData = new FactMetaData(foundType);
|
|
|
|
|
|
|
|
// Q_CHECK_PTR(metaData);
|
|
|
|
|
|
|
|
// if (_mapParameterName2FactMetaData.contains(name)) {
|
|
|
|
|
|
|
|
// // We can't trust the meta dafa since we have dups
|
|
|
|
|
|
|
|
// qCWarning(PX4AirframeLoaderLog) << "Duplicate parameter found:" << name;
|
|
|
|
|
|
|
|
// badMetaData = true;
|
|
|
|
|
|
|
|
// // Reset to default meta data
|
|
|
|
|
|
|
|
// _mapParameterName2FactMetaData[name] = metaData;
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// _mapParameterName2FactMetaData[name] = metaData;
|
|
|
|
|
|
|
|
// metaData->setName(name);
|
|
|
|
|
|
|
|
// metaData->setGroup(factGroup);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (xml.attributes().hasAttribute("default") && !strDefault.isEmpty()) {
|
|
|
|
|
|
|
|
// QVariant varDefault;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (metaData->convertAndValidate(strDefault, false, varDefault, errorString)) {
|
|
|
|
|
|
|
|
// metaData->setDefaultValue(varDefault);
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// qCWarning(PX4AirframeLoaderLog) << "Invalid default value, name:" << name << " type:" << type << " default:" << strDefault << " error:" << errorString;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
bool success = xmlFile.open(QIODevice::ReadOnly); |
|
|
|
// // We should be getting meta data now
|
|
|
|
Q_UNUSED(success); |
|
|
|
// if (xmlState != XmlStateFoundParameter) {
|
|
|
|
Q_ASSERT(success); |
|
|
|
// qWarning() << "Badly formed XML";
|
|
|
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (!badMetaData) {
|
|
|
|
if (!success) { |
|
|
|
|
|
|
|
qWarning() << "Failed opening airframe XML"; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QXmlStreamReader xml(xmlFile.readAll()); |
|
|
|
|
|
|
|
xmlFile.close(); |
|
|
|
|
|
|
|
if (xml.hasError()) { |
|
|
|
|
|
|
|
qWarning() << "Badly formed XML" << xml.errorString(); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QString airframeGroup; |
|
|
|
|
|
|
|
QString image; |
|
|
|
|
|
|
|
QString errorString; |
|
|
|
|
|
|
|
int xmlState = XmlStateNone; |
|
|
|
|
|
|
|
bool badMetaData = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while (!xml.atEnd()) { |
|
|
|
|
|
|
|
if (xml.isStartElement()) { |
|
|
|
|
|
|
|
QString elementName = xml.name().toString(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (elementName == "airframes") { |
|
|
|
|
|
|
|
if (xmlState != XmlStateNone) { |
|
|
|
|
|
|
|
qWarning() << "Badly formed XML"; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
xmlState = XmlStateFoundAirframes; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else if (elementName == "version") { |
|
|
|
|
|
|
|
if (xmlState != XmlStateFoundAirframes) { |
|
|
|
|
|
|
|
qWarning() << "Badly formed XML"; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
xmlState = XmlStateFoundVersion; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool convertOk; |
|
|
|
|
|
|
|
QString strVersion = xml.readElementText(); |
|
|
|
|
|
|
|
int intVersion = strVersion.toInt(&convertOk); |
|
|
|
|
|
|
|
if (!convertOk) { |
|
|
|
|
|
|
|
qWarning() << "Badly formed XML"; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (intVersion < 1) { |
|
|
|
|
|
|
|
// We can't read these old files
|
|
|
|
|
|
|
|
qDebug() << "Airframe version stamp too old, skipping load. Found:" << intVersion << "Want: 3 File:" << airframeFilename; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else if (elementName == "airframe_group") { |
|
|
|
|
|
|
|
if (xmlState != XmlStateFoundVersion) { |
|
|
|
|
|
|
|
// We didn't get a version stamp, assume older version we can't read
|
|
|
|
|
|
|
|
qDebug() << "Parameter version stamp not found, skipping load" << airframeFilename; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
xmlState = XmlStateFoundGroup; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!xml.attributes().hasAttribute("name") || !xml.attributes().hasAttribute("image")) { |
|
|
|
|
|
|
|
qWarning() << "Badly formed XML"; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
airframeGroup = xml.attributes().value("name").toString(); |
|
|
|
|
|
|
|
image = xml.attributes().value("image").toString(); |
|
|
|
|
|
|
|
qCDebug(PX4AirframeLoaderLog) << "Found group: " << airframeGroup; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else if (elementName == "airframe") { |
|
|
|
|
|
|
|
if (xmlState != XmlStateFoundGroup) { |
|
|
|
|
|
|
|
qWarning() << "Badly formed XML"; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
xmlState = XmlStateFoundAirframe; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!xml.attributes().hasAttribute("name") || !xml.attributes().hasAttribute("id")) { |
|
|
|
|
|
|
|
qWarning() << "Badly formed XML"; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QString name = xml.attributes().value("name").toString(); |
|
|
|
|
|
|
|
QString id = xml.attributes().value("id").toString(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
qCDebug(PX4AirframeLoaderLog) << "Found airframe name:" << name << " type:" << airframeGroup << " id:" << id; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Now that we know type we can airframe meta data object and add it to the system
|
|
|
|
|
|
|
|
AirframeComponentAirframes::insert(airframeGroup, image, name, id.toInt()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
// We should be getting meta data now
|
|
|
|
|
|
|
|
if (xmlState != XmlStateFoundAirframe) { |
|
|
|
|
|
|
|
qWarning() << "Badly formed XML"; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!badMetaData) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// We eventually want this, just not yet now
|
|
|
|
// if (elementName == "short_desc") {
|
|
|
|
// if (elementName == "short_desc") {
|
|
|
|
// Q_ASSERT(metaData);
|
|
|
|
// Q_ASSERT(metaData);
|
|
|
|
// QString text = xml.readElementText();
|
|
|
|
// QString text = xml.readElementText();
|
|
|
@ -266,42 +223,33 @@ void PX4AirframeLoader::loadAirframeFactMetaData(void) |
|
|
|
// metaData->setUnits(text);
|
|
|
|
// metaData->setUnits(text);
|
|
|
|
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
// } else {
|
|
|
|
// qDebug() << "Unknown element in XML: " << elementName;
|
|
|
|
qDebug() << "Unknown element in XML: " << elementName; |
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// } else if (xml.isEndElement()) {
|
|
|
|
|
|
|
|
// QString elementName = xml.name().toString();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (elementName == "parameter") {
|
|
|
|
|
|
|
|
// // Done loading this parameter, validate default value
|
|
|
|
|
|
|
|
// if (metaData->defaultValueAvailable()) {
|
|
|
|
|
|
|
|
// QVariant var;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if (!metaData->convertAndValidate(metaData->defaultValue(), false /* convertOnly */, var, errorString)) {
|
|
|
|
|
|
|
|
// qCWarning(PX4AirframeLoaderLog) << "Invalid default value, name:" << metaData->name() << " type:" << metaData->type() << " default:" << metaData->defaultValue() << " error:" << errorString;
|
|
|
|
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
// // Reset for next parameter
|
|
|
|
} else if (xml.isEndElement()) { |
|
|
|
// metaData = NULL;
|
|
|
|
QString elementName = xml.name().toString(); |
|
|
|
// badMetaData = false;
|
|
|
|
|
|
|
|
// xmlState = XmlStateFoundGroup;
|
|
|
|
if (elementName == "airframe") { |
|
|
|
// } else if (elementName == "group") {
|
|
|
|
// Done loading this airframe, validate
|
|
|
|
// xmlState = XmlStateFoundVersion;
|
|
|
|
|
|
|
|
// } else if (elementName == "parameters") {
|
|
|
|
// Reset for next airframe
|
|
|
|
// xmlState = XmlStateFoundParameters;
|
|
|
|
badMetaData = false; |
|
|
|
// }
|
|
|
|
xmlState = XmlStateFoundGroup; |
|
|
|
// }
|
|
|
|
} else if (elementName == "airframe_group") { |
|
|
|
// xml.readNext();
|
|
|
|
xmlState = XmlStateFoundVersion; |
|
|
|
// }
|
|
|
|
} else if (elementName == "airframes") { |
|
|
|
|
|
|
|
xmlState = XmlStateFoundAirframes; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
xml.readNext(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_airframeMetaDataLoaded = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PX4AirframeLoader::clearStaticData(void) |
|
|
|
void PX4AirframeLoader::clearStaticData(void) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// foreach(QString airframeName, AirframeComponentAirframes::rgAirframeTypes.keys()) {
|
|
|
|
AirframeComponentAirframes::clear(); |
|
|
|
// delete AirframeComponentAirframes::rgAirframeTypes[airframeName];
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
AirframeComponentAirframes::rgAirframeTypes.clear(); |
|
|
|
|
|
|
|
_airframeMetaDataLoaded = false; |
|
|
|
_airframeMetaDataLoaded = false; |
|
|
|
} |
|
|
|
} |
|
|
|