From 897775f38d6fc141eb2cdc8fa927deccf2897f82 Mon Sep 17 00:00:00 2001 From: Matthias Grob Date: Thu, 9 Dec 2021 11:36:14 +0100 Subject: [PATCH] ManualControlSelector: Allow disabling stick input --- src/modules/commander/commander_params.c | 3 +- .../ManualControlSelectorTest.cpp | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/modules/commander/commander_params.c b/src/modules/commander/commander_params.c index 006603dcc1..6016fc6275 100644 --- a/src/modules/commander/commander_params.c +++ b/src/modules/commander/commander_params.c @@ -252,11 +252,12 @@ PARAM_DEFINE_INT32(COM_HOME_IN_AIR, 0); * * @group Commander * @min 0 - * @max 3 + * @max 4 * @value 0 RC Transmitter only * @value 1 Joystick only * @value 2 RC and Joystick with fallback * @value 3 RC or Joystick keep first + * @value 4 Stick input disabled */ PARAM_DEFINE_INT32(COM_RC_IN_MODE, 3); diff --git a/src/modules/manual_control/ManualControlSelectorTest.cpp b/src/modules/manual_control/ManualControlSelectorTest.cpp index beba41dbca..a6bd91cb65 100644 --- a/src/modules/manual_control/ManualControlSelectorTest.cpp +++ b/src/modules/manual_control/ManualControlSelectorTest.cpp @@ -219,6 +219,34 @@ TEST(ManualControlSelector, FirstInput) EXPECT_EQ(selector.instance(), 0); } +TEST(ManualControlSelector, DisabledInput) +{ + ManualControlSelector selector; + selector.setRcInMode(4); + selector.setTimeout(500_ms); + + uint64_t timestamp = some_time; + + manual_control_setpoint_s input {}; + // Reject MAVLink stick input + input.data_source = manual_control_setpoint_s::SOURCE_MAVLINK_0; + input.timestamp_sample = timestamp; + selector.updateWithNewInputSample(timestamp, input, 0); + + EXPECT_FALSE(selector.setpoint().valid); + EXPECT_EQ(selector.instance(), -1); + + timestamp += 100_ms; + + // Reject RC stick input + input.data_source = manual_control_setpoint_s::SOURCE_RC; + input.timestamp_sample = timestamp; + selector.updateWithNewInputSample(timestamp, input, 1); + + EXPECT_FALSE(selector.setpoint().valid); + EXPECT_EQ(selector.instance(), -1); +} + TEST(ManualControlSelector, RcTimeout) { ManualControlSelector selector;