diff --git a/src/FactSystem/ParameterLoader.cc b/src/FactSystem/ParameterLoader.cc index d92d9a1be13d57f1d6da8b53a569bb6c90081784..d6d0f29f0cfff5b5fe53671776c6b515aa941465 100644 --- a/src/FactSystem/ParameterLoader.cc +++ b/src/FactSystem/ParameterLoader.cc @@ -47,6 +47,7 @@ ParameterLoader::ParameterLoader(Vehicle* vehicle) , _defaultComponentId(MAV_COMP_ID_ALL) , _parameterSetMajorVersion(-1) , _parameterMetaData(NULL) + , _initialRequestRetryCount(0) , _totalParamCount(0) { Q_ASSERT(_vehicle); @@ -490,7 +491,7 @@ void ParameterLoader::_waitingParamTimeout(void) foreach(int componentId, _waitingReadParamIndexMap.keys()) { foreach(int paramIndex, _waitingReadParamIndexMap[componentId].keys()) { _waitingReadParamIndexMap[componentId][paramIndex]++; // Bump retry count - if (_waitingReadParamIndexMap[componentId][paramIndex] > _maxInitialLoadRetry) { + if (_waitingReadParamIndexMap[componentId][paramIndex] > _maxInitialLoadRetrySingleParam) { // Give up on this index _failedReadParamIndexMap[componentId] << paramIndex; qCDebug(ParameterLoaderLog) << "Giving up on (componentId:" << componentId << "paramIndex:" << paramIndex << "retryCount:" << _waitingReadParamIndexMap[componentId][paramIndex] << ")"; @@ -978,9 +979,14 @@ void ParameterLoader::_checkInitialLoadComplete(bool failIfNoDefaultComponent) void ParameterLoader::_initialRequestTimeout(void) { - qgcApp()->showMessage("Vehicle did not respond to request for parameters, retrying"); - refreshAllParameters(); - _initialRequestTimeoutTimer.start(); + if (!_vehicle->genericFirmware()) { + // Generic vehicles (like BeBop) may not have any parameters, so don't annoy the user + qgcApp()->showMessage("Vehicle did not respond to request for parameters, retrying"); + } + if (++_initialRequestRetryCount <= _maxInitialRequestListRetry) { + refreshAllParameters(); + _initialRequestTimeoutTimer.start(); + } } QString ParameterLoader::parameterMetaDataFile(MAV_AUTOPILOT firmwareType, int wantedMajorVersion, int& majorVersion, int& minorVersion) diff --git a/src/FactSystem/ParameterLoader.h b/src/FactSystem/ParameterLoader.h index c0765041720c79b14dc5aa1724528ab5b7cae577..b57dcb7ec013c20a6358552c5933dedf296c469c 100644 --- a/src/FactSystem/ParameterLoader.h +++ b/src/FactSystem/ParameterLoader.h @@ -151,8 +151,10 @@ private: int _parameterSetMajorVersion; ///< Version for parameter set, -1 if not known QObject* _parameterMetaData; ///< Opaque data from FirmwarePlugin::loadParameterMetaDataCall - static const int _maxInitialLoadRetry = 10; ///< Maximum retries for initial index based load - static const int _maxReadWriteRetry = 5; ///< Maximum retries read/write + static const int _maxInitialRequestListRetry = 5; ///< Maximum retries for request list + int _initialRequestRetryCount; ///< Current retry count for request list + static const int _maxInitialLoadRetrySingleParam = 10; ///< Maximum retries for initial index based load of a single param + static const int _maxReadWriteRetry = 5; ///< Maximum retries read/write QMap _paramCountMap; ///< Key: Component id, Value: count of parameters in this component QMap > _waitingReadParamIndexMap; ///< Key: Component id, Value: Map { Key: parameter index still waiting for, Value: retry count }