FastLED 3.10.8
Loading...
Searching...
No Matches

◆ poll()

IChannelDriver::DriverState fl::SpiChannelEngineAdapter::poll ( )
overridevirtual

Query driver state and perform maintenance.

Returns
Current driver state (READY, BUSY, DRAINING, or ERROR)
Note
Checks isBusy(), releases buffers when complete

Implements fl::IChannelDriver.

Definition at line 261 of file spi_channel_adapter.cpp.hpp.

261 {
262 // Check if ANY controller is busy
263 bool anyBusy = false;
264 for (const auto& ctrl : mControllers) {
265 if (ctrl.controller && ctrl.controller->isBusy()) {
266 anyBusy = true;
267 break;
268 }
269 }
270
271 if (anyBusy) {
272 return DriverState::BUSY;
273 }
274
275 // All controllers idle - release transmitting channels
276 if (!mTransmittingChannels.empty()) {
277 FL_DBG("SpiChannelEngineAdapter: Releasing " << mTransmittingChannels.size() << " completed channels");
278
279 for (const auto& channel : mTransmittingChannels) {
280 if (channel) {
281 channel->setInUse(false);
282 }
283 }
284 mTransmittingChannels.clear();
285 }
286
287 // Check for draining state
288 if (!mEnqueuedChannels.empty()) {
289 return DriverState::DRAINING;
290 }
291
292 return DriverState::READY;
293}
fl::vector< ControllerInfo > mControllers
All managed controllers.
fl::vector< ChannelDataPtr > mEnqueuedChannels
Channels waiting for show()
fl::vector< ChannelDataPtr > mTransmittingChannels
Channels currently transmitting.
#define FL_DBG
Definition log.h:553

References FL_DBG, fl::FL_NO_EXCEPT, mControllers, mEnqueuedChannels, and mTransmittingChannels.

Referenced by ~SpiChannelEngineAdapter().

+ Here is the caller graph for this function: