FastLED 3.10.8
Loading...
Searching...
No Matches
fl::SpiChannelEngineAdapter Class Reference

Detailed Description

Adapter that wraps HW SPI controllers for ChannelManager.

This adapter implements the IChannelDriver interface by delegating to existing SpiHwBase controllers (SpiHw1/2/4/8/16). It handles channel data batching, transmission coordination, and polling state management.

Definition at line 64 of file spi_channel_adapter.h.

#include <spi_channel_adapter.h>

+ Inheritance diagram for fl::SpiChannelEngineAdapter:
+ Collaboration diagram for fl::SpiChannelEngineAdapter:

Classes

struct  ClockPinAssignment
 
struct  ClockPinGroup
 Group data structure for channels with same clock pin. More...
 
struct  ControllerInfo
 Information about a registered SPI hardware controller. More...
 

Public Member Functions

 ~SpiChannelEngineAdapter () FL_NO_EXCEPT override
 Destructor.
 
bool canHandle (const ChannelDataPtr &data) const FL_NO_EXCEPT override
 Check if adapter can handle channel data.
 
void enqueue (ChannelDataPtr channelData) FL_NO_EXCEPT override
 Enqueue channel data for transmission.
 
Capabilities getCapabilities () const FL_NO_EXCEPT override
 Get driver capabilities (SPI protocols only)
 
fl::string getName () const FL_NO_EXCEPT override
 Get adapter name for debugging.
 
int getPriority () const FL_NO_EXCEPT
 Get maximum priority among all controllers.
 
DriverState poll () FL_NO_EXCEPT override
 Query driver state and perform maintenance.
 
void show () FL_NO_EXCEPT override
 Trigger transmission of enqueued data.
 
- Public Member Functions inherited from fl::IChannelDriver
virtual ~IChannelDriver () FL_NO_EXCEPT=default
 Virtual destructor.
 
HandleResult canMatch (const ChannelRequest &request) const FL_NO_EXCEPT
 Predicate: can this driver match a (single- or multi-pin) request?
 
virtual DriverCapabilities getDriverCapabilities () const FL_NO_EXCEPT
 Driver-wide capability descriptor (declarative form).
 
virtual fl::span< const PinGroup > getPinGroups () const FL_NO_EXCEPT
 Per-resource group enumeration.
 
virtual void setPollNeededCallback (PollNeededCallback callback) FL_NO_EXCEPT
 Install the manager-owned poll-needed callback for ISR wakeups.
 
virtual bool waitDone (u32 timeoutMs=1000) FL_NO_EXCEPT
 Block until this driver finishes any in-flight transmit.
 
bool waitForReady (u32 timeoutMs=1000) FL_NO_EXCEPT
 Wait for driver to become READY.
 
bool waitForReadyOrDraining (u32 timeoutMs=1000) FL_NO_EXCEPT
 

Static Public Member Functions

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.
 

Private Member Functions

 SpiChannelEngineAdapter (const char *name) FL_NO_EXCEPT
 Private constructor - use create() factory method.
 
 SpiChannelEngineAdapter (const SpiChannelEngineAdapter &) FL_NO_EXCEPT=delete
 
 SpiChannelEngineAdapter (SpiChannelEngineAdapter &&) FL_NO_EXCEPT=delete
 
bool canControllerHandleClockPin (const ControllerInfo &ctrl, int clockPin) const FL_NO_EXCEPT
 Check if controller can handle this clock pin.
 
fl::vector< ClockPinGroup > groupByClockPin (fl::span< const ChannelDataPtr > channels) FL_NO_EXCEPT
 Group channels by clock pin for efficient transmission.
 
bool initializeControllerIfNeeded (ControllerInfo &ctrl, int clockPin, int dataPin) FL_NO_EXCEPT
 Initialize controller if needed for this clock pin.
 
SpiChannelEngineAdapter & operator= (const SpiChannelEngineAdapter &) FL_NO_EXCEPT=delete
 
SpiChannelEngineAdapter & operator= (SpiChannelEngineAdapter &&) FL_NO_EXCEPT=delete
 
int selectControllerForClockPin (int clockPin, Esp32SpiBus requestedBus) FL_NO_EXCEPT
 Select best controller for a given clock pin.
 
bool transmitBatch (fl::span< const ChannelDataPtr > channels) FL_NO_EXCEPT
 Transmit a batch of channels (all same clock pin)
 

Private Attributes

fl::vector< ClockPinAssignment > mClockPinAssignments
 Clock pin → controller mapping.
 
fl::vector< ControllerInfo > mControllers
 All managed controllers.
 
fl::vector< ChannelDataPtr > mEnqueuedChannels
 Channels waiting for show()
 
fl::string mName
 Engine name for debugging.
 
fl::vector< ChannelDataPtr > mTransmittingChannels
 Channels currently transmitting.
 

Friends

template<typename T, typename... Args>
fl::shared_ptr< T > fl::adl_barrier::make_shared (Args &&... args) FL_NO_EXCEPT
 Friend declaration for make_shared to access private constructor.
 

Additional Inherited Members

- Protected Member Functions inherited from fl::IChannelDriver
 IChannelDriver () FL_NO_EXCEPT=default
 
 IChannelDriver (const IChannelDriver &) FL_NO_EXCEPT=delete
 
 IChannelDriver (IChannelDriver &&) FL_NO_EXCEPT=delete
 
IChannelDriver & operator= (const IChannelDriver &) FL_NO_EXCEPT=delete
 
IChannelDriver & operator= (IChannelDriver &&) FL_NO_EXCEPT=delete
 
template<typename Condition>
bool waitForCondition (Condition condition, u32 timeoutMs=1000) FL_NO_EXCEPT
 

The documentation for this class was generated from the following files: