54#include "platforms/shared/spi_hw_base.h"
76 const char* adapterName
120 template<typename T, typename... Args>
CLEDController * controller
IChannelDriver() FL_NO_EXCEPT=default
bool transmitBatch(fl::span< const ChannelDataPtr > channels) FL_NO_EXCEPT
Transmit a batch of channels (all same clock pin)
fl::vector< ClockPinGroup > groupByClockPin(fl::span< const ChannelDataPtr > channels) FL_NO_EXCEPT
Group channels by clock pin for efficient transmission.
SpiChannelEngineAdapter(SpiChannelEngineAdapter &&) FL_NO_EXCEPT=delete
SpiChannelEngineAdapter(const SpiChannelEngineAdapter &) FL_NO_EXCEPT=delete
void enqueue(ChannelDataPtr channelData) FL_NO_EXCEPT override
Enqueue channel data for transmission.
fl::string mName
Engine name for debugging.
int getPriority() const FL_NO_EXCEPT
Get maximum priority among all controllers.
void show() FL_NO_EXCEPT override
Trigger transmission of enqueued data.
bool canHandle(const ChannelDataPtr &data) const FL_NO_EXCEPT override
Check if adapter can handle channel data.
fl::string getName() const FL_NO_EXCEPT override
Get adapter name for debugging.
fl::vector< ControllerInfo > mControllers
All managed controllers.
static fl::shared_ptr< SpiChannelEngineAdapter > create(fl::vector< fl::shared_ptr< SpiHwBase > > hwControllers, fl::vector< int > priorities, fl::vector< const char * > names, const char *adapterName) FL_NO_EXCEPT
Create unified adapter managing multiple controllers.
SpiChannelEngineAdapter & operator=(const SpiChannelEngineAdapter &) FL_NO_EXCEPT=delete
int selectControllerForClockPin(int clockPin, Esp32SpiBus requestedBus) FL_NO_EXCEPT
Select best controller for a given clock pin.
SpiChannelEngineAdapter(const char *name) FL_NO_EXCEPT
Private constructor - use create() factory method.
bool initializeControllerIfNeeded(ControllerInfo &ctrl, int clockPin, int dataPin) FL_NO_EXCEPT
Initialize controller if needed for this clock pin.
bool canControllerHandleClockPin(const ControllerInfo &ctrl, int clockPin) const FL_NO_EXCEPT
Check if controller can handle this clock pin.
DriverState poll() FL_NO_EXCEPT override
Query driver state and perform maintenance.
~SpiChannelEngineAdapter() FL_NO_EXCEPT override
Destructor.
friend fl::shared_ptr< T > fl::adl_barrier::make_shared(Args &&... args) FL_NO_EXCEPT
Friend declaration for make_shared to access private constructor.
fl::vector< ChannelDataPtr > mEnqueuedChannels
Channels waiting for show()
Capabilities getCapabilities() const FL_NO_EXCEPT override
Get driver capabilities (SPI protocols only)
fl::vector< ClockPinAssignment > mClockPinAssignments
Clock pin → controller mapping.
fl::vector< ChannelDataPtr > mTransmittingChannels
Channels currently transmitting.
fl::vector< ChannelDataPtr > channels
size_t controllerIndex
Index into mControllers.
Group data structure for channels with same clock pin.
Channel transmission data - lightweight DTO for driver transmission.
Esp32SpiBus
ESP-IDF SPI host selection for an individual clocked LED controller.
u8 u8 fract8 blur_amount FL_NO_EXCEPT
Base definition for an LED controller.
Driver state with optional error message.
ControllerInfo(fl::shared_ptr< SpiHwBase > ctrl, int prio, const char *n) FL_NO_EXCEPT
fl::shared_ptr< SpiHwBase > controller
Hardware instance.
int priority
Controller priority (higher = preferred)
fl::vector< int > assignedClockPins
Clock pins assigned to this controller.
fl::string name
Name (e.g., "SPI2", "SPI3", "I2S0")
bool isInitialized
Whether begin() has been called.
Information about a registered SPI hardware controller.