FastLED 3.10.9
Loading...
Searching...
No Matches

◆ groupByClockPin()

fl::vector< SpiChannelEngineAdapter::ClockPinGroup > fl::SpiChannelEngineAdapter::groupByClockPin ( fl::span< const ChannelDataPtr > channels)
private

Group adjacent channels with matching pins, host, and clock rate.

Parameters
channelsSpan of channel data to group
Returns
Vector of groups in enqueue order

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

300 {
301 fl::vector<ClockPinGroup> groups;
302
303 for (const auto& channel : channels) {
304 if (!channel) {
305 continue;
306 }
307
308 // Extract clock pin from chipset configuration
309 const auto& chipset = channel->getChipset();
310 if (!chipset.is<SpiChipsetConfig>()) {
311 FL_WARN("SpiChannelEngineAdapter: Non-SPI chipset in groupByClockPin");
312 continue;
313 }
314
315 const SpiChipsetConfig& spiConfig = chipset.get<SpiChipsetConfig>();
316 int clockPin = spiConfig.clockPin;
317 int dataPin = channel->getPin();
318 u32 clockSpeedHz = spiConfig.timing.clock_hz;
319
320 // Preserve enqueue order when the same host alternates configurations.
321 if (!groups.empty()) {
322 ClockPinGroup& last = groups.back();
323 if (last.clockPin == clockPin && last.dataPin == dataPin &&
324 last.clockSpeedHz == clockSpeedHz &&
325 last.requestedBus == spiConfig.spiBus) {
326 last.channels.push_back(channel);
327 continue;
328 }
329 }
330
331 ClockPinGroup newGroup;
332 newGroup.clockPin = clockPin;
333 newGroup.dataPin = dataPin;
334 newGroup.clockSpeedHz = clockSpeedHz;
335 newGroup.requestedBus = spiConfig.spiBus;
336 newGroup.channels.push_back(channel);
337 groups.push_back(newGroup);
338 }
339
340 return groups;
341}
Channels sharing one SPI bus configuration.
bool empty() const FL_NO_EXCEPT
void push_back(const T &value) FL_NO_EXCEPT
Definition vector.h:624
T & back() FL_NO_EXCEPT
Definition vector.h:616
#define FL_WARN(...)
Definition log.h:437

References fl::vector< T >::back(), fl::SpiChannelEngineAdapter::ClockPinGroup::channels, fl::SpiEncoder::clock_hz, fl::SpiChannelEngineAdapter::ClockPinGroup::clockPin, fl::SpiChipsetConfig::clockPin, fl::SpiChannelEngineAdapter::ClockPinGroup::clockSpeedHz, fl::SpiChannelEngineAdapter::ClockPinGroup::dataPin, fl::vector_basic::empty(), fl::FL_NO_EXCEPT, FL_WARN, fl::vector< T >::push_back(), fl::SpiChannelEngineAdapter::ClockPinGroup::requestedBus, fl::SpiChipsetConfig::spiBus, and fl::SpiChipsetConfig::timing.

Referenced by show().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: