| 54 | } |
| 55 | |
| 56 | FL_OPTIMIZE_FUNCTION FL_IRAM |
| 57 | void wave8Transpose_8(const u8 (&FL_RESTRICT_PARAM lanes)[8], |
| 58 | const Wave8BitExpansionLut &lut, |
| 59 | u8 (&FL_RESTRICT_PARAM output)[8 * sizeof(Wave8Byte)]) { |
| 60 | // Allocate waveform buffers on stack (64 Wave8Bit total: 8 packed bytes per lane × 8 lanes) |
| 61 | Wave8Byte laneWaveformSymbols[8]; |
| 62 | |
| 63 | // Convert each lane byte to wave pulse symbols (8 packed bytes each) |
| 64 | for (int lane = 0; lane < 8; lane++) { |
| 65 | detail::wave8_convert_byte_to_wave8byte(lanes[lane], lut, &laneWaveformSymbols[lane]); |
| 66 | } |
| 67 | |
| 68 | // Transpose waveforms to DMA format (interleave 64 packed bytes to 64 bytes) |
| 69 | detail::wave8_transpose_8(laneWaveformSymbols, output); |
| 70 | } |
| 71 | |
| 72 | FL_OPTIMIZE_FUNCTION FL_IRAM |
| 73 | void wave8Transpose_16(const u8 (&FL_RESTRICT_PARAM lanes)[16], |
no test coverage detected