Commit 1d444d01 authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge pull request #4748 from DonLakeFlyer/ComponentPrereq

Move VehicleComponent::prerequisiteSetup method to AutopilotPlugin
parents 287b2be5 b2ced878
...@@ -98,8 +98,3 @@ QUrl APMAirframeComponent::summaryQmlSource(void) const ...@@ -98,8 +98,3 @@ QUrl APMAirframeComponent::summaryQmlSource(void) const
return QUrl(); return QUrl();
} }
} }
QString APMAirframeComponent::prerequisiteSetup(void) const
{
return QString();
}
...@@ -31,7 +31,6 @@ public: ...@@ -31,7 +31,6 @@ public:
bool setupComplete(void) const final; bool setupComplete(void) const final;
QUrl setupSource(void) const final; QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final; QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
private: private:
bool _requiresFrameSetup; ///< true: FRAME parameter must be set bool _requiresFrameSetup; ///< true: FRAME parameter must be set
......
...@@ -137,3 +137,38 @@ const QVariantList& APMAutoPilotPlugin::vehicleComponents(void) ...@@ -137,3 +137,38 @@ const QVariantList& APMAutoPilotPlugin::vehicleComponents(void)
return _components; return _components;
} }
QString APMAutoPilotPlugin::prerequisiteSetup(VehicleComponent* component) const
{
bool requiresAirframeCheck = false;
if (qobject_cast<const APMFlightModesComponent*>(component)) {
if (_airframeComponent && !_airframeComponent->setupComplete()) {
return _airframeComponent->name();
}
if (_radioComponent && !_radioComponent->setupComplete()) {
return _radioComponent->name();
}
requiresAirframeCheck = true;
} else if (qobject_cast<const APMRadioComponent*>(component)) {
requiresAirframeCheck = true;
} else if (qobject_cast<const APMCameraComponent*>(component)) {
requiresAirframeCheck = true;
} else if (qobject_cast<const APMPowerComponent*>(component)) {
requiresAirframeCheck = true;
} else if (qobject_cast<const APMSafetyComponent*>(component)) {
requiresAirframeCheck = true;
} else if (qobject_cast<const APMTuningComponent*>(component)) {
requiresAirframeCheck = true;
} else if (qobject_cast<const APMSensorsComponent*>(component)) {
requiresAirframeCheck = true;
}
if (requiresAirframeCheck) {
if (_airframeComponent && !_airframeComponent->setupComplete()) {
return _airframeComponent->name();
}
}
return QString();
}
...@@ -40,28 +40,10 @@ public: ...@@ -40,28 +40,10 @@ public:
// Overrides from AutoPilotPlugin // Overrides from AutoPilotPlugin
const QVariantList& vehicleComponents(void) final; const QVariantList& vehicleComponents(void) final;
QString prerequisiteSetup(VehicleComponent* component) const override;
APMAirframeComponent* airframeComponent (void) const { return _airframeComponent; } protected:
APMCameraComponent* cameraComponent (void) const { return _cameraComponent; } bool _incorrectParameterVersion; ///< true: parameter version incorrect, setup not allowed
APMLightsComponent* lightsComponent (void) const { return _lightsComponent; }
APMSubFrameComponent* subFrameComponent (void) const { return _subFrameComponent; }
APMFlightModesComponent* flightModesComponent(void) const { return _flightModesComponent; }
APMPowerComponent* powerComponent (void) const { return _powerComponent; }
#if 0
// Temporarily removed, waiting for new command implementation
MotorComponent* motorComponent (void) const { return _motorComponent; }
#endif
APMRadioComponent* radioComponent (void) const { return _radioComponent; }
APMSafetyComponent* safetyComponent (void) const { return _safetyComponent; }
APMSensorsComponent* sensorsComponent (void) const { return _sensorsComponent; }
APMTuningComponent* tuningComponent (void) const { return _tuningComponent; }
ESP8266Component* esp8266Component (void) const { return _esp8266Component; }
MixersComponent* mixersComponent (void) { return _mixersComponent; }
private:
bool _incorrectParameterVersion; ///< true: parameter version incorrect, setup not allowed
QVariantList _components;
APMAirframeComponent* _airframeComponent; APMAirframeComponent* _airframeComponent;
APMCameraComponent* _cameraComponent; APMCameraComponent* _cameraComponent;
APMLightsComponent* _lightsComponent; APMLightsComponent* _lightsComponent;
...@@ -79,6 +61,9 @@ private: ...@@ -79,6 +61,9 @@ private:
APMAirframeLoader* _airframeFacts; APMAirframeLoader* _airframeFacts;
ESP8266Component* _esp8266Component; ESP8266Component* _esp8266Component;
MixersComponent* _mixersComponent; MixersComponent* _mixersComponent;
private:
QVariantList _components;
}; };
#endif #endif
...@@ -61,15 +61,3 @@ QUrl APMCameraComponent::summaryQmlSource(void) const ...@@ -61,15 +61,3 @@ QUrl APMCameraComponent::summaryQmlSource(void) const
{ {
return QUrl::fromUserInput(QStringLiteral("qrc:/qml/APMCameraComponentSummary.qml")); return QUrl::fromUserInput(QStringLiteral("qrc:/qml/APMCameraComponentSummary.qml"));
} }
QString APMCameraComponent::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: ...@@ -31,7 +31,6 @@ public:
bool setupComplete(void) const final; bool setupComplete(void) const final;
QUrl setupSource(void) const final; QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final; QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
private: private:
const QString _name; const QString _name;
......
...@@ -58,19 +58,3 @@ QUrl APMFlightModesComponent::summaryQmlSource(void) const ...@@ -58,19 +58,3 @@ QUrl APMFlightModesComponent::summaryQmlSource(void) const
{ {
return QUrl::fromUserInput(QStringLiteral("qrc:/qml/APMFlightModesComponentSummary.qml")); return QUrl::fromUserInput(QStringLiteral("qrc:/qml/APMFlightModesComponentSummary.qml"));
} }
QString APMFlightModesComponent::prerequisiteSetup(void) const
{
APMAutoPilotPlugin* plugin = dynamic_cast<APMAutoPilotPlugin*>(_autopilot);
Q_ASSERT(plugin);
if (!plugin->airframeComponent()->setupComplete()) {
return plugin->airframeComponent()->name();
} else if (plugin->radioComponent() != NULL) {
if (!plugin->radioComponent()->setupComplete()) {
return plugin->radioComponent()->name();
}
}
return QString();
}
...@@ -31,7 +31,6 @@ public: ...@@ -31,7 +31,6 @@ public:
bool setupComplete(void) const final; bool setupComplete(void) const final;
QUrl setupSource(void) const final; QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final; QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
private: private:
const QString _name; const QString _name;
......
...@@ -62,8 +62,3 @@ QUrl APMLightsComponent::summaryQmlSource(void) const ...@@ -62,8 +62,3 @@ QUrl APMLightsComponent::summaryQmlSource(void) const
{ {
return QUrl::fromUserInput(QStringLiteral("qrc:/qml/APMLightsComponentSummary.qml")); return QUrl::fromUserInput(QStringLiteral("qrc:/qml/APMLightsComponentSummary.qml"));
} }
QString APMLightsComponent::prerequisiteSetup(void) const
{
return QString();
}
...@@ -31,7 +31,6 @@ public: ...@@ -31,7 +31,6 @@ public:
bool setupComplete(void) const final; bool setupComplete(void) const final;
QUrl setupSource(void) const final; QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final; QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
private: private:
const QString _name; const QString _name;
......
...@@ -62,13 +62,3 @@ QUrl APMPowerComponent::summaryQmlSource(void) const ...@@ -62,13 +62,3 @@ QUrl APMPowerComponent::summaryQmlSource(void) const
{ {
return QUrl::fromUserInput(QStringLiteral("qrc:/qml/APMPowerComponentSummary.qml")); return QUrl::fromUserInput(QStringLiteral("qrc:/qml/APMPowerComponentSummary.qml"));
} }
QString APMPowerComponent::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: ...@@ -31,7 +31,6 @@ public:
bool setupComplete (void) const final; bool setupComplete (void) const final;
QUrl setupSource (void) const final; QUrl setupSource (void) const final;
QUrl summaryQmlSource (void) const final; QUrl summaryQmlSource (void) const final;
QString prerequisiteSetup (void) const final;
private: private:
const QString _name; const QString _name;
......
...@@ -96,17 +96,6 @@ QUrl APMRadioComponent::summaryQmlSource(void) const ...@@ -96,17 +96,6 @@ QUrl APMRadioComponent::summaryQmlSource(void) const
return QUrl::fromUserInput(QStringLiteral("qrc:/qml/APMRadioComponentSummary.qml")); return QUrl::fromUserInput(QStringLiteral("qrc:/qml/APMRadioComponentSummary.qml"));
} }
QString APMRadioComponent::prerequisiteSetup(void) const
{
APMAutoPilotPlugin* plugin = dynamic_cast<APMAutoPilotPlugin*>(_autopilot);
if (!plugin->airframeComponent()->setupComplete()) {
return plugin->airframeComponent()->name();
}
return QString();
}
void APMRadioComponent::_connectSetupTriggers(void) void APMRadioComponent::_connectSetupTriggers(void)
{ {
// Disconnect previous triggers // Disconnect previous triggers
......
...@@ -32,7 +32,6 @@ public: ...@@ -32,7 +32,6 @@ public:
bool setupComplete(void) const final; bool setupComplete(void) const final;
QUrl setupSource(void) const final; QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final; QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
private slots: private slots:
void _triggerChanged(void); void _triggerChanged(void);
......
...@@ -127,15 +127,3 @@ QUrl APMSafetyComponent::summaryQmlSource(void) const ...@@ -127,15 +127,3 @@ QUrl APMSafetyComponent::summaryQmlSource(void) const
return QUrl::fromUserInput(qmlFile); return QUrl::fromUserInput(qmlFile);
} }
QString APMSafetyComponent::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: ...@@ -31,7 +31,6 @@ public:
bool setupComplete(void) const final; bool setupComplete(void) const final;
QUrl setupSource(void) const final; QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final; QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
bool allowSetupWhileArmed(void) const final { return true; } bool allowSetupWhileArmed(void) const final { return true; }
private: private:
......
...@@ -75,18 +75,6 @@ QUrl APMSensorsComponent::summaryQmlSource(void) const ...@@ -75,18 +75,6 @@ QUrl APMSensorsComponent::summaryQmlSource(void) const
return QUrl::fromUserInput("qrc:/qml/APMSensorsComponentSummary.qml"); return QUrl::fromUserInput("qrc:/qml/APMSensorsComponentSummary.qml");
} }
QString APMSensorsComponent::prerequisiteSetup(void) const
{
APMAutoPilotPlugin* plugin = dynamic_cast<APMAutoPilotPlugin*>(_autopilot);
Q_ASSERT(plugin);
if (!plugin->airframeComponent()->setupComplete()) {
return plugin->airframeComponent()->name();
}
return QString();
}
bool APMSensorsComponent::compassSetupNeeded(void) const bool APMSensorsComponent::compassSetupNeeded(void) const
{ {
const size_t cCompass = 3; const size_t cCompass = 3;
......
...@@ -34,7 +34,6 @@ public: ...@@ -34,7 +34,6 @@ public:
bool setupComplete(void) const final; bool setupComplete(void) const final;
QUrl setupSource(void) const final; QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final; QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
private: private:
const QString _name; const QString _name;
......
...@@ -24,7 +24,8 @@ QGC_LOGGING_CATEGORY(APMSensorsComponentControllerVerboseLog, "APMSensorsCompone ...@@ -24,7 +24,8 @@ QGC_LOGGING_CATEGORY(APMSensorsComponentControllerVerboseLog, "APMSensorsCompone
const char* APMSensorsComponentController::_compassCalFitnessParam = "COMPASS_CAL_FIT"; const char* APMSensorsComponentController::_compassCalFitnessParam = "COMPASS_CAL_FIT";
APMSensorsComponentController::APMSensorsComponentController(void) APMSensorsComponentController::APMSensorsComponentController(void)
: _statusLog(NULL) : _sensorsComponent(NULL)
, _statusLog(NULL)
, _progressBar(NULL) , _progressBar(NULL)
, _compassButton(NULL) , _compassButton(NULL)
, _accelButton(NULL) , _accelButton(NULL)
...@@ -68,8 +69,19 @@ APMSensorsComponentController::APMSensorsComponentController(void) ...@@ -68,8 +69,19 @@ APMSensorsComponentController::APMSensorsComponentController(void)
APMAutoPilotPlugin * apmPlugin = qobject_cast<APMAutoPilotPlugin*>(_vehicle->autopilotPlugin()); APMAutoPilotPlugin * apmPlugin = qobject_cast<APMAutoPilotPlugin*>(_vehicle->autopilotPlugin());
_sensorsComponent = apmPlugin->sensorsComponent(); // Find the sensors component
connect(_sensorsComponent, &VehicleComponent::setupCompleteChanged, this, &APMSensorsComponentController::setupNeededChanged); foreach (const QVariant& varVehicleComponent, apmPlugin->vehicleComponents()) {
_sensorsComponent = qobject_cast<APMSensorsComponent*>(varVehicleComponent.value<VehicleComponent*>());
if (_sensorsComponent) {
break;
}
}
if (_sensorsComponent) {
connect(_sensorsComponent, &VehicleComponent::setupCompleteChanged, this, &APMSensorsComponentController::setupNeededChanged);
} else {
qWarning() << "Sensors component is missing";
}
connect(qgcApp()->toolbox()->mavlinkProtocol(), &MAVLinkProtocol::messageReceived, this, &APMSensorsComponentController::_mavlinkMessageReceived); connect(qgcApp()->toolbox()->mavlinkProtocol(), &MAVLinkProtocol::messageReceived, this, &APMSensorsComponentController::_mavlinkMessageReceived);
} }
......
...@@ -64,8 +64,3 @@ QUrl APMSubFrameComponent::summaryQmlSource(void) const ...@@ -64,8 +64,3 @@ QUrl APMSubFrameComponent::summaryQmlSource(void) const
{ {
return QUrl::fromUserInput(QStringLiteral("qrc:/qml/APMSubFrameComponentSummary.qml")); return QUrl::fromUserInput(QStringLiteral("qrc:/qml/APMSubFrameComponentSummary.qml"));
} }
QString APMSubFrameComponent::prerequisiteSetup(void) const
{
return QString();
}
...@@ -31,7 +31,6 @@ public: ...@@ -31,7 +31,6 @@ public:
bool setupComplete(void) const final; bool setupComplete(void) const final;
QUrl setupSource(void) const final; QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final; QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
private: private:
const QString _name; const QString _name;
......
...@@ -77,15 +77,3 @@ QUrl APMTuningComponent::summaryQmlSource(void) const ...@@ -77,15 +77,3 @@ QUrl APMTuningComponent::summaryQmlSource(void) const
{ {
return QUrl(); 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: ...@@ -31,7 +31,6 @@ public:
bool setupComplete(void) const final; bool setupComplete(void) const final;
QUrl setupSource(void) const final; QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final; QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
bool allowSetupWhileArmed(void) const final { return true; } bool allowSetupWhileArmed(void) const final { return true; }
private: private:
......
...@@ -38,11 +38,8 @@ public: ...@@ -38,11 +38,8 @@ public:
AutoPilotPlugin(Vehicle* vehicle, QObject* parent); AutoPilotPlugin(Vehicle* vehicle, QObject* parent);
~AutoPilotPlugin(); ~AutoPilotPlugin();
/// List of VehicleComponent objects Q_PROPERTY(QVariantList vehicleComponents READ vehicleComponents CONSTANT) ///< List of VehicleComponent objects
Q_PROPERTY(QVariantList vehicleComponents READ vehicleComponents CONSTANT) Q_PROPERTY(bool setupComplete READ setupComplete NOTIFY setupCompleteChanged) ///< false: One or more vehicle components require setup
/// false: One or more vehicle components require setup
Q_PROPERTY(bool setupComplete READ setupComplete NOTIFY setupCompleteChanged)
/// Called when parameters are ready for the first time. Note that parameters may still be missing. /// Called when parameters are ready for the first time. Note that parameters may still be missing.
/// Overrides must call base class. /// Overrides must call base class.
...@@ -51,6 +48,9 @@ public: ...@@ -51,6 +48,9 @@ public:
// Must be implemented by derived class // Must be implemented by derived class
virtual const QVariantList& vehicleComponents(void) = 0; 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 // Property accessors
bool setupComplete(void); bool setupComplete(void);
......
...@@ -57,8 +57,3 @@ QUrl ESP8266Component::summaryQmlSource(void) const ...@@ -57,8 +57,3 @@ QUrl ESP8266Component::summaryQmlSource(void) const
{ {
return QUrl::fromUserInput("qrc:/qml/ESP8266ComponentSummary.qml"); return QUrl::fromUserInput("qrc:/qml/ESP8266ComponentSummary.qml");
} }
QString ESP8266Component::prerequisiteSetup(void) const
{
return QString();
}
...@@ -30,7 +30,6 @@ public: ...@@ -30,7 +30,6 @@ public:
bool setupComplete () const; bool setupComplete () const;
QUrl setupSource () const; QUrl setupSource () const;
QUrl summaryQmlSource () const; QUrl summaryQmlSource () const;
QString prerequisiteSetup () const;
private: private:
const QString _name; const QString _name;
......
...@@ -55,8 +55,3 @@ QUrl MixersComponent::summaryQmlSource(void) const ...@@ -55,8 +55,3 @@ QUrl MixersComponent::summaryQmlSource(void) const
{ {
return QUrl(); return QUrl();
} }
QString MixersComponent::prerequisiteSetup(void) const
{
return QString();
}
...@@ -31,7 +31,6 @@ public: ...@@ -31,7 +31,6 @@ public:
bool setupComplete(void) const final; bool setupComplete(void) const final;
QUrl setupSource(void) const final; QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final; QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
bool allowSetupWhileArmed(void) const final { return true; } bool allowSetupWhileArmed(void) const final { return true; }
private: private:
......
...@@ -55,8 +55,3 @@ QUrl MotorComponent::summaryQmlSource(void) const ...@@ -55,8 +55,3 @@ QUrl MotorComponent::summaryQmlSource(void) const
{ {
return QUrl(); return QUrl();
} }
QString MotorComponent::prerequisiteSetup(void) const
{
return QString();
}
...@@ -32,7 +32,6 @@ public: ...@@ -32,7 +32,6 @@ public:
bool setupComplete(void) const final; bool setupComplete(void) const final;
QUrl setupSource(void) const final; QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final; QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
private: private:
const QString _name; const QString _name;
......
...@@ -25,3 +25,9 @@ const QVariantList& GenericAutoPilotPlugin::vehicleComponents(void) ...@@ -25,3 +25,9 @@ const QVariantList& GenericAutoPilotPlugin::vehicleComponents(void)
return emptyList; return emptyList;
} }
QString GenericAutoPilotPlugin:: prerequisiteSetup(VehicleComponent* component) const
{
Q_UNUSED(component);
return QString();
}
...@@ -26,7 +26,8 @@ public: ...@@ -26,7 +26,8 @@ public:
GenericAutoPilotPlugin(Vehicle* vehicle, QObject* parent = NULL); GenericAutoPilotPlugin(Vehicle* vehicle, QObject* parent = NULL);
// Overrides from AutoPilotPlugin // Overrides from AutoPilotPlugin
virtual const QVariantList& vehicleComponents(void); const QVariantList& vehicleComponents(void) final;
QString prerequisiteSetup(VehicleComponent* component) const final;
}; };
#endif #endif
...@@ -147,8 +147,3 @@ QUrl AirframeComponent::summaryQmlSource(void) const ...@@ -147,8 +147,3 @@ QUrl AirframeComponent::summaryQmlSource(void) const
{ {
return QUrl::fromUserInput("qrc:/qml/AirframeComponentSummary.qml"); return QUrl::fromUserInput("qrc:/qml/AirframeComponentSummary.qml");
} }
QString AirframeComponent::prerequisiteSetup(void) const
{
return QString();
}
...@@ -35,7 +35,6 @@ public: ...@@ -35,7 +35,6 @@ public:
virtual bool setupComplete(void) const; virtual bool setupComplete(void) const;
virtual QUrl setupSource(void) const; virtual QUrl setupSource(void) const;
virtual QUrl summaryQmlSource(void) const; virtual QUrl summaryQmlSource(void) const;
virtual QString prerequisiteSetup(void) const;
private: private:
const QString _name; const QString _name;
......
...@@ -61,8 +61,3 @@ QUrl CameraComponent::summaryQmlSource(void) const ...@@ -61,8 +61,3 @@ QUrl CameraComponent::summaryQmlSource(void) const
{ {
return QUrl::fromUserInput("qrc:/qml/CameraComponentSummary.qml"); return QUrl::fromUserInput("qrc:/qml/CameraComponentSummary.qml");
} }
QString CameraComponent::prerequisiteSetup(void) const
{
return QString();
}
...@@ -36,7 +36,6 @@ public: ...@@ -36,7 +36,6 @@ public:
bool setupComplete (void) const final; bool setupComplete (void) const final;
QUrl setupSource (void) const final; QUrl setupSource (void) const final;
QUrl summaryQmlSource (void) const final; QUrl summaryQmlSource (void) const final;
QString prerequisiteSetup (void) const final;
bool allowSetupWhileArmed (void) const final { return false; } bool allowSetupWhileArmed (void) const final { return false; }
private: private:
......
...@@ -78,24 +78,3 @@ QUrl FlightModesComponent::summaryQmlSource(void) const ...@@ -78,24 +78,3 @@ QUrl FlightModesComponent::summaryQmlSource(void) const
{ {
return QUrl::fromUserInput("qrc:/qml/FlightModesComponentSummary.qml"); 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: ...@@ -35,7 +35,6 @@ public:
virtual bool setupComplete(void) const; virtual bool setupComplete(void) const;
virtual QUrl setupSource(void) const; virtual QUrl setupSource(void) const;
virtual QUrl summaryQmlSource(void) const; virtual QUrl summaryQmlSource(void) const;
virtual QString prerequisiteSetup(void) const;
private: private:
const QString _name; const QString _name;
......
...@@ -16,6 +16,12 @@ ...@@ -16,6 +16,12 @@
#include "FirmwarePlugin/PX4/PX4ParameterMetaData.h" // FIXME: Hack #include "FirmwarePlugin/PX4/PX4ParameterMetaData.h" // FIXME: Hack
#include "FirmwarePlugin/PX4/PX4FirmwarePlugin.h" // FIXME: Hack #include "FirmwarePlugin/PX4/PX4FirmwarePlugin.h" // FIXME: Hack
#include "QGCApplication.h" #include "QGCApplication.h"
#include "FlightModesComponent.h"
#include "PX4RadioComponent.h"
#include "PX4TuningComponent.h"
#include "PowerComponent.h"
#include "SafetyComponent.h"
#include "SensorsComponent.h"
/// @file /// @file
/// @brief This is the AutoPilotPlugin implementatin for the MAV_AUTOPILOT_PX4 type. /// @brief This is the AutoPilotPlugin implementatin for the MAV_AUTOPILOT_PX4 type.
...@@ -131,3 +137,43 @@ void PX4AutoPilotPlugin::parametersReadyPreChecks(void) ...@@ -131,3 +137,43 @@ void PX4AutoPilotPlugin::parametersReadyPreChecks(void)
"Please perform a Firmware Upgrade if you wish to use Vehicle Setup."); "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: ...@@ -43,26 +43,11 @@ public:
// Overrides from AutoPilotPlugin // Overrides from AutoPilotPlugin
const QVariantList& vehicleComponents(void) override; const QVariantList& vehicleComponents(void) override;
void parametersReadyPreChecks(void) override; void parametersReadyPreChecks(void) override;
QString prerequisiteSetup(VehicleComponent* component) const 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; }
protected: protected:
bool _incorrectParameterVersion; ///< true: parameter version incorrect, setup not allowed bool _incorrectParameterVersion; ///< true: parameter version incorrect, setup not allowed
private:
PX4AirframeLoader* _airframeFacts; PX4AirframeLoader* _airframeFacts;
QVariantList _components;
AirframeComponent* _airframeComponent; AirframeComponent* _airframeComponent;
PX4RadioComponent* _radioComponent; PX4RadioComponent* _radioComponent;
ESP8266Component* _esp8266Component; ESP8266Component* _esp8266Component;
...@@ -74,6 +59,9 @@ private: ...@@ -74,6 +59,9 @@ private:
MotorComponent* _motorComponent; MotorComponent* _motorComponent;
PX4TuningComponent* _tuningComponent; PX4TuningComponent* _tuningComponent;
MixersComponent* _mixersComponent; MixersComponent* _mixersComponent;
private:
QVariantList _components;
}; };
#endif #endif
...@@ -73,17 +73,3 @@ QUrl PX4RadioComponent::summaryQmlSource(void) const ...@@ -73,17 +73,3 @@ QUrl PX4RadioComponent::summaryQmlSource(void) const
{ {
return QUrl::fromUserInput("qrc:/qml/PX4RadioComponentSummary.qml"); return QUrl::fromUserInput("qrc:/qml/PX4RadioComponentSummary.qml");
} }
QString PX4RadioComponent::prerequisiteSetup(void) const
{
if (_vehicle->parameterManager()->getParameter(-1, "COM_RC_IN_MODE")->rawValue().toInt() != 1) {
PX4AutoPilotPlugin* plugin = dynamic_cast<PX4AutoPilotPlugin*>(_autopilot);
if (!plugin->airframeComponent()->setupComplete()) {
return plugin->airframeComponent()->name();
}
}
return QString();
}
...@@ -31,7 +31,6 @@ public: ...@@ -31,7 +31,6 @@ public:
virtual bool setupComplete(void) const; virtual bool setupComplete(void) const;
virtual QUrl setupSource(void) const; virtual QUrl setupSource(void) const;
virtual QUrl summaryQmlSource(void) const; virtual QUrl summaryQmlSource(void) const;
virtual QString prerequisiteSetup(void) const;
private: private:
const QString _name; const QString _name;
......
...@@ -84,17 +84,3 @@ QUrl PX4TuningComponent::summaryQmlSource(void) const ...@@ -84,17 +84,3 @@ QUrl PX4TuningComponent::summaryQmlSource(void) const
{ {
return QUrl(); return QUrl();
} }
QString PX4TuningComponent::prerequisiteSetup(void) const
{
PX4AutoPilotPlugin* plugin = dynamic_cast<PX4AutoPilotPlugin*>(_autopilot);
if (plugin) {
if (!plugin->airframeComponent()->setupComplete()) {
return plugin->airframeComponent()->name();
}
} else {
qWarning() << "Internal error: plugin cast failed";
}
return QString();
}
...@@ -31,7 +31,6 @@ public: ...@@ -31,7 +31,6 @@ public:
bool setupComplete(void) const final; bool setupComplete(void) const final;
QUrl setupSource(void) const final; QUrl setupSource(void) const final;
QUrl summaryQmlSource(void) const final; QUrl summaryQmlSource(void) const final;
QString prerequisiteSetup(void) const final;
bool allowSetupWhileArmed(void) const final { return true; } bool allowSetupWhileArmed(void) const final { return true; }
private: private:
......
...@@ -66,13 +66,3 @@ QUrl PowerComponent::summaryQmlSource(void) const ...@@ -66,13 +66,3 @@ QUrl PowerComponent::summaryQmlSource(void) const
{ {
return QUrl::fromUserInput("qrc:/qml/PowerComponentSummary.qml"); return QUrl::fromUserInput("qrc:/qml/PowerComponentSummary.qml");
} }
QString PowerComponent::prerequisiteSetup(void) const
{
PX4AutoPilotPlugin* plugin = dynamic_cast<PX4AutoPilotPlugin*>(_autopilot);
Q_ASSERT(plugin);
if (!plugin->airframeComponent()->setupComplete()) {
return plugin->airframeComponent()->name();
}
return QString();
}
...@@ -35,7 +35,6 @@ public: ...@@ -35,7 +35,6 @@ public:
virtual bool setupComplete (void) const; virtual bool setupComplete (void) const;
virtual QUrl setupSource (void) const; virtual QUrl setupSource (void) const;
virtual QUrl summaryQmlSource (void) const; virtual QUrl summaryQmlSource (void) const;
virtual QString prerequisiteSetup (void) const;
private: private:
const QString _name; const QString _name;
......
...@@ -60,15 +60,3 @@ QUrl SafetyComponent::summaryQmlSource(void) const ...@@ -60,15 +60,3 @@ QUrl SafetyComponent::summaryQmlSource(void) const
{ {
return QUrl::fromUserInput("qrc:/qml/SafetyComponentSummary.qml"); return QUrl::fromUserInput("qrc:/qml/SafetyComponentSummary.qml");
} }
QString SafetyComponent::prerequisiteSetup(void) const
{
PX4AutoPilotPlugin* plugin = dynamic_cast<PX4AutoPilotPlugin*>(_autopilot);
Q_ASSERT(plugin);
if (!plugin->airframeComponent()->setupComplete()) {
return plugin->airframeComponent()->name();
}
return QString();
}
...@@ -36,7 +36,6 @@ public: ...@@ -36,7 +36,6 @@ public:
bool setupComplete(void) const override; bool setupComplete(void) const override;
QUrl setupSource(void) const override; QUrl setupSource(void) const override;
QUrl summaryQmlSource(void) const override; QUrl summaryQmlSource(void) const override;
QString prerequisiteSetup(void) const override;
bool allowSetupWhileArmed(void) const override { return true; } bool allowSetupWhileArmed(void) const override { return true; }
private: private:
......
...@@ -94,15 +94,3 @@ QUrl SensorsComponent::summaryQmlSource(void) const ...@@ -94,15 +94,3 @@ QUrl SensorsComponent::summaryQmlSource(void) const
return QUrl::fromUserInput(summaryQml); return QUrl::fromUserInput(summaryQml);
} }
QString SensorsComponent::prerequisiteSetup(void) const
{
PX4AutoPilotPlugin* plugin = dynamic_cast<PX4AutoPilotPlugin*>(_autopilot);
Q_ASSERT(plugin);
if (!plugin->airframeComponent()->setupComplete()) {
return plugin->airframeComponent()->name();
}
return QString();
}
...@@ -35,7 +35,6 @@ public: ...@@ -35,7 +35,6 @@ public:
virtual bool setupComplete(void) const override; virtual bool setupComplete(void) const override;
virtual QUrl setupSource(void) const override; virtual QUrl setupSource(void) const override;
virtual QUrl summaryQmlSource(void) const override; virtual QUrl summaryQmlSource(void) const override;
virtual QString prerequisiteSetup(void) const override;
private: private:
const QString _name; const QString _name;
......
...@@ -95,7 +95,8 @@ SurveyMissionItem::SurveyMissionItem(Vehicle* vehicle, QObject* parent) ...@@ -95,7 +95,8 @@ SurveyMissionItem::SurveyMissionItem(Vehicle* vehicle, QObject* parent)
{ {
_editorQml = "qrc:/qml/SurveyItemEditor.qml"; _editorQml = "qrc:/qml/SurveyItemEditor.qml";
if (_vehicle->multiRotor()) { // NULL check since object creation during unit testing passes NULL for vehicle
if (_vehicle && _vehicle->multiRotor()) {
_turnaroundDistFact.setRawValue(0); _turnaroundDistFact.setRawValue(0);
} }
......
...@@ -90,8 +90,10 @@ Rectangle { ...@@ -90,8 +90,10 @@ Rectangle {
_messagePanelText = _armedVehicleText _messagePanelText = _armedVehicleText
panelLoader.setSourceComponent(messagePanelComponent) panelLoader.setSourceComponent(messagePanelComponent)
} else { } else {
if (vehicleComponent.prerequisiteSetup != "") { var autopilotPlugin = QGroundControl.multiVehicleManager.activeVehicle.autopilot
_messagePanelText = vehicleComponent.prerequisiteSetup + " setup must be completed prior to " + vehicleComponent.name + " setup." var prereq = autopilotPlugin.prerequisiteSetup(vehicleComponent)
if (prereq != "") {
_messagePanelText = prereq + " setup must be completed prior to " + vehicleComponent.name + " setup."
panelLoader.setSourceComponent(messagePanelComponent) panelLoader.setSourceComponent(messagePanelComponent)
} else { } else {
panelLoader.setSource(vehicleComponent.setupSource, vehicleComponent) panelLoader.setSource(vehicleComponent.setupSource, vehicleComponent)
......
...@@ -36,7 +36,6 @@ class VehicleComponent : public QObject ...@@ -36,7 +36,6 @@ class VehicleComponent : public QObject
Q_PROPERTY(QString iconResource READ iconResource CONSTANT) Q_PROPERTY(QString iconResource READ iconResource CONSTANT)
Q_PROPERTY(QUrl setupSource READ setupSource CONSTANT) Q_PROPERTY(QUrl setupSource READ setupSource CONSTANT)
Q_PROPERTY(QUrl summaryQmlSource READ summaryQmlSource CONSTANT) Q_PROPERTY(QUrl summaryQmlSource READ summaryQmlSource CONSTANT)
Q_PROPERTY(QString prerequisiteSetup READ prerequisiteSetup CONSTANT)
Q_PROPERTY(bool allowSetupWhileArmed READ allowSetupWhileArmed CONSTANT) Q_PROPERTY(bool allowSetupWhileArmed READ allowSetupWhileArmed CONSTANT)
public: public:
...@@ -50,7 +49,6 @@ public: ...@@ -50,7 +49,6 @@ public:
virtual bool setupComplete(void) const = 0; virtual bool setupComplete(void) const = 0;
virtual QUrl setupSource(void) const = 0; virtual QUrl setupSource(void) const = 0;
virtual QUrl summaryQmlSource(void) const = 0; virtual QUrl summaryQmlSource(void) const = 0;
virtual QString prerequisiteSetup(void) const = 0;
// @return true: Setup panel can be shown while vehicle is armed // @return true: Setup panel can be shown while vehicle is armed
virtual bool allowSetupWhileArmed(void) const; virtual bool allowSetupWhileArmed(void) const;
......
...@@ -403,6 +403,10 @@ bool MAVLinkProtocol::_closeLogFile(void) ...@@ -403,6 +403,10 @@ bool MAVLinkProtocol::_closeLogFile(void)
void MAVLinkProtocol::_startLogging(void) void MAVLinkProtocol::_startLogging(void)
{ {
if (qgcApp()->runningUnitTests()) {
return;
}
if (!_tempLogFile.isOpen()) { if (!_tempLogFile.isOpen()) {
if (!_logSuspendReplay) { if (!_logSuspendReplay) {
if (!_tempLogFile.open()) { if (!_tempLogFile.open()) {
...@@ -424,7 +428,6 @@ void MAVLinkProtocol::_startLogging(void) ...@@ -424,7 +428,6 @@ void MAVLinkProtocol::_startLogging(void)
void MAVLinkProtocol::_stopLogging(void) void MAVLinkProtocol::_stopLogging(void)
{ {
if (_closeLogFile()) { if (_closeLogFile()) {
// If the signals are not connected it means we are running a unit test. In that case just delete log files
SettingsManager* settingsManager = _app->toolbox()->settingsManager(); SettingsManager* settingsManager = _app->toolbox()->settingsManager();
if ((_vehicleWasArmed || settingsManager->appSettings()->telemetrySaveNotArmed()->rawValue().toBool()) && settingsManager->appSettings()->telemetrySave()->rawValue().toBool()) { if ((_vehicleWasArmed || settingsManager->appSettings()->telemetrySaveNotArmed()->rawValue().toBool()) && settingsManager->appSettings()->telemetrySave()->rawValue().toBool()) {
emit saveTelemetryLog(_tempLogFile.fileName()); emit saveTelemetryLog(_tempLogFile.fileName());
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "PX4/PX4AutoPilotPlugin.h" #include "PX4/PX4AutoPilotPlugin.h"
#include "APM/APMAutoPilotPlugin.h" #include "APM/APMAutoPilotPlugin.h"
#include "APM/APMRadioComponent.h" #include "APM/APMRadioComponent.h"
#include "PX4RadioComponent.h"
/// @file /// @file
/// @brief QRadioComponentController Widget unit test /// @brief QRadioComponentController Widget unit test
...@@ -203,12 +204,26 @@ void RadioConfigTest::_init(MAV_AUTOPILOT firmwareType) ...@@ -203,12 +204,26 @@ void RadioConfigTest::_init(MAV_AUTOPILOT firmwareType)
_calWidget->resize(600, 600); _calWidget->resize(600, 600);
Q_CHECK_PTR(_calWidget); Q_CHECK_PTR(_calWidget);
_calWidget->setAutoPilot(_autopilot); _calWidget->setAutoPilot(_autopilot);
QObject* vehicleComponent;
if (firmwareType == MAV_AUTOPILOT_PX4) { // Find the radio component
vehicleComponent = dynamic_cast<QObject*>(dynamic_cast<PX4AutoPilotPlugin*>(_autopilot)->radioComponent()); QObject* vehicleComponent = NULL;
} else { foreach (const QVariant& varVehicleComponent, _autopilot->vehicleComponents()) {
vehicleComponent = dynamic_cast<QObject*>(dynamic_cast<APMAutoPilotPlugin*>(_autopilot)->radioComponent()); if (firmwareType == MAV_AUTOPILOT_PX4) {
PX4RadioComponent* radioComponent = qobject_cast<PX4RadioComponent*>(varVehicleComponent.value<VehicleComponent*>());
if (radioComponent) {
vehicleComponent = radioComponent;
break;
}
} else {
APMRadioComponent* radioComponent = qobject_cast<APMRadioComponent*>(varVehicleComponent.value<VehicleComponent*>());
if (radioComponent) {
vehicleComponent = radioComponent;
break;
}
}
} }
Q_CHECK_PTR(vehicleComponent);
_calWidget->setContextPropertyObject("vehicleComponent", vehicleComponent); _calWidget->setContextPropertyObject("vehicleComponent", vehicleComponent);
_calWidget->setSource(QUrl::fromUserInput("qrc:/qml/RadioComponent.qml")); _calWidget->setSource(QUrl::fromUserInput("qrc:/qml/RadioComponent.qml"));
......
...@@ -39,11 +39,9 @@ UT_REGISTER_TEST(FileDialogTest) ...@@ -39,11 +39,9 @@ UT_REGISTER_TEST(FileDialogTest)
UT_REGISTER_TEST(FlightGearUnitTest) UT_REGISTER_TEST(FlightGearUnitTest)
UT_REGISTER_TEST(GeoTest) UT_REGISTER_TEST(GeoTest)
UT_REGISTER_TEST(LinkManagerTest) UT_REGISTER_TEST(LinkManagerTest)
UT_REGISTER_TEST(MavlinkLogTest)
UT_REGISTER_TEST(MessageBoxTest) UT_REGISTER_TEST(MessageBoxTest)
UT_REGISTER_TEST(MissionItemTest) UT_REGISTER_TEST(MissionItemTest)
UT_REGISTER_TEST(SimpleMissionItemTest) UT_REGISTER_TEST(SimpleMissionItemTest)
UT_REGISTER_TEST(ComplexMissionItemTest)
UT_REGISTER_TEST(MissionControllerTest) UT_REGISTER_TEST(MissionControllerTest)
UT_REGISTER_TEST(MissionManagerTest) UT_REGISTER_TEST(MissionManagerTest)
UT_REGISTER_TEST(RadioConfigTest) UT_REGISTER_TEST(RadioConfigTest)
...@@ -62,3 +60,6 @@ UT_REGISTER_TEST(SendMavCommandTest) ...@@ -62,3 +60,6 @@ UT_REGISTER_TEST(SendMavCommandTest)
// Onboard file support has been removed until it can be make to work correctly // Onboard file support has been removed until it can be make to work correctly
//UT_REGISTER_TEST(FileManagerTest) //UT_REGISTER_TEST(FileManagerTest)
// Needs to be update for latest changes
//UT_REGISTER_TEST(ComplexMissionItemTest)
//UT_REGISTER_TEST(MavlinkLogTest)
Markdown is supported
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