36 .
then([&remote_control]() {
37 uint32_t current_time = millis();
38 remote_control.
tick(current_time);
61 if (!
state ||
state->drivers_available.empty()) {
62 FL_ERROR(
"[STUB CLIENT] No drivers discovered — autoresearch cannot run");
66 FL_PRINT(
"\n[STUB CLIENT] ============================================");
67 FL_PRINT(
"[STUB CLIENT] Simulated host client — running autoresearch");
68 FL_PRINT(
"[STUB CLIENT] Drivers: " <<
state->drivers_available.size());
69 FL_PRINT(
"[STUB CLIENT] ============================================");
76 static CRGB stub_leds[10];
77 const int num_leds = 10;
86 int grand_total = 0, grand_passed = 0;
88 for (fl::size di = 0; di <
state->drivers_available.size(); di++) {
89 const auto& drv =
state->drivers_available[di];
96 if (drv.name ==
"BIT_BANG") {
97 FL_PRINT(
"\n[STUB CLIENT] Driver: " << drv.name.c_str() <<
" (skipped — no loopback in host stub)");
101 FL_PRINT(
"\n[STUB CLIENT] Driver: " << drv.name.c_str());
104 FL_ERROR(
"[STUB CLIENT] Failed to activate driver: " << drv.name.c_str());
120 int driver_total = 0, driver_passed = 0;
121 uint32_t driver_duration_ms = 0;
124 FL_PRINT(
"[STUB CLIENT] " << drv.name.c_str()
125 <<
": " << driver_passed <<
"/" << driver_total <<
" passed");
127 grand_total += driver_total;
128 grand_passed += driver_passed;
131 FL_PRINT(
"\n[STUB CLIENT] ============================================");
132 FL_PRINT(
"[STUB CLIENT] TOTAL: " << grand_passed <<
"/" << grand_total);
134 if (grand_total == 0) {
135 FL_ERROR(
"[STUB CLIENT] No tests ran — exiting 1");
137 }
else if (grand_passed == grand_total) {
138 FL_PRINT(
"[STUB CLIENT] ALL TESTS PASSED ✓ — exiting 0");
141 FL_ERROR(
"[STUB CLIENT] " << (grand_total - grand_passed)
142 <<
" TESTS FAILED — exiting 1");
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)
void tick(uint32_t current_millis)
Process RPC system (pull + tick + push)
Remote RPC control system for test autoresearch Encapsulates all RPC function registration and proces...
Handle & then(function< void()> on_then) FL_NOEXCEPT
Task Handle with fluent API (was class fl::task, renamed to avoid namespace collision)
Task executor — runs registered task runners and manages the run loop.
#define FL_PRINT(X)
Print without prefix (like FL_WARN but without "WARN: " prefix) Uses sstream for dynamic formatting (...
fl::task::Handle setupRpcAsyncTask(AutoResearchRemoteControl &remote_control, int interval_ms=10)
Setup async task for JSON-RPC processing.
void maybeRegisterStubAutorun(AutoResearchRemoteControl &, fl::shared_ptr< AutoResearchState > state)
On FL_IS_STUB: register a one-shot async task that drives autoresearch.
Handle every_ms(int interval_ms)
constexpr ChipsetTimingConfig makeTimingConfig() FL_NOEXCEPT
Convert compile-time CHIPSET type to runtime timing config.
@ RMT
RMT-based receiver (ESP32)
Configuration for driver-agnostic autoresearch testing Contains all input parameters needed for autor...
Configuration for a single LED channel.
fl::ChipsetTimingConfig timing
Chipset timing configuration with name for testing.
#define FL_TRACE
A macro to capture the current source file, line number, and time.