diff --git a/libraries/AP_RCProtocol/AP_RCProtocol.cpp b/libraries/AP_RCProtocol/AP_RCProtocol.cpp index 7ad713ef5c..65a63cfb0f 100644 --- a/libraries/AP_RCProtocol/AP_RCProtocol.cpp +++ b/libraries/AP_RCProtocol/AP_RCProtocol.cpp @@ -56,13 +56,11 @@ void AP_RCProtocol::process_pulse(uint32_t width_s0, uint32_t width_s1) } // otherwise scan all protocols - rcprotocol_t last_protocol = AP_RCProtocol::NONE; -#ifdef HAL_RCIN_PULSE_PPM_ONLY - // only uses pulses for PPM on this board, using process_byte() for - // other protocols - last_protocol = (rcprotocol_t)1; -#endif - for (uint8_t i = 0; i < last_protocol; i++) { + for (uint8_t i = 0; i < AP_RCProtocol::NONE; i++) { + if (_disabled_for_pulses & (1U << i)) { + // this protocol is disabled for pulse input + continue; + } if (backend[i] != nullptr) { backend[i]->process_pulse(width_s0, width_s1); if (backend[i]->new_input()) { diff --git a/libraries/AP_RCProtocol/AP_RCProtocol.h b/libraries/AP_RCProtocol/AP_RCProtocol.h index 11acedebd7..7ab0282039 100644 --- a/libraries/AP_RCProtocol/AP_RCProtocol.h +++ b/libraries/AP_RCProtocol/AP_RCProtocol.h @@ -45,6 +45,11 @@ public: } void process_pulse(uint32_t width_s0, uint32_t width_s1); void process_byte(uint8_t byte, uint32_t baudrate); + + void disable_for_pulses(enum rcprotocol_t protocol) { + _disabled_for_pulses |= (1U<<(uint8_t)protocol); + } + enum rcprotocol_t protocol_detected() { return _detected_protocol; @@ -61,6 +66,7 @@ public: private: enum rcprotocol_t _detected_protocol = NONE; + uint16_t _disabled_for_pulses; bool _detected_with_bytes; AP_RCProtocol_Backend *backend[NONE]; bool _new_input = false; diff --git a/libraries/AP_RCProtocol/AP_RCProtocol_PPMSum.h b/libraries/AP_RCProtocol/AP_RCProtocol_PPMSum.h index ae2ff9a431..815f189fd9 100644 --- a/libraries/AP_RCProtocol/AP_RCProtocol_PPMSum.h +++ b/libraries/AP_RCProtocol/AP_RCProtocol_PPMSum.h @@ -18,8 +18,6 @@ #include "AP_RCProtocol.h" -#define MAX_PPM_CHANNELS 16 - class AP_RCProtocol_PPMSum : public AP_RCProtocol_Backend { public: AP_RCProtocol_PPMSum(AP_RCProtocol &_frontend) : AP_RCProtocol_Backend(_frontend) {} @@ -30,4 +28,4 @@ private: int8_t _channel_counter; uint16_t _pulse_capt[MAX_RCIN_CHANNELS]; } ppm_state; -}; \ No newline at end of file +};