From 13ecf8196624aa0189a27b0237921ae81a7185dc Mon Sep 17 00:00:00 2001 From: tstellanova Date: Thu, 8 Aug 2013 11:14:48 -0700 Subject: [PATCH] keep the received params list clean --- src/uas/UASParameterCommsMgr.cc | 43 +++++++++++++++++++-------------- src/uas/UASParameterDataModel.h | 8 +++--- src/ui/QGCParamWidget.cc | 4 +-- 3 files changed, 31 insertions(+), 24 deletions(-) diff --git a/src/uas/UASParameterCommsMgr.cc b/src/uas/UASParameterCommsMgr.cc index 58f02733e..8b65d65ee 100644 --- a/src/uas/UASParameterCommsMgr.cc +++ b/src/uas/UASParameterCommsMgr.cc @@ -99,15 +99,14 @@ void UASParameterCommsMgr::requestParameterList() void UASParameterCommsMgr::retransmissionGuardTick() { if (transmissionActive) { - if (transmissionListMode) { - if (transmissionListSizeKnown.isEmpty() ) { - //we are still waitin for the first parameter list response - if (QGC::groundTimeMilliseconds() > this->listRecvTimeout) { - //re-request parameters - setParameterStatusMsg(tr("TIMEOUT: Re-requesting param list"),ParamCommsStatusLevel_Warning); - listRecvTimeout = QGC::groundTimeMilliseconds() + 10000; - mav->requestParameters(); - } + + if (transmissionListMode && transmissionListSizeKnown.isEmpty() ) { + //we are still waitin for the first parameter list response + if (QGC::groundTimeMilliseconds() > this->listRecvTimeout) { + //re-request parameters + setParameterStatusMsg(tr("TIMEOUT: Re-requesting param list"),ParamCommsStatusLevel_Warning); + listRecvTimeout = QGC::groundTimeMilliseconds() + 10000; + mav->requestParameters(); } return; } @@ -142,8 +141,8 @@ void UASParameterCommsMgr::retransmissionGuardTick() // Re-request at maximum retransmissionBurstRequestSize parameters at once // to prevent link flooding QMap*>::iterator i; - QMap*> onboardParams = paramDataModel->getOnboardParameters(); - for (i = onboardParams.begin(); i != onboardParams.end(); ++i) { + QMap*>* onboardParams = paramDataModel->getOnboardParameters(); + for (i = onboardParams->begin(); i != onboardParams->end(); ++i) { // Iterate through the parameters of the component int component = i.key(); // Request n parameters from this component (at maximum) @@ -175,7 +174,7 @@ void UASParameterCommsMgr::retransmissionGuardTick() if (count < retransmissionBurstRequestSize) { // Re-request write operation QVariant value = missingParams->value(key); - switch ((int)onboardParams.value(component)->value(key).type()) + switch ((int)onboardParams->value(component)->value(key).type()) { case QVariant::Int: { @@ -395,13 +394,20 @@ void UASParameterCommsMgr::receivedParameterUpdate(int uas, int compId, int para // Mark list size as known transmissionListSizeKnown.insert(compId, true); - // Mark all parameters as missing + qDebug() << "Mark all parameters as missing"; + QList* compParamList = transmissionMissingPackets.value(compId); for (int i = 0; i < paramCount; ++i) { - if (!transmissionMissingPackets.value(compId)->contains(i)) { - transmissionMissingPackets.value(compId)->append(i); + if (!compParamList->contains(i)) { + if (i != paramId) { + compParamList->append(i); + } + else { + qDebug() << "Already received " << paramId; + } } } + // There is only one transmission timeout for all components // since components do not manage their transmission, // the longest timeout is safe for all components. @@ -491,7 +497,8 @@ void UASParameterCommsMgr::receivedParameterUpdate(int uas, int compId, int para else { qDebug() << "missCount:" << missCount << "missWriteCount:" << missWriteCount; foreach (int key, transmissionMissingPackets.keys()) { - qDebug() << "Missing:" << key ; + QList* list = transmissionMissingPackets.value(key); + qDebug() << "Component" << key << "missing numParams:" << list->count() ; } } } @@ -509,9 +516,9 @@ void UASParameterCommsMgr::sendPendingParameters() { // Iterate through all components, through all pending parameters and send them to UAS int parametersSent = 0; - QMap*> changedValues = paramDataModel->getPendingParameters(); + QMap*>* changedValues = paramDataModel->getPendingParameters(); QMap*>::iterator i; - for (i = changedValues.begin(); i != changedValues.end(); ++i) { + for (i = changedValues->begin(); i != changedValues->end(); ++i) { // Iterate through the parameters of the component int compid = i.key(); QMap* comp = i.value(); diff --git a/src/uas/UASParameterDataModel.h b/src/uas/UASParameterDataModel.h index 352fb0eea..219eff900 100644 --- a/src/uas/UASParameterDataModel.h +++ b/src/uas/UASParameterDataModel.h @@ -69,12 +69,12 @@ public: return onboardParameters.value(componentId); } - QMap* > getPendingParameters() { - return pendingParameters; + QMap* >* getPendingParameters() { + return &pendingParameters; } - QMap* > getOnboardParameters() { - return onboardParameters; + QMap* >* getOnboardParameters() { + return &onboardParameters; } diff --git a/src/ui/QGCParamWidget.cc b/src/ui/QGCParamWidget.cc index b125b083a..7600d1576 100644 --- a/src/ui/QGCParamWidget.cc +++ b/src/ui/QGCParamWidget.cc @@ -432,9 +432,9 @@ void QGCParamWidget::writeParameters() int changedParamCount = 0; QMap*>::iterator i; - QMap*> changedValues = paramDataModel->getPendingParameters(); + QMap*>* changedValues = paramDataModel->getPendingParameters(); - for (i = changedValues.begin(); i != changedValues.end() , (0 == changedParamCount); ++i) { + for (i = changedValues->begin(); (i != changedValues->end()) && (0 == changedParamCount); ++i) { // Iterate through the parameters of the component QMap* compPending = i.value(); changedParamCount += compPending->count(); -- 2.22.0