hbc/channel/channelapp/source/title.c
2019-01-09 21:40:28 +09:00

96 lines
1.7 KiB
C

#include <gccore.h>
#include <stdarg.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include "title.h"
u32 ng_id = 0;
u32 ms_id = 0;
static u64 title_id = 0;
static char title_path[ISFS_MAXPATH] __attribute__((aligned(0x20)));
static u8 buf[0x1000] __attribute__((aligned(0x20)));
static void title_get_ngid(void) {
s32 res;
res = ES_GetDeviceID(&ng_id);
if (res < 0) {
gprintf("ES_GetDeviceID failed: %d\n", res);
}
}
static void title_get_msid(void) {
s32 ret;
// check for dpki
ret = ES_GetDeviceCert(buf);
if (ret < 0) {
gprintf("ES_GetDeviceCert failed: %d\n", ret);
return;
}
ms_id = buf[0x99] - '0';
if (ms_id == 3) {
gprintf("We're on dpki\n");
} else if (ms_id == 2) {
gprintf("We're on retail\n");
} else {
gprintf("Unknown ms-id %d?\n", ms_id);
}
}
static void title_get_title_path(void) {
s32 res;
res = ES_GetTitleID(&title_id);
if (res < 0) {
gprintf("ES_GetTitleID failed: %d\n", res);
return;
}
res = ES_GetDataDir(title_id, title_path);
if (res < 0) {
gprintf("ES_GetDataDir failed: %d\n", res);
return;
}
gprintf("data path is '%s'\n", title_path);
}
const char *title_get_path(void) {
return title_path;
}
static bool title_is_installed(u64 title_id) {
s32 ret;
u32 x;
ret = ES_GetTitleContentsCount(title_id, &x);
if (ret < 0)
return false; // title was never installed
if (x <= 0)
return false; // title was installed but deleted via Channel Management
return true;
}
#define TITLEID_200 0x0000000100000200ll
bool is_vwii(void) {
return title_is_installed(TITLEID_200);
}
void title_init(void) {
memset(title_path, 0, sizeof(title_path));
title_get_msid();
title_get_ngid();
title_get_title_path();
}