73template <fl::SpiChipset CHIPSET, EOrder RGB_ORDER, fl::Bus B, fl::u8 B_WHICH>
83 "SlimSpiBridgeController: Bus does not support SpiChipsetConfig");
109 FL_WARN_ONCE(
"SlimSpiBridgeController: driver '%s' is disabled - dropping frame",
110 driver->getName().c_str());
117 if (
mData->isInUse()) {
118 if (!driver->waitForReady()) {
119 FL_WARN_ONCE(
"SlimSpiBridgeController: driver '%s' did not become ready in "
120 "time - dropping frame", driver->getName().c_str());
129 }
else if (this->
getRgbw().active()) {
137 if (pixels.ditherActive()) {
143 mData->getData().clear();
147 driver->enqueue(
mData);
163#if defined(FASTLED_DISABLE_DYNAMIC_DRIVER) && FASTLED_DISABLE_DYNAMIC_DRIVER
175#if FASTLED_LOG_RUNTIME_ENABLED
176 if (!driver && !mBusWarned) {
177 FL_ERROR(
"SlimSpiBridgeController: no compatible driver found for bus '%s' - "
178 "cannot transmit", busKey.
c_str());
195 it.writeAPA102(&out,
false);
200 it.writeAPA102(&out,
true);
203 it.writeSK9822(&out,
false);
206 it.writeSK9822(&out,
true);
209 it.writeWS2801(&out);
212 it.writeWS2803(&out);
218 it.writeLPD8806(&out);
221 it.writeLPD6803(&out);
224 it.writeSM16716(&out);
227 it.writeHD108(&out,
false);
240#if FASTLED_LOG_RUNTIME_ENABLED
241 bool mBusWarned =
false;
Portable compile-time identifiers for LED channel buses.
Per-driver traits keyed on fl::Bus.
Phase 3b templated channel facade – Channel<Bus, Chipset> with compile-time bus/chipset enforcement.
CPixelLEDController(RegistrationMode mode)
Protected constructor with registration mode.
Rgbww getRgbww() const FL_NO_EXCEPT
Rgbw getRgbw() const FL_NO_EXCEPT
static ChannelDataPtr create(const ChipsetVariant &chipset, fl::vector_psram< u8 > &&encodedData=fl::vector_psram< u8 >(), ChannelPixelFormat pixelFormat=ChannelPixelFormat::RGB) FL_NO_EXCEPT
Create channel transmission data (modern variant-based API)
static ChannelManager & registry() FL_NO_EXCEPT
Get the singleton WITHOUT registering platform default drivers.
fl::shared_ptr< IChannelDriver > selectDriverForChannel(const ChannelDataPtr &data, const fl::string &affinity) FL_NO_EXCEPT
Select best driver for channel data (used by Channel::showPixels)
SlimSpiBridgeController(const SpiChipsetConfig &cfg) FL_NO_EXCEPT
static void encode(fl::PixelIterator &it, fl::vector_psram< u8 > &out) FL_NO_EXCEPT
Encode it into out using the writer selected by CHIPSET.
void init() FL_NO_EXCEPT override
Initialize the LED controller.
static constexpr Bus kBus
The bus actually used after resolving Bus::AUTO – mirrors TypedChannel<B, SpiChipsetConfig,...
const ChannelDataPtr & channelData() const FL_NO_EXCEPT
Expose the underlying ChannelDataPtr for conformance tests.
FL_STATIC_ASSERT(BusSupports< kBus, SpiChipsetConfig, B_WHICH >::value, "SlimSpiBridgeController: Bus does not support SpiChipsetConfig")
void showPixels(PixelController< RGB_ORDER > &pixels) FL_NO_EXCEPT override
fl::shared_ptr< IChannelDriver > resolveDriver() FL_NO_EXCEPT
Resolve the driver for this frame.
const char * c_str() const FL_NO_EXCEPT
static string from_literal(const char *literal) FL_NO_EXCEPT
defines the templated version of the CLEDController class
Channel transmission data - lightweight DTO for driver transmission.
Non-templated low level pixel data writing class.
#define FL_WARN_ONCE(...)
Centralized logging categories for FastLED hardware interfaces and subsystems.
Unified manager for channel drivers with priority-based fallback.
const char * busDriverName(Bus b, fl::u8 which=0, bool spi=false) FL_NO_EXCEPT
Concrete ChannelManager driver name for a portable bus.
fl::variant< ClocklessChipset, SpiChipsetConfig > ChipsetVariant
Bus
Portable public bus selector.
InputGamut g FL_NO_EXCEPT
@ SM16716
SM16716 LED chipset.
@ LPD6803
LPD6803 LED chipset.
@ APA102HD
APA102 LED chipset with 5-bit gamma correction.
@ HD107
Same as APA102, but in turbo 40-mhz mode.
@ DOTSTARHD
APA102HD LED chipset alias.
@ SK9822HD
SK9822 LED chipset with 5-bit gamma correction.
@ SK9822
SK9822 LED chipset.
@ DOTSTAR
APA102 LED chipset alias.
@ P9813
P9813 LED chipset.
@ APA102
APA102 LED chipset.
@ HD108
16-bit variant of HD107, always gamma corrected. No SD (standard definition) option available - all H...
@ LPD8806
LPD8806 LED chipset.
@ WS2803
WS2803 LED chipset.
@ MY9221
MY9221 12-channel LED driver (dual-edge clocked; 4 RGB LEDs per chip)
@ WS2801
WS2801 LED chipset.
@ HD107HD
Same as APA102HD, but in turbo 40-mhz mode.
Base definition for an LED controller.
Primary template — intentionally undefined.
Portable compile-time assertion wrapper.
SPI chipset configuration (data + clock pins)
static constexpr Bus value