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

◆ testDriver()

void testDriver ( const char * driver_name,
const fl::NamedTimingConfig & timing_config,
int pin_data,
size_t num_leds,
CRGB * leds,
EOrder color_order,
fl::shared_ptr< fl::RxChannel > rx_channel,
fl::span< uint8_t > rx_buffer,
int base_strip_size,
fl::RxDeviceType rx_type,
fl::DriverTestResult & result )

Test a specific driver with given timing configuration.

Parameters
driver_nameDriver name to test
timing_configNamed timing configuration (includes timing and name)
pin_dataTX pin number
num_ledsNumber of LEDs
ledsLED array
color_orderColor order
rx_channelRX channel for loopback
rx_bufferRX buffer for capture
base_strip_sizeBase strip size for error reporting (usually same as num_leds)
rx_typeRX device type for error reporting
resultDriver test result tracker (modified)
Note
Automatically discards first frame (timing warm-up) on first run

Definition at line 37 of file AutoResearchHelpers.cpp.

48 {
49
50 // Set this driver as exclusive for testing. AutoResearch resolves driver
51 // names at runtime, so we use the by-name helper (auto-enables all
52 // drivers first to ensure the lookup succeeds).
53 if (!autoResearchSetExclusiveDriverByName(driver_name)) {
54 FL_ERROR("Failed to set " << driver_name << " as exclusive driver");
55 result.skipped = true;
56 return;
57 }
58 FL_WARN(driver_name << " driver enabled exclusively\n");
59
60 FL_WARN("[CONFIG] Driver: " << driver_name << " (physical jumper required)\n");
61
62 // Create TX configuration for autoresearch tests.
63 // Build the ClocklessChipset explicitly so the encoder selector (carried
64 // alongside timing in NamedTimingConfig, #2467) is preserved end-to-end.
65 fl::ClocklessChipset chipset(pin_data, timing_config.timing, timing_config.encoder);
66 fl::ChannelConfig tx_config(chipset, fl::span<CRGB>(leds, num_leds), color_order);
67
68 FL_WARN("[INFO] Testing " << timing_config.name << " timing\n");
69
70 // Create autoresearch configuration with all input parameters
71 fl::AutoResearchConfig autoresearch_config(
72 timing_config.timing,
73 timing_config.name,
74 fl::span<fl::ChannelConfig>(&tx_config, 1),
75 driver_name,
76 rx_channel,
77 rx_buffer,
78 base_strip_size,
79 rx_type,
80 timing_config.encoder
81 );
82
83 // FIRST RUN: Discard results (timing warm-up)
84 // TX channel construction may have extra latency on first run
85 FL_WARN("[INFO] Running warm-up frame (results will be discarded)");
86 int warmup_total = 0, warmup_passed = 0;
87 uint32_t warmup_duration_ms = 0;
88 autoResearchChipsetTiming(autoresearch_config, warmup_total, warmup_passed, warmup_duration_ms);
89 FL_WARN("[INFO] Warm-up complete (" << warmup_passed << "/" << warmup_total << " passed - discarding)");
90
91 // SECOND RUN: Keep results (actual test)
92 FL_WARN("[INFO] Running actual test frame");
93 uint32_t test_duration_ms = 0;
94 autoResearchChipsetTiming(autoresearch_config, result.total_tests, result.passed_tests, test_duration_ms);
95
96 FL_WARN("\n[INFO] All timing tests complete for " << driver_name << " driver");
97}
fl::CRGB leds[NUM_LEDS]
bool autoResearchSetExclusiveDriverByName(const char *name)
AutoResearch-style helper: set an exclusive driver by name.
void autoResearchChipsetTiming(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)
#define FL_WARN(X)
Definition log.h:276
#define FL_ERROR(X)
Definition log.h:219
fl::u32 uint32_t
Definition s16x16x4.h:219
expected< T, E > result
Alias for expected (Rust-style naming)
Definition result.h:31
Configuration for driver-agnostic autoresearch testing Contains all input parameters needed for autor...
Configuration for a single LED channel.
Definition config.h:163
Clockless chipset configuration (single data pin)
Definition config.h:32
fl::ClocklessEncoder encoder
Definition Common.h:35
const char * name
Definition Common.h:36
fl::ChipsetTimingConfig timing
Definition Common.h:34

References autoResearchChipsetTiming(), autoResearchSetExclusiveDriverByName(), fl::NamedTimingConfig::encoder, FL_ERROR, FL_WARN, leds, fl::NamedTimingConfig::name, and fl::NamedTimingConfig::timing.

+ Here is the call graph for this function: