QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
FirmwarePluginManager.cc
Go to the documentation of this file.
2#include "FirmwarePlugin.h"
5
6#include <QtCore/QGlobalStatic>
7
8QGC_LOGGING_CATEGORY(FirmwarePluginManagerLog, "FirmwarePlugin.FirmwarePluginManager");
9
10Q_GLOBAL_STATIC(FirmwarePluginManager, _firmwarePluginManagerInstance);
11
13 : QObject(parent)
14{
15 // qCDebug(FirmwarePluginManagerLog) << Q_FUNC_INFO << this;
16}
17
19{
20 // qCDebug(FirmwarePluginManagerLog) << Q_FUNC_INFO << this;
21}
22
24{
25 return _firmwarePluginManagerInstance();
26}
27
28QList<QGCMAVLink::FirmwareClass_t> FirmwarePluginManager::supportedFirmwareClasses()
29{
30 if (_supportedFirmwareClasses.isEmpty()) {
31 const QList<FirmwarePluginFactory*> factoryList = FirmwarePluginFactoryRegister::instance()->pluginFactories();
32 for (const FirmwarePluginFactory *factory: factoryList) {
33 _supportedFirmwareClasses.append(factory->supportedFirmwareClasses());
34 }
35 _supportedFirmwareClasses.append(QGCMAVLink::FirmwareClassGeneric);
36 }
37
38 return _supportedFirmwareClasses;
39}
40
42{
43 return supportedFirmwareClasses().contains(firmwareClass);
44}
45
47{
48 QList<QGCMAVLink::VehicleClass_t> vehicleClasses;
49 const FirmwarePluginFactory *const factory = _findPluginFactory(firmwareClass);
50
51 if (factory) {
52 vehicleClasses = factory->supportedVehicleClasses();
53 } else if (firmwareClass == QGCMAVLink::FirmwareClassGeneric) {
54 // Generic supports all specific vehicle class
55 vehicleClasses = QGCMAVLink::allVehicleClasses();
56 (void) vehicleClasses.removeOne(QGCMAVLink::VehicleClassGeneric);
57 } else {
58 qCWarning(FirmwarePluginManagerLog) << "Request for unknown firmware plugin factory" << firmwareClass;
59 }
60
61 return vehicleClasses;
62}
63
64FirmwarePlugin *FirmwarePluginManager::firmwarePluginForAutopilot(MAV_AUTOPILOT firmwareType, MAV_TYPE vehicleType)
65{
66 FirmwarePluginFactory *const factory = _findPluginFactory(firmwareType);
67 FirmwarePlugin *plugin = nullptr;
68
69 if (factory) {
70 plugin = factory->firmwarePluginForAutopilot(firmwareType, vehicleType);
71 }
72
73 if (!plugin) {
74 if (!_genericFirmwarePlugin) {
75 _genericFirmwarePlugin = new FirmwarePlugin(this);
76 }
77 plugin = _genericFirmwarePlugin;
78 }
79
80 return plugin;
81}
82
83FirmwarePluginFactory *FirmwarePluginManager::_findPluginFactory(QGCMAVLink::FirmwareClass_t firmwareClass)
84{
85 const QList<FirmwarePluginFactory*> factoryList = FirmwarePluginFactoryRegister::instance()->pluginFactories();
86
87 for (FirmwarePluginFactory *factory: factoryList) {
88 if (factory->supportedFirmwareClasses().contains(firmwareClass)) {
89 return factory;
90 }
91 }
92
93 return nullptr;
94}
Q_GLOBAL_STATIC(FirmwarePluginManager, _firmwarePluginManagerInstance)
#define QGC_LOGGING_CATEGORY(name, categoryStr)
static FirmwarePluginFactoryRegister * instance()
QList< FirmwarePluginFactory * > pluginFactories() const
virtual QList< QGCMAVLink::VehicleClass_t > supportedVehicleClasses() const
virtual FirmwarePlugin * firmwarePluginForAutopilot(MAV_AUTOPILOT autopilotType, MAV_TYPE vehicleType)=0
FirmwarePluginManager is a singleton which is used to return the correct FirmwarePlugin for a MAV_AUT...
bool firmwareClassSupported(QGCMAVLink::FirmwareClass_t firmwareClass)
Returns true if the specified firmware class is supported by the system.
~FirmwarePluginManager()
Destructor for the FirmwarePluginManager class.
FirmwarePlugin * firmwarePluginForAutopilot(MAV_AUTOPILOT firmwareType, MAV_TYPE vehicleType)
FirmwarePluginManager(QObject *parent=nullptr)
QList< QGCMAVLink::FirmwareClass_t > supportedFirmwareClasses()
Returns list of firmwares which are supported by the system.
QList< QGCMAVLink::VehicleClass_t > supportedVehicleClasses(QGCMAVLink::FirmwareClass_t firmwareClass)
Returns the list of supported vehicle types for the specified firmware.
static FirmwarePluginManager * instance()
The FirmwarePlugin class represents the methods and objects which are specific to a certain Firmware ...
static constexpr VehicleClass_t VehicleClassGeneric