Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
72cd5d1c
Commit
72cd5d1c
authored
Feb 21, 2017
by
Don Gagne
Browse files
Add support for FirmwarePluginFactory::supportedVehicleTypes
parent
12fdb097
Changes
10
Hide whitespace changes
Inline
Side-by-side
src/FirmwarePlugin/APM/APMFirmwarePluginFactory.cc
View file @
72cd5d1c
...
...
@@ -24,7 +24,7 @@ APMFirmwarePluginFactory::APMFirmwarePluginFactory(void)
}
QList
<
MAV_AUTOPILOT
>
APMFirmwarePluginFactory
::
known
FirmwareTypes
(
void
)
const
QList
<
MAV_AUTOPILOT
>
APMFirmwarePluginFactory
::
supported
FirmwareTypes
(
void
)
const
{
QList
<
MAV_AUTOPILOT
>
list
;
...
...
src/FirmwarePlugin/APM/APMFirmwarePluginFactory.h
View file @
72cd5d1c
...
...
@@ -24,7 +24,7 @@ class APMFirmwarePluginFactory : public FirmwarePluginFactory
public:
APMFirmwarePluginFactory
(
void
);
QList
<
MAV_AUTOPILOT
>
known
FirmwareTypes
(
void
)
const
final
;
QList
<
MAV_AUTOPILOT
>
supported
FirmwareTypes
(
void
)
const
final
;
FirmwarePlugin
*
firmwarePluginForAutopilot
(
MAV_AUTOPILOT
autopilotType
,
MAV_TYPE
vehicleType
)
final
;
private:
...
...
src/FirmwarePlugin/FirmwarePlugin.cc
View file @
72cd5d1c
...
...
@@ -24,6 +24,13 @@ FirmwarePluginFactory::FirmwarePluginFactory(void)
FirmwarePluginFactoryRegister
::
instance
()
->
registerPluginFactory
(
this
);
}
QList
<
MAV_TYPE
>
FirmwarePluginFactory
::
supportedVehicleTypes
(
void
)
const
{
QList
<
MAV_TYPE
>
vehicleTypes
;
vehicleTypes
<<
MAV_TYPE_FIXED_WING
<<
MAV_TYPE_QUADROTOR
<<
MAV_TYPE_VTOL_QUADROTOR
<<
MAV_TYPE_GROUND_ROVER
<<
MAV_TYPE_SUBMARINE
;
return
vehicleTypes
;
}
FirmwarePluginFactoryRegister
*
FirmwarePluginFactoryRegister
::
instance
(
void
)
{
if
(
!
_instance
)
{
...
...
src/FirmwarePlugin/FirmwarePlugin.h
View file @
72cd5d1c
...
...
@@ -265,8 +265,11 @@ public:
/// @return Singleton FirmwarePlugin instance for the specified MAV_AUTOPILOT.
virtual
FirmwarePlugin
*
firmwarePluginForAutopilot
(
MAV_AUTOPILOT
autopilotType
,
MAV_TYPE
vehicleType
)
=
0
;
/// @return List of autopilot types this plugin supports.
virtual
QList
<
MAV_AUTOPILOT
>
knownFirmwareTypes
(
void
)
const
=
0
;
/// @return List of firmware types this plugin supports.
virtual
QList
<
MAV_AUTOPILOT
>
supportedFirmwareTypes
(
void
)
const
=
0
;
/// @return List of vehicle types this plugin supports.
virtual
QList
<
MAV_TYPE
>
supportedVehicleTypes
(
void
)
const
;
};
class
FirmwarePluginFactoryRegister
:
public
QObject
...
...
src/FirmwarePlugin/FirmwarePluginManager.cc
View file @
72cd5d1c
...
...
@@ -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
;
}
src/FirmwarePlugin/FirmwarePluginManager.h
View file @
72cd5d1c
...
...
@@ -32,17 +32,23 @@ public:
FirmwarePluginManager
(
QGCApplication
*
app
);
~
FirmwarePluginManager
();
QList
<
MAV_AUTOPILOT
>
knownFirmwareTypes
(
void
);
/// Returns list of firmwares which are supported by the system
QList
<
MAV_AUTOPILOT
>
supportedFirmwareTypes
(
void
);
/// Returns the list of supported vehicle types for the specified firmware
QList
<
MAV_TYPE
>
supportedVehicleTypes
(
MAV_AUTOPILOT
firmwareType
);
/// Returns appropriate plugin for autopilot type.
/// @param
autopilot
Type Type of
autopilot
to return plugin for.
/// @param vehicleType Vehicle type
of autopilot
to return plugin for.
/// @param
firmware
Type Type of
firmwware
to return plugin for.
/// @param vehicleType Vehicle type to return plugin for.
/// @return Singleton FirmwarePlugin instance for the specified MAV_AUTOPILOT.
FirmwarePlugin
*
firmwarePluginForAutopilot
(
MAV_AUTOPILOT
autopilot
Type
,
MAV_TYPE
vehicleType
);
FirmwarePlugin
*
firmwarePluginForAutopilot
(
MAV_AUTOPILOT
firmware
Type
,
MAV_TYPE
vehicleType
);
private:
FirmwarePluginFactory
*
_findPluginFactory
(
MAV_AUTOPILOT
firmwareType
);
FirmwarePlugin
*
_genericFirmwarePlugin
;
QList
<
MAV_AUTOPILOT
>
_
known
FirmwareTypes
;
QList
<
MAV_AUTOPILOT
>
_
supported
FirmwareTypes
;
};
#endif
src/FirmwarePlugin/PX4/PX4FirmwarePluginFactory.cc
View file @
72cd5d1c
...
...
@@ -21,7 +21,7 @@ PX4FirmwarePluginFactory::PX4FirmwarePluginFactory(void)
}
QList
<
MAV_AUTOPILOT
>
PX4FirmwarePluginFactory
::
known
FirmwareTypes
(
void
)
const
QList
<
MAV_AUTOPILOT
>
PX4FirmwarePluginFactory
::
supported
FirmwareTypes
(
void
)
const
{
QList
<
MAV_AUTOPILOT
>
list
;
...
...
src/FirmwarePlugin/PX4/PX4FirmwarePluginFactory.h
View file @
72cd5d1c
...
...
@@ -21,7 +21,7 @@ class PX4FirmwarePluginFactory : public FirmwarePluginFactory
public:
PX4FirmwarePluginFactory
(
void
);
QList
<
MAV_AUTOPILOT
>
known
FirmwareTypes
(
void
)
const
final
;
QList
<
MAV_AUTOPILOT
>
supported
FirmwareTypes
(
void
)
const
final
;
FirmwarePlugin
*
firmwarePluginForAutopilot
(
MAV_AUTOPILOT
autopilotType
,
MAV_TYPE
vehicleType
)
final
;
private:
...
...
src/MissionManager/MissionCommandTree.cc
View file @
72cd5d1c
...
...
@@ -46,7 +46,7 @@ void MissionCommandTree::setToolbox(QGCToolbox* toolbox)
}
else
{
#endif
// Load all levels of hierarchy
foreach
(
MAV_AUTOPILOT
firmwareType
,
_toolbox
->
firmwarePluginManager
()
->
known
FirmwareTypes
())
{
foreach
(
MAV_AUTOPILOT
firmwareType
,
_toolbox
->
firmwarePluginManager
()
->
supported
FirmwareTypes
())
{
FirmwarePlugin
*
plugin
=
_toolbox
->
firmwarePluginManager
()
->
firmwarePluginForAutopilot
(
firmwareType
,
MAV_TYPE_QUADROTOR
);
QList
<
MAV_TYPE
>
vehicleTypes
;
...
...
@@ -66,7 +66,7 @@ void MissionCommandTree::setToolbox(QGCToolbox* toolbox)
MAV_AUTOPILOT
MissionCommandTree
::
_baseFirmwareType
(
MAV_AUTOPILOT
firmwareType
)
const
{
if
(
qgcApp
()
->
toolbox
()
->
firmwarePluginManager
()
->
known
FirmwareTypes
().
contains
(
firmwareType
))
{
if
(
qgcApp
()
->
toolbox
()
->
firmwarePluginManager
()
->
supported
FirmwareTypes
().
contains
(
firmwareType
))
{
return
firmwareType
;
}
else
{
return
MAV_AUTOPILOT_GENERIC
;
...
...
src/QmlControls/QGroundControlQmlGlobal.cc
View file @
72cd5d1c
...
...
@@ -197,7 +197,7 @@ void QGroundControlQmlGlobal::setBaseFontPointSize(qreal size)
int
QGroundControlQmlGlobal
::
supportedFirmwareCount
()
{
return
_firmwarePluginManager
->
known
FirmwareTypes
().
count
();
return
_firmwarePluginManager
->
supported
FirmwareTypes
().
count
();
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment