Commit 88b9c9cd authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #3560 from DonLakeFlyer/ParamLoadRetry

Param load: Try initial request 5 times max
parents b4835b28 e59f0045
...@@ -47,6 +47,7 @@ ParameterLoader::ParameterLoader(Vehicle* vehicle) ...@@ -47,6 +47,7 @@ ParameterLoader::ParameterLoader(Vehicle* vehicle)
, _defaultComponentId(MAV_COMP_ID_ALL) , _defaultComponentId(MAV_COMP_ID_ALL)
, _parameterSetMajorVersion(-1) , _parameterSetMajorVersion(-1)
, _parameterMetaData(NULL) , _parameterMetaData(NULL)
, _initialRequestRetryCount(0)
, _totalParamCount(0) , _totalParamCount(0)
{ {
Q_ASSERT(_vehicle); Q_ASSERT(_vehicle);
...@@ -490,7 +491,7 @@ void ParameterLoader::_waitingParamTimeout(void) ...@@ -490,7 +491,7 @@ void ParameterLoader::_waitingParamTimeout(void)
foreach(int componentId, _waitingReadParamIndexMap.keys()) { foreach(int componentId, _waitingReadParamIndexMap.keys()) {
foreach(int paramIndex, _waitingReadParamIndexMap[componentId].keys()) { foreach(int paramIndex, _waitingReadParamIndexMap[componentId].keys()) {
_waitingReadParamIndexMap[componentId][paramIndex]++; // Bump retry count _waitingReadParamIndexMap[componentId][paramIndex]++; // Bump retry count
if (_waitingReadParamIndexMap[componentId][paramIndex] > _maxInitialLoadRetry) { if (_waitingReadParamIndexMap[componentId][paramIndex] > _maxInitialLoadRetrySingleParam) {
// Give up on this index // Give up on this index
_failedReadParamIndexMap[componentId] << paramIndex; _failedReadParamIndexMap[componentId] << paramIndex;
qCDebug(ParameterLoaderLog) << "Giving up on (componentId:" << componentId << "paramIndex:" << paramIndex << "retryCount:" << _waitingReadParamIndexMap[componentId][paramIndex] << ")"; qCDebug(ParameterLoaderLog) << "Giving up on (componentId:" << componentId << "paramIndex:" << paramIndex << "retryCount:" << _waitingReadParamIndexMap[componentId][paramIndex] << ")";
...@@ -978,9 +979,14 @@ void ParameterLoader::_checkInitialLoadComplete(bool failIfNoDefaultComponent) ...@@ -978,9 +979,14 @@ void ParameterLoader::_checkInitialLoadComplete(bool failIfNoDefaultComponent)
void ParameterLoader::_initialRequestTimeout(void) void ParameterLoader::_initialRequestTimeout(void)
{ {
qgcApp()->showMessage("Vehicle did not respond to request for parameters, retrying"); if (!_vehicle->genericFirmware()) {
refreshAllParameters(); // Generic vehicles (like BeBop) may not have any parameters, so don't annoy the user
_initialRequestTimeoutTimer.start(); 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) QString ParameterLoader::parameterMetaDataFile(MAV_AUTOPILOT firmwareType, int wantedMajorVersion, int& majorVersion, int& minorVersion)
......
...@@ -151,8 +151,10 @@ private: ...@@ -151,8 +151,10 @@ private:
int _parameterSetMajorVersion; ///< Version for parameter set, -1 if not known int _parameterSetMajorVersion; ///< Version for parameter set, -1 if not known
QObject* _parameterMetaData; ///< Opaque data from FirmwarePlugin::loadParameterMetaDataCall QObject* _parameterMetaData; ///< Opaque data from FirmwarePlugin::loadParameterMetaDataCall
static const int _maxInitialLoadRetry = 10; ///< Maximum retries for initial index based load static const int _maxInitialRequestListRetry = 5; ///< Maximum retries for request list
static const int _maxReadWriteRetry = 5; ///< Maximum retries read/write 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<int, int> _paramCountMap; ///< Key: Component id, Value: count of parameters in this component QMap<int, int> _paramCountMap; ///< Key: Component id, Value: count of parameters in this component
QMap<int, QMap<int, int> > _waitingReadParamIndexMap; ///< Key: Component id, Value: Map { Key: parameter index still waiting for, Value: retry count } QMap<int, QMap<int, int> > _waitingReadParamIndexMap; ///< Key: Component id, Value: Map { Key: parameter index still waiting for, Value: retry count }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment