332 {
333
334
335
336
337 Wave8Byte lane_waves[2];
338
339
340 for (int symbol_idx = 0; symbol_idx < 8; symbol_idx++) {
341
342 u16 interleaved = ((u16)transposed[symbol_idx * 2] << 8) |
343 transposed[symbol_idx * 2 + 1];
344
345
348
349
350
351 for (int bit = 0; bit < 8; bit++) {
352
353 if (interleaved & (1 << (bit * 2 + 1))) {
354 lane0_bits |= (1 << bit);
355 }
356
357 if (interleaved & (1 << (bit * 2))) {
358 lane1_bits |= (1 << bit);
359 }
360 }
361
362 lane_waves[0].symbols[symbol_idx].data = lane0_bits;
363 lane_waves[1].symbols[symbol_idx].data = lane1_bits;
364 }
365
366
368 fl::isr::memcpy(output +
sizeof(Wave8Byte), &lane_waves[1],
sizeof(Wave8Byte));
369}
FL_OPTIMIZE_FUNCTION FL_IRAM FASTLED_FORCE_INLINE void memcpy(void *FL_RESTRICT_PARAM dst, const void *FL_RESTRICT_PARAM src, size_t num_bytes)
ISR-optimized memcpy with alignment detection and switch dispatch.