#pragma once #include #include #include #include "esp_err.h" #include "lvgl.h" typedef struct { const char *asset_dir; const uint8_t *frame_order; size_t frame_order_count; uint16_t repeat_count; uint32_t frame_ms; bool return_to_idle; } lcd_face_asset_sequence_t; /** * @brief Create the default cat-face idle screen on the active LVGL screen. */ esp_err_t lcd_face_create_idle_screen(lv_obj_t *screen); /** * @brief Restore the default cat-face idle screen. */ esp_err_t lcd_face_show_idle(lv_obj_t *screen); /** * @brief Play a frame sequence from an animation asset directory. */ esp_err_t lcd_face_play_asset_sequence(lv_obj_t *screen, const lcd_face_asset_sequence_t *sequence); /** * @brief Preload a frame sequence into the animation cache. * * `decode_budget` limits how many compressed frames are decoded during this * call. Pass `SIZE_MAX` to finish synchronously. */ esp_err_t lcd_face_preheat_asset_sequence(const lcd_face_asset_sequence_t *sequence, size_t decode_budget, bool *out_complete); /** * @brief Consume a completed finite asset-sequence signal. */ bool lcd_face_take_completed(bool *out_return_to_idle);