FastLED 3.9.15
Loading...
Searching...
No Matches
spi.h
Go to the documentation of this file.
1#pragma once
2
8
9
10#include "fl/stl/stdint.h"
11#include "fl/stl/unique_ptr.h"
12#include "fl/stl/span.h"
13
14// SPI components
15#include "fl/channels/spi/config.h" // IWYU pragma: export
16#include "fl/channels/spi/transaction.h" // IWYU pragma: export
17#include "fl/channels/spi/device.h" // IWYU pragma: export
18#include "fl/channels/spi/lane.h" // IWYU pragma: export
19#include "fl/channels/spi/write_result.h" // IWYU pragma: export
20#include "fl/channels/spi/multi_lane_device.h" // IWYU pragma: export
21// IWYU pragma: begin_keep
22#include "platforms/shared/spi_types.h" // ok platform headers
23#include "fl/stl/noexcept.h"
24// IWYU pragma: end_keep // ok platform headers
25
26namespace fl {
27
28// ============================================================================
29// Public API - Main SPI Device Class
30// ============================================================================
31
53class Spi {
54public:
57
63 Spi(int clock_pin, fl::span<const int> data_pins,
65 u32 clock_speed_hz = 0xffffffff);
66
69 explicit Spi(const SpiConfig& config);
70
72 Spi(Spi&& other) FL_NOEXCEPT;
73
75 Spi& operator=(Spi&& other) FL_NOEXCEPT;
76
80
82 bool ok() const { return is_ok; }
83
85 SPIError error() const { return error_code; }
86
88 explicit operator bool() const { return ok(); }
89
118 template<typename... Spans>
119 WriteResult write(Spans&&... lanes) {
120 if (!device) {
121 return WriteResult("SPI device not initialized");
122 }
123 return device->write(fl::forward<Spans>(lanes)...);
124 }
125
134 bool wait(u32 timeout_ms = 0xFFFFFFFF);
135
138 spi::MultiLaneDevice* get() { return device.get(); }
139 const spi::MultiLaneDevice* get() const { return device.get(); }
140
141private:
143 bool is_ok;
144 SPIError error_code;
145};
146
147// ============================================================================
148// Type Aliases
149// ============================================================================
150
152
153template<typename T = void>
155
156} // namespace fl
~Spi() FL_NOEXCEPT
Destructor (defined out-of-line in spi.cpp.hpp to keep MultiLaneDevice destructor out of callers' com...
WriteResult write(Spans &&... lanes)
Write multiple lanes in parallel (variadic template)
Definition spi.h:119
Spi() FL_NOEXCEPT
Default constructor - creates device in error state.
Definition spi.h:56
SPIError error() const
Get error code (only meaningful if !ok())
Definition spi.h:85
bool wait(u32 timeout_ms=0xFFFFFFFF)
Wait for async write operation to complete.
Definition spi.cpp.hpp:79
const spi::MultiLaneDevice * get() const
Definition spi.h:139
Spi & operator=(Spi &&other) FL_NOEXCEPT
Move assignment.
Definition spi.cpp.hpp:69
SPIError error_code
Definition spi.h:144
spi::MultiLaneDevice * get()
Get access to underlying device (for advanced operations)
Definition spi.h:138
fl::unique_ptr< spi::MultiLaneDevice > device
Definition spi.h:142
bool is_ok
Definition spi.h:143
bool ok() const
Check if device was created and initialized successfully.
Definition spi.h:82
SPI Device - RAII wrapper for multi-lane SPI.
Definition spi.h:53
Multi-lane SPI device (1-8 independent LED strips)
Handle for asynchronous SPI operations.
Definition transaction.h:38
SPI Device class for single-channel communication.
Configuration structure for SPI communication.
Lane class for multi-lane SPI devices.
Multi-lane SPI device for 2-8 independent LED strips.
constexpr T && forward(typename remove_reference< T >::type &t) FL_NOEXCEPT
Definition s16x16x4.h:234
fl::result< T, SPIError > Result
Definition transaction.h:29
spi_output_mode_t
SPI output mode for multi-lane devices.
Definition config.h:25
@ SPI_HW
Use DMA-capable hardware (Async or Sync), supports 1/2/4/8 lanes depending on platform.
Definition config.h:27
spi::Transaction SpiTransaction
Definition spi.h:151
@ NOT_INITIALIZED
Object not initialized.
Definition expected.h:52
spi::Result< T > SpiResult
Definition spi.h:154
Base definition for an LED controller.
Definition crgb.hpp:179
#define FL_NOEXCEPT
Configuration for SPI device (supports 1-8 lanes)
Definition config.h:44
Result of a write operation.
Transaction class for asynchronous SPI operations.
Result type for SPI write operations.