From eb2addbe7500c85ca39e55797dc158fdfa912593 Mon Sep 17 00:00:00 2001 From: Joel16 Date: Sun, 7 Jan 2018 00:41:02 -0600 Subject: [PATCH] Add ndmu LockState/Unlock State --- libctru/include/3ds/services/ndm.h | 6 ++++++ libctru/source/services/ndm.c | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/libctru/include/3ds/services/ndm.h b/libctru/include/3ds/services/ndm.h index fd56145..5110b94 100644 --- a/libctru/include/3ds/services/ndm.h +++ b/libctru/include/3ds/services/ndm.h @@ -48,6 +48,12 @@ Result NDMU_LeaveExclusiveState(void); */ Result NDMU_GetExclusiveState(NDM_ExclusiveState *state); +/// Locks the ndm state. +Result NDMU_LockState(void); + +/// Unlocks the ndm state. +Result NDMU_UnlockState(void); + /** * @brief Suspends the ndm scheduler. * @param flag 0 = Wait for completion, 1 = Perform in background. diff --git a/libctru/source/services/ndm.c b/libctru/source/services/ndm.c index ffcf6d9..4dd6eb4 100644 --- a/libctru/source/services/ndm.c +++ b/libctru/source/services/ndm.c @@ -74,6 +74,32 @@ Result NDMU_GetExclusiveState(NDM_ExclusiveState *state) return (Result)cmdbuf[1]; } +Result NDMU_LockState(void) +{ + u32* cmdbuf=getThreadCommandBuffer(); + + cmdbuf[0]=IPC_MakeHeader(0x4,0,2); // 0x40002 + cmdbuf[1]=IPC_Desc_CurProcessHandle(); + + Result ret=0; + if(R_FAILED(ret=svcSendSyncRequest(ndmuHandle)))return ret; + + return (Result)cmdbuf[1]; +} + +Result NDMU_UnlockState(void) +{ + u32* cmdbuf=getThreadCommandBuffer(); + + cmdbuf[0]=IPC_MakeHeader(0x5,0,2); // 0x50002 + cmdbuf[1]=IPC_Desc_CurProcessHandle(); + + Result ret=0; + if(R_FAILED(ret=svcSendSyncRequest(ndmuHandle)))return ret; + + return (Result)cmdbuf[1]; +} + Result NDMU_SuspendScheduler(u32 flag) { u32* cmdbuf=getThreadCommandBuffer();