diff --git a/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc b/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc index 9ccccca963208b63a1bb8d8ca8814eae0522ec18..2af431eb32705b13dd5c3253bddf9a8c6b8976ea 100644 --- a/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc +++ b/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc @@ -40,7 +40,8 @@ APMSubMode::APMSubMode(uint32_t mode, bool settable) : setEnumToStringMapping(enumToString); } -ArduSubFirmwarePlugin::ArduSubFirmwarePlugin(void) +ArduSubFirmwarePlugin::ArduSubFirmwarePlugin(void): + _infoFactGroup(this) { QList supportedFlightModes; supportedFlightModes << APMSubMode(APMSubMode::MANUAL ,true); @@ -100,7 +101,7 @@ ArduSubFirmwarePlugin::ArduSubFirmwarePlugin(void) _remapParamNameIntialized = true; } - fwFactGroup = new APMSubmarineFactGroup(this); + _factGroups.append(&_infoFactGroup); } int ArduSubFirmwarePlugin::remapParamNameHigestMinorVersionNumber(int majorVersionNumber) const @@ -166,15 +167,15 @@ void ArduSubFirmwarePlugin::_handleNamedValueFloat(mavlink_message_t* message) QString name = QString(value.name); if (name == "CamTilt") { - fwFactGroup->getFact("camera tilt")->setRawValue(value.value * 100); + _infoFactGroup.getFact("camera tilt")->setRawValue(value.value * 100); } else if (name == "TetherTrn") { - fwFactGroup->getFact("tether turns")->setRawValue(value.value); + _infoFactGroup.getFact("tether turns")->setRawValue(value.value); } else if (name == "Lights1") { - fwFactGroup->getFact("lights 1")->setRawValue(value.value * 100); + _infoFactGroup.getFact("lights 1")->setRawValue(value.value * 100); } else if (name == "Lights2") { - fwFactGroup->getFact("lights 2")->setRawValue(value.value * 100); + _infoFactGroup.getFact("lights 2")->setRawValue(value.value * 100); } else if (name == "PilotGain") { - fwFactGroup->getFact("pilot gain")->setRawValue(value.value * 100); + _infoFactGroup.getFact("pilot gain")->setRawValue(value.value * 100); } } diff --git a/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.h b/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.h index 87af47c28d0b3752b4c6b5ad5f4576f716b218fe..a1c50156f1612649de55f2bfb7478b1c3c548c18 100644 --- a/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.h +++ b/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.h @@ -28,6 +28,40 @@ #define ArduSubFirmwarePlugin_H #include "APMFirmwarePlugin.h" +class APMSubmarineFactGroup : public FactGroup +{ + Q_OBJECT + +public: + APMSubmarineFactGroup(QObject* parent = NULL); + + Q_PROPERTY(Fact* camTilt READ camTilt CONSTANT) + Q_PROPERTY(Fact* tetherTurns READ tetherTurns CONSTANT) + Q_PROPERTY(Fact* lightsLevel1 READ lightsLevel1 CONSTANT) + Q_PROPERTY(Fact* lightsLevel2 READ lightsLevel2 CONSTANT) + Q_PROPERTY(Fact* pilotGain READ pilotGain CONSTANT) + + Fact* camTilt (void) { return &_camTiltFact; } + Fact* tetherTurns (void) { return &_tetherTurnsFact; } + Fact* lightsLevel1 (void) { return &_lightsLevel1Fact; } + Fact* lightsLevel2 (void) { return &_lightsLevel2Fact; } + Fact* pilotGain (void) { return &_pilotGainFact; } + + static const char* _camTiltFactName; + static const char* _tetherTurnsFactName; + static const char* _lightsLevel1FactName; + static const char* _lightsLevel2FactName; + static const char* _pilotGainFactName; + + static const char* _settingsGroup; + +private: + Fact _camTiltFact; + Fact _tetherTurnsFact; + Fact _lightsLevel1Fact; + Fact _lightsLevel2Fact; + Fact _pilotGainFact; +}; class APMSubMode : public APMCustomMode { @@ -97,40 +131,7 @@ private: static FirmwarePlugin::remapParamNameMajorVersionMap_t _remapParamName; void _handleNamedValueFloat(mavlink_message_t* message); void _handleMavlinkMessage(mavlink_message_t* message); -}; - -class APMSubmarineFactGroup : public FactGroup -{ - Q_OBJECT - -public: - APMSubmarineFactGroup(QObject* parent = NULL); - - Q_PROPERTY(Fact* camTilt READ camTilt CONSTANT) - Q_PROPERTY(Fact* tetherTurns READ tetherTurns CONSTANT) - Q_PROPERTY(Fact* lightsLevel1 READ lightsLevel1 CONSTANT) - Q_PROPERTY(Fact* lightsLevel2 READ lightsLevel2 CONSTANT) - Q_PROPERTY(Fact* pilotGain READ pilotGain CONSTANT) - - Fact* camTilt (void) { return &_camTiltFact; } - Fact* tetherTurns (void) { return &_tetherTurnsFact; } - Fact* lightsLevel1 (void) { return &_lightsLevel1Fact; } - Fact* lightsLevel2 (void) { return &_lightsLevel2Fact; } - Fact* pilotGain (void) { return &_pilotGainFact; } - - static const char* _camTiltFactName; - static const char* _tetherTurnsFactName; - static const char* _lightsLevel1FactName; - static const char* _lightsLevel2FactName; - static const char* _pilotGainFactName; - static const char* _settingsGroup; - -private: - Fact _camTiltFact; - Fact _tetherTurnsFact; - Fact _lightsLevel1Fact; - Fact _lightsLevel2Fact; - Fact _pilotGainFact; + APMSubmarineFactGroup _infoFactGroup; }; #endif diff --git a/src/FirmwarePlugin/FirmwarePlugin.cc b/src/FirmwarePlugin/FirmwarePlugin.cc index d07ace1edab5140a4f9e8e050671f51e7b8a9ab5..9e0e5fa604c7d37f72f20a6e8093b4b47731aa1f 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.cc +++ b/src/FirmwarePlugin/FirmwarePlugin.cc @@ -419,6 +419,10 @@ const QVariantList& FirmwarePlugin::cameraList(const Vehicle* vehicle) return _cameraList; } +QList FirmwarePlugin::factGroups(void) { + return _factGroups; +} + bool FirmwarePlugin::vehicleYawsToNextWaypointInMission(const Vehicle* vehicle) const { return vehicle->multiRotor() ? false : true; diff --git a/src/FirmwarePlugin/FirmwarePlugin.h b/src/FirmwarePlugin/FirmwarePlugin.h index 704dc3935764bd42418ebc41813e7e3f11ed92f4..641d38c057aa2ba9cf9ed2beea5a5ccfa2c875cc 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.h +++ b/src/FirmwarePlugin/FirmwarePlugin.h @@ -273,6 +273,8 @@ public: /// Returns a list of CameraMetaData objects for available cameras on the vehicle. virtual const QVariantList& cameraList(const Vehicle* vehicle); + virtual QList factGroups(void); + /// @true: When flying a mission the vehicle is always facing towards the next waypoint virtual bool vehicleYawsToNextWaypointInMission(const Vehicle* vehicle) const; @@ -295,13 +297,11 @@ public: // FIXME: Hack workaround for non pluginize FollowMe support static const char* px4FollowMeFlightMode; - /// Used to add additional firmware-specific facts to the vehicle values widget - FactGroup* fwFactGroup = NULL; - protected: // Arms the vehicle with validation and retries // @return: true - vehicle armed, false - vehicle failed to arm bool _armVehicleAndValidate(Vehicle* vehicle); + QList _factGroups; // Sets the vehicle to the specified flight mode with validation and retries // @return: true - vehicle in specified flight mode, false - flight mode change failed diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index f28c1d5585c7d278003474708128609757bb0526..0033a10a46ea6911fac1fa6b850f19b76a49e3a0 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -373,8 +373,9 @@ void Vehicle::_commonInit(void) _addFactGroup(&_temperatureFactGroup, _temperatureFactGroupName); // Add firmware-specific fact group, if provided - if (_firmwarePlugin->fwFactGroup) { - _addFactGroup(_firmwarePlugin->fwFactGroup, "FWPlugin"); + QList fwFactGroups = _firmwarePlugin->factGroups(); + for (int i = 0; i < fwFactGroups.count(); i++) { + _addFactGroup(fwFactGroups[i], QString("FWPlugin%1").arg(i)); } _flightDistanceFact.setRawValue(0);