diff --git a/src/comm/LinkManager.cc b/src/comm/LinkManager.cc index eb4dabf44103f272b804ed663c59dcece4b2a2ae..385dfb7bd4df4dcfb9b0e7bba5b03d5b53bb5f23 100644 --- a/src/comm/LinkManager.cc +++ b/src/comm/LinkManager.cc @@ -357,6 +357,8 @@ void LinkManager::saveLinkConfigurationList() void LinkManager::loadLinkConfigurationList() { + bool udpExists = false; + bool linksChanged = false; QSettings settings; // Is the group even there? if(settings.contains(LinkConfiguration::settingsRoot() + "/count")) { @@ -402,6 +404,14 @@ void LinkManager::loadLinkConfigurationList() // Have the instance load its own values pLink->loadSettings(settings, root); addLinkConfiguration(pLink); + linksChanged = true; + // Check for UDP links + if(pLink->type() == LinkConfiguration::TypeUdp) { + UDPConfiguration* uLink = dynamic_cast(pLink); + if(uLink && uLink->localPort() == QGC_UDP_LOCAL_PORT) { + udpExists = true; + } + } } } else { qWarning() << "Link Configuration " << root << " has an empty name." ; @@ -416,7 +426,6 @@ void LinkManager::loadLinkConfigurationList() qWarning() << "Link Configuration " << root << " has no type." ; } } - emit linkConfigurationChanged(); } // Debug buids always add MockLink automatically @@ -424,10 +433,22 @@ void LinkManager::loadLinkConfigurationList() MockConfiguration* pMock = new MockConfiguration("Mock Link"); pMock->setDynamic(true); addLinkConfiguration(pMock); - emit linkConfigurationChanged(); + linksChanged = true; #endif + + //-- If we don't have a configured UDP link, create a default one + if(!udpExists) { + UDPConfiguration* uLink = new UDPConfiguration("Default UDP Link"); + uLink->setLocalPort(QGC_UDP_LOCAL_PORT); + uLink->setDynamic(); + addLinkConfiguration(uLink); + linksChanged = true; + } - // Enable automatic PX4 hunting + if(linksChanged) { + emit linkConfigurationChanged(); + } + // Enable automatic Serial PX4/3DR Radio hunting _configurationsLoaded = true; } diff --git a/src/ui/QGCCommConfiguration.cc b/src/ui/QGCCommConfiguration.cc index 13da2a771eb799600ed32329c72657e1aee91902..6aa3ec0d113c9c29c941bc9452120393abbe1396 100644 --- a/src/ui/QGCCommConfiguration.cc +++ b/src/ui/QGCCommConfiguration.cc @@ -190,4 +190,7 @@ void QGCCommConfiguration::on_nameEdit_textEdited(const QString &arg1) { Q_UNUSED(arg1); _updateUI(); + if(_config) { + _config->setDynamic(false); + } } diff --git a/src/ui/QGCLinkConfiguration.cc b/src/ui/QGCLinkConfiguration.cc index bf2153d2c8be7b23e45e913fcae6f92e15111619..d0e312b8c070a68f443a1762169a4519a49547f0 100644 --- a/src/ui/QGCLinkConfiguration.cc +++ b/src/ui/QGCLinkConfiguration.cc @@ -225,9 +225,14 @@ void QGCLinkConfiguration::_updateButtons() LinkConfiguration* config = NULL; QModelIndex index = _ui->linkView->currentIndex(); bool enabled = (index.row() >= 0); + bool deleteEnabled = true; if(enabled) { config = _viewModel->getConfiguration(index.row()); if(config) { + // Can't delete a dynamic link + if(config->isDynamic()) { + deleteEnabled = false; + } LinkInterface* link = config->getLink(); if(link) { _ui->connectLinkButton->setText("Disconnect"); @@ -237,7 +242,7 @@ void QGCLinkConfiguration::_updateButtons() } } _ui->connectLinkButton->setEnabled(enabled); - _ui->delLinkButton->setEnabled(config != NULL); + _ui->delLinkButton->setEnabled(config != NULL && deleteEnabled); _ui->editLinkButton->setEnabled(config != NULL); } diff --git a/src/ui/QGCUDPLinkConfiguration.cc b/src/ui/QGCUDPLinkConfiguration.cc index f1fcef6cfcf1c209b34d1493edc055b1e2d44a5f..fb9074de67e6f041f12a8262f0195190651c196c 100644 --- a/src/ui/QGCUDPLinkConfiguration.cc +++ b/src/ui/QGCUDPLinkConfiguration.cc @@ -90,6 +90,7 @@ void QGCUDPLinkConfiguration::on_portNumber_valueChanged(int arg1) { if(!_inConstructor) { _config->setLocalPort(arg1); + _config->setDynamic(false); } }