The complete safi_event_type_t catalog (components/event_bus/include/event_bus.h). Concepts and delivery semantics: the event bus chapter. Payloads are byte buffers; the listed type is the convention both sides use.
Audio
| Event | Payload | Published by | Notable subscribers |
|---|
EVENT_AUDIO_PLAY_START | none | audio_player | display, websocket |
EVENT_AUDIO_PLAY_STOP | none | audio_player | display, websocket |
EVENT_AUDIO_PAUSE | none | audio_player | display, websocket |
EVENT_AUDIO_RESUME | none | audio_player | display, websocket |
EVENT_AUDIO_TRACK_CHANGE | track info | audio_player | display, websocket |
EVENT_AUDIO_VOLUME_CHANGE | uint8_t volume | audio_player | display (overlay), websocket, settings persistence |
EVENT_AUDIO_SEEK | uint32_t ms | audio_player | websocket |
EVENT_AUDIO_UNDERRUN | uint32_t count | audio_player | websocket |
Streaming
| Event | Payload | Published by | Notable subscribers |
|---|
EVENT_STREAM_RECONNECTING | none | stream_client | websocket, display |
EVENT_STREAM_METADATA | UTF-8 title string | stream_client (ICY demux) | display (now playing), websocket |
Network and time
| Event | Payload | Published by | Notable subscribers |
|---|
EVENT_WIFI_CONNECTING | none | wifi_manager | display |
EVENT_WIFI_CONNECTED | IP string | wifi_manager | time_sync (starts SNTP), display, websocket, stream auto-resume |
EVENT_WIFI_DISCONNECTED | none | wifi_manager | display, websocket |
EVENT_TIME_SYNCED | none | time_sync | scheduler gate, display clock |
NFC
| Event | Payload | Published by | Notable subscribers |
|---|
EVENT_NFC_CARD_DETECTED | UID bytes | rfid_manager | event_handlers (dispatch), display (toast), websocket |
EVENT_NFC_CARD_REMOVED | none | rfid_manager | event_handlers (removal policy) |
EVENT_NFC_CARD_REGISTERED | UID bytes | card_database | websocket |
Storage
| Event | Payload | Published by | Notable subscribers |
|---|
EVENT_SD_MOUNTED | none | sd_manager | display, library rescan, websocket |
EVENT_SD_UNMOUNTED | none | sd_manager | display, audio (stop file playback) |
EVENT_SD_ERROR | esp_err | sd_manager | display, boot report |
Power
| Event | Payload | Published by | Notable subscribers |
|---|
EVENT_BATTERY_LOW | state struct | power_manager | display, websocket |
EVENT_BATTERY_CRITICAL | state struct | power_manager | shutdown initiation |
EVENT_BATTERY_CHARGING | none | power_manager | display, websocket |
EVENT_BATTERY_FULL | none | power_manager | display, websocket |
| Event | Payload | Published by | Notable subscribers |
|---|
EVENT_UI_BUTTON_PRESS | press kind | input_handler | event_handlers, display (browse) |
EVENT_UI_ENCODER_TURN | signed steps | input_handler | event_handlers (volume), display (browse) |
EVENT_UI_TOUCH | none | input_handler | event_handlers (play/pause) |
System
| Event | Payload | Published by | Notable subscribers |
|---|
EVENT_SYSTEM_STARTUP | none | main | any late initializers |
EVENT_SYSTEM_SHUTDOWN | none | power_manager (battery path) | synchronous: audio (save resume), display (farewell screen) |
EVENT_SYSTEM_ERROR | message string | anyone | display, websocket |
EVENT_OTA_PROGRESS | uint8_t percent | ota task | display, websocket |
EVENT_TYPE_MAX is the sentinel; a static assert keeps the name table in event_bus.c exactly this long, so adding an event without naming it breaks the build, on purpose.