1
0
Fork 0
mirror of https://github.com/suchmememanyskill/TegraExplorer.git synced 2024-11-23 04:12:04 +00:00

Add experimental emummc formatter

This commit is contained in:
Such Meme, Many Skill 2019-12-03 17:11:08 +01:00
parent 57714daa87
commit 73a6fc460b
7 changed files with 107 additions and 14 deletions

View file

@ -49,6 +49,11 @@
---------------------------------------------------------------------------*/ ---------------------------------------------------------------------------*/
PARTITION VolToPart[2] = {
{0, 1},
{1, 1}
};
#if FF_DEFINED != 86604 /* Revision ID */ #if FF_DEFINED != 86604 /* Revision ID */
#error Wrong include file (ff.h). #error Wrong include file (ff.h).
#endif #endif
@ -6039,7 +6044,7 @@ FRESULT f_mkfs (
sys = 0x07; /* HPFS/NTFS/exFAT */ sys = 0x07; /* HPFS/NTFS/exFAT */
} else { } else {
if (fmt == FS_FAT32) { if (fmt == FS_FAT32) {
sys = 0x0C; /* FAT32X */ sys = 0x0B; /* FAT32X */
} else { } else {
if (sz_vol >= 0x10000) { if (sz_vol >= 0x10000) {
sys = 0x06; /* FAT12/16 (large) */ sys = 0x06; /* FAT12/16 (large) */
@ -6117,12 +6122,13 @@ FRESULT f_fdisk (
e_hd = (BYTE)(n - 1); e_hd = (BYTE)(n - 1);
sz_cyl = 63 * n; sz_cyl = 63 * n;
tot_cyl = sz_disk / sz_cyl; tot_cyl = sz_disk / sz_cyl;
gfx_printf("tot_cyl: %d\nsz_disk: %d\nsz_cyl: %d\n", tot_cyl, sz_disk, sz_cyl);
/* Create partition table */ /* Create partition table */
mem_set(buf, 0, FF_MAX_SS); mem_set(buf, 0, FF_MAX_SS);
p = buf + MBR_Table; b_cyl = 0; p = buf + MBR_Table; b_cyl = 0;
for (i = 0; i < 4; i++, p += SZ_PTE) { for (i = 0; i < 4; i++, p += SZ_PTE) {
p_cyl = (szt[i] <= 100U) ? (DWORD)tot_cyl * szt[i] / 100 : szt[i] / sz_cyl; /* Number of cylinders */ p_cyl = (szt[i] <= 100U) ? (DWORD)tot_cyl * (szt[i] / 100) : szt[i] / sz_cyl; /* Number of cylinders */
if (p_cyl == 0) continue; if (p_cyl == 0) continue;
s_part = (DWORD)sz_cyl * b_cyl; s_part = (DWORD)sz_cyl * b_cyl;
sz_part = (DWORD)sz_cyl * p_cyl; sz_part = (DWORD)sz_cyl * p_cyl;

View file

@ -38,7 +38,7 @@
/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */ / f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
#define FF_USE_MKFS 0 #define FF_USE_MKFS 1
/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */ /* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
@ -169,6 +169,7 @@
#define FF_STR_VOLUME_ID 1 #define FF_STR_VOLUME_ID 1
#define FF_VOLUME_STRS "sd", "emmc" #define FF_VOLUME_STRS "sd", "emmc"
/* FF_STR_VOLUME_ID switches support for volume ID in arbitrary strings. /* FF_STR_VOLUME_ID switches support for volume ID in arbitrary strings.
/ When FF_STR_VOLUME_ID is set to 1 or 2, arbitrary strings can be used as drive / When FF_STR_VOLUME_ID is set to 1 or 2, arbitrary strings can be used as drive
/ number in the path name. FF_VOLUME_STRS defines the volume ID strings for each / number in the path name. FF_VOLUME_STRS defines the volume ID strings for each
@ -181,7 +182,7 @@
*/ */
#define FF_MULTI_PARTITION 0 #define FF_MULTI_PARTITION 1
/* This option switches support for multiple volumes on the physical drive. /* This option switches support for multiple volumes on the physical drive.
/ By default (0), each logical drive number is bound to the same physical drive / By default (0), each logical drive number is bound to the same physical drive
/ number and only an FAT volume found on the physical drive will be mounted. / number and only an FAT volume found on the physical drive will be mounted.

View file

@ -206,9 +206,9 @@ void filemenu(const char *startpath){
else else
explfilemenu[7].property = -1; explfilemenu[7].property = -1;
res = makemenu(explfilemenu, 8); tempint = makemenu(explfilemenu, 8);
switch (res){ switch (tempint){
case COPY: case COPY:
writeclipboard(getnextloc(currentpath, fileobjects[res - 1].name), false, false); writeclipboard(getnextloc(currentpath, fileobjects[res - 1].name), false, false);
break; break;
@ -218,8 +218,8 @@ void filemenu(const char *startpath){
case DELETE: case DELETE:
msleep(100); msleep(100);
sprintf(temp, "Do you want to delete:\n%s\n\nPress Power to confirm\nPress Vol+/- to cancel", fileobjects[res - 1].name); sprintf(temp, "Do you want to delete:\n%s\n\nPress Power to confirm\nPress Vol+/- to cancel", fileobjects[res - 1].name);
res = message(temp, COLOR_RED); tempint = message(temp, COLOR_RED);
if (res & BTN_POWER){ if (tempint & BTN_POWER){
f_unlink(getnextloc(currentpath, fileobjects[res - 1].name)); f_unlink(getnextloc(currentpath, fileobjects[res - 1].name));
amount = readfolder(currentpath); amount = readfolder(currentpath);
} }

View file

@ -30,11 +30,12 @@ menu_item shutdownmenu[7] = {
{"Reboot to Atmosphere", COLOR_GREEN, AMS, -1} {"Reboot to Atmosphere", COLOR_GREEN, AMS, -1}
}; };
menu_item toolsmenu[4] = { menu_item toolsmenu[5] = {
{"-- TOOLS --\n", COLOR_VIOLET, -1, 0}, {"-- TOOLS --\n", COLOR_VIOLET, -1, 0},
{"Back", COLOR_WHITE, -1, 1}, {"Back", COLOR_WHITE, -1, 1},
{"\nDisplay Console Info", COLOR_GREEN, DISPLAY_INFO, 1}, {"\nDisplay Console Info", COLOR_GREEN, DISPLAY_INFO, 1},
{"Display GPIO pins [DEV]", COLOR_RED, DISPLAY_GPIO, 1} {"Display GPIO pins [DEV]", COLOR_RED, DISPLAY_GPIO, 1},
{"FORMAT TEST", COLOR_RED, FORMATFAT32, 1}
}; };
void fillmainmenu(){ void fillmainmenu(){
@ -88,7 +89,7 @@ void te_main(){
break; break;
case TOOLS: case TOOLS:
res = makemenu(toolsmenu, 4); res = makemenu(toolsmenu, 5);
if (res == DISPLAY_INFO) if (res == DISPLAY_INFO)
displayinfo(); displayinfo();
@ -96,6 +97,9 @@ void te_main(){
if (res == DISPLAY_GPIO) if (res == DISPLAY_GPIO)
displaygpio(); displaygpio();
if (res == FORMATFAT32)
format();
break; break;
case CREDITS: case CREDITS:

View file

@ -30,7 +30,8 @@ enum shutdownmenu_return {
enum toolsmenu_return { enum toolsmenu_return {
DISPLAY_INFO = 1, DISPLAY_INFO = 1,
DISPLAY_GPIO DISPLAY_GPIO,
FORMATFAT32
}; };
//menu_item mainmenu[MAINMENU_AMOUNT]; //menu_item mainmenu[MAINMENU_AMOUNT];

View file

@ -5,12 +5,16 @@
#include "../utils/btn.h" #include "../utils/btn.h"
#include "../soc/gpio.h" #include "../soc/gpio.h"
#include "../utils/util.h" #include "../utils/util.h"
#include "../utils/types.h"
extern bool sd_mount();
extern void sd_unmount();
void displayinfo(){ void displayinfo(){
clearscreen(); clearscreen();
FATFS *fs; FATFS *fs;
DWORD fre_clust, fre_sect, tot_sect; DWORD fre_clust, fre_sect, tot_sect, temp_sect;
int res; int res;
gfx_printf("Getting storage info: please wait..."); gfx_printf("Getting storage info: please wait...");
@ -23,6 +27,11 @@ void displayinfo(){
gfx_printf("%d KiB total\n%d KiB free\n\nPress any key to continue\n", tot_sect / 2, fre_sect / 2); gfx_printf("%d KiB total\n%d KiB free\n\nPress any key to continue\n", tot_sect / 2, fre_sect / 2);
temp_sect = tot_sect;
temp_sect -= 61145088;
gfx_printf("\n1st part: %d\n2nd part: 61145088", temp_sect);
btn_wait(); btn_wait();
} }
@ -46,3 +55,74 @@ void displaygpio(){
break; break;
} }
} }
void format(){
clearscreen();
int res;
u32 timer;
FATFS *fs;
DWORD fre_clust, tot_sect, temp_sect;
BYTE work[FF_MAX_SS];
DWORD plist[] = {188928257, 61145089, 0};
DWORD sectsize = 16 * 512;
BYTE formatoptions = 0;
formatoptions |= (FM_FAT32);
formatoptions |= (FM_SFD);
timer = get_tmr_s();
gfx_printf("Getting free cluster info from 1st partition");
if (res = f_getfree("sd:", &fre_clust, &fs))
gfx_printf("%kGetfree failed! errcode %d", COLOR_RED, res);
else {
tot_sect = (fs->n_fatent - 2) * fs->csize;
temp_sect = tot_sect;
temp_sect -= 61145089;
gfx_printf("Total sectors: %d\nFree after emummc: %d\n\n", tot_sect, temp_sect);
if (temp_sect < 0)
gfx_printf("%kNot enough space free!\n", COLOR_RED);
else {
gfx_printf("Partitioning sd...\nPartition1 size: %d\nPartition2 size: %d\n", plist[0], plist[1]);
plist[0] = temp_sect;
if (res = f_fdisk(0, plist, &work))
gfx_printf("Partitioning failed! errcode %d\n", res);
else {
gfx_printf("\nFormatting FAT32 Partition:\n");
if (res = f_mkfs("0:", formatoptions, sectsize, &work, sizeof work))
gfx_printf("%kFormat failed! errcode %d\n", res);
else {
gfx_printf("Smells like a formatted SD\n\n");
}
}
}
}
if (!res){
sd_unmount();
if (!sd_mount())
gfx_printf("%kSd failed to mount!\n", COLOR_ORANGE);
else {
gfx_printf("Sd mounted!\n");
}
}
gfx_printf("\nPress any button to return%k\nTotal time taken: %ds", COLOR_WHITE, (get_tmr_s() - timer));
btn_wait();
/*
res = f_fdisk(0, plist, &work);
gfx_printf("f_fdisk partdrive: %d\n", res);
if (!res){
res = f_mkfs("0:", muhoptions, sectsize, &work, sizeof work);
gfx_printf("f_mkfs0 res: %d\n", res);
}
sd_unmount();
res = sd_mount();
gfx_printf("sd_mount res: %s", (res ? "1" : "0"));
btn_wait();
*/
}

View file

@ -2,3 +2,4 @@
void displayinfo(); void displayinfo();
void displaygpio(); void displaygpio();
void format();