diff --git a/libctru/include/3ds/services/cfgu.h b/libctru/include/3ds/services/cfgu.h index 10c4178..aaafd26 100644 --- a/libctru/include/3ds/services/cfgu.h +++ b/libctru/include/3ds/services/cfgu.h @@ -3,6 +3,8 @@ Result initCfgu(void); Result exitCfgu(void); +Result CFGU_SecureInfoGetRegion(u8* region); +Result CFGU_GenHashConsoleUnique(u32 appIDSalt, u64* hash); Result CFGU_GetRegionCanadaUSA(u8* value); Result CFGU_GetSystemModel(u8* model); Result CFGU_GetModelNintendo2DS(u8* value); diff --git a/libctru/source/services/cfgu.c b/libctru/source/services/cfgu.c index e5e2556..a8bbc49 100644 --- a/libctru/source/services/cfgu.c +++ b/libctru/source/services/cfgu.c @@ -19,6 +19,36 @@ Result exitCfgu() return ret; } +Result CFGU_SecureInfoGetRegion(u8* region) +{ + Result ret = 0; + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = 0x00020000; + + if((ret = svcSendSyncRequest(CFGU_handle))!=0)return ret; + + *region = (u8)cmdbuf[2]; + + return (Result)cmdbuf[1]; +} + +Result CFGU_GenHashConsoleUnique(u32 appIDSalt, u64* hash) +{ + Result ret = 0; + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = 0x00030000; + cmdbuf[1] = appIDSalt; + + if((ret = svcSendSyncRequest(CFGU_handle))!=0)return ret; + + *hash = (u64)cmdbuf[2]; + *hash |= ((u64)cmdbuf[3])<<32; + + return (Result)cmdbuf[1]; +} + Result CFGU_GetRegionCanadaUSA(u8* value) { Result ret = 0;