MCPcopy Create free account
hub / github.com/FastLED/FastLED / wave8EncodeQuadLane

Function wave8EncodeQuadLane

src/platforms/esp/32/drivers/spi/wave8_encoder_spi.h:127–163  ·  view source on GitHub ↗

@brief Encode quad-lane LED data using wave8 + 4-lane transposition For ESP32-S3 quad-SPI mode (4 parallel data lines). Each set of 4 LED bytes expands to 32 bytes (4 Wave8Byte structures transposed). @param lanes Array of 4 lane spans (must all have same size) @param output Output buffer for transposed wave8 data @param lut Wave8 expansion lookup table @return Number of bytes written to output

Source from the content-addressed store, hash-verified

125/// @param lut Wave8 expansion lookup table
126/// @return Number of bytes written to output (lanes[0].size() * 32)
127inline size_t wave8EncodeQuadLane(
128 fl::span<const u8> lanes[4],
129 fl::span<u8> output,
130 const Wave8BitExpansionLut& lut) FL_NOEXCEPT {
131
132 const size_t lane_size = lanes[0].size();
133 for (int i = 1; i < 4; i++) {
134 if (lanes[i].size() != lane_size) {
135 FL_WARN("wave8EncodeQuadLane: Lane size mismatch (lane0="
136 << lane_size << " bytes, lane" << i << "=" << lanes[i].size() << " bytes)");
137 return 0;
138 }
139 }
140
141 const size_t required_size = lane_size * 32;
142 if (output.size() < required_size) {
143 FL_WARN("wave8EncodeQuadLane: Output buffer too small (need "
144 << required_size << " bytes, have " << output.size() << " bytes)");
145 return 0;
146 }
147
148 size_t output_idx = 0;
149 for (size_t i = 0; i < lane_size; i++) {
150 Wave8Byte wave8_lanes[4];
151 for (int lane = 0; lane < 4; lane++) {
152 detail::wave8_convert_byte_to_wave8byte(lanes[lane][i], lut, &wave8_lanes[lane]);
153 }
154
155 u8 transposed[4 * sizeof(Wave8Byte)];
156 detail::wave8_transpose_4(wave8_lanes, transposed);
157
158 fl::memcpy(output.data() + output_idx, transposed, sizeof(transposed));
159 output_idx += sizeof(transposed);
160 }
161
162 return output_idx;
163}
164
165/// @brief Calculate required output buffer size for wave8 encoding
166///

Callers 1

FL_TEST_FILEFunction · 0.85

Calls 5

wave8_transpose_4Function · 0.85
memcpyFunction · 0.50
sizeMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected