FastLED 3.9.15
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
32
40public:
44 static ChannelDataPtr create(
45 const ChipsetVariant& chipset,
48
54 static ChannelDataPtr create(
55 int pin,
56 const ChipsetTimingConfig& timing,
59
61 int getPin() const FL_NOEXCEPT;
62
64 const ChipsetVariant& getChipset() const FL_NOEXCEPT { return mChipset; }
65
67 bool isClockless() const FL_NOEXCEPT { return mChipset.is<ClocklessChipset>(); }
68
70 bool isSpi() const FL_NOEXCEPT { return mChipset.is<SpiChipsetConfig>(); }
71
75
77 const fl::vector_psram<u8>& getData() const FL_NOEXCEPT { return mEncodedData; }
78
81
83 size_t getSize() const FL_NOEXCEPT { return mEncodedData.size(); }
84
87 bool isInUse() const FL_NOEXCEPT { return mInUse; }
88
91 void setInUse(bool inUse) FL_NOEXCEPT { mInUse = inUse; }
92
98
111
118 size_t getMinimumSize() const FL_NOEXCEPT { return mEncodedData.size(); }
119
122
123private:
125 template<typename T, typename... Args>
127
130 const ChipsetVariant& chipset,
131 fl::vector_psram<u8>&& encodedData
132 ) FL_NOEXCEPT;
133
137 int pin,
138 const ChipsetTimingConfig& timing,
139 fl::vector_psram<u8>&& encodedData
140 ) FL_NOEXCEPT;
141
142 // Non-copyable (move-only via shared_ptr)
145
149 volatile bool mInUse = false;
150};
151
152} // namespace fl
void setInUse(bool inUse) FL_NOEXCEPT
Mark channel data as in use by the driver.
Definition data.h:91
bool isInUse() const FL_NOEXCEPT
Check if channel data is currently in use by the driver.
Definition data.h:87
size_t getSize() const FL_NOEXCEPT
Get the data size in bytes.
Definition data.h:83
void setPaddingGenerator(PaddingGenerator generator) FL_NOEXCEPT
Set the padding generator for this channel.
Definition data.h:95
ChannelData & operator=(const ChannelData &) FL_NOEXCEPT=delete
~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
ChannelData(const ChannelData &) FL_NOEXCEPT=delete
volatile bool mInUse
Engine is transmitting this data (prevents creator updates)
Definition data.h:149
const fl::vector_psram< u8 > & getData() const FL_NOEXCEPT
Get the encoded transmission data.
Definition data.h:77
bool isClockless() const FL_NOEXCEPT
Check if this is a clockless chipset.
Definition data.h:67
fl::vector_psram< u8 > & getData() FL_NOEXCEPT
Get the encoded transmission data (mutable)
Definition data.h:80
bool isSpi() const FL_NOEXCEPT
Check if this is an SPI chipset.
Definition data.h:70
const ChipsetVariant & getChipset() const FL_NOEXCEPT
Get the chipset configuration variant.
Definition data.h:64
fl::vector_psram< u8 > mEncodedData
Encoded transmission bytes (PSRAM)
Definition data.h:148
size_t getMinimumSize() const FL_NOEXCEPT
Calculate the size needed for writeWithPadding() without allocating.
Definition data.h:118
PaddingGenerator mPaddingGenerator
Optional padding generator for block-size alignment.
Definition data.h:147
Transmission data for a single LED channel.
Definition data.h:39
constexpr remove_reference< T >::type && move(T &&t) FL_NOEXCEPT
Definition s16x16x4.h:28
unsigned char u8
Definition stdint.h:131
fl::function< void(fl::span< const u8 > src, fl::span< u8 > dst)> PaddingGenerator
Padding generator function type.
Definition data.h:31
fl::variant< ClocklessChipset, SpiChipsetConfig > ChipsetVariant
Definition config.h:153
shared_ptr< T > make_shared(Args &&... args) FL_NOEXCEPT
Definition shared_ptr.h:414
Base definition for an LED controller.
Definition crgb.hpp:179
corkscrew_args args
Definition old.h:149
#define FL_NOEXCEPT
#define FASTLED_SHARED_PTR(type)
Definition shared_ptr.h:535
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