FastLED 3.9.15
Loading...
Searching...
No Matches

◆ wave3_transpose_4()

FASTLED_FORCE_INLINE FL_IRAM FL_OPTIMIZE_FUNCTION void fl::detail::wave3_transpose_4 ( const Wave3Byte lane_waves[4],
u8 output[4 *sizeof(Wave3Byte)] )

Transpose 4 lanes of Wave3Byte data into interleaved format.

Parameters
lane_wavesArray of 4 Wave3Byte structures
outputOutput buffer (12 bytes = 4 * 3)

Definition at line 84 of file wave3.hpp.

85 {
86 for (int symbol_idx = 0; symbol_idx < 3; symbol_idx++) {
87 u8 l0 = lane_waves[0].data[symbol_idx];
88 u8 l1 = lane_waves[1].data[symbol_idx];
89 u8 l2 = lane_waves[2].data[symbol_idx];
90 u8 l3 = lane_waves[3].data[symbol_idx];
91
92 // 4 output bytes per symbol (2 pulses per byte × 4 lanes)
93 // Same bit layout as wave8_transpose_4
94 output[symbol_idx * 4 + 0] =
95 ((l3 >> 7) & 1) << 7 |
96 ((l2 >> 7) & 1) << 6 |
97 ((l1 >> 7) & 1) << 5 |
98 ((l0 >> 7) & 1) << 4 |
99 ((l3 >> 6) & 1) << 3 |
100 ((l2 >> 6) & 1) << 2 |
101 ((l1 >> 6) & 1) << 1 |
102 ((l0 >> 6) & 1);
103
104 output[symbol_idx * 4 + 1] =
105 ((l3 >> 5) & 1) << 7 |
106 ((l2 >> 5) & 1) << 6 |
107 ((l1 >> 5) & 1) << 5 |
108 ((l0 >> 5) & 1) << 4 |
109 ((l3 >> 4) & 1) << 3 |
110 ((l2 >> 4) & 1) << 2 |
111 ((l1 >> 4) & 1) << 1 |
112 ((l0 >> 4) & 1);
113
114 output[symbol_idx * 4 + 2] =
115 ((l3 >> 3) & 1) << 7 |
116 ((l2 >> 3) & 1) << 6 |
117 ((l1 >> 3) & 1) << 5 |
118 ((l0 >> 3) & 1) << 4 |
119 ((l3 >> 2) & 1) << 3 |
120 ((l2 >> 2) & 1) << 2 |
121 ((l1 >> 2) & 1) << 1 |
122 ((l0 >> 2) & 1);
123
124 output[symbol_idx * 4 + 3] =
125 ((l3 >> 1) & 1) << 7 |
126 ((l2 >> 1) & 1) << 6 |
127 ((l1 >> 1) & 1) << 5 |
128 ((l0 >> 1) & 1) << 4 |
129 ((l3 >> 0) & 1) << 3 |
130 ((l2 >> 0) & 1) << 2 |
131 ((l1 >> 0) & 1) << 1 |
132 ((l0 >> 0) & 1);
133 }
134}
unsigned char u8
Definition stdint.h:131
u8 data[3]
Definition wave3.h:21

References fl::Wave3Byte::data.

Referenced by fl::wave3Transpose_4().

+ Here is the caller graph for this function: