From 75432344018c7989ffa373dc647b05553b7c9f57 Mon Sep 17 00:00:00 2001 From: CTCaer Date: Tue, 5 May 2020 19:23:31 +0300 Subject: [PATCH] emummc: Fix emupath folder and add more checks The checks are checking if the emuMMC was found. If it didn't and error will be show. --- bootloader/main.c | 34 +++++++++++++++++++++++----------- bootloader/storage/emummc.c | 6 ++++-- bootloader/storage/emummc.h | 2 +- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/bootloader/main.c b/bootloader/main.c index ca871af..a36c440 100644 --- a/bootloader/main.c +++ b/bootloader/main.c @@ -465,8 +465,11 @@ void ini_list_launcher() } } - if (emummc_path) - emummc_set_path(emummc_path); + if (emummc_path && !emummc_set_path(emummc_path)) + { + EPRINTF("emupath is wrong!"); + goto wrong_emupath; + } if (cfg_sec && !payload_path) check_sept(cfg_sec); @@ -497,15 +500,13 @@ void ini_list_launcher() } else if (!hos_launch(cfg_sec)) { - EPRINTF("Failed to launch firmware."); - +wrong_emupath: + EPRINTF("Failed to launch HOS."); if (emummc_path) { sd_mount(); emummc_load_cfg(); } - - btn_wait(); } out: @@ -605,8 +606,11 @@ void launch_firmware() } } - if (emummc_path) - emummc_set_path(emummc_path); + if (emummc_path && !emummc_set_path(emummc_path)) + { + EPRINTF("emupath is wrong!"); + goto wrong_emupath; + } if (cfg_sec && !payload_path) check_sept(cfg_sec); @@ -642,7 +646,8 @@ void launch_firmware() } else if (!hos_launch(cfg_sec)) { - EPRINTF("Failed to launch firmware."); +wrong_emupath: + EPRINTF("Failed to launch HOS."); if (emummc_path) { sd_mount(); @@ -1034,8 +1039,13 @@ skip_list: { if (b_cfg.boot_cfg & BOOT_CFG_TO_EMUMMC) emummc_set_path(b_cfg.emummc_path); - else if (emummc_path) - emummc_set_path(emummc_path); + else if (emummc_path && !emummc_set_path(emummc_path)) + { + gfx_con.mute = false; + EPRINTF("emupath is wrong!"); + goto wrong_emupath; + } + check_sept(cfg_sec); hos_launch(cfg_sec); @@ -1045,6 +1055,8 @@ skip_list: emummc_load_cfg(); } +wrong_emupath: + display_backlight_brightness(h_cfg.backlight, 1000); EPRINTF("\nFailed to launch HOS!"); gfx_printf("\nPress any key...\n"); msleep(500); diff --git a/bootloader/storage/emummc.c b/bootloader/storage/emummc.c index 79bc2cf..1d20ce1 100644 --- a/bootloader/storage/emummc.c +++ b/bootloader/storage/emummc.c @@ -72,7 +72,7 @@ void emummc_load_cfg() } } -void emummc_set_path(char *path) +bool emummc_set_path(char *path) { FIL fp; bool found = false; @@ -105,8 +105,10 @@ void emummc_set_path(char *path) emu_cfg.enabled = 1; emu_cfg.id = 0; strcpy(emu_cfg.nintendo_path, path); - strcpy(emu_cfg.nintendo_path, "/Nintendo"); + strcat(emu_cfg.nintendo_path, "/Nintendo"); } + + return found; } static int emummc_raw_get_part_off(int part_idx) diff --git a/bootloader/storage/emummc.h b/bootloader/storage/emummc.h index 8a34f20..4887735 100644 --- a/bootloader/storage/emummc.h +++ b/bootloader/storage/emummc.h @@ -50,7 +50,7 @@ typedef struct _emummc_cfg_t emummc_cfg_t emu_cfg; void emummc_load_cfg(); -void emummc_set_path(char *path); +bool emummc_set_path(char *path); int emummc_storage_init_mmc(sdmmc_storage_t *storage, sdmmc_t *sdmmc); int emummc_storage_end(sdmmc_storage_t *storage); int emummc_storage_read(sdmmc_storage_t *storage, u32 sector, u32 num_sectors, void *buf);