diff --git a/src/modules/manual_control/ManualControl.cpp b/src/modules/manual_control/ManualControl.cpp
index c3b42c258e..851ae0f24f 100644
--- a/src/modules/manual_control/ManualControl.cpp
+++ b/src/modules/manual_control/ManualControl.cpp
@@ -41,6 +41,7 @@ ManualControl::ManualControl() :
ModuleParams(nullptr),
ScheduledWorkItem(MODULE_NAME, px4::wq_configurations::hp_default)
{
+ updateParams();
}
ManualControl::~ManualControl()
@@ -83,60 +84,6 @@ void ManualControl::Run()
_parameter_update_sub.copy(¶m_update);
updateParams();
-
- _stick_arm_hysteresis.set_hysteresis_time_from(false, _param_com_rc_arm_hyst.get() * 1_ms);
- _stick_disarm_hysteresis.set_hysteresis_time_from(false, _param_com_rc_arm_hyst.get() * 1_ms);
- _button_hysteresis.set_hysteresis_time_from(false, _param_com_rc_arm_hyst.get() * 1_ms);
-
- _selector.setRcInMode(_param_com_rc_in_mode.get());
- _selector.setTimeout(_param_com_rc_loss_t.get() * 1_s);
-
- // MAN_ARM_GESTURE
- if (_param_man_arm_gesture.get() == 1) {
- // RC_MAP_ARM_SW & MAN_ARM_GESTURE: disable arm gesture if an arm switch is configured
- param_t param_rc_map_arm_sw = param_find("RC_MAP_ARM_SW");
-
- if (param_rc_map_arm_sw != PARAM_INVALID) {
- int32_t rc_map_arm_sw = 0;
- param_get(param_rc_map_arm_sw, &rc_map_arm_sw);
-
- if (rc_map_arm_sw > 0) {
- _param_man_arm_gesture.set(0); // disable arm gesture
- _param_man_arm_gesture.commit();
-
- orb_advert_t mavlink_log_pub = nullptr;
- 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");
- }
- }
-
- // MC_AIRMODE & MAN_ARM_GESTURE: check for unsafe Airmode settings: yaw airmode requires disabling the stick arm gesture
- if ((_param_man_arm_gesture.get() == 1) && (_rotary_wing || _vtol)) {
- param_t param_mc_airmode = param_find("MC_AIRMODE");
-
- if (param_mc_airmode != PARAM_INVALID) {
- int32_t airmode = 0;
- param_get(param_mc_airmode, &airmode);
-
- if (airmode == 2) {
- airmode = 1; // change to roll/pitch airmode
- param_set(param_mc_airmode, &airmode);
-
- orb_advert_t mavlink_log_pub = nullptr;
- mavlink_log_critical(&mavlink_log_pub, "Yaw Airmode requires disabling the stick arm gesture\t")
- /* EVENT
- * @description MC_AIRMODE is now set to roll/pitch airmode.
- */
- events::send(events::ID("commander_airmode_requires_no_arm_gesture"), {events::Log::Error, events::LogInternal::Disabled},
- "Yaw Airmode requires disabling the stick arm gesture");
- }
- }
- }
- }
}
const hrt_abstime now = hrt_absolute_time();
@@ -327,6 +274,65 @@ void ManualControl::Run()
perf_end(_loop_perf);
}
+void ManualControl::updateParams()
+{
+ ModuleParams::updateParams();
+
+ _stick_arm_hysteresis.set_hysteresis_time_from(false, _param_com_rc_arm_hyst.get() * 1_ms);
+ _stick_disarm_hysteresis.set_hysteresis_time_from(false, _param_com_rc_arm_hyst.get() * 1_ms);
+ _button_hysteresis.set_hysteresis_time_from(false, _param_com_rc_arm_hyst.get() * 1_ms);
+
+ _selector.setRcInMode(_param_com_rc_in_mode.get());
+ _selector.setTimeout(_param_com_rc_loss_t.get() * 1_s);
+
+ // MAN_ARM_GESTURE
+ if (_param_man_arm_gesture.get() == 1) {
+ // RC_MAP_ARM_SW & MAN_ARM_GESTURE: disable arm gesture if an arm switch is configured
+ param_t param_rc_map_arm_sw = param_find("RC_MAP_ARM_SW");
+
+ if (param_rc_map_arm_sw != PARAM_INVALID) {
+ int32_t rc_map_arm_sw = 0;
+ param_get(param_rc_map_arm_sw, &rc_map_arm_sw);
+
+ if (rc_map_arm_sw > 0) {
+ _param_man_arm_gesture.set(0); // disable arm gesture
+ _param_man_arm_gesture.commit();
+
+ orb_advert_t mavlink_log_pub = nullptr;
+ 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");
+ }
+ }
+
+ // MC_AIRMODE & MAN_ARM_GESTURE: check for unsafe Airmode settings: yaw airmode requires disabling the stick arm gesture
+ if ((_param_man_arm_gesture.get() == 1) && (_rotary_wing || _vtol)) {
+ param_t param_mc_airmode = param_find("MC_AIRMODE");
+
+ if (param_mc_airmode != PARAM_INVALID) {
+ int32_t airmode = 0;
+ param_get(param_mc_airmode, &airmode);
+
+ if (airmode == 2) {
+ airmode = 1; // change to roll/pitch airmode
+ param_set(param_mc_airmode, &airmode);
+
+ orb_advert_t mavlink_log_pub = nullptr;
+ mavlink_log_critical(&mavlink_log_pub, "Yaw Airmode requires disabling the stick arm gesture\t")
+ /* EVENT
+ * @description MC_AIRMODE is now set to roll/pitch airmode.
+ */
+ events::send(events::ID("commander_airmode_requires_no_arm_gesture"), {events::Log::Error, events::LogInternal::Disabled},
+ "Yaw Airmode requires disabling the stick arm gesture");
+ }
+ }
+ }
+ }
+}
+
void ManualControl::processStickArming(const manual_control_setpoint_s &input)
{
// Arm gesture
diff --git a/src/modules/manual_control/ManualControl.hpp b/src/modules/manual_control/ManualControl.hpp
index d28166112e..bc056d45f0 100644
--- a/src/modules/manual_control/ManualControl.hpp
+++ b/src/modules/manual_control/ManualControl.hpp
@@ -78,6 +78,7 @@ private:
static constexpr int MAX_MANUAL_INPUT_COUNT = 3;
void Run() override;
+ void updateParams() override;
void processStickArming(const manual_control_setpoint_s &input);
static int8_t navStateFromParam(int32_t param_value);