text/plain
•
2.87 KB
•
86 lines
#pragma once
#include "lvgl.h"
#include "storage.h"
#include <stdint.h>
// Screen types enum
typedef enum {
SCREEN_NONE = 0,
SCREEN_HOME,
SCREEN_DEMO,
SCREEN_GAMES,
SCREEN_BREAKOUT,
SCREEN_FILES,
SCREEN_PLAYER,
SCREEN_AUDIOBOOKS,
SCREEN_AUDIOBOOK_PLAYER,
SCREEN_MUSIC,
SCREEN_SETTINGS,
} 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
} app_state_t;
// Forward declarations for screen state types
typedef struct home_screen_state home_screen_state_t;
typedef struct demo_screen_state demo_screen_state_t;
typedef struct games_screen_state games_screen_state_t;
typedef struct breakout_screen_state breakout_screen_state_t;
typedef struct files_screen_state files_screen_state_t;
typedef struct player_screen_state player_screen_state_t;
typedef struct audiobooks_screen_state audiobooks_screen_state_t;
typedef struct audiobook_player_screen_state audiobook_player_screen_state_t;
typedef struct music_screen_state music_screen_state_t;
typedef struct settings_screen_state settings_screen_state_t;
// Tagged union for current screen state
typedef struct {
screen_type_t type;
union {
home_screen_state_t *home;
demo_screen_state_t *demo;
games_screen_state_t *games;
breakout_screen_state_t *breakout;
files_screen_state_t *files;
player_screen_state_t *player;
audiobooks_screen_state_t *audiobooks;
audiobook_player_screen_state_t *audiobook_player;
music_screen_state_t *music;
settings_screen_state_t *settings;
};
} 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_add_header(lv_obj_t *list, 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);