FastLED 3.9.15
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
16 return fl::make_shared<ChannelData>(chipset, fl::move(encodedData));
17}
18
19ChannelDataPtr ChannelData::create(
20 int pin,
21 const ChipsetTimingConfig& timing,
22 fl::vector_psram<u8>&& encodedData
24 return fl::make_shared<ChannelData>(pin, timing, fl::move(encodedData));
25}
26
28 if (const ClocklessChipset* cs = mChipset.ptr<ClocklessChipset>()) {
29 return cs->pin;
30 }
31 if (const SpiChipsetConfig* spi = mChipset.ptr<SpiChipsetConfig>()) {
32 return spi->dataPin;
33 }
34 return -1;
35}
36
38 if (const ClocklessChipset* cs = mChipset.ptr<ClocklessChipset>()) {
39 return cs->timing;
40 }
41 static const ChipsetTimingConfig sEmpty(0, 0, 0, 0);
42 return sEmpty;
43}
44
46 const ChipsetVariant& chipset,
47 fl::vector_psram<u8>&& encodedData
49 : mChipset(chipset)
50 , mEncodedData(fl::move(encodedData))
51{}
52
54 int pin,
55 const ChipsetTimingConfig& timing,
56 fl::vector_psram<u8>&& encodedData
58 : mChipset(ClocklessChipset(pin, timing))
59 , mEncodedData(fl::move(encodedData))
60{}
61
63 size_t targetSize = dst.size();
64 size_t currentSize = mEncodedData.size();
65
66 // Destination must be at least as large as current data
67 if (targetSize < currentSize) {
68 return; // or throw? For now, silently fail
69 }
70
71 // Create source span from encoded data
72 fl::span<const u8> src(mEncodedData.data(), currentSize);
73
75 // Use custom padding generator (writes directly to dst)
76 mPaddingGenerator(src, dst);
77 } else {
78 // Default behavior: left-pad with zeros, then memcopy data
79 // Padding bytes go out first to non-existent pixels
80 size_t paddingSize = targetSize - currentSize;
81 if (paddingSize > 0) {
82 fl::fill(dst.begin(), dst.begin() + paddingSize, u8(0));
83 }
84 fl::memcopy(dst.data() + paddingSize, src.data(), currentSize);
85 }
86}
87
89
90} // namespace fl
~ChannelData()
Destructor with debug logging.
void writeWithPadding(fl::span< u8 > dst) FL_NOEXCEPT
Write encoded data with padding to destination buffer.
Definition data.cpp.hpp:62
const ChipsetTimingConfig & getTiming() const FL_NOEXCEPT
Get the timing configuration (clockless chipsets only)
Definition data.cpp.hpp:37
ChannelData(const ChipsetVariant &chipset, fl::vector_psram< u8 > &&encodedData) FL_NOEXCEPT
Private constructor - variant-based (modern API)
Definition data.cpp.hpp:45
int getPin() const FL_NOEXCEPT
Get the GPIO pin number.
Definition data.cpp.hpp:27
static ChannelDataPtr create(const ChipsetVariant &chipset, fl::vector_psram< u8 > &&encodedData=fl::vector_psram< u8 >()) FL_NOEXCEPT
Create channel transmission data (modern variant-based API)
Definition data.cpp.hpp:12
ChipsetVariant mChipset
Chipset configuration (clockless or SPI)
Definition data.h:146
fl::vector_psram< u8 > mEncodedData
Encoded transmission bytes (PSRAM)
Definition data.h:148
PaddingGenerator mPaddingGenerator
Optional padding generator for block-size alignment.
Definition data.h:147
const T * data() const FL_NOEXCEPT
Definition span.h:461
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_NOEXCEPT
Definition s16x16x4.h:28
unsigned char u8
Definition stdint.h:131
void * memcopy(void *dest, const void *src, size_t n) FL_NOEXCEPT
Definition cstring.h:103
fl::variant< ClocklessChipset, SpiChipsetConfig > ChipsetVariant
Definition config.h:153
shared_ptr< T > make_shared(Args &&... args) FL_NOEXCEPT
Definition shared_ptr.h:414
void fill(Iterator first, Iterator last, const T &value) FL_NOEXCEPT
Definition algorithm.h:204
Base definition for an LED controller.
Definition crgb.hpp:179
#define FL_NOEXCEPT
Runtime bit-period timing for a clockless chipset.
Clockless chipset configuration (single data pin)
Definition config.h:32
SPI chipset configuration (data + clock pins)
Definition config.h:102