| 38 | } |
| 39 | |
| 40 | FL_OPTIMIZE_FUNCTION FL_IRAM |
| 41 | void wave8Transpose_4(const u8 (&FL_RESTRICT_PARAM lanes)[4], |
| 42 | const Wave8BitExpansionLut &lut, |
| 43 | u8 (&FL_RESTRICT_PARAM output)[4 * sizeof(Wave8Byte)]) { |
| 44 | // Allocate waveform buffers on stack (32 Wave8Bit total: 8 packed bytes per lane × 4 lanes) |
| 45 | Wave8Byte laneWaveformSymbols[4]; |
| 46 | |
| 47 | // Convert each lane byte to wave pulse symbols (8 packed bytes each) |
| 48 | for (int lane = 0; lane < 4; lane++) { |
| 49 | detail::wave8_convert_byte_to_wave8byte(lanes[lane], lut, &laneWaveformSymbols[lane]); |
| 50 | } |
| 51 | |
| 52 | // Transpose waveforms to DMA format (interleave 32 packed bytes to 32 bytes) |
| 53 | detail::wave8_transpose_4(laneWaveformSymbols, output); |
| 54 | } |
| 55 | |
| 56 | FL_OPTIMIZE_FUNCTION FL_IRAM |
| 57 | void wave8Transpose_8(const u8 (&FL_RESTRICT_PARAM lanes)[8], |
no test coverage detected