1
0
Fork 0
mirror of https://github.com/suchmememanyskill/TegraExplorer.git synced 2024-11-26 05:42:07 +00:00

Add basic folder navigation

+ Add hekate/ams to shutdown menu
This commit is contained in:
Such Meme, Many Skill 2019-12-01 15:42:37 +01:00
parent cd4f2cd347
commit 79027591ac
4 changed files with 92 additions and 8 deletions

View file

@ -24,6 +24,38 @@ char *getnextloc(char *current, char *add){
return ret; return ret;
} }
char *getprevloc(char *current){
char *ret, *temp;
size_t size = strlen(current) + 1;
ret = (char*) malloc (size);
strcpy(ret, current);
temp = strrchr(ret, '/');
memset(temp, '\0', 1);
if (strlen(rootpath) > strlen(ret))
strcpy(ret, rootpath);
return ret;
}
fs_entry getfileobj(int spot){
return fileobjects[spot];
}
bool checkfile(char* path){
FRESULT fr;
FILINFO fno;
fr = f_stat(path, &fno);
if (fr & FR_NO_FILE)
return false;
else
return true;
}
void addobject(char* name, int spot, bool isfol, bool isarc){ void addobject(char* name, int spot, bool isfol, bool isarc){
size_t size = strlen(name) + 1; size_t size = strlen(name) + 1;
fileobjects[spot].property = 0; fileobjects[spot].property = 0;
@ -76,10 +108,34 @@ int readfolder(const char *path){
} }
void filemenu(const char *startpath){ void filemenu(const char *startpath){
int amount; int amount, res;
strcpy(rootpath, startpath); strcpy(rootpath, startpath);
strcpy(currentpath, startpath); strcpy(currentpath, startpath);
amount = readfolder(currentpath); amount = readfolder(currentpath);
makefilemenu(fileobjects, amount, currentpath);
while (1){
res = makefilemenu(fileobjects, amount, currentpath);
if (res < 1){
if (res == -2){
if (!strcmp(rootpath, currentpath))
break;
else {
strcpy(currentpath, getprevloc(currentpath));
amount = readfolder(currentpath);
}
}
if (res == -1){
break;
}
if (res == 0)
break;
}
else {
if (fileobjects[res - 1].property & ISDIR){
strcpy(currentpath, getnextloc(currentpath, fileobjects[res - 1].name));
amount = readfolder(currentpath);
}
}
}
} }

View file

@ -25,4 +25,5 @@ typedef struct _fs_entry {
} fs_entry; } fs_entry;
int readfolder(const char *path); int readfolder(const char *path);
void filemenu(); void filemenu();
bool checkfile(char* path);

View file

@ -8,6 +8,7 @@
extern bool sd_mount(); extern bool sd_mount();
extern void sd_unmount(); extern void sd_unmount();
extern int launch_payload(char *path);
bool sd_mounted; bool sd_mounted;
menu_item mainmenu[MAINMENU_AMOUNT] = { menu_item mainmenu[MAINMENU_AMOUNT] = {
@ -19,12 +20,14 @@ menu_item mainmenu[MAINMENU_AMOUNT] = {
{"Exit", COLOR_WHITE, EXIT, 1} {"Exit", COLOR_WHITE, EXIT, 1}
}; };
menu_item shutdownmenu[5] = { menu_item shutdownmenu[7] = {
{"-- EXIT --\n", COLOR_ORANGE, -1, 0}, {"-- EXIT --\n", COLOR_ORANGE, -1, 0},
{"Back", COLOR_WHITE, -1, 1}, {"Back", COLOR_WHITE, -1, 1},
{"\nReboot to RCM", COLOR_VIOLET, REBOOT_RCM, 1}, {"\nReboot to RCM", COLOR_VIOLET, REBOOT_RCM, 1},
{"Reboot normally", COLOR_ORANGE, REBOOT_NORMAL, 1}, {"Reboot normally", COLOR_ORANGE, REBOOT_NORMAL, 1},
{"Power off", COLOR_BLUE, POWER_OFF, 1} {"Power off\n", COLOR_BLUE, POWER_OFF, 1},
{"Reboot to Hekate", COLOR_GREEN, HEKATE, -1},
{"Reboot to Atmosphere", COLOR_GREEN, AMS, -1}
}; };
menu_item toolsmenu[3] = { menu_item toolsmenu[3] = {
@ -96,7 +99,23 @@ void te_main(){
break; break;
case EXIT: case EXIT:
res = makemenu(shutdownmenu, 5); if (sd_mounted){
if (checkfile("/bootloader/update.bin"))
shutdownmenu[5].property = 1;
else
shutdownmenu[5].property = -1;
if (checkfile("/atmosphere/reboot_payload.bin"))
shutdownmenu[6].property = 1;
else
shutdownmenu[6].property = -1;
}
else {
shutdownmenu[5].property = -1;
shutdownmenu[6].property = -1;
}
res = makemenu(shutdownmenu, 7);
switch(res){ switch(res){
case REBOOT_RCM: case REBOOT_RCM:
@ -107,6 +126,12 @@ void te_main(){
case POWER_OFF: case POWER_OFF:
power_off(); power_off();
case HEKATE:
launch_payload("/bootloader/update.bin");
case AMS:
launch_payload("/atmosphere/reboot_payload.bin");
} //todo declock bpmp } //todo declock bpmp
break; break;

View file

@ -23,7 +23,9 @@ enum mainmenu_return {
enum shutdownmenu_return { enum shutdownmenu_return {
REBOOT_RCM = 1, REBOOT_RCM = 1,
REBOOT_NORMAL, REBOOT_NORMAL,
POWER_OFF POWER_OFF,
HEKATE,
AMS
}; };
enum toolsmenu_return { enum toolsmenu_return {