diff --git a/bootloader/frontend/fe_info.c b/bootloader/frontend/fe_info.c index 46d99db..ab782ac 100644 --- a/bootloader/frontend/fe_info.c +++ b/bootloader/frontend/fe_info.c @@ -169,7 +169,7 @@ void print_mmc_info() gfx_put_small_sep(); gfx_printf("%kGPP (eMMC USER) partition table:%k\n", TXT_CLR_CYAN_L, TXT_CLR_DEFAULT); - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_GPP); + emmc_set_partition(EMMC_GPP); LIST_INIT(gpt); emmc_gpt_parse(&gpt); int gpp_idx = 0; diff --git a/bootloader/frontend/fe_tools.c b/bootloader/frontend/fe_tools.c index 256713b..3419f03 100644 --- a/bootloader/frontend/fe_tools.c +++ b/bootloader/frontend/fe_tools.c @@ -44,7 +44,7 @@ void _toggle_autorcm(bool enable) } u8 *tempbuf = (u8 *)malloc(0x200); - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_BOOT0); + emmc_set_partition(EMMC_BOOT0); int i, sect = 0; u8 corr_mod0, mod1; @@ -114,7 +114,7 @@ void menu_autorcm() nx_emmc_get_autorcm_masks(&mod0, &mod1); u8 *tempbuf = (u8 *)malloc(0x200); - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_BOOT0); + emmc_set_partition(EMMC_BOOT0); sdmmc_storage_read(&emmc_storage, 0x200 / EMMC_BLOCKSIZE, 1, tempbuf); // Check if 2nd byte of modulus is correct. diff --git a/bootloader/gfx/logos.c b/bootloader/gfx/logos.c index cb0f2f3..8b14e15 100644 --- a/bootloader/gfx/logos.c +++ b/bootloader/gfx/logos.c @@ -20,7 +20,15 @@ #include #include "logos.h" -u8 BOOTLOGO_BLZ[SZ_BOOTLOGO_BLZ] = { +// 68 x 192 @8bpp Grayscale RAW. +#define BOOTLOGO_WIDTH 68 +#define BOOTLOGO_HEIGHT 192 +#define BOOTLOGO_X ((720 - BOOTLOGO_WIDTH) / 2) +#define BOOTLOGO_Y ((1280 - BOOTLOGO_HEIGHT) / 2) +#define BOOTLOGO_SIZE 13056 +#define BOOTLOGO_BLZ_SIZE 3988 + +u8 bootlogo_blz[] = { 0x0F, 0xF0, 0x80, 0x1B, 0x1B, 0x40, 0xF0, 0x1E, 0x1F, 0x48, 0x5A, 0x0F, 0xF0, 0x0F, 0xF0, 0xE4, 0x17, 0xF0, 0x91, 0x13, 0x26, 0x28, 0x23, 0x1E, 0x0A, 0xA0, 0x0F, 0xF0, 0xC3, 0x22, 0xF0, 0xC3, 0xA4, 0x1E, 0x29, 0x33, 0xDB, 0x2C, 0xEA, 0x53, 0x83, 0x0F, 0xF0, 0x38, 0xF0, 0xBC, 0x39, 0x21, @@ -273,7 +281,7 @@ u8 BOOTLOGO_BLZ[SZ_BOOTLOGO_BLZ] = { 0x6C, 0x23, 0x00, 0x00 }; -u8 BATTERY_EMPTY_BLZ[SZ_BATTERY_EMPTY_BLZ] = { +u8 battery_icons_blz[] = { 0x17, 0xC0, 0x5D, 0x51, 0x79, 0x12, 0x79, 0x48, 0x69, 0x00, 0x0D, 0x46, 0xE3, 0x0F, 0xF0, 0x20, 0xF0, 0x35, 0x2E, 0x38, 0x3F, 0x40, 0xEF, 0xCF, 0x00, 0x89, 0x77, 0x00, 0x17, 0x01, 0x14, 0x09, 0x90, 0x36, 0xF0, 0xA4, 0xF1, 0x62, 0x01, 0x38, 0xA1, 0x99, 0x84, 0x3E, 0x00, 0x23, 0x1F, 0x04, @@ -330,8 +338,8 @@ u8 *render_static_bootlogo() // Set default logo. u8 *logo_buf = (void *)malloc(SZ_16K); - blz_uncompress_srcdest(BOOTLOGO_BLZ, SZ_BOOTLOGO_BLZ, logo_buf, SZ_BOOTLOGO); - gfx_set_rect_grey(logo_buf, X_BOOTLOGO, Y_BOOTLOGO, 326, 544); + blz_uncompress_srcdest(bootlogo_blz, sizeof(bootlogo_blz), logo_buf, BOOTLOGO_SIZE); + gfx_set_rect_grey(logo_buf, BOOTLOGO_WIDTH, BOOTLOGO_HEIGHT, BOOTLOGO_X, BOOTLOGO_Y); return logo_buf; } @@ -341,22 +349,22 @@ bool render_ticker_logo(u32 boot_wait, u32 backlight) u32 btn = 0; u32 ticker_step_us = boot_wait * 1000000; - ticker_step_us /= Y_BOOTLOGO; + ticker_step_us /= BOOTLOGO_HEIGHT; // Set default logo. u8 *logo_buf = render_static_bootlogo(); // Clear line. - u8 *grey = malloc(6 * Y_BOOTLOGO); - memset(grey, 0x1B, 6 * Y_BOOTLOGO); - gfx_set_rect_grey(grey, 6, Y_BOOTLOGO, 362, 544); + u8 *grey = malloc(6 * BOOTLOGO_HEIGHT); + memset(grey, 0x1B, 6 * BOOTLOGO_HEIGHT); + gfx_set_rect_grey(grey, 6, BOOTLOGO_HEIGHT, 362, BOOTLOGO_Y); free(grey); // Enable backlight to show first frame. display_backlight_brightness(backlight, 1000); // Animated line as ticker. - for (u32 i = 1; i <= Y_BOOTLOGO; i++) + for (u32 i = 1; i <= BOOTLOGO_HEIGHT; i++) { // If only VOL- was pressed, exit. btn = btn_read_vol(); @@ -367,7 +375,7 @@ bool render_ticker_logo(u32 boot_wait, u32 backlight) usleep(ticker_step_us); // Set next ticker progress. - gfx_set_rect_grey(logo_buf + X_BOOTLOGO * (Y_BOOTLOGO - i) + 36, 6, 1, 362, 544 + Y_BOOTLOGO - i); + gfx_set_rect_grey(logo_buf + BOOTLOGO_WIDTH * (BOOTLOGO_HEIGHT - i) + 36, 6, 1, 362, BOOTLOGO_Y + BOOTLOGO_HEIGHT - i); } free(logo_buf); diff --git a/bootloader/gfx/logos.h b/bootloader/gfx/logos.h index 90b1278..7876379 100644 --- a/bootloader/gfx/logos.h +++ b/bootloader/gfx/logos.h @@ -17,20 +17,13 @@ #ifndef _GFX_LOGOS_H_ #define _GFX_LOGOS_H_ -// 68 x 192 @8bpp Grayscale RAW. -#define X_BOOTLOGO 68 -#define Y_BOOTLOGO 192 -#define SZ_BOOTLOGO 13056 -#define SZ_BOOTLOGO_BLZ 3988 -extern u8 BOOTLOGO_BLZ[SZ_BOOTLOGO_BLZ]; - // 21 x 50 @8bpp RGB. -#define X_BATTERY_EMPTY 21 -#define Y_BATTERY_EMPTY_BATT 38 -#define Y_BATTERY_EMPTY_CHRG 12 -#define SZ_BATTERY_EMPTY 3150 -#define SZ_BATTERY_EMPTY_BLZ 740 -extern u8 BATTERY_EMPTY_BLZ[SZ_BATTERY_EMPTY_BLZ]; +#define BATTERY_EMPTY_WIDTH 21 +#define BATTERY_EMPTY_BATT_HEIGHT 38 +#define BATTERY_EMPTY_CHRG_HEIGHT 12 +#define BATTERY_EMPTY_SIZE 3150 +#define BATTERY_EMPTY_BLZ_SIZE 740 +extern u8 battery_icons_blz[]; u8 *render_static_bootlogo(); bool render_ticker_logo(u32 boot_wait, u32 backlight); diff --git a/bootloader/hos/hos.c b/bootloader/hos/hos.c index df76791..b52f286 100644 --- a/bootloader/hos/hos.c +++ b/bootloader/hos/hos.c @@ -673,7 +673,6 @@ DPRINTF("Parsed GPT\n"); DPRINTF("pkg2 size on emmc is %08X\n", pkg2_size); // Read in Boot Config. - memset(bctBuf, 0, BCT_SIZE); emmc_part_read(pkg2_part, 0, BCT_SIZE / EMMC_BLOCKSIZE, bctBuf); // Read in package2. @@ -909,7 +908,7 @@ int hos_launch(ini_sec_t *cfg) if (!pkg1_warmboot_config(&ctxt, warmboot_base, ctxt.pkg1_id->fuses, kb)) { // Can only happen on T210B01. - _hos_crit_error("Failed to match warmboot with fuses!\nIf you continue, sleep wont work!"); + _hos_crit_error("\nFailed to match warmboot with fuses!\nIf you continue, sleep wont work!"); gfx_puts("\nPress POWER to continue.\nPress VOL to go to the menu.\n"); display_backlight_brightness(h_cfg.backlight, 1000); diff --git a/bootloader/hos/pkg1.c b/bootloader/hos/pkg1.c index b10c717..6c441e9 100644 --- a/bootloader/hos/pkg1.c +++ b/bootloader/hos/pkg1.c @@ -429,7 +429,7 @@ void pkg1_warmboot_rsa_mod(u32 warmboot_base) // Set warmboot binary rsa modulus. u8 *rsa_mod = (u8 *)malloc(512); - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_BOOT0); + emmc_set_partition(EMMC_BOOT0); u32 sector; u8 mod0, mod1; diff --git a/bootloader/main.c b/bootloader/main.c index 93b4f9c..f7ab2e9 100644 --- a/bootloader/main.c +++ b/bootloader/main.c @@ -115,7 +115,7 @@ void check_power_off_from_hos() static void *coreboot_addr; -void reloc_patcher(u32 payload_dst, u32 payload_src, u32 payload_size) +static void _reloc_patcher(u32 payload_dst, u32 payload_src, u32 payload_size) { memcpy((u8 *)payload_src, (u8 *)IPL_LOAD_ADDR, PATCHED_RELOC_SZ); @@ -171,7 +171,7 @@ bool is_ipl_updated(void *buf, char *path, bool force) return true; } -void launch_payload(char *path, bool update, bool clear_screen) +static void _launch_payload(char *path, bool update, bool clear_screen) { if (clear_screen) gfx_clear_grey(0x1B); @@ -226,13 +226,13 @@ void launch_payload(char *path, bool update, bool clear_screen) if (update) memcpy((u8 *)(RCM_PAYLOAD_ADDR + PATCHED_RELOC_SZ), &b_cfg, sizeof(boot_cfg_t)); // Transfer boot cfg. else - reloc_patcher(PATCHED_RELOC_ENTRY, EXT_PAYLOAD_ADDR, ALIGN(size, 0x10)); + _reloc_patcher(PATCHED_RELOC_ENTRY, EXT_PAYLOAD_ADDR, ALIGN(size, 0x10)); hw_reinit_workaround(false, byte_swap_32(*(u32 *)(buf + size - sizeof(u32)))); } else { - reloc_patcher(PATCHED_RELOC_ENTRY, EXT_PAYLOAD_ADDR, 0x7000); + _reloc_patcher(PATCHED_RELOC_ENTRY, EXT_PAYLOAD_ADDR, 0x7000); // Get coreboot seamless display magic. u32 magic = 0; @@ -265,7 +265,7 @@ out: } } -void launch_tools() +static void _launch_payloads() { u8 max_entries = 61; char *filelist = NULL; @@ -337,7 +337,7 @@ void launch_tools() memcpy(dir + strlen(dir), "/", 2); memcpy(dir + strlen(dir), file_sec, strlen(file_sec) + 1); - launch_payload(dir, false, true); + _launch_payload(dir, false, true); } failed_sd_mount: @@ -347,7 +347,7 @@ failed_sd_mount: btn_wait(); } -void ini_list_launcher() +static void _launch_ini_list() { u8 max_entries = 61; char *payload_path = NULL; @@ -441,7 +441,7 @@ parse_failed: if (payload_path) { // Try to launch Payload. - launch_payload(payload_path, false, true); + _launch_payload(payload_path, false, true); } else if (!hos_launch(cfg_sec)) { @@ -458,7 +458,7 @@ out: btn_wait(); } -void launch_firmware() +static void _launch_config() { u8 max_entries = 61; char *payload_path = NULL; @@ -491,11 +491,11 @@ void launch_firmware() ments[2].type = MENT_HANDLER; ments[2].caption = "Payloads..."; - ments[2].handler = launch_tools; + ments[2].handler = _launch_payloads; ments[3].type = MENT_HANDLER; ments[3].caption = "More configs..."; - ments[3].handler = ini_list_launcher; + ments[3].handler = _launch_ini_list; ments[4].type = MENT_CHGLINE; @@ -572,7 +572,7 @@ parse_failed: if (payload_path) { // Try to launch Payload. - launch_payload(payload_path, false, true); + _launch_payload(payload_path, false, true); } else if (!hos_launch(cfg_sec)) { @@ -594,7 +594,7 @@ out: #define NYX_VER_OFF 0x9C -void nyx_load_run() +static void _nyx_load_run() { u8 *nyx = sd_file_read("bootloader/sys/nyx.bin", NULL); if (!nyx) @@ -661,7 +661,7 @@ void nyx_load_run() (*nyx_ptr)(); } -static ini_sec_t *get_ini_sec_from_id(ini_sec_t *ini_sec, char **bootlogoCustomEntry, char **emummc_path) +static ini_sec_t *_get_ini_sec_from_id(ini_sec_t *ini_sec, char **bootlogoCustomEntry, char **emummc_path) { ini_sec_t *cfg_sec = NULL; @@ -703,7 +703,7 @@ static void _bootloader_corruption_protect() } } -void auto_launch_update() +static void _check_for_updated_bootloader() { // Check if already chainloaded update and clear flag. Otherwise check for updates. if (EMC(EMC_SCRATCH0) & EMC_HEKA_UPD) @@ -712,7 +712,7 @@ void auto_launch_update() { // Check if update.bin exists and is newer and launch it. Otherwise create it. if (!f_stat("bootloader/update.bin", NULL)) - launch_payload("bootloader/update.bin", true, false); + _launch_payload("bootloader/update.bin", true, false); else { u8 *buf = calloc(0x200, 1); @@ -722,7 +722,7 @@ void auto_launch_update() } } -static void _auto_launch_firmware() +static void _auto_launch() { struct _bmp_data { @@ -740,7 +740,7 @@ static void _auto_launch_firmware() char *bootlogoCustomEntry = NULL; bool config_entry_found = false; - auto_launch_update(); + _check_for_updated_bootloader(); bool boot_from_id = (b_cfg.boot_cfg & BOOT_CFG_FROM_ID) && (b_cfg.boot_cfg & BOOT_CFG_AUTOBOOT_EN); if (boot_from_id) @@ -815,7 +815,7 @@ static void _auto_launch_firmware() } if (boot_from_id) - cfg_sec = get_ini_sec_from_id(ini_sec, &bootlogoCustomEntry, &emummc_path); + cfg_sec = _get_ini_sec_from_id(ini_sec, &bootlogoCustomEntry, &emummc_path); else if (h_cfg.autoboot == boot_entry_id && config_entry_found) { cfg_sec = ini_sec; @@ -859,7 +859,7 @@ static void _auto_launch_firmware() continue; if (boot_from_id) - cfg_sec = get_ini_sec_from_id(ini_sec_list, &bootlogoCustomEntry, &emummc_path); + cfg_sec = _get_ini_sec_from_id(ini_sec_list, &bootlogoCustomEntry, &emummc_path); else if (h_cfg.autoboot == boot_entry_id) { h_cfg.emummc_force_disable = false; @@ -967,7 +967,7 @@ skip_list: if (payload_path) { // Try to launch Payload. - launch_payload(payload_path, false, false); + _launch_payload(payload_path, false, false); goto error; } else @@ -1009,7 +1009,7 @@ out: // L4T: Clear custom boot mode flags from PMC_SCRATCH0. PMC(APBDEV_PMC_SCRATCH0) &= ~PMC_SCRATCH0_MODE_CUSTOM_ALL; - nyx_load_run(); + _nyx_load_run(); } #define EXCP_EN_ADDR 0x4003FFFC @@ -1171,8 +1171,8 @@ static void _check_low_battery() goto out; // Prepare battery icon resources. - u8 *battery_res = malloc(ALIGN(SZ_BATTERY_EMPTY, SZ_4K)); - blz_uncompress_srcdest(BATTERY_EMPTY_BLZ, SZ_BATTERY_EMPTY_BLZ, battery_res, SZ_BATTERY_EMPTY); + u8 *battery_res = malloc(ALIGN(BATTERY_EMPTY_SIZE, SZ_4K)); + blz_uncompress_srcdest(battery_icons_blz, BATTERY_EMPTY_BLZ_SIZE, battery_res, BATTERY_EMPTY_SIZE); u8 *battery_icon = malloc(0x95A); // 21x38x3 u8 *charging_icon = malloc(0x2F4); // 21x12x3 @@ -1181,8 +1181,8 @@ static void _check_low_battery() memcpy(charging_icon, battery_res, 0x2F4); memcpy(battery_icon, battery_res + 0x2F4, 0x95A); - u32 battery_icon_y_pos = 1280 - 16 - Y_BATTERY_EMPTY_BATT; - u32 charging_icon_y_pos = 1280 - 16 - Y_BATTERY_EMPTY_BATT - 12 - Y_BATTERY_EMPTY_CHRG; + u32 battery_icon_y_pos = 1280 - 16 - BATTERY_EMPTY_BATT_HEIGHT; + u32 charging_icon_y_pos = 1280 - 16 - BATTERY_EMPTY_BATT_HEIGHT - 12 - BATTERY_EMPTY_CHRG_HEIGHT; free(battery_res); charge_status = !charge_status; @@ -1207,9 +1207,9 @@ static void _check_low_battery() if (screen_on && (charge_status != current_charge_status)) { if (current_charge_status) - gfx_set_rect_rgb(charging_icon, X_BATTERY_EMPTY, Y_BATTERY_EMPTY_CHRG, 16, charging_icon_y_pos); + gfx_set_rect_rgb(charging_icon, BATTERY_EMPTY_WIDTH, BATTERY_EMPTY_CHRG_HEIGHT, 16, charging_icon_y_pos); else - gfx_set_rect_rgb(no_charging_icon, X_BATTERY_EMPTY, Y_BATTERY_EMPTY_CHRG, 16, charging_icon_y_pos); + gfx_set_rect_rgb(no_charging_icon, BATTERY_EMPTY_WIDTH, BATTERY_EMPTY_CHRG_HEIGHT, 16, charging_icon_y_pos); } // Check if it's time to turn off display. @@ -1238,11 +1238,11 @@ static void _check_low_battery() u32 *fb = display_init_framebuffer_pitch(); gfx_init_ctxt(fb, 720, 1280, 720); - gfx_set_rect_rgb(battery_icon, X_BATTERY_EMPTY, Y_BATTERY_EMPTY_BATT, 16, battery_icon_y_pos); + gfx_set_rect_rgb(battery_icon, BATTERY_EMPTY_WIDTH, BATTERY_EMPTY_BATT_HEIGHT, 16, battery_icon_y_pos); if (current_charge_status) - gfx_set_rect_rgb(charging_icon, X_BATTERY_EMPTY, Y_BATTERY_EMPTY_CHRG, 16, charging_icon_y_pos); + gfx_set_rect_rgb(charging_icon, BATTERY_EMPTY_WIDTH, BATTERY_EMPTY_CHRG_HEIGHT, 16, charging_icon_y_pos); else - gfx_set_rect_rgb(no_charging_icon, X_BATTERY_EMPTY, Y_BATTERY_EMPTY_CHRG, 16, charging_icon_y_pos); + gfx_set_rect_rgb(no_charging_icon, BATTERY_EMPTY_WIDTH, BATTERY_EMPTY_CHRG_HEIGHT, 16, charging_icon_y_pos); display_backlight_pwm_init(); display_backlight_brightness(100, 1000); @@ -1272,7 +1272,7 @@ out: max77620_low_battery_monitor_config(true); } -void ipl_reload() +static void _ipl_reload() { hw_reinit_workaround(false, 0); @@ -1366,12 +1366,12 @@ power_state_t STATE_REBOOT_RCM = REBOOT_RCM; power_state_t STATE_REBOOT_BYPASS_FUSES = REBOOT_BYPASS_FUSES; ment_t ment_top[] = { - MDEF_HANDLER("Launch", launch_firmware), + MDEF_HANDLER("Launch", _launch_config), MDEF_CAPTION("---------------", TXT_CLR_GREY_DM), MDEF_MENU("Tools", &menu_tools), MDEF_MENU("Console info", &menu_cinfo), MDEF_CAPTION("---------------", TXT_CLR_GREY_DM), - MDEF_HANDLER("Reload", ipl_reload), + MDEF_HANDLER("Reload", _ipl_reload), MDEF_HANDLER_EX("Reboot (OFW)", &STATE_REBOOT_BYPASS_FUSES, power_set_state_ex), MDEF_HANDLER_EX("Reboot (RCM)", &STATE_REBOOT_RCM, power_set_state_ex), MDEF_HANDLER_EX("Power off", &STATE_POWER_OFF, power_set_state_ex), @@ -1448,7 +1448,7 @@ skip_lp0_minerva_config: // Load saved configuration and auto boot if enabled. if (!(h_cfg.errors & ERR_SD_BOOT_EN)) - _auto_launch_firmware(); + _auto_launch(); // Failed to launch Nyx, unmount SD Card. sd_end(); diff --git a/bootloader/storage/emummc.c b/bootloader/storage/emummc.c index fb64d88..64fe907 100644 --- a/bootloader/storage/emummc.c +++ b/bootloader/storage/emummc.c @@ -273,7 +273,7 @@ int emummc_storage_write(u32 sector, u32 num_sectors, void *buf) int emummc_storage_set_mmc_partition(u32 partition) { emu_cfg.active_part = partition; - sdmmc_storage_set_mmc_partition(&emmc_storage, partition); + emmc_set_partition(partition); if (!emu_cfg.enabled || h_cfg.emummc_force_disable || emu_cfg.sector) return 1; diff --git a/nyx/nyx_gui/frontend/fe_emmc_tools.c b/nyx/nyx_gui/frontend/fe_emmc_tools.c index 63d27df..4d40324 100644 --- a/nyx/nyx_gui/frontend/fe_emmc_tools.c +++ b/nyx/nyx_gui/frontend/fe_emmc_tools.c @@ -807,7 +807,7 @@ void dump_emmc_selected(emmcPartType_t dumpType, emmc_tool_gui_t *gui) lv_label_ins_text(gui->label_log, LV_LABEL_POS_LAST, txt_buf); manual_system_maintenance(true); - sdmmc_storage_set_mmc_partition(&emmc_storage, i + 1); + emmc_set_partition(i + 1); // Set filename to backup/{emmc_sn}/BOOT0/1 or backup/{emmc_sn}/emummc/BOOT0/1. if (!gui->raw_emummc) @@ -829,7 +829,7 @@ void dump_emmc_selected(emmcPartType_t dumpType, emmc_tool_gui_t *gui) if ((dumpType & PART_SYSTEM) || (dumpType & PART_USER) || (dumpType & PART_RAW)) { - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_GPP); + emmc_set_partition(EMMC_GPP); if ((dumpType & PART_SYSTEM) || (dumpType & PART_USER)) { @@ -1454,7 +1454,7 @@ void restore_emmc_selected(emmcPartType_t restoreType, emmc_tool_gui_t *gui) lv_label_ins_text(gui->label_log, LV_LABEL_POS_LAST, txt_buf); manual_system_maintenance(true); - sdmmc_storage_set_mmc_partition(&emmc_storage, i + 1); + emmc_set_partition(i + 1); emmcsn_path_impl(sdPath, "/restore", bootPart.name, &emmc_storage); res = _restore_emmc_part(gui, sdPath, i, &emmc_storage, &bootPart, false); @@ -1475,7 +1475,7 @@ void restore_emmc_selected(emmcPartType_t restoreType, emmc_tool_gui_t *gui) gui->base_path = (char *)malloc(strlen(sdPath) + 1); strcpy(gui->base_path, sdPath); - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_GPP); + emmc_set_partition(EMMC_GPP); LIST_INIT(gpt); emmc_gpt_parse(&gpt); diff --git a/nyx/nyx_gui/frontend/fe_emummc_tools.c b/nyx/nyx_gui/frontend/fe_emummc_tools.c index dcacda3..87827d2 100644 --- a/nyx/nyx_gui/frontend/fe_emummc_tools.c +++ b/nyx/nyx_gui/frontend/fe_emummc_tools.c @@ -430,7 +430,7 @@ void dump_emummc_file(emmc_tool_gui_t *gui) lv_label_ins_text(gui->label_log, LV_LABEL_POS_LAST, txt_buf); manual_system_maintenance(true); - sdmmc_storage_set_mmc_partition(&emmc_storage, i + 1); + emmc_set_partition(i + 1); strcat(sdPath, bootPart.name); res = _dump_emummc_file_part(gui, sdPath, &emmc_storage, &bootPart); @@ -450,7 +450,7 @@ void dump_emummc_file(emmc_tool_gui_t *gui) } // Get GP partition size dynamically. - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_GPP); + emmc_set_partition(EMMC_GPP); // Get GP partition size dynamically. const u32 RAW_AREA_NUM_SECTORS = emmc_storage.sec_cnt; @@ -782,7 +782,7 @@ static int _emummc_raw_derive_bis_keys(emmc_tool_gui_t *gui, u32 resized_count) u8 *cal0_buf = malloc(SZ_64K); // Read and decrypt CAL0 for validation of working BIS keys. - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_GPP); + emmc_set_partition(EMMC_GPP); LIST_INIT(gpt); emmc_gpt_parse(&gpt); emmc_part_t *cal0_part = emmc_part_find(&gpt, "PRODINFO"); // check if null @@ -908,7 +908,7 @@ void dump_emummc_raw(emmc_tool_gui_t *gui, int part_idx, u32 sector_start, u32 r lv_label_ins_text(gui->label_log, LV_LABEL_POS_LAST, txt_buf); manual_system_maintenance(true); - sdmmc_storage_set_mmc_partition(&emmc_storage, i + 1); + emmc_set_partition(i + 1); strcat(sdPath, bootPart.name); res = _dump_emummc_raw_part(gui, i, part_idx, sector_start, &bootPart, 0); @@ -927,7 +927,7 @@ void dump_emummc_raw(emmc_tool_gui_t *gui, int part_idx, u32 sector_start, u32 r strcpy(sdPath, gui->base_path); } - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_GPP); + emmc_set_partition(EMMC_GPP); // Get GP partition size dynamically. const u32 RAW_AREA_NUM_SECTORS = emmc_storage.sec_cnt; diff --git a/nyx/nyx_gui/frontend/gui_info.c b/nyx/nyx_gui/frontend/gui_info.c index 5b3263d..2eb475f 100644 --- a/nyx/nyx_gui/frontend/gui_info.c +++ b/nyx/nyx_gui/frontend/gui_info.c @@ -276,7 +276,7 @@ static lv_res_t _create_mbox_cal0(lv_obj_t *btn) cal0_buf = malloc(SZ_64K); // Read and decrypt CAL0. - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_GPP); + emmc_set_partition(EMMC_GPP); LIST_INIT(gpt); emmc_gpt_parse(&gpt); emmc_part_t *cal0_part = emmc_part_find(&gpt, "PRODINFO"); // check if null @@ -388,7 +388,7 @@ out: static lv_res_t _create_window_fuses_info_status(lv_obj_t *btn) { - lv_obj_t *win = nyx_create_standard_window(SYMBOL_CHIP" HW & Cached Fuses Info"); + lv_obj_t *win = nyx_create_standard_window(SYMBOL_CHIP" HW & Fuses Info"); lv_win_add_btn(win, NULL, SYMBOL_DOWNLOAD" Dump fuses", _fuse_dump_window_action); lv_win_add_btn(win, NULL, SYMBOL_INFO" CAL0 Info", _create_mbox_cal0); @@ -1315,7 +1315,7 @@ static lv_res_t _create_mbox_benchmark(bool sd_bench) storage = &emmc_storage; res = !emmc_initialize(false); if (!res) - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_GPP); + emmc_set_partition(EMMC_GPP); } if (res) @@ -1705,7 +1705,7 @@ static lv_res_t _create_window_emmc_info_status(lv_obj_t *btn) s_printf(txt_buf + strlen(txt_buf), "0: #96FF00 GPP# Size: %6d MiB (Sect: 0x%08X)\n", emmc_storage.sec_cnt >> SECTORS_TO_MIB_COEFF, emmc_storage.sec_cnt); strcat(txt_buf, "\n#00DDFF GPP (eMMC USER) Partition Table:#\n"); - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_GPP); + emmc_set_partition(EMMC_GPP); LIST_INIT(gpt); emmc_gpt_parse(&gpt); @@ -1807,299 +1807,301 @@ static lv_res_t _create_window_sdcard_info_status(lv_obj_t *btn) manual_system_maintenance(true); if (!sd_mount()) - lv_label_set_text(lb_desc, "#FFDD00 Failed to init SD!#"); - else { - lv_label_set_text(lb_desc, - "#00DDFF Card IDentification:#\n" - "Vendor ID:\n" - "Model:\n" - "OEM ID:\n" - "HW rev:\n" - "FW rev:\n" - "S/N:\n" - "Month/Year:\n\n" - "Bootloader bus:" - ); - - lv_obj_t *val = lv_cont_create(win, NULL); - lv_obj_set_size(val, LV_HOR_RES / 9 * 2, LV_VER_RES - (LV_DPI * 11 / 8) * 5 / 2); - - lv_obj_t * lb_val = lv_label_create(val, lb_desc); - - char *txt_buf = (char *)malloc(SZ_16K); - txt_buf[0] = '\n'; - txt_buf[1] = 0; - - // Identify manufacturer. - switch (sd_storage.cid.manfid) - { - case 0x00: - strcat(txt_buf, "Fake "); - break; - case 0x01: - strcat(txt_buf, "Panasonic "); - break; - case 0x02: - strcat(txt_buf, "Toshiba "); - break; - case 0x03: - strcat(txt_buf, "SanDisk "); - break; - case 0x06: - strcat(txt_buf, "Ritek "); - break; - case 0x09: - strcat(txt_buf, "ATP "); - break; - case 0x13: - strcat(txt_buf, "Kingmax "); - break; - case 0x19: - strcat(txt_buf, "Dynacard "); - break; - case 0x1A: - strcat(txt_buf, "Power Quotient "); - break; - case 0x1B: - strcat(txt_buf, "Samsung "); - break; - case 0x1D: - strcat(txt_buf, "AData "); - break; - case 0x27: - strcat(txt_buf, "Phison "); - break; - case 0x28: - strcat(txt_buf, "Barun Electronics "); - break; - case 0x31: - strcat(txt_buf, "Silicon Power "); - break; - case 0x41: - strcat(txt_buf, "Kingston "); - break; - case 0x51: - strcat(txt_buf, "STEC "); - break; - case 0x5D: - strcat(txt_buf, "SwissBit "); - break; - case 0x61: - strcat(txt_buf, "Netlist "); - break; - case 0x63: - strcat(txt_buf, "Cactus "); - break; - case 0x73: - strcat(txt_buf, "Bongiovi "); - break; - case 0x74: - strcat(txt_buf, "Jiaelec "); - break; - case 0x76: - strcat(txt_buf, "Patriot "); - break; - case 0x82: - strcat(txt_buf, "Jiang Tay "); - break; - case 0x83: - strcat(txt_buf, "Netcom "); - break; - case 0x84: - strcat(txt_buf, "Strontium "); - break; - //TODO: Investigate which OEM/ODM makes these. - case 0x9C: // BE, Angelbird | Barun Electronics? What about 0x28? - // LX512 SO, Lexar, Angelbird, Hoodman, Sony | Solidgear? - strcat(txt_buf, "Solidgear "); - break; - case 0x9F: - strcat(txt_buf, "Taishin "); - break; - case 0xAD: // Lexar LX512 LS. Longsys? - strcat(txt_buf, "Longsys "); - break; - default: - strcat(txt_buf, "Unknown "); - break; - } - - s_printf(txt_buf + strlen(txt_buf), "(%02X)\n%c%c%c%c%c\n%c%c (%04X)\n%X\n%X\n%08x\n%02d/%04d\n\n", - sd_storage.cid.manfid, - sd_storage.cid.prod_name[0], sd_storage.cid.prod_name[1], sd_storage.cid.prod_name[2], - sd_storage.cid.prod_name[3], sd_storage.cid.prod_name[4], - (sd_storage.cid.oemid >> 8) & 0xFF, sd_storage.cid.oemid & 0xFF, sd_storage.cid.oemid, - sd_storage.cid.hwrev, sd_storage.cid.fwrev, sd_storage.cid.serial, - sd_storage.cid.month, sd_storage.cid.year); - - switch (nyx_str->info.sd_init) - { - case SD_1BIT_HS25: - strcat(txt_buf, "HS25 1bit"); - break; - case SD_4BIT_HS25: - strcat(txt_buf, "HS25"); - break; - case SD_UHS_SDR82: // Report as SDR104. - case SD_UHS_SDR104: - strcat(txt_buf, "SDR104"); - break; - case 0: - default: - strcat(txt_buf, "Undefined"); - break; - } - - lv_label_set_text(lb_val, txt_buf); - - lv_obj_set_width(lb_val, lv_obj_get_width(val)); - lv_obj_align(val, desc, LV_ALIGN_OUT_RIGHT_MID, 0, 0); - - lv_obj_t *desc2 = lv_cont_create(win, NULL); - lv_obj_set_size(desc2, LV_HOR_RES / 2 / 4 * 2, LV_VER_RES - (LV_DPI * 11 / 8) * 5 / 2); - - lv_obj_t * lb_desc2 = lv_label_create(desc2, lb_desc); - - lv_label_set_static_text(lb_desc2, - "#00DDFF Card-Specific Data#\n" - "Cmd Classes:\n" - "Capacity:\n" - "Capacity (LBA):\n" - "Bus Width:\n" - "Current Rate:\n" - "Speed Class:\n" - "UHS Grade:\n" - "Video Class:\n" - "App perf class:\n" - "Write Protect:" - ); - lv_obj_set_width(lb_desc2, lv_obj_get_width(desc2)); - lv_obj_align(desc2, val, LV_ALIGN_OUT_RIGHT_MID, LV_DPI / 2, 0); - - lv_obj_t *val2 = lv_cont_create(win, NULL); - lv_obj_set_size(val2, LV_HOR_RES / 13 * 3, LV_VER_RES - (LV_DPI * 11 / 8) * 5 / 2); - - lv_obj_t * lb_val2 = lv_label_create(val2, lb_desc); - - char *wp_info; - switch (sd_storage.csd.write_protect) - { - case 1: - wp_info = "Temporary"; - break; - case 2: - case 3: - wp_info = "Permanent"; - break; - default: - wp_info = "None"; - break; - } - - bool uhs_au_mb = false; - u32 uhs_au_size = sd_storage_get_ssr_au(&sd_storage); - if (uhs_au_size >= 1024) - { - uhs_au_mb = true; - uhs_au_size /= 1024; - } - - s_printf(txt_buf, - "#00DDFF v%d.0#\n%02X\n%d MiB\n%X (CP %X)\n%d\n%d MB/s (%d MHz)\n%d (AU: %d %s\nU%d\nV%d\nA%d\n%s", - sd_storage.csd.structure + 1, sd_storage.csd.cmdclass, - sd_storage.sec_cnt >> 11, sd_storage.sec_cnt, sd_storage.ssr.protected_size >> 9, - sd_storage.ssr.bus_width, sd_storage.csd.busspeed, - (sd_storage.csd.busspeed > 10) ? (sd_storage.csd.busspeed * 2) : 50, - sd_storage.ssr.speed_class, uhs_au_size, uhs_au_mb ? "MiB)" : "KiB)", sd_storage.ssr.uhs_grade, - sd_storage.ssr.video_class, sd_storage.ssr.app_class, wp_info); - - lv_label_set_text(lb_val2, txt_buf); - - lv_obj_set_width(lb_val2, lv_obj_get_width(val2)); - lv_obj_align(val2, desc2, LV_ALIGN_OUT_RIGHT_MID, 0, 0); - - lv_obj_t *line_sep = lv_line_create(win, NULL); - static const lv_point_t line_pp[] = { {0, 0}, { LV_HOR_RES - (LV_DPI - (LV_DPI / 4)) * 12, 0} }; - lv_line_set_points(line_sep, line_pp, 2); - lv_line_set_style(line_sep, lv_theme_get_current()->line.decor); - lv_obj_align(line_sep, desc, LV_ALIGN_OUT_BOTTOM_LEFT, LV_DPI * 410 / 100, LV_DPI / 7); - - lv_obj_t *desc3 = lv_cont_create(win, NULL); - lv_obj_set_size(desc3, LV_HOR_RES / 2 / 2 * 2, LV_VER_RES - (LV_DPI * 11 / 8) * 4); - - lv_obj_t * lb_desc3 = lv_label_create(desc3, lb_desc); - lv_label_set_text(lb_desc3, "#D4FF00 Acquiring FAT volume info...#"); - lv_obj_set_width(lb_desc3, lv_obj_get_width(desc3)); - - lv_obj_align(desc3, desc, LV_ALIGN_OUT_BOTTOM_LEFT, 0, LV_DPI / 2); - - manual_system_maintenance(true); - - f_getfree("", &sd_fs.free_clst, NULL); - - lv_label_set_text(lb_desc3, - "#00DDFF Found FAT volume:#\n" - "Filesystem:\n" - "Cluster:\n" - "Size free/total:" - ); - lv_obj_set_size(desc3, LV_HOR_RES / 2 / 5 * 2, LV_VER_RES - (LV_DPI * 11 / 8) * 4); - lv_obj_set_width(lb_desc3, lv_obj_get_width(desc3)); - lv_obj_align(desc3, desc, LV_ALIGN_OUT_BOTTOM_LEFT, 0, LV_DPI / 2); - - lv_obj_t *val3 = lv_cont_create(win, NULL); - lv_obj_set_size(val3, LV_HOR_RES / 13 * 3, LV_VER_RES - (LV_DPI * 11 / 8) * 4); - - lv_obj_t * lb_val3 = lv_label_create(val3, lb_desc); - - s_printf(txt_buf, "\n%s\n%d %s\n%d/%d MiB", - sd_fs.fs_type == FS_EXFAT ? ("exFAT "SYMBOL_SHRK) : ("FAT32"), - (sd_fs.csize > 1) ? (sd_fs.csize >> 1) : 512, - (sd_fs.csize > 1) ? "KiB" : "B", - (u32)(sd_fs.free_clst * sd_fs.csize >> SECTORS_TO_MIB_COEFF), - (u32)(sd_fs.n_fatent * sd_fs.csize >> SECTORS_TO_MIB_COEFF)); - - lv_label_set_text(lb_val3, txt_buf); - - lv_obj_set_width(lb_val3, lv_obj_get_width(val3)); - lv_obj_align(val3, desc3, LV_ALIGN_OUT_RIGHT_MID, 0, 0); - - lv_obj_t *desc4 = lv_cont_create(win, NULL); - lv_obj_set_size(desc4, LV_HOR_RES / 2 / 2 * 2, LV_VER_RES - (LV_DPI * 11 / 8) * 4); - - lv_obj_t * lb_desc4 = lv_label_create(desc4, lb_desc); - lv_label_set_text(lb_desc4, "#D4FF00 Acquiring FAT volume info...#"); - lv_obj_set_width(lb_desc4, lv_obj_get_width(desc4)); - - lv_label_set_text(lb_desc4, - "#00DDFF SDMMC1 Errors:#\n" - "Init fails:\n" - "Read/Write fails:\n" - "Read/Write errors:" - ); - lv_obj_set_size(desc4, LV_HOR_RES / 2 / 5 * 2, LV_VER_RES - (LV_DPI * 11 / 8) * 4); - lv_obj_set_width(lb_desc4, lv_obj_get_width(desc4)); - lv_obj_align(desc4, val3, LV_ALIGN_OUT_RIGHT_MID, LV_DPI / 2, 0); - - lv_obj_t *val4 = lv_cont_create(win, NULL); - lv_obj_set_size(val4, LV_HOR_RES / 13 * 3, LV_VER_RES - (LV_DPI * 11 / 8) * 4); - - lv_obj_t * lb_val4 = lv_label_create(val4, lb_desc); - - u16 *sd_errors = sd_get_error_count(); - s_printf(txt_buf, "\n%d (%d)\n%d (%d)\n%d (%d)", - sd_errors[0], nyx_str->info.sd_errors[0], sd_errors[1], nyx_str->info.sd_errors[1], sd_errors[2], nyx_str->info.sd_errors[2]); - - lv_label_set_text(lb_val4, txt_buf); - - lv_obj_set_width(lb_val4, lv_obj_get_width(val4)); - lv_obj_align(val4, desc4, LV_ALIGN_OUT_RIGHT_MID, LV_DPI / 2, 0); - - free(txt_buf); - sd_unmount(); + lv_label_set_text(lb_desc, "#FFDD00 Failed to init SD!#"); + goto failed; } + lv_label_set_text(lb_desc, + "#00DDFF Card IDentification:#\n" + "Vendor ID:\n" + "Model:\n" + "OEM ID:\n" + "HW rev:\n" + "FW rev:\n" + "S/N:\n" + "Month/Year:\n\n" + "Bootloader bus:" + ); + + lv_obj_t *val = lv_cont_create(win, NULL); + lv_obj_set_size(val, LV_HOR_RES / 9 * 2, LV_VER_RES - (LV_DPI * 11 / 8) * 5 / 2); + + lv_obj_t * lb_val = lv_label_create(val, lb_desc); + + char *txt_buf = (char *)malloc(SZ_16K); + txt_buf[0] = '\n'; + txt_buf[1] = 0; + + // Identify manufacturer. + switch (sd_storage.cid.manfid) + { + case 0x00: + strcat(txt_buf, "Fake "); + break; + case 0x01: + strcat(txt_buf, "Panasonic "); + break; + case 0x02: + strcat(txt_buf, "Toshiba "); + break; + case 0x03: + strcat(txt_buf, "SanDisk "); + break; + case 0x06: + strcat(txt_buf, "Ritek "); + break; + case 0x09: + strcat(txt_buf, "ATP "); + break; + case 0x13: + strcat(txt_buf, "Kingmax "); + break; + case 0x19: + strcat(txt_buf, "Dynacard "); + break; + case 0x1A: + strcat(txt_buf, "Power Quotient "); + break; + case 0x1B: + strcat(txt_buf, "Samsung "); + break; + case 0x1D: + strcat(txt_buf, "AData "); + break; + case 0x27: + strcat(txt_buf, "Phison "); + break; + case 0x28: + strcat(txt_buf, "Barun Electronics "); + break; + case 0x31: + strcat(txt_buf, "Silicon Power "); + break; + case 0x41: + strcat(txt_buf, "Kingston "); + break; + case 0x51: + strcat(txt_buf, "STEC "); + break; + case 0x5D: + strcat(txt_buf, "SwissBit "); + break; + case 0x61: + strcat(txt_buf, "Netlist "); + break; + case 0x63: + strcat(txt_buf, "Cactus "); + break; + case 0x73: + strcat(txt_buf, "Bongiovi "); + break; + case 0x74: + strcat(txt_buf, "Jiaelec "); + break; + case 0x76: + strcat(txt_buf, "Patriot "); + break; + case 0x82: + strcat(txt_buf, "Jiang Tay "); + break; + case 0x83: + strcat(txt_buf, "Netcom "); + break; + case 0x84: + strcat(txt_buf, "Strontium "); + break; + //TODO: Investigate which OEM/ODM makes these. + case 0x9C: // BE, Angelbird | Barun Electronics? What about 0x28? + // LX512 SO, Lexar, Angelbird, Hoodman, Sony | Solidgear? + strcat(txt_buf, "Solidgear "); + break; + case 0x9F: + strcat(txt_buf, "Taishin "); + break; + case 0xAD: + strcat(txt_buf, "Longsys "); + break; + default: + strcat(txt_buf, "Unknown "); + break; + } + + s_printf(txt_buf + strlen(txt_buf), "(%02X)\n%c%c%c%c%c\n%c%c (%04X)\n%X\n%X\n%08x\n%02d/%04d\n\n", + sd_storage.cid.manfid, + sd_storage.cid.prod_name[0], sd_storage.cid.prod_name[1], sd_storage.cid.prod_name[2], + sd_storage.cid.prod_name[3], sd_storage.cid.prod_name[4], + (sd_storage.cid.oemid >> 8) & 0xFF, sd_storage.cid.oemid & 0xFF, sd_storage.cid.oemid, + sd_storage.cid.hwrev, sd_storage.cid.fwrev, sd_storage.cid.serial, + sd_storage.cid.month, sd_storage.cid.year); + + switch (nyx_str->info.sd_init) + { + case SD_1BIT_HS25: + strcat(txt_buf, "HS25 1bit"); + break; + case SD_4BIT_HS25: + strcat(txt_buf, "HS25"); + break; + case SD_UHS_SDR82: // Report as SDR104. + case SD_UHS_SDR104: + strcat(txt_buf, "SDR104"); + break; + case 0: + default: + strcat(txt_buf, "Undefined"); + break; + } + + lv_label_set_text(lb_val, txt_buf); + + lv_obj_set_width(lb_val, lv_obj_get_width(val)); + lv_obj_align(val, desc, LV_ALIGN_OUT_RIGHT_MID, 0, 0); + + lv_obj_t *desc2 = lv_cont_create(win, NULL); + lv_obj_set_size(desc2, LV_HOR_RES / 2 / 4 * 2, LV_VER_RES - (LV_DPI * 11 / 8) * 5 / 2); + + lv_obj_t * lb_desc2 = lv_label_create(desc2, lb_desc); + + lv_label_set_static_text(lb_desc2, + "#00DDFF Card-Specific Data#\n" + "Cmd Classes:\n" + "Capacity:\n" + "Capacity (LBA):\n" + "Bus Width:\n" + "Current Rate:\n" + "Speed Class:\n" + "UHS Grade:\n" + "Video Class:\n" + "App perf class:\n" + "Write Protect:" + ); + lv_obj_set_width(lb_desc2, lv_obj_get_width(desc2)); + lv_obj_align(desc2, val, LV_ALIGN_OUT_RIGHT_MID, LV_DPI / 2, 0); + + lv_obj_t *val2 = lv_cont_create(win, NULL); + lv_obj_set_size(val2, LV_HOR_RES / 13 * 3, LV_VER_RES - (LV_DPI * 11 / 8) * 5 / 2); + + lv_obj_t * lb_val2 = lv_label_create(val2, lb_desc); + + char *wp_info; + switch (sd_storage.csd.write_protect) + { + case 1: + wp_info = "Temporary"; + break; + case 2: + case 3: + wp_info = "Permanent"; + break; + default: + wp_info = "None"; + break; + } + + bool uhs_au_mb = false; + u32 uhs_au_size = sd_storage_get_ssr_au(&sd_storage); + if (uhs_au_size >= 1024) + { + uhs_au_mb = true; + uhs_au_size /= 1024; + } + + s_printf(txt_buf, + "#00DDFF v%d.0#\n%02X\n%d MiB\n%X (CP %X)\n%d\n%d MB/s (%d MHz)\n%d (AU: %d %s\nU%d\nV%d\nA%d\n%s", + sd_storage.csd.structure + 1, sd_storage.csd.cmdclass, + sd_storage.sec_cnt >> 11, sd_storage.sec_cnt, sd_storage.ssr.protected_size >> 9, + sd_storage.ssr.bus_width, sd_storage.csd.busspeed, + (sd_storage.csd.busspeed > 10) ? (sd_storage.csd.busspeed * 2) : 50, + sd_storage.ssr.speed_class, uhs_au_size, uhs_au_mb ? "MiB)" : "KiB)", sd_storage.ssr.uhs_grade, + sd_storage.ssr.video_class, sd_storage.ssr.app_class, wp_info); + + lv_label_set_text(lb_val2, txt_buf); + + lv_obj_set_width(lb_val2, lv_obj_get_width(val2)); + lv_obj_align(val2, desc2, LV_ALIGN_OUT_RIGHT_MID, 0, 0); + + lv_obj_t *line_sep = lv_line_create(win, NULL); + static const lv_point_t line_pp[] = { {0, 0}, { LV_HOR_RES - (LV_DPI - (LV_DPI / 4)) * 12, 0} }; + lv_line_set_points(line_sep, line_pp, 2); + lv_line_set_style(line_sep, lv_theme_get_current()->line.decor); + lv_obj_align(line_sep, desc, LV_ALIGN_OUT_BOTTOM_LEFT, LV_DPI * 410 / 100, LV_DPI / 7); + + lv_obj_t *desc3 = lv_cont_create(win, NULL); + lv_obj_set_size(desc3, LV_HOR_RES / 2 / 2 * 2, LV_VER_RES - (LV_DPI * 11 / 8) * 4); + + lv_obj_t * lb_desc3 = lv_label_create(desc3, lb_desc); + lv_label_set_text(lb_desc3, "#D4FF00 Acquiring FAT volume info...#"); + lv_obj_set_width(lb_desc3, lv_obj_get_width(desc3)); + + lv_obj_align(desc3, desc, LV_ALIGN_OUT_BOTTOM_LEFT, 0, LV_DPI / 2); + + manual_system_maintenance(true); + + f_getfree("", &sd_fs.free_clst, NULL); + + lv_label_set_text(lb_desc3, + "#00DDFF Found FAT volume:#\n" + "Filesystem:\n" + "Cluster:\n" + "Size free/total:" + ); + lv_obj_set_size(desc3, LV_HOR_RES / 2 / 5 * 2, LV_VER_RES - (LV_DPI * 11 / 8) * 4); + lv_obj_set_width(lb_desc3, lv_obj_get_width(desc3)); + lv_obj_align(desc3, desc, LV_ALIGN_OUT_BOTTOM_LEFT, 0, LV_DPI / 2); + + lv_obj_t *val3 = lv_cont_create(win, NULL); + lv_obj_set_size(val3, LV_HOR_RES / 13 * 3, LV_VER_RES - (LV_DPI * 11 / 8) * 4); + + lv_obj_t * lb_val3 = lv_label_create(val3, lb_desc); + + s_printf(txt_buf, "\n%s\n%d %s\n%d/%d MiB", + sd_fs.fs_type == FS_EXFAT ? ("exFAT "SYMBOL_SHRK) : ("FAT32"), + (sd_fs.csize > 1) ? (sd_fs.csize >> 1) : 512, + (sd_fs.csize > 1) ? "KiB" : "B", + (u32)(sd_fs.free_clst * sd_fs.csize >> SECTORS_TO_MIB_COEFF), + (u32)(sd_fs.n_fatent * sd_fs.csize >> SECTORS_TO_MIB_COEFF)); + + lv_label_set_text(lb_val3, txt_buf); + + lv_obj_set_width(lb_val3, lv_obj_get_width(val3)); + lv_obj_align(val3, desc3, LV_ALIGN_OUT_RIGHT_MID, 0, 0); + + lv_obj_t *desc4 = lv_cont_create(win, NULL); + lv_obj_set_size(desc4, LV_HOR_RES / 2 / 2 * 2, LV_VER_RES - (LV_DPI * 11 / 8) * 4); + + lv_obj_t * lb_desc4 = lv_label_create(desc4, lb_desc); + lv_label_set_text(lb_desc4, "#D4FF00 Acquiring FAT volume info...#"); + lv_obj_set_width(lb_desc4, lv_obj_get_width(desc4)); + + lv_label_set_text(lb_desc4, + "#00DDFF SDMMC1 Errors:#\n" + "Init fails:\n" + "Read/Write fails:\n" + "Read/Write errors:" + ); + lv_obj_set_size(desc4, LV_HOR_RES / 2 / 5 * 2, LV_VER_RES - (LV_DPI * 11 / 8) * 4); + lv_obj_set_width(lb_desc4, lv_obj_get_width(desc4)); + lv_obj_align(desc4, val3, LV_ALIGN_OUT_RIGHT_MID, LV_DPI / 2, 0); + + lv_obj_t *val4 = lv_cont_create(win, NULL); + lv_obj_set_size(val4, LV_HOR_RES / 13 * 3, LV_VER_RES - (LV_DPI * 11 / 8) * 4); + + lv_obj_t * lb_val4 = lv_label_create(val4, lb_desc); + + u16 *sd_errors = sd_get_error_count(); + s_printf(txt_buf, "\n%d (%d)\n%d (%d)\n%d (%d)", + sd_errors[0], nyx_str->info.sd_errors[0], sd_errors[1], nyx_str->info.sd_errors[1], sd_errors[2], nyx_str->info.sd_errors[2]); + + lv_label_set_text(lb_val4, txt_buf); + + lv_obj_set_width(lb_val4, lv_obj_get_width(val4)); + lv_obj_align(val4, desc4, LV_ALIGN_OUT_RIGHT_MID, LV_DPI / 2, 0); + + free(txt_buf); + sd_unmount(); + +failed: nyx_window_toggle_buttons(win, false); return LV_RES_OK; diff --git a/nyx/nyx_gui/frontend/gui_tools.c b/nyx/nyx_gui/frontend/gui_tools.c index ada6336..5ce9304 100644 --- a/nyx/nyx_gui/frontend/gui_tools.c +++ b/nyx/nyx_gui/frontend/gui_tools.c @@ -68,7 +68,7 @@ bool get_autorcm_status(bool toggle) emmc_initialize(false); u8 *tempbuf = (u8 *)malloc(0x200); - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_BOOT0); + emmc_set_partition(EMMC_BOOT0); sdmmc_storage_read(&emmc_storage, 0x200 / EMMC_BLOCKSIZE, 1, tempbuf); // Get the correct RSA modulus byte masks. @@ -1158,7 +1158,7 @@ static lv_res_t _create_window_dump_pk12_tool(lv_obj_t *btn) goto out_free; } - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_BOOT0); + emmc_set_partition(EMMC_BOOT0); // Read package1. static const u32 BOOTLOADER_SIZE = SZ_256K; @@ -1300,7 +1300,7 @@ static lv_res_t _create_window_dump_pk12_tool(lv_obj_t *btn) } // Dump package2.1. - sdmmc_storage_set_mmc_partition(&emmc_storage, EMMC_GPP); + emmc_set_partition(EMMC_GPP); // Parse eMMC GPT. LIST_INIT(gpt); emmc_gpt_parse(&gpt);