FastLED 3.10.9
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 264 of file spi_channel_adapter.cpp.hpp.

264 {
265 // Check if ANY controller is busy
266 bool anyBusy = false;
267 for (const auto& ctrl : mControllers) {
268 if (ctrl.controller && ctrl.controller->isBusy()) {
269 anyBusy = true;
270 break;
271 }
272 }
273
274 if (anyBusy) {
275 return DriverState::BUSY;
276 }
277
278 // All controllers idle - release transmitting channels
279 if (!mTransmittingChannels.empty()) {
280 FL_DBG("SpiChannelEngineAdapter: Releasing " << mTransmittingChannels.size() << " completed channels");
281
282 for (const auto& channel : mTransmittingChannels) {
283 if (channel) {
284 channel->setInUse(false);
285 }
286 }
287 mTransmittingChannels.clear();
288 }
289
290 // Check for draining state
291 if (!mEnqueuedChannels.empty()) {
292 return DriverState::DRAINING;
293 }
294
295 return DriverState::READY;
296}
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: