From 69ee2f97c539ce65ea9488a7779276744d4df311 Mon Sep 17 00:00:00 2001 From: fincs Date: Mon, 5 Jan 2015 19:31:15 +0100 Subject: [PATCH] Add CSND_AcquireCapUnit/CSND_ReleaseCapUnit --- libctru/include/3ds/services/csnd.h | 3 +++ libctru/source/services/csnd.c | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/libctru/include/3ds/services/csnd.h b/libctru/include/3ds/services/csnd.h index e0e2406..786c09d 100644 --- a/libctru/include/3ds/services/csnd.h +++ b/libctru/include/3ds/services/csnd.h @@ -72,6 +72,9 @@ extern vu32* csndSharedMem; extern u32 csndSharedMemSize; extern u32 csndChannels; // Bitmask of channels that are allowed for usage +Result CSND_AcquireCapUnit(u32* capUnit); +Result CSND_ReleaseCapUnit(u32 capUnit); + Result csndInit(void); Result csndExit(void); diff --git a/libctru/source/services/csnd.c b/libctru/source/services/csnd.c index e19a617..25b788f 100644 --- a/libctru/source/services/csnd.c +++ b/libctru/source/services/csnd.c @@ -77,6 +77,33 @@ static Result CSND_ReleaseSoundChannels(void) return (Result)cmdbuf[1]; } +Result CSND_AcquireCapUnit(u32* capUnit) +{ + Result ret=0; + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = 0x00070000; + + if((ret = svcSendSyncRequest(csndHandle))!=0)return ret; + + *capUnit = cmdbuf[2]; + + return (Result)cmdbuf[1]; +} + +Result CSND_ReleaseCapUnit(u32 capUnit) +{ + Result ret=0; + u32 *cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = 0x00080040; + cmdbuf[1] = capUnit; + + if((ret = svcSendSyncRequest(csndHandle))!=0)return ret; + + return (Result)cmdbuf[1]; +} + Result csndInit(void) { Result ret=0; -- 2.39.5