diff --git a/libraries/AP_RCProtocol/AP_RCProtocol.h b/libraries/AP_RCProtocol/AP_RCProtocol.h index 55b1960bac..f7ba5cf2df 100644 --- a/libraries/AP_RCProtocol/AP_RCProtocol.h +++ b/libraries/AP_RCProtocol/AP_RCProtocol.h @@ -67,6 +67,13 @@ public: void process_handshake(uint32_t baudrate); void update(void); + bool failsafe_active() const { + return _failsafe_active; + } + void set_failsafe_active(bool active) { + _failsafe_active = active; + } + void disable_for_pulses(enum rcprotocol_t protocol) { _disabled_for_pulses |= (1U<<(uint8_t)protocol); } @@ -147,6 +154,7 @@ private: AP_RCProtocol_Backend *backend[NONE]; bool _new_input; uint32_t _last_input_ms; + bool _failsafe_active; bool _valid_serial_prot; // optional additional uart diff --git a/libraries/AP_RCProtocol/AP_RCProtocol_Backend.cpp b/libraries/AP_RCProtocol/AP_RCProtocol_Backend.cpp index 6931ee9775..3459f1748f 100644 --- a/libraries/AP_RCProtocol/AP_RCProtocol_Backend.cpp +++ b/libraries/AP_RCProtocol/AP_RCProtocol_Backend.cpp @@ -64,7 +64,11 @@ void AP_RCProtocol_Backend::add_input(uint8_t num_values, uint16_t *values, bool memcpy(_pwm_values, values, num_values*sizeof(uint16_t)); _num_channels = num_values; rc_frame_count++; -#if !APM_BUILD_TYPE(APM_BUILD_iofirmware) + frontend.set_failsafe_active(in_failsafe); +#if APM_BUILD_TYPE(APM_BUILD_iofirmware) + // failsafed is sorted out in AP_IOMCU.cpp + in_failsafe = false; +#else if (rc().ignore_rc_failsafe()) { in_failsafe = false; }