Commit b2ced878 authored by DonLakeFlyer's avatar DonLakeFlyer
Browse files

Move prerequisiteSetup method to AutopilotPlugin

This makes VehicleComponents reusable from core plugin without
requiring override of prerequisiteSetup
parent 5e9e8b81
......@@ -31,7 +31,6 @@ public:
bool setupComplete(void) const final;
QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
private:
const QString _name;
......
......@@ -77,15 +77,3 @@ QUrl APMTuningComponent::summaryQmlSource(void) const
{
return QUrl();
}
QString APMTuningComponent::prerequisiteSetup(void) const
{
APMAutoPilotPlugin* plugin = dynamic_cast<APMAutoPilotPlugin*>(_autopilot);
Q_ASSERT(plugin);
if (!plugin->airframeComponent()->setupComplete()) {
return plugin->airframeComponent()->name();
}
return QString();
}
......@@ -31,7 +31,6 @@ public:
bool setupComplete(void) const final;
QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
bool allowSetupWhileArmed(void) const final { return true; }
private:
......
......@@ -38,11 +38,8 @@ public:
AutoPilotPlugin(Vehicle* vehicle, QObject* parent);
~AutoPilotPlugin();
/// List of VehicleComponent objects
Q_PROPERTY(QVariantList vehicleComponents READ vehicleComponents CONSTANT)
/// false: One or more vehicle components require setup
Q_PROPERTY(bool setupComplete READ setupComplete NOTIFY setupCompleteChanged)
Q_PROPERTY(QVariantList vehicleComponents READ vehicleComponents CONSTANT) ///< List of VehicleComponent objects
Q_PROPERTY(bool setupComplete READ setupComplete NOTIFY setupCompleteChanged) ///< false: One or more vehicle components require setup
/// Called when parameters are ready for the first time. Note that parameters may still be missing.
/// Overrides must call base class.
......@@ -51,6 +48,9 @@ public:
// Must be implemented by derived class
virtual const QVariantList& vehicleComponents(void) = 0;
/// Returns the name of the vehicle component which must complete setup prior to this one. Empty string for none.
Q_INVOKABLE virtual QString prerequisiteSetup(VehicleComponent* component) const = 0;
// Property accessors
bool setupComplete(void);
......
......@@ -57,8 +57,3 @@ QUrl ESP8266Component::summaryQmlSource(void) const
{
return QUrl::fromUserInput("qrc:/qml/ESP8266ComponentSummary.qml");
}
QString ESP8266Component::prerequisiteSetup(void) const
{
return QString();
}
......@@ -30,7 +30,6 @@ public:
bool setupComplete () const;
QUrl setupSource () const;
QUrl summaryQmlSource () const;
QString prerequisiteSetup () const;
private:
const QString _name;
......
......@@ -55,8 +55,3 @@ QUrl MixersComponent::summaryQmlSource(void) const
{
return QUrl();
}
QString MixersComponent::prerequisiteSetup(void) const
{
return QString();
}
......@@ -31,7 +31,6 @@ public:
bool setupComplete(void) const final;
QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
bool allowSetupWhileArmed(void) const final { return true; }
private:
......
......@@ -55,8 +55,3 @@ QUrl MotorComponent::summaryQmlSource(void) const
{
return QUrl();
}
QString MotorComponent::prerequisiteSetup(void) const
{
return QString();
}
......@@ -32,7 +32,6 @@ public:
bool setupComplete(void) const final;
QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
private:
const QString _name;
......
......@@ -25,3 +25,9 @@ const QVariantList& GenericAutoPilotPlugin::vehicleComponents(void)
return emptyList;
}
QString GenericAutoPilotPlugin:: prerequisiteSetup(VehicleComponent* component) const
{
Q_UNUSED(component);
return QString();
}
......@@ -26,7 +26,8 @@ public:
GenericAutoPilotPlugin(Vehicle* vehicle, QObject* parent = NULL);
// Overrides from AutoPilotPlugin
virtual const QVariantList& vehicleComponents(void);
const QVariantList& vehicleComponents(void) final;
QString prerequisiteSetup(VehicleComponent* component) const final;
};
#endif
......@@ -147,8 +147,3 @@ QUrl AirframeComponent::summaryQmlSource(void) const
{
return QUrl::fromUserInput("qrc:/qml/AirframeComponentSummary.qml");
}
QString AirframeComponent::prerequisiteSetup(void) const
{
return QString();
}
......@@ -35,7 +35,6 @@ public:
virtual bool setupComplete(void) const;
virtual QUrl setupSource(void) const;
virtual QUrl summaryQmlSource(void) const;
virtual QString prerequisiteSetup(void) const;
private:
const QString _name;
......
......@@ -61,8 +61,3 @@ QUrl CameraComponent::summaryQmlSource(void) const
{
return QUrl::fromUserInput("qrc:/qml/CameraComponentSummary.qml");
}
QString CameraComponent::prerequisiteSetup(void) const
{
return QString();
}
......@@ -36,7 +36,6 @@ public:
bool setupComplete (void) const final;
QUrl setupSource (void) const final;
QUrl summaryQmlSource (void) const final;
QString prerequisiteSetup (void) const final;
bool allowSetupWhileArmed (void) const final { return false; }
private:
......
......@@ -78,24 +78,3 @@ QUrl FlightModesComponent::summaryQmlSource(void) const
{
return QUrl::fromUserInput("qrc:/qml/FlightModesComponentSummary.qml");
}
QString FlightModesComponent::prerequisiteSetup(void) const
{
if (_vehicle->parameterManager()->getParameter(-1, "COM_RC_IN_MODE")->rawValue().toInt() == 1) {
// No RC input
return QString();
} else {
PX4AutoPilotPlugin* plugin = dynamic_cast<PX4AutoPilotPlugin*>(_autopilot);
Q_ASSERT(plugin);
if (!plugin->airframeComponent()->setupComplete()) {
return plugin->airframeComponent()->name();
} else if (!plugin->radioComponent()->setupComplete()) {
return plugin->radioComponent()->name();
} else if (!_vehicle->hilMode() && !plugin->sensorsComponent()->setupComplete()) {
return plugin->sensorsComponent()->name();
}
}
return QString();
}
......@@ -35,7 +35,6 @@ public:
virtual bool setupComplete(void) const;
virtual QUrl setupSource(void) const;
virtual QUrl summaryQmlSource(void) const;
virtual QString prerequisiteSetup(void) const;
private:
const QString _name;
......
......@@ -16,6 +16,12 @@
#include "FirmwarePlugin/PX4/PX4ParameterMetaData.h" // FIXME: Hack
#include "FirmwarePlugin/PX4/PX4FirmwarePlugin.h" // FIXME: Hack
#include "QGCApplication.h"
#include "FlightModesComponent.h"
#include "PX4RadioComponent.h"
#include "PX4TuningComponent.h"
#include "PowerComponent.h"
#include "SafetyComponent.h"
#include "SensorsComponent.h"
/// @file
/// @brief This is the AutoPilotPlugin implementatin for the MAV_AUTOPILOT_PX4 type.
......@@ -131,3 +137,43 @@ void PX4AutoPilotPlugin::parametersReadyPreChecks(void)
"Please perform a Firmware Upgrade if you wish to use Vehicle Setup.");
}
}
QString PX4AutoPilotPlugin::prerequisiteSetup(VehicleComponent* component) const
{
bool requiresAirframeCheck = false;
if (qobject_cast<const FlightModesComponent*>(component)) {
if (_vehicle->parameterManager()->getParameter(-1, "COM_RC_IN_MODE")->rawValue().toInt() == 1) {
// No RC input
return QString();
} else {
if (_airframeComponent && !_airframeComponent->setupComplete()) {
return _airframeComponent->name();
} else if (_radioComponent && !_radioComponent->setupComplete()) {
return _radioComponent->name();
} else if (_sensorsComponent && !_vehicle->hilMode() && !_sensorsComponent->setupComplete()) {
return _sensorsComponent->name();
}
}
} else if (qobject_cast<const PX4RadioComponent*>(component)) {
if (_vehicle->parameterManager()->getParameter(-1, "COM_RC_IN_MODE")->rawValue().toInt() != 1) {
requiresAirframeCheck = true;
}
} else if (qobject_cast<const PX4TuningComponent*>(component)) {
requiresAirframeCheck = true;
} else if (qobject_cast<const PowerComponent*>(component)) {
requiresAirframeCheck = true;
} else if (qobject_cast<const SafetyComponent*>(component)) {
requiresAirframeCheck = true;
} else if (qobject_cast<const SensorsComponent*>(component)) {
requiresAirframeCheck = true;
}
if (requiresAirframeCheck) {
if (_airframeComponent && !_airframeComponent->setupComplete()) {
return _airframeComponent->name();
}
}
return QString();
}
......@@ -43,26 +43,11 @@ public:
// Overrides from AutoPilotPlugin
const QVariantList& vehicleComponents(void) override;
void parametersReadyPreChecks(void) override;
// These methods should only be used by objects within the plugin
AirframeComponent* airframeComponent(void) { return _airframeComponent; }
PX4RadioComponent* radioComponent(void) { return _radioComponent; }
ESP8266Component* esp8266Component(void) { return _esp8266Component; }
FlightModesComponent* flightModesComponent(void) { return _flightModesComponent; }
SensorsComponent* sensorsComponent(void) { return _sensorsComponent; }
SafetyComponent* safetyComponent(void) { return _safetyComponent; }
CameraComponent* cameraComponent(void) { return _cameraComponent; }
PowerComponent* powerComponent(void) { return _powerComponent; }
MotorComponent* motorComponent(void) { return _motorComponent; }
PX4TuningComponent* tuningComponent(void) { return _tuningComponent; }
MixersComponent* mixersComponent(void) { return _mixersComponent; }
QString prerequisiteSetup(VehicleComponent* component) const override;
protected:
bool _incorrectParameterVersion; ///< true: parameter version incorrect, setup not allowed
private:
PX4AirframeLoader* _airframeFacts;
QVariantList _components;
AirframeComponent* _airframeComponent;
PX4RadioComponent* _radioComponent;
ESP8266Component* _esp8266Component;
......@@ -74,6 +59,9 @@ private:
MotorComponent* _motorComponent;
PX4TuningComponent* _tuningComponent;
MixersComponent* _mixersComponent;
private:
QVariantList _components;
};
#endif
Supports Markdown
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