23 FL_ERROR(category_name <<
" ASYNC LOGGING NOT ENABLED. Add '#define " << define_name <<
"' before including FastLED.h");
48 state->mNeedsFlush =
true;
50 static volatile fl::u32 isr_fire_count = 0;
51 isr_fire_count = isr_fire_count + 1;
77 while (
mQueue.tryPop(&msg, &len)) {
82 fl::u16 chunk_size =
min(len -
offset,
static_cast<fl::u16
>(
sizeof(buffer) - 1));
84 buffer[chunk_size] =
'\0';
113 while (
mQueue.tryPop(&msg, &len)) {
119 return mQueue.droppedCount();
123 fl::size flushed = 0;
131 while (flushed < maxMessages &&
mQueue.tryPop(&msg, &len)) {
136 fl::u16 chunk_size =
min(len -
offset,
static_cast<fl::u16
>(
sizeof(buffer) - 1));
138 buffer[chunk_size] =
'\0';
162 if (
state.mEnabled) {
167 state.mMessagesPerTick = messages_per_tick;
182 state.mEnabled =
true;
189 if (
state.mEnabled &&
state.mTimerHandle.is_valid()) {
192 state.mEnabled =
false;
193 state.mNeedsFlush =
false;
210 if (!
state.mNeedsFlush) {
215 state.mNeedsFlush =
false;
219 fl::size n =
state.mMessagesPerTick;
256 if (
mTask.is_valid()) {
257 mTask.set_interval_ms(interval_ms);
ISR-safe async logger using SPSC queue backend (zero heap allocation)
bool isBackgroundFlushEnabled() const FL_NO_EXCEPT
Check if background flushing is enabled.
bool enableBackgroundFlush(fl::u32 interval_ms, fl::size messages_per_tick=5) FL_NO_EXCEPT
Enable background timer-based flushing (opt-in)
AsyncLogger() FL_NO_EXCEPT
fl::size flushN(fl::size maxMessages) FL_NO_EXCEPT
Flush up to N messages from queue (bounded flush)
fl::u32 droppedCount() const FL_NO_EXCEPT
AsyncLogQueue< 128, 4096 > mQueue
bool empty() const FL_NO_EXCEPT
void push(const fl::string &msg) FL_NO_EXCEPT
void disableBackgroundFlush() FL_NO_EXCEPT
Disable background flushing.
fl::size size() const FL_NO_EXCEPT
void clear() FL_NO_EXCEPT
void flush() FL_NO_EXCEPT
ISR-safe async logger wrapper (zero heap allocation) Uses embedded AsyncLogQueue instead of heap-allo...
static T & instance() FL_NO_EXCEPT
void setMessagesPerTick(fl::size messages_per_tick) FL_NO_EXCEPT
Configure number of messages to flush per service call.
void setInterval(u32 interval_ms) FL_NO_EXCEPT
Change the service interval (default 16ms)
fl::size mMessagesPerTick
void serviceLoggers() FL_NO_EXCEPT
Service all registered loggers (called by task)
AsyncLoggerServiceTask() FL_NO_EXCEPT
static AsyncLoggerServiceTask & instance() FL_NO_EXCEPT
Handle & then(function< void()> on_then) FL_NO_EXCEPT
Sets the callback invoked when the task runs successfully.
static Scheduler & instance() FL_NO_EXCEPT
int add_task(Handle t) FL_NO_EXCEPT
fl::UISlider offset("Offset", 0.0f, 0.0f, 1.0f, 0.01f)
ISR handler types and API declarations.
Centralized logging categories for FastLED hardware interfaces and subsystems.
void printLoggerDisabledError(const char *category_name, const char *define_name) FL_NO_EXCEPT
Print error message for disabled logger (non-template helper) Called from checkLoggerEnabled template...
void FL_IRAM async_log_flush_timer_isr(void *user_data) FL_NO_EXCEPT
Compile-time linker keep-alive hook for a single fl::Bus.
constexpr u32 ISR_FLAG_IRAM_SAFE
constexpr u8 ISR_PRIORITY_LOW
int attach_timer_handler(const config &cfg, handle *out_handle) FL_NO_EXCEPT
Attach a timer-based ISR handler.
int detach_handler(handle &h) FL_NO_EXCEPT
Detach an ISR handler.
Handle every_ms(int interval_ms) FL_NO_EXCEPT
Creates a task that runs at a fixed millisecond interval.
u8 u8 fract8 blur_amount FL_NO_EXCEPT
void print(const char *str) FL_NO_EXCEPT
FL_DISABLE_WARNING_PUSH U constexpr common_type_t< T, U > min(T a, U b) FL_NO_EXCEPT
FASTLED_FORCE_INLINE void * memcpy(void *dest, const void *src, size_t n) FL_NO_EXCEPT
void configureAsyncLogService(u32 interval_ms, fl::size messages_per_tick) FL_NO_EXCEPT
Configure async logger automatic servicing task.
void async_log_service() FL_NO_EXCEPT
void println(const char *str) FL_NO_EXCEPT
Base definition for an LED controller.
Task scheduler — manages timer and frame-based tasks.
static ActiveLoggerRegistry & instance() FL_NO_EXCEPT
void forEach(Func func) FL_NO_EXCEPT
BackgroundFlushState() FL_NO_EXCEPT
fl::size mMessagesPerTick
volatile bool mNeedsFlush
fl::isr::handle mTimerHandle
Configuration for ISR attachment.
Opaque handle to an attached ISR.