diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index af2b0c6729..d5ff74ca88 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -973,6 +973,7 @@ Commander::handle_command(const vehicle_command_s &cmd) } else { if (cmd_from_manual_stick) { arming_res = arm(arm_disarm_reason_t::rc_stick, !forced); + } else { arming_res = arm(arm_disarm_reason_t::command_internal, !forced); } @@ -985,6 +986,7 @@ Commander::handle_command(const vehicle_command_s &cmd) } else { if (cmd_from_manual_stick) { arming_res = disarm(arm_disarm_reason_t::rc_stick); + } else { arming_res = disarm(arm_disarm_reason_t::command_internal); } diff --git a/src/modules/commander/ManualControl.cpp b/src/modules/commander/ManualControl.cpp index 581b300d58..e4089c2290 100644 --- a/src/modules/commander/ManualControl.cpp +++ b/src/modules/commander/ManualControl.cpp @@ -66,7 +66,8 @@ bool ManualControl::wantsOverride(const vehicle_control_mode_s &vehicle_control_ const bool override_auto_mode = (_param_rc_override.get() & static_cast(OverrideBits::OVERRIDE_AUTO_MODE_BIT)) && vehicle_control_mode.flag_control_auto_enabled; - const bool override_offboard_mode = (_param_rc_override.get() & static_cast(OverrideBits::OVERRIDE_OFFBOARD_MODE_BIT)) + const bool override_offboard_mode = (_param_rc_override.get() & static_cast + (OverrideBits::OVERRIDE_OFFBOARD_MODE_BIT)) && vehicle_control_mode.flag_control_offboard_enabled; // in Descend manual override is enbaled independently of COM_RC_OVERRIDE diff --git a/src/modules/manual_control/ManualControl.cpp b/src/modules/manual_control/ManualControl.cpp index 8af0e5cff6..ee0afdeab8 100644 --- a/src/modules/manual_control/ManualControl.cpp +++ b/src/modules/manual_control/ManualControl.cpp @@ -163,6 +163,7 @@ void ManualControl::Run() if (switches.arm_switch != _previous_switches.arm_switch) { if (switches.arm_switch == manual_control_switches_s::SWITCH_POS_ON) { send_arm_command(); + } else if (switches.arm_switch == manual_control_switches_s::SWITCH_POS_OFF) { send_disarm_command(); } @@ -173,8 +174,10 @@ void ManualControl::Run() send_rtl_command(); } } + // TODO: handle the rest of the buttons } + _previous_switches = switches; _previous_switches_initialized = true; @@ -198,6 +201,7 @@ void ManualControl::Run() } else { _last_selected_input = -1; + if (!_published_invalid_once) { _published_invalid_once = true; _manual_control_setpoint_pub.publish(_selector.setpoint()); diff --git a/src/modules/manual_control/ManualControlSelector.cpp b/src/modules/manual_control/ManualControlSelector.cpp index 97bf101c79..38d8e2b157 100644 --- a/src/modules/manual_control/ManualControlSelector.cpp +++ b/src/modules/manual_control/ManualControlSelector.cpp @@ -59,11 +59,11 @@ void ManualControlSelector::update_manual_control_input(uint64_t now, const manu _instance = instance; } else if (_rc_in_mode == 1 && (input.data_source == manual_control_input_s::SOURCE_MAVLINK_0 - || input.data_source == manual_control_input_s::SOURCE_MAVLINK_1 - || input.data_source == manual_control_input_s::SOURCE_MAVLINK_2 - || input.data_source == manual_control_input_s::SOURCE_MAVLINK_3 - || input.data_source == manual_control_input_s::SOURCE_MAVLINK_4 - || input.data_source == manual_control_input_s::SOURCE_MAVLINK_5)) { + || input.data_source == manual_control_input_s::SOURCE_MAVLINK_1 + || input.data_source == manual_control_input_s::SOURCE_MAVLINK_2 + || input.data_source == manual_control_input_s::SOURCE_MAVLINK_3 + || input.data_source == manual_control_input_s::SOURCE_MAVLINK_4 + || input.data_source == manual_control_input_s::SOURCE_MAVLINK_5)) { // We only stick to the first discovered mavlink channel. if (_setpoint.data_source == input.data_source || !_setpoint.valid) { @@ -71,6 +71,7 @@ void ManualControlSelector::update_manual_control_input(uint64_t now, const manu _setpoint.valid = true; _instance = instance; } + } else if (_rc_in_mode == 2) { // FIXME: what to do in the legacy case? } else if (_rc_in_mode == 3) { @@ -81,6 +82,7 @@ void ManualControlSelector::update_manual_control_input(uint64_t now, const manu _setpoint.valid = true; _instance = instance; } + } else { // FIXME: param value unknown, what to do? } diff --git a/src/modules/manual_control/ManualControlSelector.hpp b/src/modules/manual_control/ManualControlSelector.hpp index 72a94568f9..1352960bac 100644 --- a/src/modules/manual_control/ManualControlSelector.hpp +++ b/src/modules/manual_control/ManualControlSelector.hpp @@ -37,7 +37,8 @@ #include #include -namespace manual_control { +namespace manual_control +{ class ManualControlSelector {