diff --git a/libctru/include/3ds/services/am.h b/libctru/include/3ds/services/am.h index 31f4b06..9f0ef8b 100644 --- a/libctru/include/3ds/services/am.h +++ b/libctru/include/3ds/services/am.h @@ -97,6 +97,9 @@ Result AM_DeleteAppTitle(u8 mediatype, u64 titleID); /// Installs the current NATIVE_FIRM title to NAND (firm0:/ & firm1:/) Result AM_InstallNativeFirm(void); +/// Similar to InstallNativeFirm, but doesn't use AMPXI_GetTitleList (NATIVE_FIRM: 0004013800000002 or 0004013820000002 (N3DS)) +Result AM_InstallFirm(u64 titleID); + /** * @brief Gets the product code of a title. * @param mediatype Mediatype of the title. diff --git a/libctru/source/services/am.c b/libctru/source/services/am.c index 509ca3e..1de3605 100644 --- a/libctru/source/services/am.c +++ b/libctru/source/services/am.c @@ -199,6 +199,19 @@ Result AM_InstallNativeFirm(void) return (Result)cmdbuf[1]; } +Result AM_InstallFirm(u64 titleID){ + Result ret = 0; + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = IPC_MakeHeader(0x401,2,0); // 0x04010080 + cmdbuf[1] = titleID & 0xffffffff; + cmdbuf[2] = (u32)(titleID >> 32); + + if(R_FAILED(ret = svcSendSyncRequest(amHandle))) return ret; + + return (Result)cmdbuf[1]; +} + Result AM_GetTitleProductCode(u8 mediatype, u64 titleID, char* productCode) { Result ret = 0;