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

◆ autoResearchChipsetTimingLegacy()

void autoResearchChipsetTimingLegacy ( fl::AutoResearchConfig & config,
int & driver_total,
int & driver_passed,
uint32_t & out_show_duration_ms,
fl::vector< fl::RunResult > * out_results,
int num_runs_per_pattern )

Definition at line 1125 of file AutoResearchTest.cpp.

1129 {
1130 fl::sstream ss;
1131 ss << "\n========================================\n";
1132 ss << "Testing (LEGACY API): " << config.timing_name << "\n";
1133 ss << " T0H: " << config.timing.t1_ns << "ns\n";
1134 ss << " T1H: " << (config.timing.t1_ns + config.timing.t2_ns) << "ns\n";
1135 ss << " T0L: " << config.timing.t3_ns << "ns\n";
1136 ss << " RESET: " << config.timing.reset_us << "us\n";
1137 ss << " Lanes: " << config.tx_configs.size() << "\n";
1138 for (size_t i = 0; i < config.tx_configs.size(); i++) {
1139 ss << " Lane " << i << ": pin=" << config.tx_configs[i].getDataPin()
1140 << " LEDs=" << config.tx_configs[i].mLeds.size() << "\n";
1141 }
1142 ss << "========================================";
1143 FL_WARN(ss.str());
1144
1145 // Create one legacy proxy per lane (each maps runtime pin to WS2812B<PIN> template)
1147 for (size_t i = 0; i < config.tx_configs.size(); i++) {
1148 int pin = config.tx_configs[i].getDataPin();
1149 CRGB* leds = config.tx_configs[i].mLeds.data();
1150 int numLeds = static_cast<int>(config.tx_configs[i].mLeds.size());
1151
1152 auto proxy = fl::make_unique<LegacyClocklessProxy>(pin, leds, numLeds);
1153 if (!proxy->valid()) {
1154 FL_ERROR("Legacy proxy invalid for lane " << i << " (pin " << pin << " out of range 0-8)");
1155 return; // vector destructor cleans up already-created proxies
1156 }
1157 proxies.push_back(fl::move(proxy));
1158 }
1159
1160 FastLED.setBrightness(255);
1161
1162 // Pre-initialize the TX engine to avoid first-call setup delays
1163 for (size_t i = 0; i < config.tx_configs.size(); i++) {
1164 fill_solid(config.tx_configs[i].mLeds.data(), config.tx_configs[i].mLeds.size(), CRGB::Black);
1165 }
1166 FastLED.show();
1167 if (!FastLED.wait(1000)) {
1168 FL_ERROR("[LEGACY] TX wait timeout - driver may be stalled");
1169 return; // vector destructor cleans up proxies
1170 }
1171
1172 delay(5); // Buffer drain (same as autoResearchChipsetTiming)
1173
1174 // Run test patterns (identical to autoResearchChipsetTiming)
1175 int total = 0;
1176 int passed = 0;
1177
1178 fl::MultiRunConfig multi_config;
1179 multi_config.num_runs = (num_runs_per_pattern > 0) ? num_runs_per_pattern : 1;
1180 multi_config.print_all_runs = (multi_config.num_runs > 1);
1181 multi_config.print_per_led_errors = false;
1182 multi_config.max_errors_per_run = 10;
1183
1184 // Measure show-only duration (excludes setup/teardown overhead)
1185 uint32_t show_start_ms = millis();
1186
1187 for (int pattern_id = 0; pattern_id < 4; pattern_id++) {
1188 // Apply pattern to all lanes
1189 for (size_t i = 0; i < config.tx_configs.size(); i++) {
1191 config.tx_configs[i].mLeds.data(),
1192 config.tx_configs[i].mLeds.size(),
1193 pattern_id
1194 );
1195 }
1196 runMultiTest(getBitPatternName(pattern_id), config, multi_config, total, passed, out_results);
1197 }
1198
1199 out_show_duration_ms += millis() - show_start_ms;
1200
1201 driver_total += total;
1202 driver_passed += passed;
1203
1204 // proxies vector destructor deletes all controllers → ~CLEDController removes from draw list
1205}
fl::CRGB leds[NUM_LEDS]
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.
const T * data() const FL_NOEXCEPT
Definition span.h:461
constexpr fl::size size() const FL_NOEXCEPT
Definition span.h:458
string str() const FL_NOEXCEPT
Definition strstream.h:43
void push_back(const T &value) FL_NOEXCEPT
Definition vector.h:624
void fill_solid(CRGB *targetArray, int numToFill, const CRGB &color) FL_NOEXCEPT
Fill a range of LEDs with a solid color.
Definition fill.cpp.hpp:9
fl::CRGB CRGB
Definition crgb.h:25
#define FL_WARN(X)
Definition log.h:276
#define FL_ERROR(X)
Definition log.h:219
constexpr remove_reference< T >::type && move(T &&t) FL_NOEXCEPT
Definition move.h:28
fl::u32 uint32_t
Definition s16x16x4.h:219
fl::u32 millis()
Universal millisecond timer - returns milliseconds since system startup.
fl::enable_if<!fl::is_array< T >::value, unique_ptr< T > >::type make_unique(Args &&... args) FL_NOEXCEPT
Definition unique_ptr.h:261
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...
Definition delay.h:98
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>
Definition crgb.h:510
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.

References fl::CRGB::Black, fl::span< T, Extent >::data(), FastLED, fill_solid(), FL_ERROR, FL_WARN, getBitPatternName(), leds, fl::make_unique(), fl::MultiRunConfig::max_errors_per_run, fl::move(), fl::MultiRunConfig::num_runs, fl::MultiRunConfig::print_all_runs, fl::MultiRunConfig::print_per_led_errors, fl::vector< T >::push_back(), fl::ChipsetTimingConfig::reset_us, runMultiTest(), setMixedBitPattern(), fl::span< T, Extent >::size(), fl::sstream::str(), fl::ChipsetTimingConfig::t1_ns, fl::ChipsetTimingConfig::t2_ns, fl::ChipsetTimingConfig::t3_ns, fl::AutoResearchConfig::timing, fl::AutoResearchConfig::timing_name, and fl::AutoResearchConfig::tx_configs.

Referenced by AutoResearchRemoteControl::runSingleTestImpl().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: