diff --git a/src/FactSystem/ParameterManager.cc b/src/FactSystem/ParameterManager.cc index 9d66ef7ee31c7b4c8e5e8ac45c3c873a4c3688c0..b71dfedbf21b812103666de01aaf927784b85ac9 100644 --- a/src/FactSystem/ParameterManager.cc +++ b/src/FactSystem/ParameterManager.cc @@ -1177,7 +1177,7 @@ void ParameterManager::_initialRequestTimeout(void) QString ParameterManager::parameterMetaDataFile(Vehicle* vehicle, MAV_AUTOPILOT firmwareType, int wantedMajorVersion, int& majorVersion, int& minorVersion) { bool cacheHit = false; - FirmwarePlugin* plugin = vehicle->firmwarePlugin(); + FirmwarePlugin* plugin = _anyVehicleTypeFirmwarePlugin(firmwareType); // Cached files are stored in settings location QSettings settings; @@ -1270,14 +1270,17 @@ QString ParameterManager::parameterMetaDataFile(Vehicle* vehicle, MAV_AUTOPILOT return metaDataFile; } -void ParameterManager::cacheMetaDataFile(const QString& metaDataFile, MAV_AUTOPILOT firmwareType) +FirmwarePlugin* ParameterManager::_anyVehicleTypeFirmwarePlugin(MAV_AUTOPILOT firmwareType) { - // In order to call FirmwarePlugin::getParameterMetaDataVersionInfo we need the firmware plugin. But at this point we do not have a vehicle associated - // with the call. Since the call to FirmwarePlugin::getParameterMetaDataVersionInfo is invariant to vehicle type we just need to use any one of the - // supported vehicle types to get the correct FirmwarePlugin. + // There are cases where we need a FirmwarePlugin but we don't have a vehicle. In those specified case the plugin for any of the supported vehicle types will do. MAV_TYPE anySupportedVehicleType = qgcApp()->toolbox()->firmwarePluginManager()->supportedVehicleTypes(firmwareType)[0]; - FirmwarePlugin* plugin = qgcApp()->toolbox()->firmwarePluginManager()->firmwarePluginForAutopilot(firmwareType, anySupportedVehicleType); + return qgcApp()->toolbox()->firmwarePluginManager()->firmwarePluginForAutopilot(firmwareType, anySupportedVehicleType); +} + +void ParameterManager::cacheMetaDataFile(const QString& metaDataFile, MAV_AUTOPILOT firmwareType) +{ + FirmwarePlugin* plugin = _anyVehicleTypeFirmwarePlugin(firmwareType); int newMajorVersion, newMinorVersion; plugin->getParameterMetaDataVersionInfo(metaDataFile, newMajorVersion, newMinorVersion); diff --git a/src/FactSystem/ParameterManager.h b/src/FactSystem/ParameterManager.h index 0c025ed39f38bce06f41d1221b664c78441c90ec..9527b9612fbe18fc1312bc4718e92c69b9de69bc 100644 --- a/src/FactSystem/ParameterManager.h +++ b/src/FactSystem/ParameterManager.h @@ -129,21 +129,23 @@ protected: void _initialRequestTimeout(void); private: - static QVariant _stringToTypedVariant(const QString& string, FactMetaData::ValueType_t type, bool failOk = false); - int _actualComponentId(int componentId); - void _setupDefaultComponentCategoryMap(void); - void _readParameterRaw(int componentId, const QString& paramName, int paramIndex); - void _writeParameterRaw(int componentId, const QString& paramName, const QVariant& value); - void _writeLocalParamCache(int vehicleId, int componentId); - void _tryCacheHashLoad(int vehicleId, int componentId, QVariant hash_value); - void _loadMetaData(void); - void _clearMetaData(void); - void _addMetaDataToDefaultComponent(void); + static QVariant _stringToTypedVariant(const QString& string, FactMetaData::ValueType_t type, bool failOk = false); + static FirmwarePlugin* _anyVehicleTypeFirmwarePlugin(MAV_AUTOPILOT firmwareType); + + int _actualComponentId(int componentId); + void _setupDefaultComponentCategoryMap(void); + void _readParameterRaw(int componentId, const QString& paramName, int paramIndex); + void _writeParameterRaw(int componentId, const QString& paramName, const QVariant& value); + void _writeLocalParamCache(int vehicleId, int componentId); + void _tryCacheHashLoad(int vehicleId, int componentId, QVariant hash_value); + void _loadMetaData(void); + void _clearMetaData(void); + void _addMetaDataToDefaultComponent(void); QString _remapParamNameToVersion(const QString& paramName); - void _loadOfflineEditingParams(void); + void _loadOfflineEditingParams(void); QString _logVehiclePrefix(int componentId); - void _setLoadProgress(double loadProgress); - bool _fillIndexBatchQueue(bool waitingParamTimeout); + void _setLoadProgress(double loadProgress); + bool _fillIndexBatchQueue(bool waitingParamTimeout); MAV_PARAM_TYPE _factTypeToMavType(FactMetaData::ValueType_t factType); FactMetaData::ValueType_t _mavTypeToFactType(MAV_PARAM_TYPE mavType);