1
0
Fork 0
mirror of https://github.com/suchmememanyskill/TegraExplorer.git synced 2024-11-10 06:02:01 +00:00
TegraExplorer/source/tegraexplorer/tools.c

132 lines
3.4 KiB
C
Raw Normal View History

#include "tools.h"
#include "gfx.h"
#include "../libs/fatfs/ff.h"
#include "../gfx/gfx.h"
#include "../utils/btn.h"
2019-12-03 09:06:11 +00:00
#include "../soc/gpio.h"
#include "../utils/util.h"
2019-12-03 16:11:08 +00:00
#include "../utils/types.h"
2019-12-04 16:47:13 +00:00
#include "../libs/fatfs/diskio.h"
2019-12-09 10:56:30 +00:00
#include "../storage/sdmmc.h"
2019-12-11 12:18:57 +00:00
#include "emmc.h"
2019-12-03 16:11:08 +00:00
extern bool sd_mount();
extern void sd_unmount();
2019-12-09 10:56:30 +00:00
extern sdmmc_storage_t sd_storage;
void displayinfo(){
clearscreen();
2019-12-11 12:18:57 +00:00
FATFS *fs;
DWORD fre_clust, fre_sect, tot_sect;
u32 capacity;
int res;
2019-12-11 12:18:57 +00:00
gfx_printf("Biskeys:\n");
print_biskeys();
2019-12-11 12:18:57 +00:00
if (!sd_mount()){
gfx_printf("SD mount failed!\nFailed to display SD info\n");
}
else {
gfx_printf("Getting storage info: please wait...");
2019-12-03 16:11:08 +00:00
2019-12-11 12:18:57 +00:00
res = f_getfree("sd:", &fre_clust, &fs);
gfx_printf("\nResult getfree: %d\n\n", res);
2019-12-04 16:47:13 +00:00
2019-12-11 12:18:57 +00:00
tot_sect = (fs->n_fatent - 2) * fs->csize;
fre_sect = fre_clust * fs->csize;
capacity = sd_storage.csd.capacity;
2019-12-04 16:47:13 +00:00
2019-12-11 12:18:57 +00:00
gfx_printf("Entire sd:\nSectors: %d\nSpace total: %d MB\n\n", capacity, capacity / 2048);
gfx_printf("First partition on SD:\nSectors: %d\nSpace total: %d MB\nSpace free: %d MB\n\n", tot_sect, tot_sect / 2048, fre_sect / 2048);
}
2019-12-03 16:11:08 +00:00
2019-12-11 12:18:57 +00:00
gfx_printf("Press any key to continue");
btn_wait();
2019-12-03 09:06:11 +00:00
}
void displaygpio(){
int res;
clearscreen();
gfx_printf("Updates gpio pins ever 50ms:\nPress power to exit");
msleep(200);
while (1){
msleep(10);
gfx_con_setpos(0, 63);
for (int i = 0; i <= 30; i++){
gfx_printf("\nPort %d: ", i);
for (int i2 = 7; i2 >= 0; i2--)
gfx_printf("%d", gpio_read(i, (1 << i2)));
}
res = btn_read();
if (res & BTN_POWER)
break;
}
2019-12-03 16:11:08 +00:00
}
void format(){
clearscreen();
int res;
2019-12-09 10:56:30 +00:00
bool fatalerror = false;
2019-12-03 16:11:08 +00:00
2019-12-09 10:56:30 +00:00
u32 timer, totalsectors;
2019-12-03 16:11:08 +00:00
BYTE work[FF_MAX_SS];
2019-12-09 10:56:30 +00:00
DWORD plist[] = {666, 61145088};
DWORD clustsize = 16 * 512;
2019-12-03 16:11:08 +00:00
BYTE formatoptions = 0;
formatoptions |= (FM_FAT32);
2019-12-11 12:18:57 +00:00
//formatoptions |= (FM_SFD);
2019-12-03 16:11:08 +00:00
timer = get_tmr_s();
2019-12-09 10:56:30 +00:00
totalsectors = sd_storage.csd.capacity;
if (totalsectors < 61145088){
gfx_printf("%k\nNot enough free space for emummc!", COLOR_RED);
fatalerror = true;
}
if (!fatalerror){
plist[0] = totalsectors - 61145088;
gfx_printf("\nStarting SD partitioning:\nTotalSectors: %d\nPartition1 (SD): %d\nPartition2 (EMUMMC): %d\n", totalsectors, plist[0], plist[1]);
gfx_printf("\nPartitioning SD...\n");
res = f_fdisk(0, plist, &work);
if (res){
gfx_printf("%kf_fdisk returned %d!\n", COLOR_RED, res);
fatalerror = true;
}
else
gfx_printf("Done!\n");
}
if (!fatalerror){
gfx_printf("\n\nFormatting Partition1...\n");
res = f_mkfs("0:", formatoptions, clustsize, &work, sizeof work);
if (res){
gfx_printf("%kf_mkfs returned %d!\n", COLOR_RED, res);
fatalerror = true;
2019-12-03 16:11:08 +00:00
}
2019-12-09 10:56:30 +00:00
else
gfx_printf("Smells like a formatted SD\n\n");
2019-12-03 16:11:08 +00:00
}
2019-12-09 10:56:30 +00:00
sd_unmount();
if (!fatalerror){
2019-12-03 16:11:08 +00:00
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();
}