diff --git a/libctru/include/3ds.h b/libctru/include/3ds.h index 65bf5a7..beec914 100644 --- a/libctru/include/3ds.h +++ b/libctru/include/3ds.h @@ -15,6 +15,7 @@ extern "C" { #include <3ds/services/ac.h> #include <3ds/services/apt.h> #include <3ds/services/cfgnor.h> +#include <3ds/services/cfgu.h> #include <3ds/services/csnd.h> #include <3ds/services/fs.h> #include <3ds/services/gsp.h> diff --git a/libctru/include/3ds/services/cfgu.h b/libctru/include/3ds/services/cfgu.h new file mode 100644 index 0000000..9a9eefd --- /dev/null +++ b/libctru/include/3ds/services/cfgu.h @@ -0,0 +1,6 @@ +#pragma once + +Result initCfgu(void); +Result exitCfgu(void); + +Result CFGU_GetSystemModel(u8* model); diff --git a/libctru/source/services/cfgu.c b/libctru/source/services/cfgu.c new file mode 100644 index 0000000..5b43607 --- /dev/null +++ b/libctru/source/services/cfgu.c @@ -0,0 +1,31 @@ +#include +#include <3ds.h> + +static Handle CFGU_handle = 0; + +Result initCfgu() +{ + return srvGetServiceHandle(&CFGU_handle, "cfg:u"); +} + +Result exitCfgu() +{ + Result ret = svcCloseHandle(CFGU_handle); + CFGU_handle = 0; + + return ret; +} + +Result CFGU_GetSystemModel(u8* model) +{ + Result ret = 0; + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = 0x00050000; + + if((ret = svcSendSyncRequest(CFGU_handle))!=0)return ret; + + *model = (u8)cmdbuf[2]; + + return (Result)cmdbuf[1]; +}