Unverified Commit d2ab2510 authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #7520 from DonLakeFlyer/NullVehicleCrash

Firmware Flash: Fix crash caused by NULL vehicle
parents a2fca7b2 19e2c074
...@@ -1177,7 +1177,7 @@ void ParameterManager::_initialRequestTimeout(void) ...@@ -1177,7 +1177,7 @@ void ParameterManager::_initialRequestTimeout(void)
QString ParameterManager::parameterMetaDataFile(Vehicle* vehicle, MAV_AUTOPILOT firmwareType, int wantedMajorVersion, int& majorVersion, int& minorVersion) QString ParameterManager::parameterMetaDataFile(Vehicle* vehicle, MAV_AUTOPILOT firmwareType, int wantedMajorVersion, int& majorVersion, int& minorVersion)
{ {
bool cacheHit = false; bool cacheHit = false;
FirmwarePlugin* plugin = vehicle->firmwarePlugin(); FirmwarePlugin* plugin = _anyVehicleTypeFirmwarePlugin(firmwareType);
// Cached files are stored in settings location // Cached files are stored in settings location
QSettings settings; QSettings settings;
...@@ -1270,14 +1270,17 @@ QString ParameterManager::parameterMetaDataFile(Vehicle* vehicle, MAV_AUTOPILOT ...@@ -1270,14 +1270,17 @@ QString ParameterManager::parameterMetaDataFile(Vehicle* vehicle, MAV_AUTOPILOT
return metaDataFile; 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 // 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.
// 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.
MAV_TYPE anySupportedVehicleType = qgcApp()->toolbox()->firmwarePluginManager()->supportedVehicleTypes(firmwareType)[0]; 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; int newMajorVersion, newMinorVersion;
plugin->getParameterMetaDataVersionInfo(metaDataFile, newMajorVersion, newMinorVersion); plugin->getParameterMetaDataVersionInfo(metaDataFile, newMajorVersion, newMinorVersion);
......
...@@ -129,21 +129,23 @@ protected: ...@@ -129,21 +129,23 @@ protected:
void _initialRequestTimeout(void); void _initialRequestTimeout(void);
private: private:
static QVariant _stringToTypedVariant(const QString& string, FactMetaData::ValueType_t type, bool failOk = false); static QVariant _stringToTypedVariant(const QString& string, FactMetaData::ValueType_t type, bool failOk = false);
int _actualComponentId(int componentId); static FirmwarePlugin* _anyVehicleTypeFirmwarePlugin(MAV_AUTOPILOT firmwareType);
void _setupDefaultComponentCategoryMap(void);
void _readParameterRaw(int componentId, const QString& paramName, int paramIndex); int _actualComponentId(int componentId);
void _writeParameterRaw(int componentId, const QString& paramName, const QVariant& value); void _setupDefaultComponentCategoryMap(void);
void _writeLocalParamCache(int vehicleId, int componentId); void _readParameterRaw(int componentId, const QString& paramName, int paramIndex);
void _tryCacheHashLoad(int vehicleId, int componentId, QVariant hash_value); void _writeParameterRaw(int componentId, const QString& paramName, const QVariant& value);
void _loadMetaData(void); void _writeLocalParamCache(int vehicleId, int componentId);
void _clearMetaData(void); void _tryCacheHashLoad(int vehicleId, int componentId, QVariant hash_value);
void _addMetaDataToDefaultComponent(void); void _loadMetaData(void);
void _clearMetaData(void);
void _addMetaDataToDefaultComponent(void);
QString _remapParamNameToVersion(const QString& paramName); QString _remapParamNameToVersion(const QString& paramName);
void _loadOfflineEditingParams(void); void _loadOfflineEditingParams(void);
QString _logVehiclePrefix(int componentId); QString _logVehiclePrefix(int componentId);
void _setLoadProgress(double loadProgress); void _setLoadProgress(double loadProgress);
bool _fillIndexBatchQueue(bool waitingParamTimeout); bool _fillIndexBatchQueue(bool waitingParamTimeout);
MAV_PARAM_TYPE _factTypeToMavType(FactMetaData::ValueType_t factType); MAV_PARAM_TYPE _factTypeToMavType(FactMetaData::ValueType_t factType);
FactMetaData::ValueType_t _mavTypeToFactType(MAV_PARAM_TYPE mavType); FactMetaData::ValueType_t _mavTypeToFactType(MAV_PARAM_TYPE mavType);
......
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