MCPcopy Create free account
hub / github.com/devkitPro/libctru / csndInit

Function csndInit

libctru/source/services/csnd.c:184–230  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

182}
183
184Result csndInit(void)
185{
186 Result ret=0;
187
188 if (AtomicPostIncrement(&csndRefCount)) return ret;
189
190 ret = srvGetServiceHandle(&csndHandle, "csnd:SND");
191 if (R_FAILED(ret)) goto cleanup0;
192
193 // Calculate offsets and sizes required by the CSND module
194 csndOffsets[0] = csndCmdBlockSize; // Offset to DSP semaphore and irq disable flags
195 csndOffsets[1] = csndOffsets[0] + 8; // Offset to sound channel information
196 csndOffsets[2] = csndOffsets[1] + 32*sizeof(CSND_ChnInfo); // Offset to capture unit information
197 csndOffsets[3] = csndOffsets[2] + 2*8; // Offset to the input of command 0x00040080
198 csndSharedMemSize = csndOffsets[3] + 0x3C; // Total size of the CSND shared memory
199
200 ret = CSND_Initialize(&csndMutex, &csndSharedMemBlock, csndSharedMemSize, csndOffsets);
201 if (R_FAILED(ret)) goto cleanup1;
202
203 csndSharedMem = (vu32*)mappableAlloc(csndSharedMemSize);
204 if(!csndSharedMem)
205 {
206 ret = -1;
207 goto cleanup1;
208 }
209
210 ret = svcMapMemoryBlock(csndSharedMemBlock, (u32)csndSharedMem, MEMPERM_READWRITE, MEMPERM_DONTCARE);
211 if (R_FAILED(ret)) goto cleanup2;
212
213 memset((void*)csndSharedMem, 0, csndSharedMemSize);
214
215 ret = CSND_AcquireSoundChannels(&csndChannels);
216 if (R_SUCCEEDED(ret)) return 0;
217
218cleanup2:
219 svcCloseHandle(csndSharedMemBlock);
220 if(csndSharedMem != NULL)
221 {
222 mappableFree((void*) csndSharedMem);
223 csndSharedMem = NULL;
224 }
225cleanup1:
226 svcCloseHandle(csndHandle);
227cleanup0:
228 AtomicDecrement(&csndRefCount);
229 return ret;
230}
231
232void csndExit(void)
233{

Callers

nothing calls this directly

Calls 5

srvGetServiceHandleFunction · 0.85
CSND_InitializeFunction · 0.85
mappableAllocFunction · 0.85
mappableFreeFunction · 0.85

Tested by

no test coverage detected