diff --git a/libraries/RC_Channel/RC_Channel.cpp b/libraries/RC_Channel/RC_Channel.cpp index 899c1f3e06..772a80f99c 100644 --- a/libraries/RC_Channel/RC_Channel.cpp +++ b/libraries/RC_Channel/RC_Channel.cpp @@ -126,9 +126,9 @@ RC_Channel::get_reverse(void) const bool RC_Channel::update(void) { - if (has_override() && !(*RC_Channels::options & RC_IGNORE_OVERRIDES)) { + if (has_override() && !rc().ignore_overrides()) { radio_in = override_value; - } else if (!(*RC_Channels::options & RC_IGNORE_RECEIVER)) { + } else if (!rc().ignore_receiver()) { radio_in = hal.rcin->read(ch_in); } else { return false; diff --git a/libraries/RC_Channel/RC_Channel.h b/libraries/RC_Channel/RC_Channel.h index 0654f8cac4..08ef6114a7 100644 --- a/libraries/RC_Channel/RC_Channel.h +++ b/libraries/RC_Channel/RC_Channel.h @@ -16,12 +16,6 @@ public: // Constructor RC_Channel(void); - enum InputIgnore { - RC_IGNORE_RECEIVER = (1 << 0), // RC receiver modules - RC_IGNORE_OVERRIDES = (1 << 1), // MAVLink overrides - RC_IGNORE_FAILSAFE = (1 << 2), // ignore RC failsafe bits - }; - enum ChannelType { RC_CHANNEL_TYPE_ANGLE = 0, RC_CHANNEL_TYPE_RANGE = 1, @@ -200,6 +194,7 @@ protected: // no action by default (e.g. Tracker, Sub, who do their own thing) }; + private: // pwm is stored here @@ -335,10 +330,26 @@ public: } // should we ignore RC failsafe bits from receivers? - static bool ignore_rc_failsafe(void) { - return options && ((*options) & RC_Channel::RC_IGNORE_FAILSAFE) != 0; + bool ignore_rc_failsafe(void) const { + return _options & uint32_t(Option::IGNORE_FAILSAFE); } - + + bool ignore_overrides() const { + return _options & uint32_t(Option::IGNORE_OVERRIDES); + } + + bool ignore_receiver() const { + return _options & uint32_t(Option::IGNORE_RECEIVER); + } + +protected: + + enum class Option { + IGNORE_RECEIVER = (1 << 0), // RC receiver modules + IGNORE_OVERRIDES = (1 << 1), // MAVLink overrides + IGNORE_FAILSAFE = (1 << 2), // ignore RC failsafe bits + }; + private: static RC_Channels *_singleton; // this static arrangement is to avoid static pointers in AP_Param tables @@ -346,7 +357,6 @@ private: static bool has_new_overrides; static AP_Float *override_timeout; - static AP_Int32 *options; AP_Float _override_timeout; AP_Int32 _options; diff --git a/libraries/RC_Channel/RC_Channels.cpp b/libraries/RC_Channel/RC_Channels.cpp index 631ccd4c87..c003dd40d7 100644 --- a/libraries/RC_Channel/RC_Channels.cpp +++ b/libraries/RC_Channel/RC_Channels.cpp @@ -30,7 +30,6 @@ extern const AP_HAL::HAL& hal; bool RC_Channels::has_new_overrides; AP_Float *RC_Channels::override_timeout; -AP_Int32 *RC_Channels::options; /* channels group object constructor @@ -38,7 +37,6 @@ AP_Int32 *RC_Channels::options; RC_Channels::RC_Channels(void) { override_timeout = &_override_timeout; - options = &_options; // set defaults from the parameter table AP_Param::setup_object_defaults(this, var_info);