From 94dca94d10f4827447a5bcbf513f2aa2f5485f7f Mon Sep 17 00:00:00 2001 From: Rustom Jehangir Date: Tue, 31 May 2016 17:17:58 -0700 Subject: [PATCH] Add simple ArduSub firmware plugin. --- qgroundcontrol.pro | 6 +- .../APM/ArduSubFirmwarePlugin.cc | 47 ++++++++++++ .../APM/ArduSubFirmwarePlugin.h | 71 +++++++++++++++++++ src/FirmwarePlugin/FirmwarePluginManager.cc | 9 ++- src/FirmwarePlugin/FirmwarePluginManager.h | 2 + 5 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc create mode 100644 src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.h diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 657073d83..1ced0ee83 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -307,7 +307,8 @@ HEADERS += \ src/AutoPilotPlugins/APM/APMAirframeLoader.h \ src/QmlControls/QGCImageProvider.h \ src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h \ - src/PositionManager/PositionManager.h + src/PositionManager/PositionManager.h \ + src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.h AndroidBuild { HEADERS += \ @@ -465,7 +466,8 @@ SOURCES += \ src/QmlControls/QGCImageProvider.cc \ src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc \ src/PositionManager/SimulatedPosition.cc \ - src/PositionManager/PositionManager.cpp + src/PositionManager/PositionManager.cpp \ + src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc DebugBuild { SOURCES += \ diff --git a/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc b/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc new file mode 100644 index 000000000..3b45bae27 --- /dev/null +++ b/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.cc @@ -0,0 +1,47 @@ +/*===================================================================== + + QGroundControl Open Source Ground Control Station + + (c) 2009 - 2015 QGROUNDCONTROL PROJECT + + This file is part of the QGROUNDCONTROL project + + QGROUNDCONTROL is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + QGROUNDCONTROL is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QGROUNDCONTROL. If not, see . + + ======================================================================*/ + +/// @file +/// @author Rustom Jehangir + +#include "ArduSubFirmwarePlugin.h" +#include "QGCApplication.h" +#include "MissionManager.h" + +APMSubMode::APMSubMode(uint32_t mode, bool settable) : + APMCustomMode(mode, settable) +{ + QMap enumToString; + enumToString.insert(STABILIZE, "Stabilize"); + enumToString.insert(ALT_HOLD, "Depth Hold"); + + setEnumToStringMapping(enumToString); +} + +ArduSubFirmwarePlugin::ArduSubFirmwarePlugin(void) +{ + QList supportedFlightModes; + supportedFlightModes << APMSubMode(APMSubMode::STABILIZE ,true); + supportedFlightModes << APMSubMode(APMSubMode::ALT_HOLD ,true); + setSupportedModes(supportedFlightModes); +} diff --git a/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.h b/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.h new file mode 100644 index 000000000..dc11861f0 --- /dev/null +++ b/src/FirmwarePlugin/APM/ArduSubFirmwarePlugin.h @@ -0,0 +1,71 @@ +/*===================================================================== + + QGroundControl Open Source Ground Control Station + + (c) 2009 - 2014 QGROUNDCONTROL PROJECT + + This file is part of the QGROUNDCONTROL project + + QGROUNDCONTROL is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + QGROUNDCONTROL is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QGROUNDCONTROL. If not, see . + + ======================================================================*/ + +/// @file +/// @author Rustom Jehangir + +#ifndef ArduSubFirmwarePlugin_H +#define ArduSubFirmwarePlugin_H + +#include "APMFirmwarePlugin.h" + +class APMSubMode : public APMCustomMode +{ +public: + enum Mode { + STABILIZE = 0, // Hold level position + RESERVED_1 = 1, + ALT_HOLD = 2, // Depth hold + RESERVED_3 = 3, + RESERVED_4 = 4, + RESERVED_5 = 5, + RESERVED_6 = 6, + RESERVED_7 = 7, + RESERVED_8 = 8, + RESERVED_9 = 9, + RESERVED_10 = 10, + RESERVED_11 = 11, + RESERVED_12 = 12, + RESERVED_13 = 13, + RESERVED_14 = 14, + RESERVED_15 = 15, + RESERVED_16 = 16, + RESERVED_17 = 17 + }; + static const int modeCount = 18; + + APMSubMode(uint32_t mode, bool settable); +}; + +class ArduSubFirmwarePlugin : public APMFirmwarePlugin +{ + Q_OBJECT + +public: + ArduSubFirmwarePlugin(void); + + // Overrides from FirmwarePlugin + +}; + +#endif diff --git a/src/FirmwarePlugin/FirmwarePluginManager.cc b/src/FirmwarePlugin/FirmwarePluginManager.cc index bf6a514a4..7efe0e260 100644 --- a/src/FirmwarePlugin/FirmwarePluginManager.cc +++ b/src/FirmwarePlugin/FirmwarePluginManager.cc @@ -15,6 +15,7 @@ #include "APM/ArduCopterFirmwarePlugin.h" #include "APM/ArduPlaneFirmwarePlugin.h" #include "APM/ArduRoverFirmwarePlugin.h" +#include "APM/ArduSubFirmwarePlugin.h" #include "PX4/PX4FirmwarePlugin.h" FirmwarePluginManager::FirmwarePluginManager(QGCApplication* app) @@ -22,6 +23,7 @@ FirmwarePluginManager::FirmwarePluginManager(QGCApplication* app) , _arduCopterFirmwarePlugin(NULL) , _arduPlaneFirmwarePlugin(NULL) , _arduRoverFirmwarePlugin(NULL) + , _arduSubFirmwarePlugin(NULL) , _genericFirmwarePlugin(NULL) , _px4FirmwarePlugin(NULL) { @@ -33,6 +35,7 @@ FirmwarePluginManager::~FirmwarePluginManager() delete _arduCopterFirmwarePlugin; delete _arduPlaneFirmwarePlugin; delete _arduRoverFirmwarePlugin; + delete _arduSubFirmwarePlugin; delete _genericFirmwarePlugin; delete _px4FirmwarePlugin; } @@ -59,11 +62,15 @@ FirmwarePlugin* FirmwarePluginManager::firmwarePluginForAutopilot(MAV_AUTOPILOT return _arduPlaneFirmwarePlugin; case MAV_TYPE_GROUND_ROVER: case MAV_TYPE_SURFACE_BOAT: - case MAV_TYPE_SUBMARINE: if (!_arduRoverFirmwarePlugin) { _arduRoverFirmwarePlugin = new ArduRoverFirmwarePlugin; } return _arduRoverFirmwarePlugin; + case MAV_TYPE_SUBMARINE: + if (!_arduSubFirmwarePlugin) { + _arduSubFirmwarePlugin = new ArduSubFirmwarePlugin; + } + return _arduSubFirmwarePlugin; default: break; } diff --git a/src/FirmwarePlugin/FirmwarePluginManager.h b/src/FirmwarePlugin/FirmwarePluginManager.h index 0c020812a..2c14292e8 100644 --- a/src/FirmwarePlugin/FirmwarePluginManager.h +++ b/src/FirmwarePlugin/FirmwarePluginManager.h @@ -24,6 +24,7 @@ class QGCApplication; class ArduCopterFirmwarePlugin; class ArduPlaneFirmwarePlugin; class ArduRoverFirmwarePlugin; +class ArduSubFirmwarePlugin; class PX4FirmwarePlugin; /// FirmwarePluginManager is a singleton which is used to return the correct FirmwarePlugin for a MAV_AUTOPILOT type. @@ -49,6 +50,7 @@ private: ArduCopterFirmwarePlugin* _arduCopterFirmwarePlugin; ArduPlaneFirmwarePlugin* _arduPlaneFirmwarePlugin; ArduRoverFirmwarePlugin* _arduRoverFirmwarePlugin; + ArduSubFirmwarePlugin* _arduSubFirmwarePlugin; FirmwarePlugin* _genericFirmwarePlugin; PX4FirmwarePlugin* _px4FirmwarePlugin; }; -- 2.22.0