diff --git a/ground/openpilotgcs/src/plugins/setupwizard/pages/airframeinitialtuningpage.cpp b/ground/openpilotgcs/src/plugins/setupwizard/pages/airframeinitialtuningpage.cpp index bae342554..a8fcb3dca 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/pages/airframeinitialtuningpage.cpp +++ b/ground/openpilotgcs/src/plugins/setupwizard/pages/airframeinitialtuningpage.cpp @@ -82,6 +82,9 @@ bool AirframeInitialTuningPage::validatePage() if (ui->templateList->currentRow() >= 0) { templ = ui->templateList->item(ui->templateList->currentRow())->data(Qt::UserRole + 1).value(); } + if (getWizard()->getVehicleTemplate() != NULL) { + delete getWizard()->getVehicleTemplate(); + } getWizard()->setVehicleTemplate(new QJsonObject(*templ)); return true; } @@ -114,8 +117,11 @@ void AirframeInitialTuningPage::updateDescription(QJsonObject *templ) if (templ != NULL) { QString description; description.append("").append(tr("Name of Vehicle: ")).append("").append(templ->value("name").toString()).append("
"); - description.append("").append(tr("Name of Owner: ")).append("").append(templ->value("owner").toString()) - .append(" (").append(templ->value("nick").toString()).append(")").append("
"); + description.append("").append(tr("Name of Owner: ")).append("").append(templ->value("owner").toString()); + if (templ->value("nick") != "") { + description.append(" (").append(templ->value("nick").toString()).append(")"); + } + description.append("
"); description.append("").append(tr("Size: ")).append("").append(templ->value("size").toString()).append("
"); description.append("").append(tr("Weight: ")).append("").append(templ->value("weight").toString()).append("
"); description.append("").append(tr("Motor(s): ")).append("").append(templ->value("motor").toString()).append("
"); @@ -163,19 +169,13 @@ void AirframeInitialTuningPage::loadValidFiles() QJsonObject json = templateDoc.object(); if (json["type"].toInt() == getWizard()->getVehicleType() && json["subtype"].toInt() == getWizard()->getVehicleSubType()) { - QString nameKey = getTemplateKey(&json); - int index = 0; - while (true) { - if (!m_templates.contains(nameKey)) { - m_templates[nameKey] = new QJsonObject(json); - break; - } else { - nameKey = QString("%1 - %2").arg(nameKey).arg(++index); - } + QString uuid = json["uuid"].toString(); + if (!m_templates.contains(uuid)) { + m_templates[json["uuid"].toString()] = new QJsonObject(json); } } - file.close(); } + file.close(); } } @@ -185,15 +185,17 @@ void AirframeInitialTuningPage::setupTemplateList() item->setData(Qt::UserRole + 1, QVariant::fromValue((QJsonObject *)NULL)); foreach(QString templ, m_templates.keys()) { - item = new QListWidgetItem(templ, ui->templateList); - item->setData(Qt::UserRole + 1, QVariant::fromValue(m_templates[templ])); + QJsonObject *json = m_templates[templ]; + + item = new QListWidgetItem(json->value("name").toString(), ui->templateList); + item->setData(Qt::UserRole + 1, QVariant::fromValue(json)); } ui->templateList->setCurrentRow(0); } QString AirframeInitialTuningPage::getTemplateKey(QJsonObject *templ) { - return QString("%1 - %2").arg(templ->value("nick").toString()).arg(templ->value("name").toString()); + return QString(templ->value("name").toString()); } void AirframeInitialTuningPage::resizeEvent(QResizeEvent *) diff --git a/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp b/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp index d1155a74d..f8e7c29a7 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp +++ b/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp @@ -42,6 +42,7 @@ #include "gpssettings.h" #include "airspeedsettings.h" #include +#include const qint16 VehicleConfigurationHelper::LEGACY_ESC_FREQUENCE = 50; const qint16 VehicleConfigurationHelper::RAPID_ESC_FREQUENCE = 400; @@ -82,6 +83,8 @@ bool VehicleConfigurationHelper::setupVehicle(bool save) applyStabilizationConfiguration(); applyManualControlDefaults(); + applyTemplateSettings(); + bool result = saveChangesToController(save); emit saveProgress(m_modifiedObjects.count() + 1, ++m_progress, result ? tr("Done!") : tr("Failed!")); return result; @@ -747,6 +750,22 @@ void VehicleConfigurationHelper::applyManualControlDefaults() addModifiedObject(mcSettings, tr("Writing manual control defaults")); } +void VehicleConfigurationHelper::applyTemplateSettings() +{ + if (m_configSource->getVehicleTemplate() != NULL) { + QJsonObject *json = m_configSource->getVehicleTemplate(); + QList updatedObjects; + m_uavoManager->fromJson(*json, &updatedObjects); + foreach(UAVObject * object, updatedObjects) { + UAVDataObject *dataObj = dynamic_cast(object); + + if (dataObj != NULL) { + addModifiedObject(dataObj, QString(tr("Writing template settings for %1")).arg(object->getName())); + } + } + } +} + bool VehicleConfigurationHelper::saveChangesToController(bool save) { qDebug() << "Saving modified objects to controller. " << m_modifiedObjects.count() << " objects in found."; diff --git a/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.h b/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.h index 5b692c30c..750697a41 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.h +++ b/ground/openpilotgcs/src/plugins/setupwizard/vehicleconfigurationhelper.h @@ -87,6 +87,7 @@ private: void applySensorBiasConfiguration(); void applyStabilizationConfiguration(); void applyManualControlDefaults(); + void applyTemplateSettings(); void applyMixerConfiguration(mixerChannelSettings channels[]); diff --git a/ground/openpilotgcs/src/plugins/setupwizard/vehicletemplateexportdialog.cpp b/ground/openpilotgcs/src/plugins/setupwizard/vehicletemplateexportdialog.cpp index 92c5c6486..9e85e5158 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/vehicletemplateexportdialog.cpp +++ b/ground/openpilotgcs/src/plugins/setupwizard/vehicletemplateexportdialog.cpp @@ -199,6 +199,8 @@ void VehicleTemplateExportDialog::accept() exportObject["propeller"] = ui->Propeller->text(); exportObject["controller"] = ui->Controllers->currentText(); exportObject["comment"] = ui->Comment->document()->toPlainText(); + QUuid uuid = QUuid::createUuid(); + exportObject["uuid"] = uuid.toString(); QByteArray bytes; QBuffer buffer(&bytes); @@ -209,13 +211,12 @@ void VehicleTemplateExportDialog::accept() QJsonDocument saveDoc(exportObject); - QString fileName = QString("%1/%2/%3-%4-%5-%6.optmpl") + QString fileName = QString("%1/%2/%3-%4-%5.optmpl") .arg(EXPORT_BASE_NAME) .arg(getTypeDirectory()) - .arg(fixFilenameString(ui->ForumNick->text(), 15)) .arg(fixFilenameString(ui->Name->text(), 20)) .arg(fixFilenameString(ui->Type->text(), 30)) - .arg(fixFilenameString(QUuid::createUuid().toString().right(12))); + .arg(fixFilenameString(uuid.toString().right(12))); QFile saveFile(fileName); QDir dir; dir.mkpath(QFileInfo(saveFile).absoluteDir().absolutePath()); diff --git a/ground/openpilotgcs/src/plugins/setupwizard/vehicletemplateexportdialog.ui b/ground/openpilotgcs/src/plugins/setupwizard/vehicletemplateexportdialog.ui index db58e94f4..4711d3fe5 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/vehicletemplateexportdialog.ui +++ b/ground/openpilotgcs/src/plugins/setupwizard/vehicletemplateexportdialog.ui @@ -540,6 +540,25 @@ + + Type + Name + Owner + ForumNick + Size + Weight + Motor + Esc + Servo + Battery + Propeller + Controllers + Comment + ImportButton + acceptBtn + cancelBtn + Photo + diff --git a/ground/openpilotgcs/src/plugins/uavobjects/uavobjectmanager.cpp b/ground/openpilotgcs/src/plugins/uavobjects/uavobjectmanager.cpp index 8683f905b..a90b18dd6 100644 --- a/ground/openpilotgcs/src/plugins/uavobjects/uavobjectmanager.cpp +++ b/ground/openpilotgcs/src/plugins/uavobjects/uavobjectmanager.cpp @@ -340,7 +340,7 @@ void UAVObjectManager::toJson(QJsonObject &jsonObject, const QList jsonObject["objects"] = jObjects; } -void UAVObjectManager::fromJson(const QJsonObject &jsonObject) +void UAVObjectManager::fromJson(const QJsonObject &jsonObject, QList *updatedObjects) { QJsonArray jObjects = jsonObject["objects"].toArray(); @@ -349,6 +349,9 @@ void UAVObjectManager::fromJson(const QJsonObject &jsonObject) UAVObject *object = getObject(jObject["name"].toString(), jObject["instance"].toInt()); if (object != NULL) { object->fromJson(jObject); + if (updatedObjects != NULL) { + updatedObjects->append(object); + } } } } diff --git a/ground/openpilotgcs/src/plugins/uavobjects/uavobjectmanager.h b/ground/openpilotgcs/src/plugins/uavobjects/uavobjectmanager.h index cc6460abe..c65e54e71 100644 --- a/ground/openpilotgcs/src/plugins/uavobjects/uavobjectmanager.h +++ b/ground/openpilotgcs/src/plugins/uavobjects/uavobjectmanager.h @@ -59,7 +59,7 @@ public: void toJson(QJsonObject &jsonObject, JSON_EXPORT_OPTION what = JSON_EXPORT_ALL); void toJson(QJsonObject &jsonObject, const QList &objectsToExport); void toJson(QJsonObject &jsonObject, const QList &objectsToExport); - void fromJson(const QJsonObject &jsonObject); + void fromJson(const QJsonObject &jsonObject, QList *updatedObjects = NULL); signals: void newObject(UAVObject *obj); diff --git a/shared/uavobjectdefinition/mpu6000settings.xml b/shared/uavobjectdefinition/mpu6000settings.xml index 59d469c78..943243fa7 100644 --- a/shared/uavobjectdefinition/mpu6000settings.xml +++ b/shared/uavobjectdefinition/mpu6000settings.xml @@ -1,7 +1,7 @@ Settings for the @ref MPU6000 sensor used on CC3D and Revolution. Reboot the board for this to takes effect - +