1
0
Fork 0
mirror of https://github.com/suchmememanyskill/TegraExplorer.git synced 2024-11-26 13:52:06 +00:00
TegraExplorer/source/tegraexplorer/mainmenu.c

155 lines
4.9 KiB
C
Raw Normal View History

2020-12-23 23:31:17 +00:00
#include "mainmenu.h"
#include "../gfx/gfx.h"
#include "../gfx/gfxutils.h"
#include "../gfx/menu.h"
#include "tools.h"
2020-05-01 21:42:49 +01:00
#include "../hid/hid.h"
#include "../fs/menus/explorer.h"
#include <utils/btn.h>
#include <storage/nx_sd.h>
2020-12-25 20:16:24 +00:00
#include "tconf.h"
2020-12-26 21:24:41 +00:00
#include "../keys/keys.h"
2020-12-26 22:41:25 +00:00
#include "../storage/mountmanager.h"
2020-12-27 22:33:23 +00:00
#include "../storage/gptmenu.h"
#include "../storage/emummc.h"
#include <utils/util.h>
2020-12-29 00:53:39 +00:00
#include "../fs/fsutils.h"
#include <string.h>
#include "../utils/utils.h"
#include <mem/heap.h>
2020-12-29 00:53:39 +00:00
enum {
MainExplore = 0,
MainBrowseSd,
MainMountSd,
MainBrowseEmmc,
MainBrowseEmummc,
MainTools,
MainCauseException,
MainPartitionSd,
MainDumpFw,
MainViewKeys,
MainExit,
2020-12-29 12:11:52 +00:00
MainPowerOff,
2020-12-29 00:53:39 +00:00
MainRebootRCM,
2020-12-29 12:11:52 +00:00
MainRebootHekate,
MainRebootAMS
2020-12-29 00:53:39 +00:00
};
MenuEntry_t mainMenuEntries[] = {
2020-12-29 00:53:39 +00:00
[MainExplore] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "-- Explore --"},
[MainBrowseSd] = {.optionUnion = COLORTORGB(COLOR_GREEN), .name = "Browse SD"},
[MainMountSd] = {.optionUnion = COLORTORGB(COLOR_YELLOW)}, // To mount/unmount the SD
[MainBrowseEmmc] = {.optionUnion = COLORTORGB(COLOR_BLUE), .name = "Browse EMMC"},
[MainBrowseEmummc] = {.optionUnion = COLORTORGB(COLOR_BLUE), .name = "Browse EMUMMC"},
[MainTools] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "\n-- Tools --"},
[MainCauseException] = {.optionUnion = COLORTORGB(COLOR_RED), .name = "Cause an exception"},
[MainPartitionSd] = {.optionUnion = COLORTORGB(COLOR_ORANGE), .name = "Partition the sd"},
[MainDumpFw] = {.optionUnion = COLORTORGB(COLOR_BLUE), .name = "Dump Firmware"},
[MainViewKeys] = {.optionUnion = COLORTORGB(COLOR_YELLOW), .name = "View dumped keys"},
[MainExit] = {.optionUnion = COLORTORGB(COLOR_WHITE) | SKIPBIT, .name = "\n-- Exit --"},
2020-12-29 12:11:52 +00:00
[MainPowerOff] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Power off"},
2020-12-29 00:53:39 +00:00
[MainRebootRCM] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Reboot to RCM"},
2020-12-29 12:11:52 +00:00
[MainRebootHekate] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Reboot to bootloader/update.bin"},
[MainRebootAMS] = {.optionUnion = COLORTORGB(COLOR_VIOLET), .name = "Reboot to atmosphere/reboot_payload.bin"}
};
2020-02-11 16:18:29 +00:00
void HandleSD(){
gfx_clearscreen();
2020-12-25 20:16:24 +00:00
TConf.curExplorerLoc = LOC_SD;
if (!sd_mount() || sd_get_card_removed()){
gfx_printf("Sd is not mounted!");
hidWait();
2020-02-11 16:18:29 +00:00
}
else
FileExplorer("sd:/");
2020-02-11 16:18:29 +00:00
}
2020-12-26 22:41:25 +00:00
void HandleEMMC(){
2020-12-27 22:33:23 +00:00
GptMenu(MMC_CONN_EMMC);
}
void HandleEMUMMC(){
GptMenu(MMC_CONN_EMUMMC);
2020-12-26 22:41:25 +00:00
}
2020-12-25 20:16:24 +00:00
void CrashTE(){
gfx_printf("%d", *((int*)0));
}
2020-12-26 21:24:41 +00:00
void ViewKeys(){
gfx_clearscreen();
for (int i = 0; i < 3; i++){
gfx_printf("\nBis key 0%d: ", i);
PrintKey(dumpedKeys.bis_key[i], AES_128_KEY_SIZE * 2);
}
gfx_printf("\nMaster key 0: ");
PrintKey(dumpedKeys.master_key, AES_128_KEY_SIZE);
gfx_printf("\nHeader key: ");
PrintKey(dumpedKeys.header_key, AES_128_KEY_SIZE * 2);
gfx_printf("\nSave mac key: ");
PrintKey(dumpedKeys.save_mac_key, AES_128_KEY_SIZE);
2020-12-26 22:41:25 +00:00
gfx_printf("\n\nPkg1 ID: '%s', kb %d", TConf.pkg1ID, TConf.pkg1ver);
2020-12-26 21:24:41 +00:00
hidWait();
}
extern bool sd_mounted;
extern bool is_sd_inited;
2020-12-29 00:53:39 +00:00
extern int launch_payload(char *path);
void RebootToAMS(){
launch_payload("sd:/atmosphere/reboot_payload.bin");
}
void RebootToHekate(){
launch_payload("sd:/bootloader/update.bin");
}
void MountOrUnmountSD(){
(sd_mounted) ? sd_unmount() : sd_mount();
}
menuPaths mainMenuPaths[] = {
2020-12-29 00:53:39 +00:00
[MainBrowseSd] = HandleSD,
[MainMountSd] = MountOrUnmountSD,
[MainBrowseEmmc] = HandleEMMC,
[MainBrowseEmummc] = HandleEMUMMC,
[MainCauseException] = CrashTE,
[MainPartitionSd] = FormatSD,
[MainDumpFw] = DumpSysFw,
[MainViewKeys] = ViewKeys,
[MainRebootAMS] = RebootToAMS,
[MainRebootHekate] = RebootToHekate,
[MainRebootRCM] = reboot_rcm,
[MainPowerOff] = power_off,
2020-02-11 16:18:29 +00:00
};
void EnterMainMenu(){
while (1){
if (sd_get_card_removed())
sd_unmount();
2020-12-29 00:53:39 +00:00
// -- Explore --
mainMenuEntries[MainBrowseSd].hide = !sd_mounted;
mainMenuEntries[MainMountSd].name = (sd_mounted) ? "Unmount SD" : "Mount SD";
mainMenuEntries[MainBrowseEmmc].hide = !TConf.keysDumped;
mainMenuEntries[MainBrowseEmummc].hide = (!TConf.keysDumped || !emu_cfg.enabled || !sd_mounted);
// -- Tools --
mainMenuEntries[MainPartitionSd].hide = (!is_sd_inited || sd_get_card_removed());
mainMenuEntries[MainDumpFw].hide = (!TConf.keysDumped || !sd_mounted);
mainMenuEntries[MainViewKeys].hide = !TConf.keysDumped;
// -- Exit --
mainMenuEntries[MainRebootAMS].hide = (!sd_mounted || !FileExists("sd:/atmosphere/reboot_payload.bin"));
mainMenuEntries[MainRebootHekate].hide = (!sd_mounted || !FileExists("sd:/bootloader/update.bin"));
2020-12-26 21:24:41 +00:00
FunctionMenuHandler(mainMenuEntries, ARR_LEN(mainMenuEntries), mainMenuPaths, ALWAYSREDRAW);
}
}