FastLED 3.10.8
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
8#include "fl/stl/vector.h"
9#include "fl/stl/stdint.h"
10#include "fl/stl/shared_ptr.h"
11#include "fl/stl/function.h"
12#include "fl/stl/span.h"
13#include "fl/channels/config.h"
14
15namespace fl {
16
17class ChannelData;
19
25enum class ChannelPixelFormat : u8 {
27 RGB = 3,
28 RGBW = 4,
29 RGBWW = 5,
30};
31
35
48
56public:
60 static ChannelDataPtr create(
61 const ChipsetVariant& chipset,
65
71 static ChannelDataPtr create(
72 int pin,
73 const ChipsetTimingConfig& timing,
77
79 int getPin() const FL_NO_EXCEPT;
80
83
85 bool isClockless() const FL_NO_EXCEPT { return mChipset.is<ClocklessChipset>(); }
86
88 bool isSpi() const FL_NO_EXCEPT { return mChipset.is<SpiChipsetConfig>(); }
89
93
95 const fl::vector_psram<u8>& getData() const FL_NO_EXCEPT { return mEncodedData; }
96
99
102
105 mPixelFormat = pixelFormat;
106 }
107
114
117
122
124 size_t getSize() const FL_NO_EXCEPT { return mEncodedData.size(); }
125
128 bool isInUse() const FL_NO_EXCEPT { return mInUse; }
129
132 void setInUse(bool inUse) FL_NO_EXCEPT { mInUse = inUse; }
133
139
152
159 size_t getMinimumSize() const FL_NO_EXCEPT { return mEncodedData.size(); }
160
163
164private:
166 template<typename T, typename... Args>
167 friend fl::shared_ptr<T> fl::adl_barrier::make_shared(Args&&... args) FL_NO_EXCEPT; // see fl/stl/adl_barrier.h
168
171 const ChipsetVariant& chipset,
172 fl::vector_psram<u8>&& encodedData,
173 ChannelPixelFormat pixelFormat
174 ) FL_NO_EXCEPT;
175
179 int pin,
180 const ChipsetTimingConfig& timing,
181 fl::vector_psram<u8>&& encodedData,
182 ChannelPixelFormat pixelFormat
183 ) FL_NO_EXCEPT;
184
185 // Non-copyable (move-only via shared_ptr)
188
194 volatile bool mInUse = false;
195};
196
197} // namespace fl
u8 getExtraZeroBitsPerByte() const FL_NO_EXCEPT
Clockless zero bits the wire appends after every encoded byte.
Definition data.h:113
const fl::vector_psram< u8 > & getData() const FL_NO_EXCEPT
Get the encoded transmission data.
Definition data.h:95
void setExtraZeroBitsPerByte(u8 bits) FL_NO_EXCEPT
Set the per-byte trailing zero-bit count (see getter)
Definition data.h:116
~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:88
void setPixelFormat(ChannelPixelFormat pixelFormat) FL_NO_EXCEPT
Set explicit pixel byte layout for encoded data.
Definition data.h:104
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:82
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:128
ChannelPixelFormat getPixelFormat() const FL_NO_EXCEPT
Get explicit pixel byte layout for encoded data.
Definition data.h:101
u8 getBytesPerPixel() const FL_NO_EXCEPT
Get encoded bytes per pixel/element, or 0 if unknown.
Definition data.h:119
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
size_t getSize() const FL_NO_EXCEPT
Get the data size in bytes.
Definition data.h:124
volatile bool mInUse
Engine is transmitting this data (prevents creator updates)
Definition data.h:194
fl::vector_psram< u8 > & getData() FL_NO_EXCEPT
Get the encoded transmission data (mutable)
Definition data.h:98
ChannelData(const ChannelData &) FL_NO_EXCEPT=delete
void setPaddingGenerator(PaddingGenerator generator) FL_NO_EXCEPT
Set the padding generator for this channel.
Definition data.h:136
void setInUse(bool inUse) FL_NO_EXCEPT
Mark channel data as in use by the driver.
Definition data.h:132
u8 mExtraZeroBits
Trailing zero bits per byte (legacy XTRA0)
Definition data.h:193
bool isClockless() const FL_NO_EXCEPT
Check if this is a clockless chipset.
Definition data.h:85
ChannelPixelFormat mPixelFormat
Explicit byte layout for encoded data.
Definition data.h:190
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:159
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
Transmission data for a single LED channel.
Definition data.h:55
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
unsigned char u8
Definition stdint.h:131
u8 u8 fract8 blur_amount FL_NO_EXCEPT
Definition blur.h:186
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:47
fl::variant< ClocklessChipset, SpiChipsetConfig > ChipsetVariant
Definition config.h:157
ChannelPixelFormat
Pixel byte layout carried by encoded channel data.
Definition data.h:25
u8 channelPixelFormatBytesPerPixel(ChannelPixelFormat format) FL_NO_EXCEPT
Definition data.h:32
Base definition for an LED controller.
Definition crgb.hpp:179
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