mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 11:21:23 +00:00
nyx: Allow selection of emuMMC migration type
This commit is contained in:
parent
b57d26e99a
commit
4914af1200
1 changed files with 137 additions and 78 deletions
|
@ -214,7 +214,7 @@ static void _create_mbox_emummc_raw()
|
||||||
lv_mbox_set_recolor_text(mbox, true);
|
lv_mbox_set_recolor_text(mbox, true);
|
||||||
lv_obj_set_width(mbox, LV_HOR_RES / 9 * 6);
|
lv_obj_set_width(mbox, LV_HOR_RES / 9 * 6);
|
||||||
|
|
||||||
char *txt_buf = (char *)malloc(0x500);
|
char *txt_buf = (char *)malloc(0x4000);
|
||||||
mbr_t *mbr = (mbr_t *)malloc(sizeof(mbr_t));
|
mbr_t *mbr = (mbr_t *)malloc(sizeof(mbr_t));
|
||||||
|
|
||||||
memset(&mbr_ctx, 0, sizeof(mbr_ctxt_t));
|
memset(&mbr_ctx, 0, sizeof(mbr_ctxt_t));
|
||||||
|
@ -607,8 +607,28 @@ static lv_res_t _create_emummc_mig4_action(lv_obj_t * btns, const char * txt)
|
||||||
return LV_RES_INV;
|
return LV_RES_INV;
|
||||||
}
|
}
|
||||||
|
|
||||||
static lv_res_t _create_mbox_emummc_migrate(lv_obj_t *btn)
|
bool em_raw;
|
||||||
|
bool em_file;
|
||||||
|
static lv_res_t _create_emummc_migrate_action(lv_obj_t * btns, const char * txt)
|
||||||
{
|
{
|
||||||
|
bool backup = false;
|
||||||
|
bool emummc = false;
|
||||||
|
|
||||||
|
switch (lv_btnm_get_pressed(btns))
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
backup = true;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
emummc = true;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
mbox_action(btns, txt);
|
||||||
|
return LV_RES_INV;
|
||||||
|
}
|
||||||
|
|
||||||
lv_obj_t *dark_bg = lv_obj_create(lv_scr_act(), NULL);
|
lv_obj_t *dark_bg = lv_obj_create(lv_scr_act(), NULL);
|
||||||
lv_obj_set_style(dark_bg, &mbox_darken);
|
lv_obj_set_style(dark_bg, &mbox_darken);
|
||||||
lv_obj_set_size(dark_bg, LV_HOR_RES, LV_VER_RES);
|
lv_obj_set_size(dark_bg, LV_HOR_RES, LV_VER_RES);
|
||||||
|
@ -620,7 +640,87 @@ static lv_res_t _create_mbox_emummc_migrate(lv_obj_t *btn)
|
||||||
lv_mbox_set_recolor_text(mbox, true);
|
lv_mbox_set_recolor_text(mbox, true);
|
||||||
lv_obj_set_width(mbox, LV_HOR_RES / 9 * 6);
|
lv_obj_set_width(mbox, LV_HOR_RES / 9 * 6);
|
||||||
|
|
||||||
char *txt_buf = (char *)malloc(0x500);
|
char *txt_buf = (char *)malloc(0x4000);
|
||||||
|
|
||||||
|
if (backup)
|
||||||
|
{
|
||||||
|
s_printf(txt_buf,
|
||||||
|
"#C7EA46 Found suitable backup for emuMMC!#\n"
|
||||||
|
"#FF8000 Do you want to migrate it?#\n\n");
|
||||||
|
lv_mbox_add_btns(mbox, mbox_btn_map, _create_emummc_mig4_action);
|
||||||
|
}
|
||||||
|
else if (emummc)
|
||||||
|
{
|
||||||
|
s_printf(txt_buf,
|
||||||
|
"#C7EA46 Found SD Partition based emuMMC!#\n"
|
||||||
|
"#FF8000 Do you want to repair the config for it?#\n\n");
|
||||||
|
lv_mbox_add_btns(mbox, mbox_btn_map, _create_emummc_mig3_action);
|
||||||
|
}
|
||||||
|
else if (em_raw && em_file)
|
||||||
|
{
|
||||||
|
s_printf(txt_buf,
|
||||||
|
"#C7EA46 Found both foreign SD File and Partition emunand!#\n"
|
||||||
|
"#FF8000 Choose what to migrate:#\n\n");
|
||||||
|
lv_mbox_add_btns(mbox, mbox_btn_map1, _create_emummc_mig1_action);
|
||||||
|
}
|
||||||
|
else if (em_raw)
|
||||||
|
{
|
||||||
|
s_printf(txt_buf,
|
||||||
|
"#C7EA46 Found foreign SD Partition emunand!#\n"
|
||||||
|
"#FF8000 Do you want to migrate it?#\n\n");
|
||||||
|
lv_mbox_add_btns(mbox, mbox_btn_map, _create_emummc_mig2_action);
|
||||||
|
}
|
||||||
|
else if (em_file)
|
||||||
|
{
|
||||||
|
s_printf(txt_buf,
|
||||||
|
"#C7EA46 Found foreign SD File emunand!#\n"
|
||||||
|
"#FF8000 Do you want to migrate it?#\n\n");
|
||||||
|
lv_mbox_add_btns(mbox, mbox_btn_map, _create_emummc_mig0_action);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s_printf(txt_buf, "No emuMMC or foreign emunand found!\n\n");
|
||||||
|
lv_mbox_add_btns(mbox, mbox_btn_map3, mbox_action);
|
||||||
|
}
|
||||||
|
|
||||||
|
lv_mbox_set_text(mbox, txt_buf);
|
||||||
|
free(txt_buf);
|
||||||
|
|
||||||
|
lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0);
|
||||||
|
lv_obj_set_top(mbox, true);
|
||||||
|
|
||||||
|
mbox_action(btns, txt);
|
||||||
|
|
||||||
|
return LV_RES_INV;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct _emummc_images_t
|
||||||
|
{
|
||||||
|
char *dirlist;
|
||||||
|
u32 part_sector[3];
|
||||||
|
u32 part_type[3];
|
||||||
|
u32 part_end[3];
|
||||||
|
char part_path[3 * 128];
|
||||||
|
lv_obj_t *win;
|
||||||
|
} emummc_images_t;
|
||||||
|
|
||||||
|
static lv_res_t _create_mbox_emummc_migrate(lv_obj_t *btn)
|
||||||
|
{
|
||||||
|
lv_obj_t *dark_bg = lv_obj_create(lv_scr_act(), NULL);
|
||||||
|
lv_obj_set_style(dark_bg, &mbox_darken);
|
||||||
|
lv_obj_set_size(dark_bg, LV_HOR_RES, LV_VER_RES);
|
||||||
|
|
||||||
|
static char *mbox_btn_map[] = { "\262Backup", "\262Fix RAW", "\262Emunand", "\222Cancel", "" };
|
||||||
|
lv_obj_t * mbox = lv_mbox_create(dark_bg, NULL);
|
||||||
|
lv_mbox_set_recolor_text(mbox, true);
|
||||||
|
lv_obj_set_width(mbox, LV_HOR_RES / 9 * 6);
|
||||||
|
|
||||||
|
lv_mbox_set_text(mbox,
|
||||||
|
"Welcome to #C7EA46 emuMMC# migration tool!\n\n"
|
||||||
|
"Please choose what type of migration you want to do.\n"
|
||||||
|
"Anything that was not found will have the button disabled.");
|
||||||
|
|
||||||
|
char *path_buf = (char *)malloc(0x512);
|
||||||
mbr_t *mbr = (mbr_t *)malloc(sizeof(mbr_t));
|
mbr_t *mbr = (mbr_t *)malloc(sizeof(mbr_t));
|
||||||
u8 *efi_part = (u8 *)malloc(0x200);
|
u8 *efi_part = (u8 *)malloc(0x200);
|
||||||
|
|
||||||
|
@ -631,10 +731,12 @@ static lv_res_t _create_mbox_emummc_migrate(lv_obj_t *btn)
|
||||||
sdmmc_t sdmmc;
|
sdmmc_t sdmmc;
|
||||||
sdmmc_storage_init_mmc(&storage, &sdmmc, SDMMC_BUS_WIDTH_8, SDHCI_TIMING_MMC_HS400);
|
sdmmc_storage_init_mmc(&storage, &sdmmc, SDMMC_BUS_WIDTH_8, SDHCI_TIMING_MMC_HS400);
|
||||||
|
|
||||||
|
em_raw = false;
|
||||||
|
em_file = false;
|
||||||
bool backup = false;
|
bool backup = false;
|
||||||
bool emummc = false;
|
bool emummc = false;
|
||||||
bool file_based = false;
|
bool rawnand_backup = false;
|
||||||
bool em = false;
|
|
||||||
mbr_ctx.sector_start = 0;
|
mbr_ctx.sector_start = 0;
|
||||||
mbr_ctx.part_idx = 0;
|
mbr_ctx.part_idx = 0;
|
||||||
|
|
||||||
|
@ -664,104 +766,61 @@ static lv_res_t _create_mbox_emummc_migrate(lv_obj_t *btn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//! TODO: What about unallocated
|
|
||||||
|
|
||||||
if (!mbr_ctx.part_idx)
|
if (!mbr_ctx.part_idx)
|
||||||
{
|
{
|
||||||
sdmmc_storage_read(&sd_storage, 0x4003, 1, efi_part);
|
sdmmc_storage_read(&sd_storage, 0x4003, 1, efi_part);
|
||||||
if (!memcmp(efi_part, "EFI PART", 8))
|
if (!memcmp(efi_part, "EFI PART", 8))
|
||||||
em = true;
|
em_raw = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
s_printf(txt_buf, "%c%c%c%c%s", 's', 'x', 'o','s', "/emunand/boot0.bin");
|
s_printf(path_buf, "%c%c%c%c%s", 's', 'x', 'o','s', "/emunand/boot0.bin");
|
||||||
|
|
||||||
if(!f_stat(txt_buf, NULL))
|
if(!f_stat(path_buf, NULL))
|
||||||
file_based = true;
|
em_file = true;
|
||||||
|
|
||||||
bool rawnand_backup_found = false;
|
emmcsn_path_impl(path_buf, "", "BOOT0", &storage);
|
||||||
|
if(!f_stat(path_buf, NULL))
|
||||||
emmcsn_path_impl(txt_buf, "", "BOOT0", &storage);
|
|
||||||
if(!f_stat(txt_buf, NULL))
|
|
||||||
backup = true;
|
backup = true;
|
||||||
|
|
||||||
emmcsn_path_impl(txt_buf, "", "rawnand.bin", &storage);
|
emmcsn_path_impl(path_buf, "", "rawnand.bin", &storage);
|
||||||
if(!f_stat(txt_buf, NULL))
|
if(!f_stat(path_buf, NULL))
|
||||||
rawnand_backup_found = true;
|
rawnand_backup = true;
|
||||||
|
|
||||||
emmcsn_path_impl(txt_buf, "", "rawnand.bin.00", &storage);
|
emmcsn_path_impl(path_buf, "", "rawnand.bin.00", &storage);
|
||||||
if(!f_stat(txt_buf, NULL))
|
if(!f_stat(path_buf, NULL))
|
||||||
rawnand_backup_found = true;
|
rawnand_backup = true;
|
||||||
|
|
||||||
if (backup && rawnand_backup_found)
|
backup = backup && rawnand_backup;
|
||||||
backup = true;
|
|
||||||
else
|
|
||||||
backup = false;
|
|
||||||
|
|
||||||
sd_unmount();
|
sd_unmount();
|
||||||
sdmmc_storage_end(&storage);
|
sdmmc_storage_end(&storage);
|
||||||
|
|
||||||
|
// Check available types and enable the corresponding buttons.
|
||||||
if (backup)
|
if (backup)
|
||||||
{
|
mbox_btn_map[0][0] = '\222';
|
||||||
s_printf(txt_buf,
|
|
||||||
"#C7EA46 Found suitable backup for emuMMC!#\n"
|
|
||||||
"#FF8000 Do you want to migrate it?#\n\n");
|
|
||||||
lv_mbox_add_btns(mbox, mbox_btn_map, _create_emummc_mig4_action);
|
|
||||||
}
|
|
||||||
else if (emummc)
|
|
||||||
{
|
|
||||||
s_printf(txt_buf,
|
|
||||||
"#C7EA46 Found SD Partition based emuMMC!#\n"
|
|
||||||
"#FF8000 Do you want to repair the config for it?#\n\n");
|
|
||||||
lv_mbox_add_btns(mbox, mbox_btn_map, _create_emummc_mig3_action);
|
|
||||||
}
|
|
||||||
else if (em && !file_based)
|
|
||||||
{
|
|
||||||
s_printf(txt_buf,
|
|
||||||
"#C7EA46 Found foreign SD Partition emunand!#\n"
|
|
||||||
"#FF8000 Do you want to migrate it?#\n\n");
|
|
||||||
lv_mbox_add_btns(mbox, mbox_btn_map, _create_emummc_mig2_action);
|
|
||||||
}
|
|
||||||
else if (!em && file_based)
|
|
||||||
{
|
|
||||||
s_printf(txt_buf,
|
|
||||||
"#C7EA46 Found foreign SD File emunand!#\n"
|
|
||||||
"#FF8000 Do you want to migrate it?#\n\n");
|
|
||||||
lv_mbox_add_btns(mbox, mbox_btn_map, _create_emummc_mig0_action);
|
|
||||||
}
|
|
||||||
else if (em && file_based)
|
|
||||||
{
|
|
||||||
s_printf(txt_buf,
|
|
||||||
"#C7EA46 Found both foreign SD File and Partition emunand!#\n"
|
|
||||||
"#FF8000 Choose what to migrate:#\n\n");
|
|
||||||
lv_mbox_add_btns(mbox, mbox_btn_map1, _create_emummc_mig1_action);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
mbox_btn_map[0][0] = '\262';
|
||||||
s_printf(txt_buf, "No emuMMC or foreign emunand found!\n\n");
|
if (emummc)
|
||||||
lv_mbox_add_btns(mbox, mbox_btn_map3, mbox_action);
|
mbox_btn_map[1][0] = '\222';
|
||||||
}
|
else
|
||||||
|
mbox_btn_map[1][0] = '\262';
|
||||||
|
if (em_raw || em_file)
|
||||||
|
mbox_btn_map[2][0] = '\222';
|
||||||
|
else
|
||||||
|
mbox_btn_map[2][0] = '\262';
|
||||||
|
|
||||||
lv_mbox_set_text(mbox, txt_buf);
|
free(path_buf);
|
||||||
free(txt_buf);
|
|
||||||
free(mbr);
|
free(mbr);
|
||||||
free(efi_part);
|
free(efi_part);
|
||||||
|
|
||||||
|
lv_mbox_add_btns(mbox, (const char **)mbox_btn_map, _create_emummc_migrate_action);
|
||||||
|
|
||||||
lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0);
|
lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0);
|
||||||
lv_obj_set_top(mbox, true);
|
lv_obj_set_top(mbox, true);
|
||||||
|
|
||||||
return LV_RES_OK;
|
return LV_RES_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct _emummc_images_t
|
|
||||||
{
|
|
||||||
char *dirlist;
|
|
||||||
u32 part_sector[3];
|
|
||||||
u32 part_type[3];
|
|
||||||
u32 part_end[3];
|
|
||||||
char part_path[3 * 128];
|
|
||||||
lv_obj_t *win;
|
|
||||||
} emummc_images_t;
|
|
||||||
|
|
||||||
static emummc_images_t *emummc_img;
|
static emummc_images_t *emummc_img;
|
||||||
|
|
||||||
static lv_res_t _save_emummc_cfg_mbox_action(lv_obj_t *btns, const char *txt)
|
static lv_res_t _save_emummc_cfg_mbox_action(lv_obj_t *btns, const char *txt)
|
||||||
|
@ -850,7 +909,7 @@ static lv_res_t _create_change_emummc_window(lv_obj_t *btn_caller)
|
||||||
emummc_img->win = win;
|
emummc_img->win = win;
|
||||||
|
|
||||||
mbr_t *mbr = (mbr_t *)malloc(sizeof(mbr_t));
|
mbr_t *mbr = (mbr_t *)malloc(sizeof(mbr_t));
|
||||||
char *path = malloc(256);
|
char *path = malloc(512);
|
||||||
|
|
||||||
sdmmc_storage_read(&sd_storage, 0, 1, mbr);
|
sdmmc_storage_read(&sd_storage, 0, 1, mbr);
|
||||||
|
|
||||||
|
@ -962,7 +1021,7 @@ out0:;
|
||||||
lv_btn_ext_t *ext;
|
lv_btn_ext_t *ext;
|
||||||
lv_obj_t *btn_label = NULL;
|
lv_obj_t *btn_label = NULL;
|
||||||
lv_obj_t *lv_desc = NULL;
|
lv_obj_t *lv_desc = NULL;
|
||||||
char *txt_buf = malloc(0x500);
|
char *txt_buf = malloc(0x4000);
|
||||||
|
|
||||||
// Create RAW buttons.
|
// Create RAW buttons.
|
||||||
for (u32 raw_btn_idx = 0; raw_btn_idx < 3; raw_btn_idx++)
|
for (u32 raw_btn_idx = 0; raw_btn_idx < 3; raw_btn_idx++)
|
||||||
|
@ -1109,7 +1168,7 @@ lv_res_t create_win_emummc_tools(lv_obj_t *btn)
|
||||||
|
|
||||||
lv_obj_t *label_txt2 = lv_label_create(h1, NULL);
|
lv_obj_t *label_txt2 = lv_label_create(h1, NULL);
|
||||||
lv_label_set_recolor(label_txt2, true);
|
lv_label_set_recolor(label_txt2, true);
|
||||||
char *txt_buf = (char *)malloc(0x200);
|
char *txt_buf = (char *)malloc(0x4000);
|
||||||
|
|
||||||
if (emu_info.enabled)
|
if (emu_info.enabled)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue