FastLED 3.9.15
Loading...
Searching...
No Matches

◆ Spi() [3/4]

fl::Spi::Spi ( const SpiConfig & config)
explicit

Construct from SpiConfig.

Parameters
configSPI configuration

Definition at line 24 of file spi.cpp.hpp.

25 : is_ok(false), error_code(SPIError::NOT_INITIALIZED) {
26
27 // Validate number of lanes
28 size_t num_lanes = config.data_pins.size();
29 if (num_lanes < 1 || num_lanes > 8) {
30 FL_WARN("fl::Spi: Invalid number of data pins (" << num_lanes << "), must be 1-8");
31 error_code = SPIError::NOT_INITIALIZED;
32 return;
33 }
34
35 // Convert SpiConfig to MultiLaneDevice::Config
36 spi::MultiLaneDevice::Config ml_config;
37 ml_config.clock_pin = static_cast<u8>(config.clock_pin);
38 ml_config.data_pins.resize(config.data_pins.size());
39 for (size_t i = 0; i < config.data_pins.size(); i++) {
40 ml_config.data_pins[i] = static_cast<u8>(config.data_pins[i]);
41 }
42 ml_config.clock_speed_hz = config.clock_speed_hz;
43 ml_config.mode = config.spi_mode;
44
45 // Create device
47 FL_DBG("fl::Spi: Created MultiLaneDevice with " << num_lanes << " lane(s)");
48
49 // Initialize device
50 auto begin_result = device->begin();
51 if (begin_result) {
52 // begin() returned an error (optional has a value)
53 FL_WARN("fl::Spi: begin() failed");
54 error_code = SPIError::NOT_INITIALIZED;
55 device.reset();
56 return;
57 }
58
59 is_ok = true;
60}
SPIError error_code
Definition spi.h:144
fl::unique_ptr< spi::MultiLaneDevice > device
Definition spi.h:142
bool is_ok
Definition spi.h:143
#define FL_WARN(X)
Definition log.h:276
#define FL_DBG
Definition log.h:388
unsigned char u8
Definition stdint.h:131
fl::enable_if<!fl::is_array< T >::value, unique_ptr< T > >::type make_unique(Args &&... args) FL_NOEXCEPT
Definition unique_ptr.h:261

References fl::spi::MultiLaneDevice::Config::clock_pin, fl::SpiConfig::clock_pin, fl::spi::MultiLaneDevice::Config::clock_speed_hz, fl::SpiConfig::clock_speed_hz, fl::spi::MultiLaneDevice::Config::data_pins, fl::SpiConfig::data_pins, device, error_code, FL_DBG, FL_WARN, is_ok, fl::make_unique(), fl::spi::MultiLaneDevice::Config::mode, fl::NOT_INITIALIZED, fl::vector< T >::resize(), fl::vector_basic::size(), and fl::SpiConfig::spi_mode.

+ Here is the call graph for this function: