| 70 | } |
| 71 | |
| 72 | FL_OPTIMIZE_FUNCTION FL_IRAM |
| 73 | void wave8Transpose_16(const u8 (&FL_RESTRICT_PARAM lanes)[16], |
| 74 | const Wave8BitExpansionLut &lut, |
| 75 | u8 (&FL_RESTRICT_PARAM output)[16 * sizeof(Wave8Byte)]) { |
| 76 | // Allocate waveform buffers on stack (128 Wave8Bit total: 8 packed bytes per lane × 16 lanes) |
| 77 | Wave8Byte laneWaveformSymbols[16]; |
| 78 | |
| 79 | // Convert each lane byte to wave pulse symbols (8 packed bytes each) |
| 80 | for (int lane = 0; lane < 16; lane++) { |
| 81 | detail::wave8_convert_byte_to_wave8byte(lanes[lane], lut, &laneWaveformSymbols[lane]); |
| 82 | } |
| 83 | |
| 84 | // Transpose waveforms to DMA format (interleave 128 packed bytes to 128 bytes) |
| 85 | detail::wave8_transpose_16(laneWaveformSymbols, output); |
| 86 | } |
| 87 | |
| 88 | // ============================================================================ |
| 89 | // Byte-LUT overloads (#2526): cheaper expansion, same DMA output. |
no test coverage detected