From 9866b6039145bcea86f6fa269626c2c62b1ed842 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Fri, 23 Oct 2015 09:17:36 -0700 Subject: [PATCH] New virtual for APM style mission support --- src/FirmwarePlugin/APM/APMFirmwarePlugin.cc | 6 ++++++ src/FirmwarePlugin/APM/APMFirmwarePlugin.h | 3 ++- src/FirmwarePlugin/FirmwarePlugin.h | 8 ++++++++ src/FirmwarePlugin/Generic/GenericFirmwarePlugin.cc | 8 ++++++++ src/FirmwarePlugin/Generic/GenericFirmwarePlugin.h | 1 + src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc | 7 +++++++ src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h | 1 + 7 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc b/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc index 92aec3bf9..f2cfa3ed8 100644 --- a/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc +++ b/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc @@ -378,3 +378,9 @@ void APMFirmwarePlugin::setSupportedModes(QList supportedModes) { _supportedModes = supportedModes; } + +bool APMFirmwarePlugin::sendHomePositionToVehicle(void) +{ + // APM stack wants the home position sent in the first position + return true; +} diff --git a/src/FirmwarePlugin/APM/APMFirmwarePlugin.h b/src/FirmwarePlugin/APM/APMFirmwarePlugin.h index fa639db16..6d92ab778 100644 --- a/src/FirmwarePlugin/APM/APMFirmwarePlugin.h +++ b/src/FirmwarePlugin/APM/APMFirmwarePlugin.h @@ -87,7 +87,8 @@ public: virtual int manualControlReservedButtonCount(void); virtual void adjustMavlinkMessage(mavlink_message_t* message); virtual void initializeVehicle(Vehicle* vehicle); - + virtual bool sendHomePositionToVehicle(void); + protected: /// All access to singleton is through stack specific implementation APMFirmwarePlugin(QObject* parent = NULL); diff --git a/src/FirmwarePlugin/FirmwarePlugin.h b/src/FirmwarePlugin/FirmwarePlugin.h index 3783c5a8d..eacd29ebb 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.h +++ b/src/FirmwarePlugin/FirmwarePlugin.h @@ -96,6 +96,14 @@ public: /// Called when Vehicle is first created to send any necessary mavlink messages to the firmware. virtual void initializeVehicle(Vehicle* vehicle) = 0; + + /// Determines how to handle the first item of the mission item list. Internally to QGC the first item + /// is always the home position. + /// @return + /// true: Send first mission item as home position to vehicle. When vehicle has no mission items on + /// it, it may or may not return a home position back in position 0. + /// false: Do not send first item to vehicle, sequence numbers must be adjusted + virtual bool sendHomePositionToVehicle(void) = 0; protected: FirmwarePlugin(QObject* parent = NULL) : QGCSingleton(parent) { } diff --git a/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.cc b/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.cc index 910eba2f8..097199094 100644 --- a/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.cc +++ b/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.cc @@ -110,3 +110,11 @@ void GenericFirmwarePlugin::initializeVehicle(Vehicle* vehicle) // Generic Flight Stack is by definition "generic", so no extra work } + +bool GenericFirmwarePlugin::sendHomePositionToVehicle(void) +{ + // Generic stack does not want home position sent in the first position. + // Subsequent sequence numbers must be adjusted. + // This is the mavlink spec default. + return false; +} diff --git a/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.h b/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.h index 7b2634e4f..abeb96e77 100644 --- a/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.h +++ b/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.h @@ -46,6 +46,7 @@ public: virtual int manualControlReservedButtonCount(void); virtual void adjustMavlinkMessage(mavlink_message_t* message); virtual void initializeVehicle(Vehicle* vehicle); + virtual bool sendHomePositionToVehicle(void); private: /// All access to singleton is through AutoPilotPluginManager::instance diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc index 2a2de268b..d78c1914c 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc @@ -200,3 +200,10 @@ void PX4FirmwarePlugin::initializeVehicle(Vehicle* vehicle) // PX4 Flight Stack doesn't need to do any extra work } + +bool PX4FirmwarePlugin::sendHomePositionToVehicle(void) +{ + // PX4 stack does not want home position sent in the first position. + // Subsequent sequence numbers must be adjusted. + return false; +} diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h index f1400622b..ebbd49ebb 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h @@ -46,6 +46,7 @@ public: virtual int manualControlReservedButtonCount(void); virtual void adjustMavlinkMessage(mavlink_message_t* message); virtual void initializeVehicle(Vehicle* vehicle); + virtual bool sendHomePositionToVehicle(void); private: /// All access to singleton is through AutoPilotPluginManager::instance -- 2.22.0