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

◆ initializeControllerIfNeeded()

bool fl::SpiChannelEngineAdapter::initializeControllerIfNeeded ( ControllerInfo & ctrl,
int clockPin,
int dataPin,
u32 clockSpeedHz )
private

Initialize controller if needed for this clock pin.

Parameters
ctrlController to initialize
clockPinClock pin for configuration
dataPinData pin for configuration
clockSpeedHzRequested SPI clock rate
Returns
true on success, false on error

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

155 {
156
157 if (ctrl.isInitialized) {
158 if (!ctrl.assignedClockPins.empty() &&
159 ctrl.assignedClockPins[0] == clockPin &&
160 ctrl.configuredDataPin == dataPin &&
161 ctrl.configuredClockSpeedHz == clockSpeedHz) {
162 return true;
163 }
164 ctrl.controller->end();
165 ctrl.isInitialized = false;
166 ctrl.assignedClockPins.clear();
167 }
168
169 // Initialize controller based on lane count
170 u8 lanes = ctrl.controller->getLaneCount();
171
172 if (lanes == 1) {
173 SpiHw1::Config config;
174 config.bus_num = static_cast<fl::u8>(ctrl.controller->getBusId());
175 config.clock_pin = clockPin;
176 config.data_pin = dataPin;
177 config.clock_speed_hz = clockSpeedHz;
178 config.max_transfer_sz = 65536;
179
180 if (!ctrl.controller->begin(&config)) {
181 FL_WARN("SpiChannelEngineAdapter: Failed to initialize " << ctrl.name);
182 return false;
183 }
184 } else {
185 // TODO: Multi-lane initialization (SpiHw2/4/8/16)
186 FL_WARN("SpiChannelEngineAdapter: Multi-lane init not yet implemented");
187 return false;
188 }
189
190 ctrl.isInitialized = true;
191 ctrl.configuredDataPin = dataPin;
192 ctrl.configuredClockSpeedHz = clockSpeedHz;
193 ctrl.assignedClockPins.push_back(clockPin);
194
195 FL_DBG("SpiChannelEngineAdapter: Initialized " << ctrl.name << " with clock pin " << clockPin);
196
197 return true;
198}
#define FL_WARN(...)
Definition log.h:437
#define FL_DBG
Definition log.h:553
unsigned char u8
Definition s16x16x4.h:132
unsigned char u8
Definition stdint.h:131

References FL_DBG, fl::FL_NO_EXCEPT, and FL_WARN.

Referenced by transmitBatch().

+ Here is the caller graph for this function: