FastLED 3.10.8
Loading...
Searching...
No Matches
data.cpp.hpp
Go to the documentation of this file.
1
3
4#include "fl/channels/data.h"
5#include "fl/stl/algorithm.h"
6#include "fl/stl/cstring.h"
7#include "fl/log/log.h"
8#include "fl/stl/noexcept.h"
9
10namespace fl {
11
12ChannelDataPtr ChannelData::create(
13 const ChipsetVariant& chipset,
14 fl::vector_psram<u8>&& encodedData,
15 ChannelPixelFormat pixelFormat
18 chipset, fl::move(encodedData), pixelFormat);
19}
20
21ChannelDataPtr ChannelData::create(
22 int pin,
23 const ChipsetTimingConfig& timing,
24 fl::vector_psram<u8>&& encodedData,
25 ChannelPixelFormat pixelFormat
28 pin, timing, fl::move(encodedData), pixelFormat);
29}
30
32 if (const ClocklessChipset* cs = mChipset.ptr<ClocklessChipset>()) {
33 return cs->pin;
34 }
35 if (const SpiChipsetConfig* spi = mChipset.ptr<SpiChipsetConfig>()) {
36 return spi->dataPin;
37 }
38 return -1;
39}
40
42 if (const ClocklessChipset* cs = mChipset.ptr<ClocklessChipset>()) {
43 return cs->timing;
44 }
45 static const ChipsetTimingConfig sEmpty(0, 0, 0, 0);
46 return sEmpty;
47}
48
50 const ChipsetVariant& chipset,
51 fl::vector_psram<u8>&& encodedData,
52 ChannelPixelFormat pixelFormat
54 : mChipset(chipset)
55 , mPixelFormat(pixelFormat)
56 , mEncodedData(fl::move(encodedData))
57{}
58
60 int pin,
61 const ChipsetTimingConfig& timing,
62 fl::vector_psram<u8>&& encodedData,
63 ChannelPixelFormat pixelFormat
65 : mChipset(ClocklessChipset(pin, timing))
66 , mPixelFormat(pixelFormat)
67 , mEncodedData(fl::move(encodedData))
68{}
69
71 size_t targetSize = dst.size();
72 size_t currentSize = mEncodedData.size();
73
74 // Destination must be at least as large as current data
75 if (targetSize < currentSize) {
76 return; // or throw? For now, silently fail
77 }
78
79 // Create source span from encoded data
80 fl::span<const u8> src(mEncodedData.data(), currentSize);
81
83 // Use custom padding generator (writes directly to dst)
84 mPaddingGenerator(src, dst);
85 } else {
86 // Default behavior: left-pad with zeros, then memcopy data
87 // Padding bytes go out first to non-existent pixels
88 size_t paddingSize = targetSize - currentSize;
89 if (paddingSize > 0) {
90 fl::fill(dst.begin(), dst.begin() + paddingSize, u8(0));
91 }
92 fl::memcopy(dst.data() + paddingSize, src.data(), currentSize);
93 }
94}
95
97
98} // namespace fl
~ChannelData()
Destructor with debug logging.
const ChipsetTimingConfig & getTiming() const FL_NO_EXCEPT
Get the timing configuration (clockless chipsets only)
Definition data.cpp.hpp:41
ChannelData(const ChipsetVariant &chipset, fl::vector_psram< u8 > &&encodedData, ChannelPixelFormat pixelFormat) FL_NO_EXCEPT
Private constructor - variant-based (modern API)
Definition data.cpp.hpp:49
static ChannelDataPtr create(const ChipsetVariant &chipset, fl::vector_psram< u8 > &&encodedData=fl::vector_psram< u8 >(), ChannelPixelFormat pixelFormat=ChannelPixelFormat::RGB) FL_NO_EXCEPT
Create channel transmission data (modern variant-based API)
Definition data.cpp.hpp:12
void writeWithPadding(fl::span< u8 > dst) FL_NO_EXCEPT
Write encoded data with padding to destination buffer.
Definition data.cpp.hpp:70
ChipsetVariant mChipset
Chipset configuration (clockless or SPI)
Definition data.h:189
ChannelPixelFormat mPixelFormat
Explicit byte layout for encoded data.
Definition data.h:190
fl::vector_psram< u8 > mEncodedData
Encoded transmission bytes (PSRAM)
Definition data.h:192
int getPin() const FL_NO_EXCEPT
Get the GPIO pin number.
Definition data.cpp.hpp:31
PaddingGenerator mPaddingGenerator
Optional padding generator for block-size alignment.
Definition data.h:191
const T * data() const FL_NO_EXCEPT
Definition span.h:486
Channel transmission data - lightweight DTO for driver transmission.
Centralized logging categories for FastLED hardware interfaces and subsystems.
constexpr remove_reference< T >::type && move(T &&t) FL_NO_EXCEPT
Definition move.h:30
shared_ptr< T > make_shared(Args &&... args) FL_NO_EXCEPT
Definition shared_ptr.h:423
void fill(Iterator first, Iterator last, const T &value) FL_NO_EXCEPT
Definition algorithm.h:207
unsigned char u8
Definition stdint.h:131
u8 u8 fract8 blur_amount FL_NO_EXCEPT
Definition blur.h:186
fl::variant< ClocklessChipset, SpiChipsetConfig > ChipsetVariant
Definition config.h:157
void * memcopy(void *dest, const void *src, size_t n) FL_NO_EXCEPT
Definition cstring.h:163
ChannelPixelFormat
Pixel byte layout carried by encoded channel data.
Definition data.h:25
Base definition for an LED controller.
Definition crgb.hpp:179
Runtime bit-period timing for a clockless chipset.
Clockless chipset configuration (single data pin)
Definition config.h:33
SPI chipset configuration (data + clock pins)
Definition config.h:103