Get a basic gpt menu
This commit is contained in:
@@ -22,13 +22,16 @@
|
||||
#include "../../config/config.h"
|
||||
#include "../common/common.h"
|
||||
#include "../gfx/gfxutils.h"
|
||||
#include "../../utils/list.h"
|
||||
#include "../../mem/heap.h"
|
||||
|
||||
sdmmc_storage_t storage;
|
||||
emmc_part_t *system_part;
|
||||
sdmmc_t sdmmc;
|
||||
extern hekate_config h_cfg;
|
||||
__attribute__ ((aligned (16))) FATFS emmc;
|
||||
LIST_INIT(gpt);
|
||||
LIST_INIT(sys_gpt);
|
||||
LIST_INIT(emu_gpt);
|
||||
|
||||
u8 bis_key[4][32];
|
||||
pkg1_info pkg1inf = {-1, ""};
|
||||
@@ -64,7 +67,7 @@ pkg1_info returnpkg1info(){
|
||||
int connect_part(const char *partition){
|
||||
sdmmc_storage_set_mmc_partition(&storage, 0);
|
||||
|
||||
system_part = nx_emmc_part_find(&gpt, partition);
|
||||
system_part = nx_emmc_part_find(selectGpt(currentlyMounted), partition);
|
||||
if (!system_part) {
|
||||
gfx_errDisplay("connect_mmc_part", ERR_PART_NOT_FOUND, 0);
|
||||
return 1;
|
||||
@@ -213,8 +216,7 @@ int dump_biskeys(){
|
||||
}
|
||||
|
||||
sdmmc_storage_set_mmc_partition(&storage, 0);
|
||||
// Parse eMMC GPT.
|
||||
nx_emmc_gpt_parse(&gpt, &storage);
|
||||
nx_emmc_gpt_parse(&sys_gpt, &storage);
|
||||
|
||||
se_aes_key_set(8, bis_key[2] + 0x00, 0x10);
|
||||
se_aes_key_set(9, bis_key[2] + 0x10, 0x10);
|
||||
@@ -222,4 +224,20 @@ int dump_biskeys(){
|
||||
pkg1inf.ver = pkg1_id->kb;
|
||||
strcpy(pkg1inf.id, pkg1_id->id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dumpEmuGpt(){
|
||||
connect_mmc(EMUMMC);
|
||||
sdmmc_storage_set_mmc_partition(&storage, 0);
|
||||
nx_emmc_gpt_parse(&emu_gpt, &storage);
|
||||
}
|
||||
|
||||
link_t *selectGpt(short mmcType){
|
||||
switch(mmcType){
|
||||
case SYSMMC:
|
||||
return &sys_gpt;
|
||||
case EMUMMC:
|
||||
return &emu_gpt;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
#include "../../utils/types.h"
|
||||
#include "../../utils/list.h"
|
||||
|
||||
typedef struct _pkg1_info {
|
||||
short ver;
|
||||
@@ -15,6 +16,8 @@ int mount_mmc(const char *partition, const int biskeynumb);
|
||||
void connect_mmc(short mmctype);
|
||||
void disconnect_mmc();
|
||||
int connect_part(const char *partition);
|
||||
void dumpEmuGpt();
|
||||
link_t *selectGpt(short mmcType);
|
||||
|
||||
static const u8 zeros[0x10] = {0};
|
||||
|
||||
|
||||
118
source/tegraexplorer/emmc/emmcmenu.c
Normal file
118
source/tegraexplorer/emmc/emmcmenu.c
Normal file
@@ -0,0 +1,118 @@
|
||||
#include <string.h>
|
||||
#include "emmc.h"
|
||||
#include "../../mem/heap.h"
|
||||
#include "../../utils/types.h"
|
||||
#include "../../libs/fatfs/ff.h"
|
||||
#include "../../utils/sprintf.h"
|
||||
#include "../../utils/btn.h"
|
||||
#include "../../gfx/gfx.h"
|
||||
#include "../../utils/util.h"
|
||||
#include "../../hos/pkg1.h"
|
||||
#include "../../storage/sdmmc.h"
|
||||
#include "../../storage/nx_emmc.h"
|
||||
#include "../../sec/tsec.h"
|
||||
#include "../../soc/t210.h"
|
||||
#include "../../soc/fuse.h"
|
||||
#include "../../mem/mc.h"
|
||||
#include "../../sec/se.h"
|
||||
#include "../../soc/hw_init.h"
|
||||
#include "../../mem/emc.h"
|
||||
#include "../../mem/sdram.h"
|
||||
#include "../../storage/emummc.h"
|
||||
#include "../../config/config.h"
|
||||
#include "../common/common.h"
|
||||
#include "../gfx/gfxutils.h"
|
||||
#include "../../utils/list.h"
|
||||
#include "../../mem/heap.h"
|
||||
#include "emmcmenu.h"
|
||||
#include "../fs/fsreader.h"
|
||||
#include "../utils/utils.h"
|
||||
#include "../gfx/menu.h"
|
||||
#include "../fs/fsmenu.h"
|
||||
|
||||
menu_entry *mmcMenuEntries = NULL;
|
||||
|
||||
int checkGptRules(char *in){
|
||||
for (int i = 0; gpt_fs_rules[i].name != NULL; i++){
|
||||
if (!strcmp(in, gpt_fs_rules[i].name))
|
||||
return gpt_fs_rules[i].property;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void addEntry(emmc_part_t *part, u8 property, int spot){
|
||||
if (mmcMenuEntries[spot].name != NULL){
|
||||
free(mmcMenuEntries[spot].name);
|
||||
}
|
||||
|
||||
utils_copystring(part->name, &mmcMenuEntries[spot].name);
|
||||
|
||||
if (property & isFS){
|
||||
mmcMenuEntries[spot].storage = (u32)(property & 0x7F);
|
||||
mmcMenuEntries[spot].property = ISDIR;
|
||||
}
|
||||
else {
|
||||
u64 size = 0;
|
||||
int sizes = 0;
|
||||
mmcMenuEntries[spot].property = 0;
|
||||
size = (part->lba_end + 1 - part->lba_start) * NX_EMMC_BLOCKSIZE;
|
||||
|
||||
while (size > 1024){
|
||||
size /= 1024;
|
||||
sizes++;
|
||||
}
|
||||
|
||||
if (sizes > 3)
|
||||
sizes = 0;
|
||||
|
||||
mmcMenuEntries[spot].property |= (1 << (4 + sizes));
|
||||
mmcMenuEntries[spot].storage = (u32)size;
|
||||
}
|
||||
}
|
||||
|
||||
int fillMmcMenu(short mmcType){
|
||||
int count = 2, i;
|
||||
|
||||
if (mmcMenuEntries != NULL)
|
||||
clearfileobjects(&mmcMenuEntries);
|
||||
|
||||
link_t *gpt = selectGpt(mmcType);
|
||||
|
||||
LIST_FOREACH_ENTRY(emmc_part_t, part, gpt, link)
|
||||
count++;
|
||||
|
||||
createfileobjects(count, &mmcMenuEntries);
|
||||
|
||||
for (i = 0; i < 2; i++){
|
||||
utils_copystring(mmcmenu_start[i].name, &mmcMenuEntries[i].name);
|
||||
mmcMenuEntries[i].property = mmcmenu_start[i].property;
|
||||
mmcMenuEntries[i].storage = mmcmenu_start[i].storage;
|
||||
}
|
||||
|
||||
LIST_FOREACH_ENTRY(emmc_part_t, part, gpt, link){
|
||||
addEntry(part, checkGptRules(part->name), i++);
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
int makeMmcMenu(short mmcType){
|
||||
int count, selection;
|
||||
count = fillMmcMenu(mmcType);
|
||||
connect_mmc(mmcType);
|
||||
while (1){
|
||||
selection = menu_make(mmcMenuEntries, count, (mmcType == SYSMMC) ? "-- SYSMMC --" : "-- EMUMMC --");
|
||||
|
||||
switch(selection){
|
||||
case 0:
|
||||
return 0;
|
||||
case 1:
|
||||
break; //stubbed
|
||||
default:
|
||||
if (mmcMenuEntries[selection].property & ISDIR){
|
||||
if (!mount_mmc(mmcMenuEntries[selection].name, mmcMenuEntries[selection].storage))
|
||||
fileexplorer("emmc:/", 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
3
source/tegraexplorer/emmc/emmcmenu.h
Normal file
3
source/tegraexplorer/emmc/emmcmenu.h
Normal file
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
int makeMmcMenu(short mmcType);
|
||||
Reference in New Issue
Block a user