558 {
559
560
561
563
564
565
566 for (int i = 0; i < 100; i++) {
568 }
569
570
571
572
573
574
575
576
577
578
580 FL_WARN(
"[deliberateHang] entering forced-hang loop NOW");
582
583
584
585
586#if !defined(FL_IS_STUB) && !defined(FL_IS_WASM)
587 noInterrupts();
588#endif
589 while (true) { }
590 }
591
592
593
594
595
597 FastLED.watchdog().markCleanShutdown();
598
599
600
602
605
606 FL_PRINT(
"\n[GPIO BASELINE TEST] Testing GPIO " <<
PIN_TX <<
" → GPIO " <<
PIN_RX <<
" connectivity");
607
608
609
610
612 FL_WARN(
"[GPIO BASELINE TEST] FAILED - RX did not capture manual GPIO toggles");
613 FL_WARN(
"[GPIO BASELINE TEST] Possible causes:");
614 FL_WARN(
" 1. GPIO " <<
PIN_TX <<
" and GPIO " <<
PIN_RX <<
" are not physically connected");
615 FL_WARN(
" 2. RX channel initialization failed");
616 FL_WARN(
" 3. GPIO conflict with other peripherals (USB Serial JTAG on C6 uses certain GPIOs)");
617 FL_WARN(
"[GPIO BASELINE TEST] Continuing - JSON-RPC pin discovery/testing available");
618 } else {
619 FL_WARN(
"\n[GPIO BASELINE TEST] ✓ PASSED - GPIO path confirmed working");
620 FL_WARN(
"[GPIO BASELINE TEST] ✓ RX successfully captured manual GPIO toggles");
621 FL_WARN(
"[GPIO BASELINE TEST] ✓ Hardware connectivity verified (GPIO " <<
PIN_TX <<
" → GPIO " <<
PIN_RX <<
")");
622 }
623 }
624 }
625
626
629 if (now - last_status_ms >= 5000) {
631 status.
set(
"ready",
true);
632 status.
set(
"uptimeMs",
static_cast<int64_t
>(now));
634 last_status_ms = now;
635 }
636}
fl::shared_ptr< AutoResearchState > g_autoresearch_state
static constexpr uint32_t AUTORESEARCH_WATCHDOG_TIMEOUT_MS
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.
void printStreamRaw(const char *messageType, const fl::json &data)
Print JSONL stream message directly to Serial, bypassing fl::println.
FL_DISABLE_WARNING_PUSH FL_DISABLE_WARNING_GLOBAL_CONSTRUCTORS CFastLED FastLED
Global LED strip management instance.
void set(const fl::string &key, const json &value) FL_NOEXCEPT
static json object() FL_NOEXCEPT
#define FL_PRINT(X)
Print without prefix (like FL_WARN but without "WARN: " prefix) Uses sstream for dynamic formatting (...
void run(fl::u32 microseconds, ExecFlags flags)
Run selected task subsystems.
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...
#define FL_WATCHDOG_AUTO(...)