5#if defined(USE_ESP32) || defined(USE_LIBRETINY)
14__attribute__((always_inline))
inline void wake_main_task_any_context() {
18 if (in_isr_context()) {
19 BaseType_t px_higher_priority_task_woken = pdFALSE;
20 esphome_main_task_notify_from_isr(&px_higher_priority_task_woken);
21#ifdef portYIELD_FROM_ISR
22 portYIELD_FROM_ISR(px_higher_priority_task_woken);
26 (void) px_higher_priority_task_woken;
29 esphome_main_task_notify();
39 esphome_main_task_notify();
50 if (ms == 0) [[unlikely]] {
54 ulTaskNotifyTake(pdTRUE, pdMS_TO_TICKS(ms));
struct @65::@66 __attribute__
Wake the main loop task from an ISR. ISR-safe.
void ESPHOME_ALWAYS_INLINE wakeable_delay(uint32_t ms)
Host wakeable_delay uses select() over the registered fds — defined in wake_host.cpp.
void wake_loop_threadsafe()
Non-ISR: always inline.
void ESPHOME_ALWAYS_INLINE wake_loop_isrsafe()
ISR-safe: no task_woken arg because ESP8266 has no FreeRTOS. Caller must be IRAM_ATTR.
void IRAM_ATTR wake_loop_any_context()
IRAM_ATTR entry point for ISR callers — defined in wake_esp8266.cpp.