From c5fb68b7a1a9ba7ff7cd241de8c346d6c5f424ff Mon Sep 17 00:00:00 2001 From: Matthias Grob Date: Tue, 23 Nov 2021 16:04:37 +0100 Subject: [PATCH] Commander: force disabling the arm stick gesture when arm switch is in use --- src/modules/commander/Commander.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/modules/commander/Commander.cpp b/src/modules/commander/Commander.cpp index 21af761f3a..a077bc674f 100644 --- a/src/modules/commander/Commander.cpp +++ b/src/modules/commander/Commander.cpp @@ -1797,6 +1797,7 @@ Commander::run() const param_t param_airmode = param_find("MC_AIRMODE"); const param_t param_man_arm_gesture = param_find("MAN_ARM_GESTURE"); + const param_t param_rc_map_arm_sw = param_find("RC_MAP_ARM_SW"); /* initialize */ led_init(); @@ -1915,7 +1916,25 @@ Commander::run() _auto_disarm_killed.set_hysteresis_time_from(false, _param_com_kill_disarm.get() * 1_s); - /* check for unsafe Airmode settings: yaw airmode requires the use of an arming switch */ + // disable arm gesture if an arm switch is configured + if (param_man_arm_gesture != PARAM_INVALID && param_rc_map_arm_sw != PARAM_INVALID) { + int32_t man_arm_gesture = 0, rc_map_arm_sw = 0; + param_get(param_man_arm_gesture, &man_arm_gesture); + param_get(param_rc_map_arm_sw, &rc_map_arm_sw); + + if (rc_map_arm_sw > 0 && man_arm_gesture == 1) { + man_arm_gesture = 0; // disable arm gesture + param_set(param_man_arm_gesture, &man_arm_gesture); + mavlink_log_critical(&_mavlink_log_pub, "Arm stick gesture disabled if arm switch in use\t") + /* EVENT + * @description MAN_ARM_GESTURE is now set to disable arm/disarm stick gesture. + */ + events::send(events::ID("rc_update_arm_stick_gesture_disabled_with_switch"), {events::Log::Info, events::LogInternal::Disabled}, + "Arm stick gesture disabled if arm switch in use"); + } + } + + // check for unsafe Airmode settings: yaw airmode requires disabling the stick arm gesture if (param_airmode != PARAM_INVALID && param_man_arm_gesture != PARAM_INVALID) { int32_t airmode = 0, man_arm_gesture = 0; param_get(param_airmode, &airmode);