Browse Source

ManualControl: avoid scheduling based on unchosen input

master
Matthias Grob 3 years ago
parent
commit
2b29df06fd
  1. 14
      src/modules/manual_control/ManualControl.cpp
  2. 1
      src/modules/manual_control/ManualControl.hpp

14
src/modules/manual_control/ManualControl.cpp

@ -226,8 +226,18 @@ void ManualControl::Run() @@ -226,8 +226,18 @@ void ManualControl::Run()
// If it's valid, this should really be valid but better safe than sorry.
const int instance = _selector.instance();
if (instance >= 0 && instance < MAX_MANUAL_INPUT_COUNT) {
_manual_control_input_subs[instance].registerCallback();
// Attach scheduling to new samples of the chosen input
if (instance != _previous_manual_control_input_instance) {
if ((0 <= _previous_manual_control_input_instance)
&& (_previous_manual_control_input_instance < MAX_MANUAL_INPUT_COUNT)) {
_manual_control_input_subs[_previous_manual_control_input_instance].unregisterCallback();
}
if ((0 <= instance) && (instance < MAX_MANUAL_INPUT_COUNT)) {
_manual_control_input_subs[instance].registerCallback();
}
_previous_manual_control_input_instance = instance;
}
_manual_control_switches_sub.registerCallback();

1
src/modules/manual_control/ManualControl.hpp

@ -131,6 +131,7 @@ private: @@ -131,6 +131,7 @@ private:
uORB::Publication<manual_control_setpoint_s> _manual_control_setpoint_pub{ORB_ID(manual_control_setpoint)};
uORB::SubscriptionInterval _parameter_update_sub{ORB_ID(parameter_update), 1_s};
int _previous_manual_control_input_instance{-1};
uORB::SubscriptionCallbackWorkItem _manual_control_input_subs[MAX_MANUAL_INPUT_COUNT] {
{this, ORB_ID(manual_control_input), 0},
{this, ORB_ID(manual_control_input), 1},

Loading…
Cancel
Save