9#if FL_PLATFORM_HAS_LARGE_MEMORY
19#define AR_FL_WARN(...) do { \
20 if (fl::getLogLevel() >= static_cast<fl::u8>(fl::LogLevel::FL_LOG_LEVEL_WARN)) { \
21 FL_WARN(__VA_ARGS__); \
24#define AR_FL_ERROR(...) do { \
25 if (fl::getLogLevel() >= static_cast<fl::u8>(fl::LogLevel::FL_LOG_LEVEL_ERROR)) { \
26 FL_ERROR(__VA_ARGS__); \
61 const char* driver_name,
77 AR_FL_ERROR(
"Failed to set " << driver_name <<
" as exclusive driver");
81 AR_FL_WARN(driver_name <<
" driver enabled exclusively\n");
83 AR_FL_WARN(
"[CONFIG] Driver: " << driver_name <<
" (physical jumper required)\n");
91 AR_FL_WARN(
"[INFO] Testing " << timing_config.
name <<
" timing\n");
108 AR_FL_WARN(
"[INFO] Running warm-up frame (results will be discarded)");
109 int warmup_total = 0, warmup_passed = 0;
112 AR_FL_WARN(
"[INFO] Warm-up complete (" << warmup_passed <<
"/" << warmup_total <<
" passed - discarding)");
115 AR_FL_WARN(
"[INFO] Running actual test frame");
119 AR_FL_WARN(
"\n[INFO] All timing tests complete for " << driver_name <<
" driver");
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.
bool testRxChannel(fl::shared_ptr< fl::RxChannel > rx_channel, int pin_tx, int pin_rx, uint32_t hz, size_t buffer_size)
Test RX channel with manual GPIO toggle.
bool autoResearchSetExclusiveDriverByName(const char *name)
AutoResearch-style helper: set an exclusive driver by name.
void printSummaryTable(const fl::vector< fl::DriverTestResult > &driver_results)
Print driver autoresearch summary table.
void autoResearchExpectedEngines()
AutoResearch that expected engines are available for this platform Prints ERROR if any expected engin...
void autoResearchChipsetTiming(fl::AutoResearchConfig &config, int &total, int &passed, uint32_t &out_show_duration_ms, fl::vector< fl::RunResult > *out_results=nullptr, int num_runs_per_pattern=1)
bool setExclusiveDriverByName(const char *name) FL_NO_EXCEPT
Enable only one driver exclusively (disables all others) — by-name escape hatch.
static ChannelManager & instance() FL_NO_EXCEPT
Get the global singleton instance.
Unified manager for channel drivers with priority-based fallback.
void printSummaryTable(const fl::vector< fl::DriverTestResult > &driver_results) FL_NO_EXCEPT
Print driver validation summary table to log.
bool testRxChannel(fl::shared_ptr< fl::RxChannel > rx_channel, int pin_tx, int pin_rx, u32 hz, size_t buffer_size) FL_NO_EXCEPT
Test RX channel with manual GPIO toggle pattern.
void printEngineValidation() FL_NO_EXCEPT
Print validation results (logs registered drivers and status)
expected< T, E > result
Alias for expected (Rust-style naming)
RxDeviceType
RX device type enumeration.
Configuration for driver-agnostic autoresearch testing Contains all input parameters needed for autor...
Configuration for a single LED channel.
Clockless chipset configuration (single data pin)
Driver test result tracking (moved from ValidationTest.h)
fl::ClocklessEncoder encoder
fl::ChipsetTimingConfig timing
Chipset timing configuration with name for testing.