Login
1 branch 0 tags
Ben (Desktop/Arch) Improved colors 19d7aaa 1 month ago 30 Commits
moon / firmware / src / main.c
#include "audio_player.h"
#include "lvgl.h"
#include "moon.h"
#include "screens/audiobook_player_screen.h"
#include "screens/audiobooks_screen.h"
#include "screens/files_screen.h"
#include "screens/games/breakout_screen.h"
#include "screens/games/demo_screen.h"
#include "screens/games_screen.h"
#include "screens/home_screen.h"
#include "screens/player_screen.h"
#include "storage.h"
#include "ui.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();
  case SCREEN_AUDIOBOOKS:
    return setup_audiobooks_screen("/Audiobooks", "");
  case SCREEN_AUDIOBOOK_PLAYER:
    return setup_audiobook_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;
  case SCREEN_AUDIOBOOKS:
    free_audiobooks_screen(ui_state.audiobooks);
    break;
  case SCREEN_AUDIOBOOK_PLAYER:
    free_audiobook_player_screen(ui_state.audiobook_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;
  case SCREEN_AUDIOBOOKS:
    update_audiobooks_screen(ui_state.audiobooks);
    break;
  case SCREEN_AUDIOBOOK_PLAYER:
    update_audiobook_player_screen(ui_state.audiobook_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)
	  lv_palette_main(LV_PALETTE_PINK),
	  lv_palette_main(LV_PALETTE_LIGHT_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();
}