5#include "platforms/is_platform.h"
8#include "platforms/shared/rx_device_dummy.h"
15#include "platforms/esp/32/drivers/i2s_rx/i2s_rx_sampler.h"
16#include "platforms/esp/32/drivers/parlio_rx/parlio_rx_sampler.h"
17#include "platforms/esp/32/drivers/rmt_rx/rmt_rx_channel.h"
18#include "platforms/esp/32/drivers/gpio_isr_rx/gpio_isr_rx.h"
19#include "platforms/esp/32/feature_flags/enabled.h"
25#include "platforms/arm/teensy/teensy4_common/rx_flexio_channel.h"
26#include "platforms/arm/teensy/teensy4_common/rx_flexpwm_channel.h"
32#include "platforms/shared/rx_device_native.h"
39#include "platforms/arm/lpc/rx_sct_capture.h"
45#include "platforms/arm/rp/rpcommon/rx_pio_channel.h"
51#include "platforms/esp/8266/rx_device_i2s_rx.h"
60 return RpPioRxDevice::create(pin);
61#elif defined(FL_IS_STUB)
62 return NativeRxDevice::create(pin);
72 "RX devices not supported on this platform"
84 u32 t0h = timing_3phase.T1;
85 u32 t0l = timing_3phase.T2 + timing_3phase.T3;
86 u32 t1h = timing_3phase.T1 + timing_3phase.T2;
87 u32 t1l = timing_3phase.T3;
92 result.t0h_min_ns = (t0h > tolerance_ns) ? (t0h - tolerance_ns) : 0;
93 result.t0h_max_ns = t0h + tolerance_ns;
94 result.t0l_min_ns = (t0l > tolerance_ns) ? (t0l - tolerance_ns) : 0;
95 result.t0l_max_ns = t0l + tolerance_ns;
98 result.t1h_min_ns = (t1h > tolerance_ns) ? (t1h - tolerance_ns) : 0;
99 result.t1h_max_ns = t1h + tolerance_ns;
100 result.t1l_min_ns = (t1l > tolerance_ns) ? (t1l - tolerance_ns) : 0;
101 result.t1l_max_ns = t1l + tolerance_ns;
104 result.reset_min_us = timing_3phase.RESET;
134#if (FASTLED_ESP32_HAS_RMT && !FASTLED_ESP32_RMT5_ONLY_PLATFORM && !FASTLED_RMT5) || FASTLED_RMT5
135 auto device = RmtRxChannel::create(pin);
149 auto device = GpioIsrRx::create(pin);
174#if FASTLED_ESP32_HAS_I2S
175 auto device = createI2sRxSampler(pin);
187 auto device = createParlioRxSampler(pin);
206#elif defined(FL_IS_TEENSY_4X)
211 auto device = FlexPwmRxChannel::create(pin);
223 auto device = FlexIoRxChannel::create(pin);
270#elif defined(FL_IS_ARM_LPC)
287 auto device = LpcSctRxChannel::create(pin);
328#elif defined(FL_IS_STUB)
333 return NativeRxDevice::create(pin);
339 return NativeRxDevice::create(pin);
345 return NativeRxDevice::create(pin);
353 return NativeRxDevice::create(pin);
373 return NativeRxDevice::create(pin);
382#elif defined(FL_IS_ESP8266)
390 return Esp8266I2sRxDevice::create(pin);
397 "ESP8266 has no fast GPIO-ISR RX (see #4945); use RxBackend::I2S_RX");
static fl::shared_ptr< RxDevice > create(int pin) FL_NO_EXCEPT
Template factory method to create RX device by type.
static fl::shared_ptr< RxDevice > createDummy() FL_NO_EXCEPT
Create dummy RxDevice instance (default fallback)
Centralized LED chipset timing definitions with nanosecond precision.
shared_ptr< T > make_shared(Args &&... args) FL_NO_EXCEPT
u8 u8 fract8 blur_amount FL_NO_EXCEPT
ChipsetTiming4Phase make4PhaseTiming(const ChipsetTiming &timing_3phase, u32 tolerance_ns) FL_NO_EXCEPT
Create 4-phase RX timing from 3-phase chipset timing with tolerance.
expected< T, E > result
Alias for expected (Rust-style naming)
Base definition for an LED controller.
4-phase RX timing thresholds for chipset detection
Generic chipset timing entry Provides T1, T2, T3 timing parameters in nanoseconds for any LED protoco...
Common RX interfaces and shared types.