diff --git a/libctru/include/3ds/services/apt.h b/libctru/include/3ds/services/apt.h index 9035b08..4378299 100644 --- a/libctru/include/3ds/services/apt.h +++ b/libctru/include/3ds/services/apt.h @@ -99,6 +99,7 @@ Result APT_Enable(Handle* handle, u32 a); Result APT_GetAppletManInfo(Handle* handle, u8 inval, u8 *outval8, u32 *outval32, NS_APPID *menu_appid, NS_APPID *active_appid); Result APT_GetAppletInfo(Handle* handle, NS_APPID appID, u64* pProgramID, u8* pMediaType, u8* pRegistered, u8* pLoadState, u32* pAttributes); Result APT_GetAppletProgramInfo(Handle* handle, u32 id, u32 flags, u16 *titleversion); +Result APT_GetProgramID(Handle* handle, u64* pProgramID); Result APT_PrepareToJumpToHomeMenu(Handle* handle); Result APT_JumpToHomeMenu(Handle* handle, u32 a, u32 b, u32 c); Result APT_PrepareToJumpToApplication(Handle* handle, u32 a); diff --git a/libctru/source/services/apt.c b/libctru/source/services/apt.c index 1d01d4d..95283bd 100644 --- a/libctru/source/services/apt.c +++ b/libctru/source/services/apt.c @@ -833,6 +833,27 @@ Result APT_GetAppletProgramInfo(Handle* handle, u32 id, u32 flags, u16 *titlever return cmdbuf[1]; } +Result APT_GetProgramID(Handle* handle, u64* pProgramID) +{ + if(!handle)handle=&aptuHandle; + + u32* cmdbuf=getThreadCommandBuffer(); + cmdbuf[0] = 0x00580002; //request header code + cmdbuf[1] = 0x20; + + Result ret=0; + if((ret=svcSendSyncRequest(*handle)))return ret; + + if(ret==0)ret = cmdbuf[1]; + + if(pProgramID) + { + if(ret==0) *pProgramID=((u64)cmdbuf[3]<<32)|cmdbuf[2]; + } + + return ret; +} + Result APT_IsRegistered(Handle* handle, NS_APPID appID, u8* out) { if(!handle)handle=&aptuHandle;