Login
1 branch 0 tags
Ben (Desktop/Arch) AUDIO! d8add76 1 month ago 17 Commits
moon / firmware / src / main.c
#include "moon.h"
#include "lvgl.h"
#include "ui.h"
#include "storage.h"
#include "audio_player.h"
#include "screens/home_screen.h"
#include "screens/demo_screen.h"
#include "screens/games_screen.h"
#include "screens/breakout_screen.h"
#include "screens/files_screen.h"
#include "screens/player_screen.h"

uint8_t button_state;

app_state_t app_state = {0};
ui_state_t ui_state = {0};

ui_state_t setup_screen(screen_type_t type) {
    switch (type) {
        case SCREEN_HOME: return setup_home_screen();
        case SCREEN_DEMO: return setup_demo_screen();
        case SCREEN_GAMES: return setup_games_screen();
        case SCREEN_BREAKOUT: return setup_breakout_screen();
        case SCREEN_FILES: return setup_files_screen();
        case SCREEN_PLAYER: return setup_player_screen();
        default: return (ui_state_t){0};
    }
}

void free_screen(void) {
    switch (ui_state.type) {
        case SCREEN_HOME: free_home_screen(ui_state.home); break;
        case SCREEN_DEMO: free_demo_screen(ui_state.demo); break;
        case SCREEN_GAMES: free_games_screen(ui_state.games); break;
        case SCREEN_BREAKOUT: free_breakout_screen(ui_state.breakout); break;
        case SCREEN_FILES: free_files_screen(ui_state.files); break;
        case SCREEN_PLAYER: free_player_screen(ui_state.player); break;
        default: break;
    }
    ui_state = (ui_state_t){0};
}

void update_screen(void) {
    switch (ui_state.type) {
        case SCREEN_HOME: update_home_screen(ui_state.home); break;
        case SCREEN_DEMO: update_demo_screen(ui_state.demo); break;
        case SCREEN_GAMES: update_games_screen(ui_state.games); break;
        case SCREEN_BREAKOUT: update_breakout_screen(ui_state.breakout); break;
        case SCREEN_FILES: update_files_screen(ui_state.files); break;
        case SCREEN_PLAYER: update_player_screen(ui_state.player); break;
        default: break;
    }
}

void setup(void) {
    // Initialize storage subsystem
    storage_init();

    // Initialize audio player
    audio_player_init();

    // Set up dark theme with custom accent color
    lv_display_t *disp = lv_display_get_default();
    lv_theme_t *theme = lv_theme_default_init(
        disp,
        lv_color_hex(0xE91E63),  // Primary color (vibrant pink)
        lv_color_hex(0x0288D1),  // Secondary color (deep sky blue)
        true,                     // Dark mode
        &lv_font_source_han_sans_sc_14_cjk
    );
    lv_display_set_theme(disp, theme);

    ui_state = setup_screen(SCREEN_HOME);
}

void loop(void) {
    audio_player_update();
    update_screen();
}