Login
1 branch 0 tags
Ben (Desktop/Arch) AUDIO! d8add76 1 month ago 17 Commits
moon / firmware / src / ui.h
#pragma once
#include <stdint.h>

// Screen types enum
typedef enum {
    SCREEN_NONE = 0,
    SCREEN_HOME,
    SCREEN_DEMO,
    SCREEN_GAMES,
    SCREEN_BREAKOUT,
    SCREEN_FILES,
    SCREEN_PLAYER,
} screen_type_t;

// Global app config (available to all screens)
typedef struct {
    uint8_t volume;      // 0-100
    uint8_t brightness;  // 0-100
} 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;

// 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;
    };
} ui_state_t;

// Globals
extern app_state_t app_state;
extern ui_state_t ui_state;

// 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)