diff --git a/src/modules/mavlink/mavlink_mission.cpp b/src/modules/mavlink/mavlink_mission.cpp index 6cb7a275eb..7e201cf9c5 100644 --- a/src/modules/mavlink/mavlink_mission.cpp +++ b/src/modules/mavlink/mavlink_mission.cpp @@ -479,11 +479,6 @@ MavlinkMissionManager::send_mission_item_reached(uint16_t seq) void MavlinkMissionManager::send(const hrt_abstime now) { - // do not send anything over high latency communication - if (_mavlink->get_mode() == Mavlink::MAVLINK_MODE_IRIDIUM) { - return; - } - bool updated = false; orb_check(_mission_result_sub, &updated); diff --git a/src/modules/mavlink/mavlink_receiver.cpp b/src/modules/mavlink/mavlink_receiver.cpp index 7a2a5c1ace..fc17a3bc19 100644 --- a/src/modules/mavlink/mavlink_receiver.cpp +++ b/src/modules/mavlink/mavlink_receiver.cpp @@ -94,7 +94,7 @@ static const float mg2ms2 = CONSTANTS_ONE_G / 1000.0f; MavlinkReceiver::MavlinkReceiver(Mavlink *parent) : _mavlink(parent), - _mission_manager(parent), + _mission_manager(nullptr), _parameters_manager(parent), _mavlink_ftp(parent), _mavlink_log_handler(parent), @@ -158,12 +158,20 @@ MavlinkReceiver::MavlinkReceiver(Mavlink *parent) : _p_bat_crit_thr(param_find("BAT_CRIT_THR")), _p_bat_low_thr(param_find("BAT_LOW_THR")) { + if (_mavlink->get_mode() != Mavlink::MAVLINK_MODE_IRIDIUM) { + _mission_manager = new MavlinkMissionManager(parent); + } } MavlinkReceiver::~MavlinkReceiver() { orb_unsubscribe(_control_mode_sub); orb_unsubscribe(_actuator_armed_sub); + + if (_mission_manager != nullptr) { + delete _mission_manager; + _mission_manager = nullptr; + } } void MavlinkReceiver::acknowledge(uint8_t sysid, uint8_t compid, uint16_t command, uint8_t result) @@ -2527,7 +2535,9 @@ MavlinkReceiver::receive_thread(void *arg) handle_message(&msg); /* handle packet with mission manager */ - _mission_manager.handle_message(&msg); + if (_mission_manager != nullptr) { + _mission_manager->handle_message(&msg); + } /* handle packet with parameter component */ _parameters_manager.handle_message(&msg); @@ -2555,8 +2565,11 @@ MavlinkReceiver::receive_thread(void *arg) hrt_abstime t = hrt_absolute_time(); if (t - last_send_update > timeout * 1000) { - _mission_manager.check_active_mission(); - _mission_manager.send(t); + if (_mission_manager != nullptr) { + _mission_manager->check_active_mission(); + _mission_manager->send(t); + } + _parameters_manager.send(t); if (_mavlink->ftp_enabled()) { diff --git a/src/modules/mavlink/mavlink_receiver.h b/src/modules/mavlink/mavlink_receiver.h index be24ef1e94..81321b7a39 100644 --- a/src/modules/mavlink/mavlink_receiver.h +++ b/src/modules/mavlink/mavlink_receiver.h @@ -205,7 +205,7 @@ private: Mavlink *_mavlink; - MavlinkMissionManager _mission_manager; + MavlinkMissionManager *_mission_manager; MavlinkParametersManager _parameters_manager; MavlinkFTP _mavlink_ftp; MavlinkLogHandler _mavlink_log_handler;