diff --git a/src/uas/UAS.cc b/src/uas/UAS.cc index 772341413ce0fe7773495c07fb6d9d0c498c2c26..89f9d44e87a68bd81551be57eb3f77c84cf5b7d9 100644 --- a/src/uas/UAS.cc +++ b/src/uas/UAS.cc @@ -1999,7 +1999,7 @@ void UAS::sendMessage(mavlink_message_t message) if (LinkManager::instance()->getLinks().contains(link)) { sendMessage(link, message); - qDebug() << "SENT MESSAGE id" << message.msgid; + qDebug() << "SENT MESSAGE id" << message.msgid << "component" << message.compid; } else { diff --git a/src/uas/UASParameterCommsMgr.cc b/src/uas/UASParameterCommsMgr.cc index 26a5ce4da29f7d4c24a667294802d329e450ce96..e2231064db4a8c0145712a6b6182dd757a90b521 100644 --- a/src/uas/UASParameterCommsMgr.cc +++ b/src/uas/UASParameterCommsMgr.cc @@ -70,18 +70,23 @@ void UASParameterCommsMgr::requestParameterList() //TODO check: no need to cause datamodel to forget params here? // paramDataModel->forgetAllOnboardParameters(); - // Clear transmission state - receivedParamsList.clear(); - transmissionListSizeKnown.clear(); + if (!transmissionListMode) { + // Clear transmission state + receivedParamsList.clear(); + transmissionListSizeKnown.clear(); - transmissionListMode = true; - foreach (int key, transmissionMissingPackets.keys()) { - transmissionMissingPackets.value(key)->clear(); - } - transmissionActive = true; + transmissionListMode = true; + foreach (int key, transmissionMissingPackets.keys()) { + transmissionMissingPackets.value(key)->clear(); + } + transmissionActive = true; - setParameterStatusMsg(tr("Requested param list.. waiting")); - mav->requestParameters(); + setParameterStatusMsg(tr("Requested param list.. waiting")); + mav->requestParameters(); + } + else { + qDebug() << __FILE__ << __LINE__ << "Ignoring requestParameterList because we're receiving params list"; + } } diff --git a/src/uas/UASParameterCommsMgr.h b/src/uas/UASParameterCommsMgr.h index 03f24bb1d74a3894fecf84d0aa7b1cdba6d7f360..8f5a2eeb6784a95a91da0cd9d900ed36b7070b62 100644 --- a/src/uas/UASParameterCommsMgr.h +++ b/src/uas/UASParameterCommsMgr.h @@ -62,6 +62,7 @@ public slots: /** @brief Request list of parameters from MAV */ virtual void requestParameterList(); + /** @brief Check for missing parameters */ virtual void retransmissionGuardTick(); diff --git a/src/ui/QGCPX4VehicleConfig.cc b/src/ui/QGCPX4VehicleConfig.cc index 708d5a0b7b484a3db9f0d8b4097f68b767368d1f..177a5e0660ea149044c107782fd8d2edd3b49e9e 100644 --- a/src/ui/QGCPX4VehicleConfig.cc +++ b/src/ui/QGCPX4VehicleConfig.cc @@ -795,9 +795,12 @@ void QGCPX4VehicleConfig::loadConfig() xml.readNext(); } - mav->getParamManager()->setParamDescriptions(paramTooltips); + if (!paramTooltips.isEmpty()) { + mav->getParamManager()->setParamDescriptions(paramTooltips); + } doneLoadingConfig = true; - mav->requestParameters(); //Config is finished, lets do a parameter request to ensure none are missed if someone else started requesting before we were finished. + //Config is finished, lets do a parameter request to ensure none are missed if someone else started requesting before we were finished. + mav->getParamCommsMgr()->requestParameterList(); } void QGCPX4VehicleConfig::setActiveUAS(UASInterface* active) @@ -826,31 +829,28 @@ void QGCPX4VehicleConfig::setActiveUAS(UASInterface* active) // Disconnect old system disconnect(mav, SIGNAL(remoteControlChannelRawChanged(int,float)), this, SLOT(remoteControlChannelRawChanged(int,float))); + //TODO use paramCommsMgr instead disconnect(mav, SIGNAL(parameterChanged(int,int,QString,QVariant)), this, SLOT(parameterChanged(int,int,QString,QVariant))); - disconnect(ui->refreshButton,SIGNAL(clicked()),mav,SLOT(requestParameters())); + disconnect(ui->refreshButton,SIGNAL(clicked()), + paramCommsMgr,SLOT(requestParameterList())); // Delete all children from all fixed tabs. - foreach(QWidget* child, ui->generalLeftContents->findChildren()) - { + foreach(QWidget* child, ui->generalLeftContents->findChildren()) { child->deleteLater(); } - foreach(QWidget* child, ui->generalRightContents->findChildren()) - { + foreach(QWidget* child, ui->generalRightContents->findChildren()) { child->deleteLater(); } - foreach(QWidget* child, ui->advanceColumnContents->findChildren()) - { + foreach(QWidget* child, ui->advanceColumnContents->findChildren()) { child->deleteLater(); } - foreach(QWidget* child, ui->sensorContents->findChildren()) - { + foreach(QWidget* child, ui->sensorContents->findChildren()) { child->deleteLater(); } // And then delete any custom tabs - foreach(QWidget* child, additionalTabs) - { + foreach(QWidget* child, additionalTabs) { child->deleteLater(); } additionalTabs.clear(); @@ -866,6 +866,7 @@ void QGCPX4VehicleConfig::setActiveUAS(UASInterface* active) // Connect new system mav = active; + paramCommsMgr = mav->getParamCommsMgr(); // Reset current state resetCalibrationRC(); @@ -875,25 +876,23 @@ void QGCPX4VehicleConfig::setActiveUAS(UASInterface* active) chanCount = 0; // Connect new system - connect(active, SIGNAL(remoteControlChannelRawChanged(int,float)), this, + connect(mav, SIGNAL(remoteControlChannelRawChanged(int,float)), this, SLOT(remoteControlChannelRawChanged(int,float))); - connect(active, SIGNAL(parameterChanged(int,int,QString,QVariant)), this, + connect(mav, SIGNAL(parameterChanged(int,int,QString,QVariant)), this, SLOT(parameterChanged(int,int,QString,QVariant))); - connect(ui->refreshButton, SIGNAL(clicked()), active, SLOT(requestParameters())); + connect(ui->refreshButton, SIGNAL(clicked()), + paramCommsMgr,SLOT(requestParameterList())); - if (systemTypeToParamMap.contains(mav->getSystemTypeName())) - { + if (systemTypeToParamMap.contains(mav->getSystemTypeName())) { paramToWidgetMap = systemTypeToParamMap[mav->getSystemTypeName()]; } - else - { + else { //Indication that we have no meta data for this system type. qDebug() << "No parameters defined for system type:" << mav->getSystemTypeName(); paramToWidgetMap = systemTypeToParamMap[mav->getSystemTypeName()]; } - if (!paramTooltips.isEmpty()) - { + if (!paramTooltips.isEmpty()) { mav->getParamManager()->setParamDescriptions(paramTooltips); } @@ -912,8 +911,7 @@ void QGCPX4VehicleConfig::setActiveUAS(UASInterface* active) ui->writeButton->setEnabled(true); ui->loadFileButton->setEnabled(true); ui->saveFileButton->setEnabled(true); - if (mav->getAutopilotTypeName() == "ARDUPILOTMEGA") - { + if (mav->getAutopilotTypeName() == "ARDUPILOTMEGA") { ui->readButton->hide(); ui->writeButton->hide(); } @@ -978,8 +976,8 @@ void QGCPX4VehicleConfig::writeCalibrationRC() void QGCPX4VehicleConfig::requestCalibrationRC() { - if (mav) { - mav->getParamCommsMgr()->requestRcCalibrationParamsUpdate(); + if (paramCommsMgr) { + paramCommsMgr->requestRcCalibrationParamsUpdate(); } } diff --git a/src/ui/QGCPX4VehicleConfig.h b/src/ui/QGCPX4VehicleConfig.h index b11d2e60e2b9c3b62f014fed62c5888ab61c20d0..93761d52f2aeb43a3fbe1571a868dc981e906582 100644 --- a/src/ui/QGCPX4VehicleConfig.h +++ b/src/ui/QGCPX4VehicleConfig.h @@ -10,6 +10,8 @@ #include "QGCToolWidget.h" #include "UASInterface.h" +class UASParameterCommsMgr; + namespace Ui { class QGCPX4VehicleConfig; } @@ -159,6 +161,7 @@ protected slots: protected: bool doneLoadingConfig; UASInterface* mav; ///< The current MAV + UASParameterCommsMgr* paramCommsMgr; ///< param comms mgr for the mav static const unsigned int chanMax = 8; ///< Maximum number of channels unsigned int chanCount; ///< Actual channels int rcType; ///< Type of the remote control diff --git a/src/ui/QGCVehicleConfig.cc b/src/ui/QGCVehicleConfig.cc index a296f28ff33026f985150b4e47c5e4b1603abf85..2aa2ead2e6725bc5b138851337a6d4fee0996554 100644 --- a/src/ui/QGCVehicleConfig.cc +++ b/src/ui/QGCVehicleConfig.cc @@ -790,7 +790,8 @@ void QGCVehicleConfig::loadConfig() mav->getParamManager()->setParamDescriptions(paramTooltips); doneLoadingConfig = true; - mav->requestParameters(); //Config is finished, lets do a parameter request to ensure none are missed if someone else started requesting before we were finished. + //Config is finished, lets do a parameter request to ensure none are missed if someone else started requesting before we were finished. + mav->getParamCommsMgr()->requestParameterList(); } void QGCVehicleConfig::setActiveUAS(UASInterface* active)