Wait until a condition is met, with check-pump-delay logic.
460 {
461 const u32 startTime = timeoutMs > 0 ?
millis() : 0;
462
463
464
465 if (condition()) {
466 return true;
467 }
468
469
470
471
472
473 {
475 if (spinBudget > 0) {
477 while ((
fl::micros() - spinStart) < spinBudget) {
478 if (condition()) {
479 return true;
480 }
481 if (timeoutMs > 0 && (
millis() - startTime) >= timeoutMs) {
482 FL_ERROR(
"ChannelManager: Timeout occurred while waiting for condition");
483 return false;
484 }
485 }
486 }
487 }
488
489 while (!condition()) {
490
491 if (timeoutMs > 0 && (
millis() - startTime >= timeoutMs)) {
492 FL_ERROR(
"ChannelManager: Timeout occurred while waiting for condition");
493 return false;
494 }
495
497 if (sliceMs == 0) {
498 return false;
499 }
501 continue;
502 }
503
504
505
506
507
508
509
510
511
512
513
514
515
516
518
520 } else {
521
523 }
524 }
525
526 return true;
527}
u32 pollNeededWaitSliceMs(u32 startTime, u32 timeoutMs) const FL_NO_EXCEPT
bool waitForPollNeededSignal(u32 timeoutMs) FL_NO_EXCEPT
static bool isAnyNetworkActive() FL_NO_EXCEPT
fl::u32 getWaitSpinBudgetUs() FL_NO_EXCEPT
Get the current tiered-wait spin budget (microseconds).
void yield_system(fl::u32 microseconds) FL_NO_EXCEPT
OS-level yield only: same behavior as run(us, ExecFlags::SYSTEM).
fl::u32 millis() FL_NO_EXCEPT
Universal millisecond timer - returns milliseconds since system startup.
fl::u32 micros() FL_NO_EXCEPT
Universal microsecond timer - returns microseconds since system startup.