diff --git a/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc b/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc index eadc6a49c872f80980debe8be34b03bb174eee83..548fea42a4f4f1f7e24027abb6b3323b1ed9f1d5 100644 --- a/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc +++ b/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc @@ -193,6 +193,10 @@ bool ArduSubFirmwarePlugin::adjustIncomingMavlinkMessage(Vehicle* vehicle, mavli return APMFirmwarePlugin::adjustIncomingMavlinkMessage(vehicle, message); } +QMap* ArduSubFirmwarePlugin::factGroups(void) { + return &_nameToFactGroupMap; +} + const char* APMSubmarineFactGroup::_camTiltFactName = "camera tilt"; const char* APMSubmarineFactGroup::_tetherTurnsFactName = "tether turns"; const char* APMSubmarineFactGroup::_lightsLevel1FactName = "lights 1"; diff --git a/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.h b/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.h index a1c50156f1612649de55f2bfb7478b1c3c548c18..830e272f583197ad942ca53caedcd26b1165c651 100644 --- a/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.h +++ b/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.h @@ -123,6 +123,7 @@ public: int remapParamNameHigestMinorVersionNumber(int majorVersionNumber) const final; const QVariantList& toolBarIndicators(const Vehicle* vehicle) final; bool adjustIncomingMavlinkMessage(Vehicle* vehicle, mavlink_message_t* message); + virtual QMap* factGroups(void); private: @@ -132,6 +133,7 @@ private: void _handleNamedValueFloat(mavlink_message_t* message); void _handleMavlinkMessage(mavlink_message_t* message); + QMap _nameToFactGroupMap; APMSubmarineFactGroup _infoFactGroup; }; #endif diff --git a/src/FirmwarePlugin/FirmwarePlugin.cc b/src/FirmwarePlugin/FirmwarePlugin.cc index a0f6e89de2aa953085d192b50fbca248e75255de..8ee36e927882e556246a6b5a40cc1c279d33b079 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.cc +++ b/src/FirmwarePlugin/FirmwarePlugin.cc @@ -419,8 +419,9 @@ const QVariantList& FirmwarePlugin::cameraList(const Vehicle* vehicle) return _cameraList; } -const QMap& FirmwarePlugin::factGroups(void) { - return _nameToFactGroupMap; +QMap* FirmwarePlugin::factGroups(void) { + // Generic plugin has no FactGroups + return NULL; } bool FirmwarePlugin::vehicleYawsToNextWaypointInMission(const Vehicle* vehicle) const diff --git a/src/FirmwarePlugin/FirmwarePlugin.h b/src/FirmwarePlugin/FirmwarePlugin.h index cd6e5c94e3ad48106e0ef1523bc071fa3f66e669..a8c2e428f8c4f4ea04ba0ab73406c5a40a0ea5a1 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.h +++ b/src/FirmwarePlugin/FirmwarePlugin.h @@ -273,7 +273,8 @@ public: /// Returns a list of CameraMetaData objects for available cameras on the vehicle. virtual const QVariantList& cameraList(const Vehicle* vehicle); - virtual const QMap& factGroups(void); + /// Returns a pointer to a dictionary of firmware-specific FactGroups + virtual QMap* factGroups(void); /// @true: When flying a mission the vehicle is always facing towards the next waypoint virtual bool vehicleYawsToNextWaypointInMission(const Vehicle* vehicle) const; @@ -301,7 +302,6 @@ protected: // Arms the vehicle with validation and retries // @return: true - vehicle armed, false - vehicle failed to arm bool _armVehicleAndValidate(Vehicle* vehicle); - QMap _nameToFactGroupMap; // 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 2dac5d88fbd0e385f2b34664c1b6ae3c878c1269..ae00734cc8c02680442f4e23aee0822cdba5aa0f 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -373,11 +373,13 @@ void Vehicle::_commonInit(void) _addFactGroup(&_temperatureFactGroup, _temperatureFactGroupName); // Add firmware-specific fact groups, if provided - QMap fwFactGroups = _firmwarePlugin->factGroups(); - QMapIterator i(fwFactGroups); - while(i.hasNext()) { - i.next(); - _addFactGroup(i.value(), i.key()); + QMap* fwFactGroups = _firmwarePlugin->factGroups(); + if (fwFactGroups) { + QMapIterator i(*fwFactGroups); + while(i.hasNext()) { + i.next(); + _addFactGroup(i.value(), i.key()); + } } _flightDistanceFact.setRawValue(0);