@ -26,33 +26,68 @@ FirmwarePluginManager::~FirmwarePluginManager()
@@ -26,33 +26,68 @@ FirmwarePluginManager::~FirmwarePluginManager()
delete _genericFirmwarePlugin ;
}
QList < MAV_AUTOPILOT > FirmwarePluginManager : : known FirmwareTypes( void )
QList < MAV_AUTOPILOT > FirmwarePluginManager : : supported FirmwareTypes( void )
{
if ( _known FirmwareTypes . isEmpty ( ) ) {
if ( _supported FirmwareTypes . isEmpty ( ) ) {
QList < FirmwarePluginFactory * > factoryList = FirmwarePluginFactoryRegister : : instance ( ) - > pluginFactories ( ) ;
for ( int i = 0 ; i < factoryList . count ( ) ; i + + ) {
_known FirmwareTypes . append ( factoryList [ i ] - > known FirmwareTypes( ) ) ;
_supported FirmwareTypes . append ( factoryList [ i ] - > supported FirmwareTypes( ) ) ;
}
_known FirmwareTypes . append ( MAV_AUTOPILOT_GENERIC ) ;
_supported FirmwareTypes . append ( MAV_AUTOPILOT_GENERIC ) ;
}
return _known FirmwareTypes ;
return _supported FirmwareTypes ;
}
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 ( ) ;
// Find the plugin which supports this vehicle
for ( int i = 0 ; i < factoryList . count ( ) ; i + + ) {
if ( ( _plugin = factoryList [ i ] - > firmwarePluginForAutopilot ( autopilotType , vehicleType ) ) ) {
return _plugin ;
FirmwarePluginFactory * factory = factoryList [ i ] ;
if ( factory - > supportedFirmwareTypes ( ) . contains ( firmwareType ) ) {
return factory ;
}
}
// Default plugin fallback
if ( ! _genericFirmwarePlugin ) {
_genericFirmwarePlugin = new FirmwarePlugin ;
}
return _genericFirmwarePlugin ;
return NULL ;
}