|
|
@ -26,33 +26,68 @@ FirmwarePluginManager::~FirmwarePluginManager() |
|
|
|
delete _genericFirmwarePlugin; |
|
|
|
delete _genericFirmwarePlugin; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
QList<MAV_AUTOPILOT> FirmwarePluginManager::knownFirmwareTypes(void) |
|
|
|
QList<MAV_AUTOPILOT> FirmwarePluginManager::supportedFirmwareTypes(void) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (_knownFirmwareTypes.isEmpty()) { |
|
|
|
if (_supportedFirmwareTypes.isEmpty()) { |
|
|
|
QList<FirmwarePluginFactory*> factoryList = FirmwarePluginFactoryRegister::instance()->pluginFactories(); |
|
|
|
QList<FirmwarePluginFactory*> factoryList = FirmwarePluginFactoryRegister::instance()->pluginFactories(); |
|
|
|
for (int i = 0; i < factoryList.count(); i++) { |
|
|
|
for (int i = 0; i < factoryList.count(); i++) { |
|
|
|
_knownFirmwareTypes.append(factoryList[i]->knownFirmwareTypes()); |
|
|
|
_supportedFirmwareTypes.append(factoryList[i]->supportedFirmwareTypes()); |
|
|
|
} |
|
|
|
} |
|
|
|
_knownFirmwareTypes.append(MAV_AUTOPILOT_GENERIC); |
|
|
|
_supportedFirmwareTypes.append(MAV_AUTOPILOT_GENERIC); |
|
|
|
} |
|
|
|
} |
|
|
|
return _knownFirmwareTypes; |
|
|
|
return _supportedFirmwareTypes; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
FirmwarePlugin* FirmwarePluginManager::firmwarePluginForAutopilot(MAV_AUTOPILOT autopilotType, MAV_TYPE vehicleType) |
|
|
|
QList<MAV_TYPE> FirmwarePluginManager::supportedVehicleTypes(MAV_AUTOPILOT firmwareType) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QList<MAV_TYPE> vehicleTypes; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FirmwarePluginFactory* factory = _findPluginFactory(firmwareType); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (factory) { |
|
|
|
|
|
|
|
vehicleTypes = factory->supportedVehicleTypes(); |
|
|
|
|
|
|
|
} else if (firmwareType == MAV_AUTOPILOT_GENERIC) { |
|
|
|
|
|
|
|
vehicleTypes << MAV_TYPE_FIXED_WING << MAV_TYPE_QUADROTOR << MAV_TYPE_VTOL_QUADROTOR << MAV_TYPE_GROUND_ROVER << MAV_TYPE_SUBMARINE; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
qWarning() << "Request for unknown firmware plugin factory" << firmwareType; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return vehicleTypes; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FirmwarePlugin* FirmwarePluginManager::firmwarePluginForAutopilot(MAV_AUTOPILOT firmwareType, MAV_TYPE vehicleType) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
FirmwarePluginFactory* factory = _findPluginFactory(firmwareType); |
|
|
|
|
|
|
|
FirmwarePlugin* plugin = NULL; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (factory) { |
|
|
|
|
|
|
|
plugin = factory->firmwarePluginForAutopilot(firmwareType, vehicleType); |
|
|
|
|
|
|
|
} else if (firmwareType != MAV_AUTOPILOT_GENERIC) { |
|
|
|
|
|
|
|
qWarning() << "Request for unknown firmware plugin factory" << firmwareType; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!plugin) { |
|
|
|
|
|
|
|
// Default plugin fallback
|
|
|
|
|
|
|
|
if (!_genericFirmwarePlugin) { |
|
|
|
|
|
|
|
_genericFirmwarePlugin = new FirmwarePlugin; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
plugin = _genericFirmwarePlugin; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return plugin; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FirmwarePluginFactory* FirmwarePluginManager::_findPluginFactory(MAV_AUTOPILOT firmwareType) |
|
|
|
{ |
|
|
|
{ |
|
|
|
FirmwarePlugin* _plugin = NULL; |
|
|
|
|
|
|
|
QList<FirmwarePluginFactory*> factoryList = FirmwarePluginFactoryRegister::instance()->pluginFactories(); |
|
|
|
QList<FirmwarePluginFactory*> factoryList = FirmwarePluginFactoryRegister::instance()->pluginFactories(); |
|
|
|
|
|
|
|
|
|
|
|
// Find the plugin which supports this vehicle
|
|
|
|
// Find the plugin which supports this vehicle
|
|
|
|
for (int i=0; i<factoryList.count(); i++) { |
|
|
|
for (int i=0; i<factoryList.count(); i++) { |
|
|
|
if ((_plugin = factoryList[i]->firmwarePluginForAutopilot(autopilotType, vehicleType))) { |
|
|
|
FirmwarePluginFactory* factory = factoryList[i]; |
|
|
|
return _plugin; |
|
|
|
if (factory->supportedFirmwareTypes().contains(firmwareType)) { |
|
|
|
|
|
|
|
return factory; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Default plugin fallback
|
|
|
|
return NULL; |
|
|
|
if (!_genericFirmwarePlugin) { |
|
|
|
|
|
|
|
_genericFirmwarePlugin = new FirmwarePlugin; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return _genericFirmwarePlugin; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|