text/plain
•
2.94 KB
•
95 lines
#pragma once
#include "lvgl.h"
#include "playlist.h"
#include "storage.h"
#include <stdint.h>
// Screen types enum
typedef enum {
SCREEN_NONE = 0,
SCREEN_HOME,
SCREEN_FILES,
SCREEN_NOW_PLAYING,
SCREEN_QUEUE_DIALOG,
SCREEN_AUDIOBOOKS,
SCREEN_MUSIC,
SCREEN_SETTINGS,
SCREEN_USB,
} screen_type_t;
// Global app config (available to all screens)
typedef struct {
uint8_t volume; // 0-100
uint8_t brightness; // 0-100
char last_played_path[256]; // Path of last played file for navigation
char audiobook_dir[256]; // Non-empty = directory playback mode
// Queue dialog context
char pending_path[256];
playlist_type_t pending_type;
screen_type_t return_screen;
char return_cwd[STORAGE_MAX_PATH];
char return_focus[STORAGE_MAX_NAME];
} app_state_t;
#ifdef ESP_PLATFORM
#include "esp_log.h"
#endif
#ifndef ESP_PLATFORM
#define ESP_LOGI(_TAG_, ...) fprintf(stderr, _TAG_ ": " __VA_ARGS__)
#endif
// Forward declarations for screen state types
typedef struct home_screen_state home_screen_state_t;
typedef struct files_screen_state files_screen_state_t;
typedef struct now_playing_screen_state now_playing_screen_state_t;
typedef struct queue_dialog_screen_state queue_dialog_screen_state_t;
typedef struct audiobooks_screen_state audiobooks_screen_state_t;
typedef struct music_screen_state music_screen_state_t;
typedef struct settings_screen_state settings_screen_state_t;
typedef struct usb_screen_state usb_screen_state_t;
// Tagged union for current screen state
typedef struct {
screen_type_t type;
union {
home_screen_state_t *home;
files_screen_state_t *files;
now_playing_screen_state_t *now_playing;
queue_dialog_screen_state_t *queue_dialog;
audiobooks_screen_state_t *audiobooks;
music_screen_state_t *music;
settings_screen_state_t *settings;
usb_screen_state_t *usb;
};
} ui_state_t;
// Globals
extern app_state_t app_state;
extern ui_state_t ui_state;
extern char string_buffer[256];
// Dispatch functions
ui_state_t setup_screen(screen_type_t type);
void free_screen(void);
void update_screen(void);
// Navigation helper
#define navigate_to(screen_type) \
do { \
free_screen(); \
ui_state = setup_screen(screen_type); \
} while (0)
lv_obj_t *bvs_list_add_button(lv_obj_t *list, const void *icon,
const char *txt);
lv_obj_t *bvs_list_create(void);
void bvs_list_clear(lv_obj_t *list);
// File browser utilities shared by files/music/audiobooks screens
void path_parent(const char *path, char *parent, size_t parent_size,
char *basename, size_t basename_size);
int entry_name_cmp(const void *a, const void *b);
int get_sorted_entries(const char *dir, storage_entry_t *entries,
int max_entries);