From 2e9edfcd893643fd622bd848269483a196113e59 Mon Sep 17 00:00:00 2001 From: Julian Oes Date: Tue, 18 May 2021 11:30:01 +0200 Subject: [PATCH] commander: only override according to param This got lost in the refactor earlier. --- src/modules/commander/Commander.cpp | 9 ++++++++- src/modules/commander/Commander.hpp | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index 1bd9ff2680..56106f6d92 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -2407,13 +2407,20 @@ Commander::run() } + const bool override_enabled = + ((_param_com_rc_override.get() & static_cast(RcOverrideBits::AUTO_MODE_BIT)) + && _vehicle_control_mode.flag_control_auto_enabled) + || ((_param_com_rc_override.get() & static_cast(RcOverrideBits::OFFBOARD_MODE_BIT)) + && _vehicle_control_mode.flag_control_offboard_enabled); + // Abort autonomous mode and switch to position mode if sticks are moved significantly // but only if actually in air. if ((_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_ROTARY_WING) && !in_low_battery_failsafe && !_geofence_warning_action_on && _armed.armed && !_status_flags.rc_input_blocked - && manual_control_setpoint.user_override) { + && manual_control_setpoint.user_override + && override_enabled) { const transition_result_t posctl_result = main_state_transition(_status, commander_state_s::MAIN_STATE_POSCTL, _status_flags, _internal_state); diff --git a/src/modules/commander/Commander.hpp b/src/modules/commander/Commander.hpp index 09b3fd7106..29b170f21d 100644 --- a/src/modules/commander/Commander.hpp +++ b/src/modules/commander/Commander.hpp @@ -186,6 +186,8 @@ private: (ParamInt) _param_nav_dll_act, (ParamInt) _param_com_dl_loss_t, + (ParamInt) _param_com_rc_override, + (ParamInt) _param_com_hldl_loss_t, (ParamInt) _param_com_hldl_reg_t, @@ -255,7 +257,7 @@ private: (ParamInt) _param_cbrk_velposerr, (ParamInt) _param_cbrk_vtolarming, - // Geofrence + // Geofence (ParamInt) _param_geofence_action, // Mavlink @@ -275,6 +277,11 @@ private: ALWAYS = 2 }; + enum class RcOverrideBits : int32_t { + AUTO_MODE_BIT = (1 << 0), + OFFBOARD_MODE_BIT = (1 << 1), + }; + /* Decouple update interval and hysteresis counters, all depends on intervals */ static constexpr uint64_t COMMANDER_MONITORING_INTERVAL{10_ms};