From e08d0c40c886676f74548209a3ec8dbcd0eee3a6 Mon Sep 17 00:00:00 2001 From: Robin Jones Date: Sun, 17 Mar 2024 22:02:50 +0000 Subject: [PATCH] Add CPak management view --- Makefile | 1 + src/menu/menu.c | 1 + src/menu/menu_state.h | 1 + src/menu/views/browser.c | 2 + src/menu/views/joypad_controller_pak.c | 61 ++++++++++++++++++++++++++ src/menu/views/views.h | 3 ++ 6 files changed, 69 insertions(+) create mode 100644 src/menu/views/joypad_controller_pak.c diff --git a/Makefile b/Makefile index 7c0ec049..60ac532d 100644 --- a/Makefile +++ b/Makefile @@ -66,6 +66,7 @@ SRCS = \ menu/views/settings_editor.c \ menu/views/rtc.c \ menu/views/flashcart_info.c \ + menu/views/joypad_controller_pak.c \ utils/fs.c FONTS = \ diff --git a/src/menu/menu.c b/src/menu/menu.c index 1b8832cb..af81cba6 100644 --- a/src/menu/menu.c +++ b/src/menu/menu.c @@ -153,6 +153,7 @@ static view_t menu_views[] = { { MENU_MODE_CREDITS, view_credits_init, view_credits_display }, { MENU_MODE_SETTINGS_EDITOR, view_settings_init, view_settings_display }, { MENU_MODE_RTC, view_rtc_init, view_rtc_display }, + { MENU_MODE_JOYPAD_CPAK, view_joypad_controller_pak_init, view_joypad_controller_pak_display }, { MENU_MODE_FLASHCART, view_flashcart_info_init, view_flashcart_info_display }, { MENU_MODE_LOAD_ROM, view_load_rom_init, view_load_rom_display }, { MENU_MODE_LOAD_DISK, view_load_disk_init, view_load_disk_display }, diff --git a/src/menu/menu_state.h b/src/menu/menu_state.h index 265443fe..9c1457c0 100644 --- a/src/menu/menu_state.h +++ b/src/menu/menu_state.h @@ -34,6 +34,7 @@ typedef enum { MENU_MODE_CREDITS, MENU_MODE_SETTINGS_EDITOR, MENU_MODE_RTC, + MENU_MODE_JOYPAD_CPAK, MENU_MODE_FLASHCART, MENU_MODE_LOAD_ROM, MENU_MODE_LOAD_DISK, diff --git a/src/menu/views/browser.c b/src/menu/views/browser.c index 00061d67..8c1f73b6 100644 --- a/src/menu/views/browser.c +++ b/src/menu/views/browser.c @@ -13,6 +13,7 @@ static const char *rom_extensions[] = { "z64", "n64", "v64", "rom", NULL }; static const char *disk_extensions[] = { "ndd", NULL }; static const char *emulator_extensions[] = { "nes", "sfc", "smc", "gb", "gbc", "sms", "gg", "sg", NULL }; static const char *save_extensions[] = { "sav", NULL }; // TODO: "eep", "sra", "srm", "fla" could be used if transfered from different flashcarts. +//static const char *joypad_accessory_save_extensions[] = { "cpak", "mpk", NULL }; static const char *image_extensions[] = { "png", NULL }; static const char *text_extensions[] = { "txt", "ini", "yml", "yaml", NULL }; static const char *music_extensions[] = { "mp3", NULL }; @@ -254,6 +255,7 @@ static component_context_menu_t settings_context_menu = { { .text = "Show credits", .action = set_menu_next_mode, .arg = (void *) (MENU_MODE_CREDITS) }, { .text = "Adjust RTC", .action = set_menu_next_mode, .arg = (void *) (MENU_MODE_RTC) }, { .text = "Show cart info", .action = set_menu_next_mode, .arg = (void *) (MENU_MODE_FLASHCART) }, + { .text = "CPak Management", .action = set_menu_next_mode, .arg = (void *) (MENU_MODE_JOYPAD_CPAK) }, COMPONENT_CONTEXT_MENU_LIST_END, } }; diff --git a/src/menu/views/joypad_controller_pak.c b/src/menu/views/joypad_controller_pak.c new file mode 100644 index 00000000..350134b1 --- /dev/null +++ b/src/menu/views/joypad_controller_pak.c @@ -0,0 +1,61 @@ +#include "views.h" + +static int accessory_is_cpak[4]; + +static void process (menu_t *menu) { + + // check which paks are available + JOYPAD_PORT_FOREACH (port) { + accessory_is_cpak[port] = joypad_get_accessory_type(port) == JOYPAD_ACCESSORY_TYPE_CONTROLLER_PAK; + } + + if (menu->actions.enter) { + // do something?! + } + + if (menu->actions.back) { + menu->next_mode = MENU_MODE_BROWSER; + } +} + +static void draw (menu_t *menu, surface_t *d) { + rdpq_attach(d, NULL); + + component_background_draw(); + + component_layout_draw(); + + component_main_text_draw( + ALIGN_CENTER, VALIGN_TOP, + "CONTROLLER PAK MENU\n" + "\n" + "\n" + ); + + // Backup to SD, restore from SD, and/or Repair functions. + // Bonus would be to handle individual per game entries! + component_main_text_draw( + ALIGN_LEFT, VALIGN_TOP, + "\n" + "\n" + "Not yet implemented!\n" + ); + + + component_actions_bar_text_draw( + ALIGN_LEFT, VALIGN_TOP, + "\n" // "A: Clone PAK to SD Card\n" + "B: Back" + ); + + rdpq_detach_show(); +} + +void view_joypad_controller_pak_init (menu_t *menu){ + // Nothing to initialize (yet) +} + +void view_joypad_controller_pak_display (menu_t *menu, surface_t *display) { + process(menu); + draw(menu, display); +} diff --git a/src/menu/views/views.h b/src/menu/views/views.h index 8da900dc..1a84ac6c 100644 --- a/src/menu/views/views.h +++ b/src/menu/views/views.h @@ -47,6 +47,9 @@ void view_settings_display (menu_t *menu, surface_t *display); void view_rtc_init (menu_t *menu); void view_rtc_display (menu_t *menu, surface_t *display); +void view_joypad_controller_pak_init (menu_t *menu); +void view_joypad_controller_pak_display (menu_t *menu, surface_t *display); + void view_flashcart_info_init (menu_t *menu); void view_flashcart_info_display (menu_t *menu, surface_t *display);