|
|
@ -14,8 +14,8 @@ UASParameterCommsMgr::UASParameterCommsMgr(QObject *parent, UASInterface *uas) : |
|
|
|
transmissionListMode(false), |
|
|
|
transmissionListMode(false), |
|
|
|
transmissionActive(false), |
|
|
|
transmissionActive(false), |
|
|
|
transmissionTimeout(0), |
|
|
|
transmissionTimeout(0), |
|
|
|
retransmissionTimeout(350), |
|
|
|
retransmissionTimeout(1000), |
|
|
|
rewriteTimeout(500), |
|
|
|
rewriteTimeout(1000), |
|
|
|
retransmissionBurstRequestSize(5) |
|
|
|
retransmissionBurstRequestSize(5) |
|
|
|
{ |
|
|
|
{ |
|
|
|
paramDataModel = mav->getParamDataModel(); |
|
|
|
paramDataModel = mav->getParamDataModel(); |
|
|
@ -96,6 +96,125 @@ void UASParameterCommsMgr::requestParameterList() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
Empty read retransmission list |
|
|
|
|
|
|
|
Empty write retransmission list |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
void UASParameterCommsMgr::clearRetransmissionLists() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
qDebug() << __FILE__ << __LINE__ << "clearRetransmissionLists"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int missingReadCount = 0; |
|
|
|
|
|
|
|
QList<int> readKeys = transmissionMissingPackets.keys(); |
|
|
|
|
|
|
|
foreach (int component, readKeys) { |
|
|
|
|
|
|
|
missingReadCount += transmissionMissingPackets.value(component)->count(); |
|
|
|
|
|
|
|
transmissionMissingPackets.value(component)->clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int missingWriteCount = 0; |
|
|
|
|
|
|
|
QList<int> writeKeys = transmissionMissingWriteAckPackets.keys(); |
|
|
|
|
|
|
|
foreach (int component, writeKeys) { |
|
|
|
|
|
|
|
missingWriteCount += transmissionMissingWriteAckPackets.value(component)->count(); |
|
|
|
|
|
|
|
transmissionMissingWriteAckPackets.value(component)->clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
setParameterStatusMsg(tr("TIMEOUT! MISSING: %1 read, %2 write.").arg(missingReadCount).arg(missingWriteCount), |
|
|
|
|
|
|
|
ParamCommsStatusLevel_Warning); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void UASParameterCommsMgr::emitParameterChanged(int compId, const QString& key, QVariant& value) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int paramType = (int)value.type(); |
|
|
|
|
|
|
|
switch (paramType) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
case QVariant::Char: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QVariant fixedValue(QChar((unsigned char)value.toInt())); |
|
|
|
|
|
|
|
emit parameterChanged(compId, key, fixedValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case QVariant::Int: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QVariant fixedValue(value.toInt()); |
|
|
|
|
|
|
|
emit parameterChanged(compId, key, fixedValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case QVariant::UInt: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QVariant fixedValue(value.toUInt()); |
|
|
|
|
|
|
|
emit parameterChanged(compId, key, fixedValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case QMetaType::Float: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QVariant fixedValue(value.toFloat()); |
|
|
|
|
|
|
|
emit parameterChanged(compId, key, fixedValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
qCritical() << "ABORTED PARAM SEND, NO VALID QVARIANT TYPE"; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
setParameterStatusMsg(tr("Requested write of: %1: %2").arg(key).arg(value.toDouble())); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void UASParameterCommsMgr::resendReadWriteRequests() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int compId; |
|
|
|
|
|
|
|
QList<int> compIds; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Re-request at maximum retransmissionBurstRequestSize parameters at once
|
|
|
|
|
|
|
|
// to prevent link flooding'
|
|
|
|
|
|
|
|
int requestedReadCount = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
compIds = transmissionMissingPackets.keys(); |
|
|
|
|
|
|
|
foreach (compId, compIds) { |
|
|
|
|
|
|
|
// Request n parameters from this component (at maximum)
|
|
|
|
|
|
|
|
QList<int>* missingReadParams = transmissionMissingPackets.value(compId, NULL); |
|
|
|
|
|
|
|
foreach (int paramId, *missingReadParams) { |
|
|
|
|
|
|
|
if (requestedReadCount < retransmissionBurstRequestSize) { |
|
|
|
|
|
|
|
qDebug() << __FILE__ << __LINE__ << "RETRANSMISSION GUARD REQUESTS RETRANSMISSION OF PARAM #" << paramId << "FROM COMPONENT #" << compId; |
|
|
|
|
|
|
|
emit parameterUpdateRequestedById(compId, paramId); |
|
|
|
|
|
|
|
setParameterStatusMsg(tr("Requested retransmission of #%1").arg(paramId+1)); |
|
|
|
|
|
|
|
requestedReadCount++; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else { |
|
|
|
|
|
|
|
qDebug() << "Throttling read retransmit requests at" << requestedReadCount; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Re-request at maximum retransmissionBurstRequestSize parameters at once
|
|
|
|
|
|
|
|
// to prevent write-request link flooding
|
|
|
|
|
|
|
|
int requestedWriteCount = 0; |
|
|
|
|
|
|
|
compIds = transmissionMissingWriteAckPackets.keys(); |
|
|
|
|
|
|
|
foreach (compId, compIds) { |
|
|
|
|
|
|
|
QMap <QString, QVariant>* missingParams = transmissionMissingWriteAckPackets.value(compId); |
|
|
|
|
|
|
|
foreach (QString key, missingParams->keys()) { |
|
|
|
|
|
|
|
if (requestedWriteCount < retransmissionBurstRequestSize) { |
|
|
|
|
|
|
|
// Re-request write operation
|
|
|
|
|
|
|
|
QVariant value = missingParams->value(key); |
|
|
|
|
|
|
|
emitParameterChanged(compId, key, value); |
|
|
|
|
|
|
|
requestedWriteCount++; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else { |
|
|
|
|
|
|
|
qDebug() << "Throttling write retransmit requests at" << requestedWriteCount; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ((0 == requestedWriteCount) && (0 == requestedReadCount) ) { |
|
|
|
|
|
|
|
qDebug() << __FILE__ << __LINE__ << "NO re-read or rewrite requests??"; |
|
|
|
|
|
|
|
//setRetransmissionGuardEnabled(false);
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void UASParameterCommsMgr::retransmissionGuardTick() |
|
|
|
void UASParameterCommsMgr::retransmissionGuardTick() |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (transmissionActive) { |
|
|
|
if (transmissionActive) { |
|
|
@ -118,94 +237,14 @@ void UASParameterCommsMgr::retransmissionGuardTick() |
|
|
|
if (QGC::groundTimeMilliseconds() > transmissionTimeout) { |
|
|
|
if (QGC::groundTimeMilliseconds() > transmissionTimeout) { |
|
|
|
setRetransmissionGuardEnabled(false); |
|
|
|
setRetransmissionGuardEnabled(false); |
|
|
|
transmissionActive = false; |
|
|
|
transmissionActive = false; |
|
|
|
|
|
|
|
transmissionListMode = false; |
|
|
|
// Empty read retransmission list
|
|
|
|
clearRetransmissionLists(); |
|
|
|
// Empty write retransmission list
|
|
|
|
return; |
|
|
|
int missingReadCount = 0; |
|
|
|
|
|
|
|
QList<int> readKeys = transmissionMissingPackets.keys(); |
|
|
|
|
|
|
|
foreach (int component, readKeys) { |
|
|
|
|
|
|
|
missingReadCount += transmissionMissingPackets.value(component)->count(); |
|
|
|
|
|
|
|
transmissionMissingPackets.value(component)->clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Empty write retransmission list
|
|
|
|
|
|
|
|
int missingWriteCount = 0; |
|
|
|
|
|
|
|
QList<int> writeKeys = transmissionMissingWriteAckPackets.keys(); |
|
|
|
|
|
|
|
foreach (int component, writeKeys) { |
|
|
|
|
|
|
|
missingWriteCount += transmissionMissingWriteAckPackets.value(component)->count(); |
|
|
|
|
|
|
|
transmissionMissingWriteAckPackets.value(component)->clear(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
setParameterStatusMsg(tr("TIMEOUT! MISSING: %1 read, %2 write.").arg(missingReadCount).arg(missingWriteCount)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Re-request at maximum retransmissionBurstRequestSize parameters at once
|
|
|
|
|
|
|
|
// to prevent link flooding
|
|
|
|
|
|
|
|
QMap<int, QMap<QString, QVariant>*>::iterator i; |
|
|
|
|
|
|
|
QMap<int, QMap<QString, QVariant>*>* 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)
|
|
|
|
|
|
|
|
QList<int> * paramList = transmissionMissingPackets.value(component, NULL); |
|
|
|
|
|
|
|
if (paramList) { |
|
|
|
|
|
|
|
int count = 0; |
|
|
|
|
|
|
|
foreach (int id, *paramList) { |
|
|
|
|
|
|
|
if (count < retransmissionBurstRequestSize) { |
|
|
|
|
|
|
|
//qDebug() << __FILE__ << __LINE__ << "RETRANSMISSION GUARD REQUESTS RETRANSMISSION OF PARAM #" << id << "FROM COMPONENT #" << component;
|
|
|
|
|
|
|
|
//TODO mavlink msg type for "request parameter set" ?
|
|
|
|
|
|
|
|
emit parameterUpdateRequestedById(component, id); |
|
|
|
|
|
|
|
setParameterStatusMsg(tr("Requested retransmission of #%1").arg(id+1)); |
|
|
|
|
|
|
|
count++; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Re-request at maximum retransmissionBurstRequestSize parameters at once
|
|
|
|
resendReadWriteRequests(); |
|
|
|
// to prevent write-request link flooding
|
|
|
|
} |
|
|
|
// Empty write retransmission list
|
|
|
|
else { |
|
|
|
QList<int> writeKeys = transmissionMissingWriteAckPackets.keys(); |
|
|
|
|
|
|
|
foreach (int component, writeKeys) { |
|
|
|
|
|
|
|
int count = 0; |
|
|
|
|
|
|
|
QMap <QString, QVariant>* missingParams = transmissionMissingWriteAckPackets.value(component); |
|
|
|
|
|
|
|
foreach (QString key, missingParams->keys()) { |
|
|
|
|
|
|
|
if (count < retransmissionBurstRequestSize) { |
|
|
|
|
|
|
|
// Re-request write operation
|
|
|
|
|
|
|
|
QVariant value = missingParams->value(key); |
|
|
|
|
|
|
|
switch ((int)onboardParams->value(component)->value(key).type()) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
case QVariant::Int: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QVariant fixedValue(value.toInt()); |
|
|
|
|
|
|
|
emit parameterChanged(component, key, fixedValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case QVariant::UInt: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QVariant fixedValue(value.toUInt()); |
|
|
|
|
|
|
|
emit parameterChanged(component, key, fixedValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case QMetaType::Float: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QVariant fixedValue(value.toFloat()); |
|
|
|
|
|
|
|
emit parameterChanged(component, key, fixedValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
//qCritical() << "ABORTED PARAM RETRANSMISSION, NO VALID QVARIANT TYPE";
|
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
setParameterStatusMsg(tr("Requested rewrite of: %1: %2").arg(key).arg(missingParams->value(key).toDouble())); |
|
|
|
|
|
|
|
count++; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
qDebug() << __FILE__ << __LINE__ << "STOPPING RETRANSMISSION GUARD GRACEFULLY"; |
|
|
|
qDebug() << __FILE__ << __LINE__ << "STOPPING RETRANSMISSION GUARD GRACEFULLY"; |
|
|
|
setRetransmissionGuardEnabled(false); |
|
|
|
setRetransmissionGuardEnabled(false); |
|
|
|
} |
|
|
|
} |
|
|
@ -293,6 +332,7 @@ void UASParameterCommsMgr::setParameter(int component, QString parameterName, QV |
|
|
|
); |
|
|
|
); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
QVariant onboardVal; |
|
|
|
QVariant onboardVal; |
|
|
|
paramDataModel->getOnboardParameterValue(component,parameterName,onboardVal); |
|
|
|
paramDataModel->getOnboardParameterValue(component,parameterName,onboardVal); |
|
|
|
if (onboardVal == value) { |
|
|
|
if (onboardVal == value) { |
|
|
@ -302,43 +342,11 @@ void UASParameterCommsMgr::setParameter(int component, QString parameterName, QV |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//int paramType = (int)onboardParameters.value(component)->value(parameterName).type();
|
|
|
|
emitParameterChanged(component, parameterName, value); |
|
|
|
int paramType = (int)value.type(); |
|
|
|
|
|
|
|
switch (paramType) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
case QVariant::Char: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QVariant fixedValue(QChar((unsigned char)value.toInt())); |
|
|
|
|
|
|
|
emit parameterChanged(component, parameterName, fixedValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case QVariant::Int: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QVariant fixedValue(value.toInt()); |
|
|
|
|
|
|
|
emit parameterChanged(component, parameterName, fixedValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case QVariant::UInt: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QVariant fixedValue(value.toUInt()); |
|
|
|
|
|
|
|
emit parameterChanged(component, parameterName, fixedValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case QMetaType::Float: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QVariant fixedValue(value.toFloat()); |
|
|
|
|
|
|
|
emit parameterChanged(component, parameterName, fixedValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
qCritical() << "ABORTED PARAM SEND, NO VALID QVARIANT TYPE"; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Wait for parameter to be written back
|
|
|
|
// Wait for parameter to be written back
|
|
|
|
// mark it therefore as missing
|
|
|
|
// mark it therefore as missing
|
|
|
|
if (!transmissionMissingWriteAckPackets.contains(component)) |
|
|
|
if (!transmissionMissingWriteAckPackets.contains(component)) { |
|
|
|
{ |
|
|
|
|
|
|
|
transmissionMissingWriteAckPackets.insert(component, new QMap<QString, QVariant>()); |
|
|
|
transmissionMissingWriteAckPackets.insert(component, new QMap<QString, QVariant>()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -346,15 +354,12 @@ void UASParameterCommsMgr::setParameter(int component, QString parameterName, QV |
|
|
|
transmissionMissingWriteAckPackets.value(component)->insert(parameterName, value); |
|
|
|
transmissionMissingWriteAckPackets.value(component)->insert(parameterName, value); |
|
|
|
|
|
|
|
|
|
|
|
// Set timeouts
|
|
|
|
// Set timeouts
|
|
|
|
if (transmissionActive) |
|
|
|
if (transmissionActive) { |
|
|
|
{ |
|
|
|
|
|
|
|
transmissionTimeout += rewriteTimeout; |
|
|
|
transmissionTimeout += rewriteTimeout; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else { |
|
|
|
{ |
|
|
|
|
|
|
|
quint64 newTransmissionTimeout = QGC::groundTimeMilliseconds() + rewriteTimeout; |
|
|
|
quint64 newTransmissionTimeout = QGC::groundTimeMilliseconds() + rewriteTimeout; |
|
|
|
if (newTransmissionTimeout > transmissionTimeout) |
|
|
|
if (newTransmissionTimeout > transmissionTimeout) { |
|
|
|
{ |
|
|
|
|
|
|
|
transmissionTimeout = newTransmissionTimeout; |
|
|
|
transmissionTimeout = newTransmissionTimeout; |
|
|
|
} |
|
|
|
} |
|
|
|
transmissionActive = true; |
|
|
|
transmissionActive = true; |
|
|
@ -386,6 +391,8 @@ void UASParameterCommsMgr::receivedParameterUpdate(int uas, int compId, int para |
|
|
|
transmissionMissingPackets.insert(compId, new QList<int>()); |
|
|
|
transmissionMissingPackets.insert(compId, new QList<int>()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QList<int>* compXmitMissing = transmissionMissingPackets.value(compId); |
|
|
|
|
|
|
|
|
|
|
|
// List mode is different from single parameter transfers
|
|
|
|
// List mode is different from single parameter transfers
|
|
|
|
if (transmissionListMode) { |
|
|
|
if (transmissionListMode) { |
|
|
|
// Only accept the list size once on the first packet from
|
|
|
|
// Only accept the list size once on the first packet from
|
|
|
@ -394,20 +401,13 @@ void UASParameterCommsMgr::receivedParameterUpdate(int uas, int compId, int para |
|
|
|
// Mark list size as known
|
|
|
|
// Mark list size as known
|
|
|
|
transmissionListSizeKnown.insert(compId, true); |
|
|
|
transmissionListSizeKnown.insert(compId, true); |
|
|
|
|
|
|
|
|
|
|
|
qDebug() << "Mark all parameters as missing"; |
|
|
|
qDebug() << "Mark all parameters as missing: " << paramCount; |
|
|
|
QList<int>* compParamList = transmissionMissingPackets.value(compId); |
|
|
|
|
|
|
|
for (int i = 0; i < paramCount; ++i) { |
|
|
|
for (int i = 0; i < paramCount; ++i) { |
|
|
|
if (!compParamList->contains(i)) { |
|
|
|
if (!compXmitMissing->contains(i)) { |
|
|
|
if (i != paramId) { |
|
|
|
compXmitMissing->append(i); |
|
|
|
compParamList->append(i); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else { |
|
|
|
|
|
|
|
qDebug() << "Already received " << paramId; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// There is only one transmission timeout for all components
|
|
|
|
// There is only one transmission timeout for all components
|
|
|
|
// since components do not manage their transmission,
|
|
|
|
// since components do not manage their transmission,
|
|
|
|
// the longest timeout is safe for all components.
|
|
|
|
// the longest timeout is safe for all components.
|
|
|
@ -419,19 +419,19 @@ void UASParameterCommsMgr::receivedParameterUpdate(int uas, int compId, int para |
|
|
|
|
|
|
|
|
|
|
|
// Start retransmission guard
|
|
|
|
// Start retransmission guard
|
|
|
|
// or reset timer
|
|
|
|
// or reset timer
|
|
|
|
setRetransmissionGuardEnabled(true); //TODO
|
|
|
|
setRetransmissionGuardEnabled(true); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Mark this parameter as received in read list
|
|
|
|
// Mark this parameter as received in read list
|
|
|
|
int index = transmissionMissingPackets.value(compId)->indexOf(paramId); |
|
|
|
int index = compXmitMissing->indexOf(paramId); |
|
|
|
// If the MAV sent the parameter without request, it wont be in missing list
|
|
|
|
// If the MAV sent the parameter without request, it wont be in missing list
|
|
|
|
if (index != -1) { |
|
|
|
if (index != -1) { |
|
|
|
transmissionMissingPackets.value(compId)->removeAt(index); |
|
|
|
compXmitMissing->removeAt(index); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool justWritten = false; |
|
|
|
bool justWritten = false; |
|
|
|
bool writeMismatch = false; |
|
|
|
bool writeMismatch = false; |
|
|
|
//bool lastWritten = false;
|
|
|
|
|
|
|
|
// Mark this parameter as received in write ACK list
|
|
|
|
// Mark this parameter as received in write ACK list
|
|
|
|
QMap<QString, QVariant>* map = transmissionMissingWriteAckPackets.value(compId); |
|
|
|
QMap<QString, QVariant>* map = transmissionMissingWriteAckPackets.value(compId); |
|
|
|
if (map && map->contains(paramName)) { |
|
|
|
if (map && map->contains(paramName)) { |
|
|
@ -496,10 +496,14 @@ void UASParameterCommsMgr::receivedParameterUpdate(int uas, int compId, int para |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
else { |
|
|
|
qDebug() << "missCount:" << missCount << "missWriteCount:" << missWriteCount; |
|
|
|
qDebug() << "missCount:" << missCount << "missWriteCount:" << missWriteCount; |
|
|
|
foreach (int key, transmissionMissingPackets.keys()) { |
|
|
|
|
|
|
|
QList<int>* list = transmissionMissingPackets.value(key); |
|
|
|
if (missCount < 4) { |
|
|
|
qDebug() << "Component" << key << "missing numParams:" << list->count() ; |
|
|
|
foreach (int key, transmissionMissingPackets.keys()) { |
|
|
|
|
|
|
|
QList<int>* list = transmissionMissingPackets.value(key); |
|
|
|
|
|
|
|
qDebug() << "Component" << key << "missing params:" << list ; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
setRetransmissionGuardEnabled(true); //reset the timeout timer since we received one
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|