1015 {
1017 ss << "\n========================================\n";
1020 if (has_spi_config) {
1021 const auto* spi_cfg = config.
tx_configs[0].getSpiChipset();
1022 ss << " Protocol: SPI (APA102)\n";
1023 ss << " Clock: " << (spi_cfg ? spi_cfg->timing.clock_hz : 0) << " Hz\n";
1024 } else {
1029 }
1031 ss << "========================================";
1033
1034
1039
1041 } else {
1042
1044 channel =
FastLED.add(channel_config);
1045 }
1046 if (!channel) {
1047 FL_ERROR(
"Failed to create channel " << i <<
" (pin " << config.
tx_configs[i].getDataPin() <<
") - platform not supported");
1048
1049 for (auto& ch : channels) {
1050 ch.reset();
1051 }
1052 return;
1053 }
1054 channels.push_back(channel);
1055 }
1056
1058
1059
1062 }
1065 FL_ERROR(
"[PREINIT] TX wait timeout - driver may be stalled on this platform");
1067 return;
1068 }
1069
1070
1071
1072
1073
1075
1076
1077 int total = 0;
1078 int passed = 0;
1079
1080
1082
1083
1084
1085 multi_config.
num_runs = (num_runs_per_pattern > 0) ? num_runs_per_pattern : 1;
1089
1090
1092
1093
1094 for (int pattern_id = 0; pattern_id < 4; pattern_id++) {
1095
1100 pattern_id
1101 );
1102 }
1104 }
1105
1106 out_show_duration_ms +=
millis() - show_start_ms;
1107
1108
1109
1110
1111 driver_total += total;
1112 driver_passed += passed;
1113
1114
1115
1116
1118
1119}
const char * getBitPatternName(int pattern_id)
void runMultiTest(const char *test_name, fl::AutoResearchConfig &config, const fl::MultiRunConfig &multi_config, int &total, int &passed, fl::vector< fl::RunResult > *out_results)
void setMixedBitPattern(CRGB *leds, size_t count, int pattern_id)
FL_DISABLE_WARNING_PUSH FL_DISABLE_WARNING_GLOBAL_CONSTRUCTORS CFastLED FastLED
Global LED strip management instance.
@ CHANNELS
Remove all channels from controller list.
const T * data() const FL_NOEXCEPT
constexpr fl::size size() const FL_NOEXCEPT
string str() const FL_NOEXCEPT
void fill_solid(CRGB *targetArray, int numToFill, const CRGB &color) FL_NOEXCEPT
Fill a range of LEDs with a solid color.
fl::u32 millis()
Universal millisecond timer - returns milliseconds since system startup.
void delay(u32 ms, bool run_async=true) FL_NOEXCEPT
Public delay wrapper that keeps bare Arduino delay() preferred after using fl::delay; while still all...
const fl::ChipsetTimingConfig & timing
Chipset timing configuration to test.
const char * timing_name
Timing name for logging (e.g., "WS2812B-V5")
fl::span< fl::ChannelConfig > tx_configs
TX channel configurations to test (mutable for LED manipulation)
@ Black
<div style='background:#000000;width:4em;height:4em;'></div>
Configuration for a single LED channel.
u32 t1_ns
T0H: High time for bit 0 (nanoseconds)
u32 t2_ns
T1H-T0H: Additional high time for bit 1 (nanoseconds)
u32 reset_us
Reset/latch time (microseconds)
u32 t3_ns
T0L: Low tail duration (nanoseconds)
bool print_per_led_errors
Print every LED error (default: false)
int max_errors_per_run
Max errors to store per run (default: 5)
bool print_all_runs
Print all run results (default: only errors)
int num_runs
Number of runs to execute.
Multi-run test configuration.