diff --git a/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc b/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc index 3341c6b9c2ceb78de1e1fa6a08d743eda32c5b86..898e2c54488e096d3e1e593e1f9365941a1cc853 100644 --- a/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc +++ b/src/FirmwarePlugin/APM/APMFirmwarePlugin.cc @@ -169,3 +169,15 @@ void APMFirmwarePlugin::adjustMavlinkMessage(mavlink_message_t* message) // FIXME: Need to implement mavlink message severity adjustment } + +void APMFirmwarePlugin::initializeVehicle(Vehicle* vehicle) +{ + // Streams are not started automatically on APM stack + vehicle->requestDataStream(MAV_DATA_STREAM_RAW_SENSORS, 2); + vehicle->requestDataStream(MAV_DATA_STREAM_EXTENDED_STATUS, 2); + vehicle->requestDataStream(MAV_DATA_STREAM_RC_CHANNELS, 2); + vehicle->requestDataStream(MAV_DATA_STREAM_POSITION, 3); + vehicle->requestDataStream(MAV_DATA_STREAM_EXTRA1, 10); + vehicle->requestDataStream(MAV_DATA_STREAM_EXTRA2, 10); + vehicle->requestDataStream(MAV_DATA_STREAM_EXTRA3, 3); +} diff --git a/src/FirmwarePlugin/APM/APMFirmwarePlugin.h b/src/FirmwarePlugin/APM/APMFirmwarePlugin.h index 524a36f3850bee872d70fc5fbca5fd7aec62406d..6e798089bbf2fc32ea648a18a9d39456eb4104bf 100644 --- a/src/FirmwarePlugin/APM/APMFirmwarePlugin.h +++ b/src/FirmwarePlugin/APM/APMFirmwarePlugin.h @@ -37,7 +37,6 @@ class APMFirmwarePlugin : public FirmwarePlugin public: // Overrides from FirmwarePlugin - virtual bool isCapable(FirmwareCapabilities capabilities); virtual QList componentsForVehicle(AutoPilotPlugin* vehicle); virtual QStringList flightModes(void); @@ -45,7 +44,8 @@ public: virtual bool setFlightMode(const QString& flightMode, uint8_t* base_mode, uint32_t* custom_mode); virtual int manualControlReservedButtonCount(void); virtual void adjustMavlinkMessage(mavlink_message_t* message); - + virtual void initializeVehicle(Vehicle* vehicle); + private: /// All access to singleton is through AutoPilotPluginManager::instance APMFirmwarePlugin(QObject* parent = NULL); diff --git a/src/FirmwarePlugin/FirmwarePlugin.h b/src/FirmwarePlugin/FirmwarePlugin.h index c84a8ece94e9a9b6dd71726f495faeeb571bbfc5..3783c5a8db6b2576b7630836e2195a99273e7f5b 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.h +++ b/src/FirmwarePlugin/FirmwarePlugin.h @@ -35,6 +35,8 @@ #include #include +class Vehicle; + /// This is the base class for Firmware specific plugins /// /// The FirmwarePlugin class is the abstract base class which represents the methods and objects @@ -92,6 +94,9 @@ public: /// @param message[in,out] Mavlink message to adjust if needed. virtual void adjustMavlinkMessage(mavlink_message_t* message) = 0; + /// Called when Vehicle is first created to send any necessary mavlink messages to the firmware. + virtual void initializeVehicle(Vehicle* vehicle) = 0; + protected: FirmwarePlugin(QObject* parent = NULL) : QGCSingleton(parent) { } }; diff --git a/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.cc b/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.cc index 5b11fdf1c3702b3974ec820b74d2ee1cae33fd40..910eba2f8ee99abbfb1794098be820df84b91e88 100644 --- a/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.cc +++ b/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.cc @@ -103,3 +103,10 @@ void GenericFirmwarePlugin::adjustMavlinkMessage(mavlink_message_t* message) // Generic plugin does no message adjustment } + +void GenericFirmwarePlugin::initializeVehicle(Vehicle* vehicle) +{ + Q_UNUSED(vehicle); + + // Generic Flight Stack is by definition "generic", so no extra work +} diff --git a/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.h b/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.h index 505a3de3df34b2f3ba9cddbc31cf3ddcfd29d736..7b2634e4f6a313ba5e722fcf30f4ff03e39e6df5 100644 --- a/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.h +++ b/src/FirmwarePlugin/Generic/GenericFirmwarePlugin.h @@ -45,6 +45,7 @@ public: virtual bool setFlightMode(const QString& flightMode, uint8_t* base_mode, uint32_t* custom_mode); virtual int manualControlReservedButtonCount(void); virtual void adjustMavlinkMessage(mavlink_message_t* message); + virtual void initializeVehicle(Vehicle* vehicle); private: /// All access to singleton is through AutoPilotPluginManager::instance diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc index 731f7505675865b6dbf8b50a47d2e066630189d6..2a2de268b7f826e0f28e58c43886271c0be2be6f 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc @@ -193,3 +193,10 @@ bool PX4FirmwarePlugin::isCapable(FirmwareCapabilities capabilities) { return (capabilities & (MavCmdPreflightStorageCapability | SetFlightModeCapability)) == capabilities; } + +void PX4FirmwarePlugin::initializeVehicle(Vehicle* vehicle) +{ + Q_UNUSED(vehicle); + + // PX4 Flight Stack doesn't need to do any extra work +} diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h index 953842e595c2db0f7696f5b50443df6a7f4c2efe..f1400622b12812b1d9f197d9a58657433c8d2447 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h @@ -45,6 +45,7 @@ public: virtual bool setFlightMode(const QString& flightMode, uint8_t* base_mode, uint32_t* custom_mode); virtual int manualControlReservedButtonCount(void); virtual void adjustMavlinkMessage(mavlink_message_t* message); + virtual void initializeVehicle(Vehicle* vehicle); private: /// All access to singleton is through AutoPilotPluginManager::instance