11 static u32 CSND_bitmask=0;
13 static u32 CSND_sharedmem_cmdblocksize = 0x2000;
14 static u32 CSND_sharedmem_startcmdoff = 0;
15 static u32 CSND_sharedmem_currentcmdoff = 0;
22 cmdbuf[0] = 0x00010140;
23 cmdbuf[1] = sharedmem_size;
31 *mutexhandle = cmdbuf[3];
32 *sharedmemhandle = cmdbuf[4];
42 cmdbuf[0] = 0x00020000;
54 cmdbuf[0] = 0x00050000;
79 memset(CSND_sharedmem, 0, 0x2114);
105 cmdbuf[0] = 0x00030040;
121 if(CSND_sharedmem_startcmdoff != CSND_sharedmem_currentcmdoff)
123 if(CSND_sharedmem_currentcmdoff>=0x20)
125 prevoff = CSND_sharedmem_currentcmdoff-0x20;
129 prevoff = CSND_sharedmem_cmdblocksize-0x20;
133 *ptr = CSND_sharedmem_currentcmdoff;
142 memcpy(&ptr[8>>1], cmdparams, 0x18);
144 CSND_sharedmem_currentcmdoff+= 0x20;
145 if(CSND_sharedmem_currentcmdoff >= CSND_sharedmem_cmdblocksize)CSND_sharedmem_currentcmdoff = 0;
154 if(CSND_sharedmem_startcmdoff == CSND_sharedmem_currentcmdoff)
return 0;
156 ret =
CSND_cmd3(CSND_sharedmem_startcmdoff);
157 CSND_sharedmem_startcmdoff = CSND_sharedmem_currentcmdoff;
164 return (
u32)(6.7027964E+07f / ((float)samplerate));
169 u32 cmdparams[0x18>>2];
171 memset(cmdparams, 0, 0x18);
173 cmdparams[0] = channel & 0x1f;
174 cmdparams[1] = value;
181 u32 cmdparams[0x18>>2];
183 memset(cmdparams, 0, 0x18);
185 cmdparams[0] = channel & 0x1f;
186 cmdparams[1] = value;
193 u32 cmdparams[0x18>>2];
195 memset(cmdparams, 0, 0x18);
197 cmdparams[0] = channel & 0x1f;
198 cmdparams[1] = physaddr;
206 u32 cmdparams[0x18>>2];
208 memset(cmdparams, 0, 0x18);
210 cmdparams[0] = channel & 0x1f;
211 cmdparams[1] = value | (value<<16);
218 u32 cmdparams[0x18>>2];
220 memset(cmdparams, 0, 0x18);
222 cmdparams[0] = channel & 0x1f;
231 u32 cmdparams[0x18>>2];
233 memset(cmdparams, 0, 0x18);
235 cmdparams[0] = channel & 0x1f;
236 cmdparams[0] |= (unk0 & 0xf) << 6;
237 if(!looping)cmdparams[0] |= 2 << 10;
238 if(looping)cmdparams[0] |= 1 << 10;
239 cmdparams[0] |= (encoding & 3) << 12;
240 cmdparams[0] |= (unk1 & 3) << 14;
243 if(val<0x42)val = 0x42;
244 if(val>0xffff)val = 0xffff;
245 cmdparams[0] |= val<<16;
247 cmdparams[3] = physaddr0;
248 cmdparams[4] = physaddr1;
249 cmdparams[5] = totalbytesize;
259 u32 cmdparams[0x18>>2];
261 memset(cmdparams, 0, 0x18);
268 if(ret!=0)
return ret;
290 if(physaddr1>physaddr0)totalbytesize-= (
u32)physaddr1 - (
u32)physaddr0;
306 memcpy(out, &
CSND_sharedmem[(CSND_sharedmem_cmdblocksize+8 + entryindex*0xc) >> 2], 0xc);
307 out[2] -= 0x0c000000;
318 if(ret!=0)
return ret;
320 *status = entry[0] & 0xff;
Handle CSND_sharedmemhandle
Result CSND_initialize(u32 *sharedMem)
Result CSND_playsound(u32 channel, u32 looping, u32 encoding, u32 samplerate, u32 *vaddr0, u32 *vaddr1, u32 totalbytesize, u32 unk0, u32 unk1)
void CSND_sharedmemtype0_cmd0(u32 channel, u32 value)
#define CSND_SHAREDMEM_DEFAULT
void CSND_sharedmemtype0_cmd8(u32 channel, u32 samplerate)
s32 svcCloseHandle(Handle handle)
Result srvGetServiceHandle(Handle *out, const char *name)
Result CSND_cmd3(u32 offset)
s32 svcUnmapMemoryBlock(Handle memblock, u32 addr)
u32 osConvertVirtToPhys(u32 vaddr)
u32 * getThreadCommandBuffer(void)
Result CSND_getchannelstate(u32 entryindex, u32 *out)
void CSND_writesharedmem_cmdtype0(u16 cmdid, u8 *cmdparams)
void CSND_setchannel_playbackstate(u32 channel, u32 value)
u32 CSND_convertsamplerate(u32 samplerate)
void CSND_sharedmemtype0_cmd9(u32 channel, u16 value)
void CSND_sharedmemtype0_cmde(u32 channel, u32 looping, u32 encoding, u32 samplerate, u32 unk0, u32 unk1, u32 physaddr0, u32 physaddr1, u32 totalbytesize)
s32 svcMapMemoryBlock(Handle memblock, u32 addr, MemPerm my_perm, MemPerm other_perm)
void CSND_sharedmemtype0_cmd3(u32 channel, u32 physaddr, u32 size)
s32 svcSendSyncRequest(Handle session)
Result CSND_processtype0cmds()
Result CSND_sharedmemtype0_cmdupdatestate(int waitdone)
s32 svcReleaseMutex(Handle handle)
Result CSND_cmd1(Handle *mutexhandle, Handle *sharedmemhandle, u32 sharedmem_size, u32 off0, u32 off1, u32 off2, u32 off3)
Result CSND_cmd5(u32 *bitmask)
Result CSND_getchannelstate_isplaying(u32 entryindex, u8 *status)
s32 svcWaitSynchronizationN(s32 *out, Handle *handles, s32 handles_num, bool wait_all, s64 nanoseconds)