From 7c59a1e2060dbc6a2520397ee75f4c861551dc64 Mon Sep 17 00:00:00 2001 From: Jacob Walser Date: Wed, 24 May 2017 11:37:27 -0400 Subject: [PATCH] Store firmware-factgroup data in derived classes --- src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc | 4 ++++ src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.h | 2 ++ src/FirmwarePlugin/FirmwarePlugin.cc | 5 +++-- src/FirmwarePlugin/FirmwarePlugin.h | 4 ++-- src/Vehicle/Vehicle.cc | 12 +++++++----- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc b/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc index eadc6a49c..548fea42a 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 a1c50156f..830e272f5 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 a0f6e89de..8ee36e927 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 cd6e5c94e..a8c2e428f 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 2dac5d88f..ae00734cc 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); -- 2.22.0