FastLED 3.10.9
Loading...
Searching...
No Matches
data.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include "fl/stl/noexcept.h"
7#include "fl/stl/atomic.h"
8
9#include "fl/stl/vector.h"
10#include "fl/stl/stdint.h"
11#include "fl/stl/shared_ptr.h"
12#include "fl/stl/function.h"
13#include "fl/stl/span.h"
14#include "fl/channels/config.h"
15
16namespace fl {
17
18class ChannelData;
20
26enum class ChannelPixelFormat : u8 {
28 RGB = 3,
29 RGBW = 4,
30 RGBWW = 5,
31};
32
36
49
57public:
61 static ChannelDataPtr create(
62 const ChipsetVariant& chipset,
66
72 static ChannelDataPtr create(
73 int pin,
74 const ChipsetTimingConfig& timing,
78
80 int getPin() const FL_NO_EXCEPT;
81
84
86 bool isClockless() const FL_NO_EXCEPT { return mChipset.is<ClocklessChipset>(); }
87
89 bool isSpi() const FL_NO_EXCEPT { return mChipset.is<SpiChipsetConfig>(); }
90
94
96 const fl::vector_psram<u8>& getData() const FL_NO_EXCEPT { return mEncodedData; }
97
100
103
106 mPixelFormat = pixelFormat;
107 }
108
115
118
123
125 size_t getSize() const FL_NO_EXCEPT { return mEncodedData.size(); }
126
130
133 void setInUse(bool inUse) FL_NO_EXCEPT { mInUse.store(inUse, fl::memory_order_release); }
134
140
153
160 size_t getMinimumSize() const FL_NO_EXCEPT { return mEncodedData.size(); }
161
164
165private:
167 template<typename T, typename... Args>
168 friend fl::shared_ptr<T> fl::adl_barrier::make_shared(Args&&... args) FL_NO_EXCEPT; // see fl/stl/adl_barrier.h
169
172 const ChipsetVariant& chipset,
173 fl::vector_psram<u8>&& encodedData,
174 ChannelPixelFormat pixelFormat
175 ) FL_NO_EXCEPT;
176
180 int pin,
181 const ChipsetTimingConfig& timing,
182 fl::vector_psram<u8>&& encodedData,
183 ChannelPixelFormat pixelFormat
184 ) FL_NO_EXCEPT;
185
186 // Non-copyable (move-only via shared_ptr)
189
196};
197
198} // namespace fl
u8 getExtraZeroBitsPerByte() const FL_NO_EXCEPT
Clockless zero bits the wire appends after every encoded byte.
Definition data.h:114
const fl::vector_psram< u8 > & getData() const FL_NO_EXCEPT
Get the encoded transmission data.
Definition data.h:96
void setExtraZeroBitsPerByte(u8 bits) FL_NO_EXCEPT
Set the per-byte trailing zero-bit count (see getter)
Definition data.h:117
~ChannelData()
Destructor with debug logging.
const ChipsetTimingConfig & getTiming() const FL_NO_EXCEPT
Get the timing configuration (clockless chipsets only)
Definition data.cpp.hpp:41
bool isSpi() const FL_NO_EXCEPT
Check if this is an SPI chipset.
Definition data.h:89
void setPixelFormat(ChannelPixelFormat pixelFormat) FL_NO_EXCEPT
Set explicit pixel byte layout for encoded data.
Definition data.h:105
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
const ChipsetVariant & getChipset() const FL_NO_EXCEPT
Get the chipset configuration variant.
Definition data.h:83
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
bool isInUse() const FL_NO_EXCEPT
Check if channel data is currently in use by the driver.
Definition data.h:129
ChannelPixelFormat getPixelFormat() const FL_NO_EXCEPT
Get explicit pixel byte layout for encoded data.
Definition data.h:102
u8 getBytesPerPixel() const FL_NO_EXCEPT
Get encoded bytes per pixel/element, or 0 if unknown.
Definition data.h:120
fl::atomic_bool mInUse
Engine is transmitting this data (prevents creator updates)
Definition data.h:195
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:190
size_t getSize() const FL_NO_EXCEPT
Get the data size in bytes.
Definition data.h:125
fl::vector_psram< u8 > & getData() FL_NO_EXCEPT
Get the encoded transmission data (mutable)
Definition data.h:99
ChannelData(const ChannelData &) FL_NO_EXCEPT=delete
void setPaddingGenerator(PaddingGenerator generator) FL_NO_EXCEPT
Set the padding generator for this channel.
Definition data.h:137
void setInUse(bool inUse) FL_NO_EXCEPT
Mark channel data as in use by the driver.
Definition data.h:133
u8 mExtraZeroBits
Trailing zero bits per byte (legacy XTRA0)
Definition data.h:194
bool isClockless() const FL_NO_EXCEPT
Check if this is a clockless chipset.
Definition data.h:86
ChannelPixelFormat mPixelFormat
Explicit byte layout for encoded data.
Definition data.h:191
ChannelData & operator=(const ChannelData &) FL_NO_EXCEPT=delete
size_t getMinimumSize() const FL_NO_EXCEPT
Calculate the size needed for writeWithPadding() without allocating.
Definition data.h:160
fl::vector_psram< u8 > mEncodedData
Encoded transmission bytes (PSRAM)
Definition data.h:193
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:192
Transmission data for a single LED channel.
Definition data.h:56
shared_ptr< T > make_shared(Args &&... args) FL_NO_EXCEPT
Definition shared_ptr.h:423
constexpr remove_reference< T >::type && move(T &&t) FL_NO_EXCEPT
Definition s16x16x4.h:30
unsigned char u8
Definition stdint.h:131
u8 u8 fract8 blur_amount FL_NO_EXCEPT
Definition blur.h:186
@ memory_order_acquire
Definition atomic.h:41
@ memory_order_release
Definition atomic.h:42
fl::string format(const char *fmt) FL_NO_EXCEPT
Format with no arguments.
Definition format.h:439
fl::function< void(fl::span< const u8 > src, fl::span< u8 > dst)> PaddingGenerator
Padding generator function type.
Definition data.h:48
fl::variant< ClocklessChipset, SpiChipsetConfig > ChipsetVariant
Definition config.h:157
ChannelPixelFormat
Pixel byte layout carried by encoded channel data.
Definition data.h:26
atomic< bool > atomic_bool
Definition atomic.h:29
u8 channelPixelFormatBytesPerPixel(ChannelPixelFormat format) FL_NO_EXCEPT
Definition data.h:33
Base definition for an LED controller.
corkscrew_args args
Definition old.h:149
#define FASTLED_SHARED_PTR(type)
Definition shared_ptr.h:577
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