24IRX_ID(MODNAME,VER_MAJOR,VER_MINOR)
25int debug_level = OUT_WARNING;
33#define DS ((u32*)data)
34#define DU ((u32*)data)
37void *rpc_server(u32 func,
void *data, u32 size)
39 u32 *ru = rpc_buffer[1];
40 s32 *rs = (s32*)rpc_buffer[1];
46 case PS2SND_Init: *rs = sceSdInit (DS[0]);
break;
47 case PS2SND_SetParam: sceSdSetParam (DU[0], DU[1]);
break;
48 case PS2SND_GetParam: *ru = sceSdGetParam (DU[0]);
break;
49 case PS2SND_SetSwitch: sceSdSetSwitch (DU[0], DU[1]);
break;
50 case PS2SND_GetSwitch: *ru = sceSdGetSwitch (DU[0]);
break;
51 case PS2SND_SetAddr: sceSdSetAddr (DU[0], DU[1]);
break;
52 case PS2SND_GetAddr: *ru = sceSdGetAddr (DU[0]);
break;
53 case PS2SND_SetCoreAttr: sceSdSetCoreAttr(DU[0], DU[1]);
break;
54 case PS2SND_GetCoreAttr: *ru = sceSdGetCoreAttr(DU[0]);
break;
55 case PS2SND_Note2Pitch: *ru = sceSdNote2Pitch (DU[0], DU[1], DU[2], DS[3]);
break;
56 case PS2SND_Pitch2Note: *ru = sceSdPitch2Note (DU[0], DU[1], DU[2]);
break;
57 case PS2SND_ProcBatch: *rs = sceSdProcBatch ((
sceSdBatch *)&DU[1], &ru[1], DU[0]);
break;
58 case PS2SND_ProcBatchEx: *rs = sceSdProcBatchEx((
sceSdBatch *)&DU[2], &ru[1], DU[0], DU[1]);
break;
59 case PS2SND_VoiceTrans: *rs = sceSdVoiceTrans(DS[0], DU[1], (u8 *)DU[2], (u32 *)DU[3], DU[4]);
break;
60 case PS2SND_BlockTrans: *rs = sceSdBlockTrans(DS[0], DU[1], (u8 *)DU[2], DU[3], (u8 *)DU[4]);
break;
61 case PS2SND_VoiceTransStatus: *ru = sceSdVoiceTransStatus (DS[0], DS[1]);
break;
62 case PS2SND_BlockTransStatus: *ru = sceSdBlockTransStatus (DS[0], DS[1]);
break;
65 case PS2SND_SetEffectAttr: *rs = sceSdSetEffectAttr (DU[0], (
sceSdEffectAttr *)&DU[1]);
break;
66 case PS2SND_GetEffectAttr: sceSdGetEffectAttr (DU[0], (
sceSdEffectAttr *)rpc_buffer[1]);
break;
67 case PS2SND_ClearEffectWorkArea: *rs = sceSdClearEffectWorkArea (DS[0], DS[1], DS[2]);
break;
71 case PS2SND_StreamOpen: *rs = sndStreamOpen((
char*)&DS[4], DU[0], DU[1], DU[2], DU[3]);
break;
72 case PS2SND_StreamClose: *rs = sndStreamClose();
break;
73 case PS2SND_StreamPlay: *rs = sndStreamPlay();
break;
74 case PS2SND_StreamPause: *rs = sndStreamPause();
break;
75 case PS2SND_StreamSetPosition: *rs = sndStreamSetPosition(DS[0]);
break;
76 case PS2SND_StreamGetPosition: *rs = sndStreamGetPosition();
break;
77 case PS2SND_StreamSetVolume: *rs = sndStreamSetVolume(DS[0], DS[1]);
break;
79 case PS2SND_QueryMaxFreeMemSize: *ru = QueryMaxFreeMemSize();
break;
81 dprintf(OUT_WARNING,
"Unknown function id '%u'\n", (
unsigned int)func);
85 return(rpc_buffer[1]);
89void rpc_thread(
void *d)
93 printf(BANNER, VER_MAJOR, VER_MINOR);
95 sceSifSetRpcQueue(&queue, GetThreadId());
96 sceSifRegisterRpc(&server, BINDID_PS2SND, (
void*)rpc_server, rpc_buffer[0], 0, 0, &queue);
97 sceSifRpcLoop(&queue);
100int _start(
int argc,
char *argv[])
112 case 'e': debug_level = OUT_ERROR;
break;
113 case 'w': debug_level = OUT_WARNING;
break;
114 case 'i': debug_level = OUT_INFO;
break;
115 case 'd': debug_level = OUT_DEBUG;
break;
117 printf(
"debug_level = %d (%c)\n", debug_level, argv[1][0]);
121 thread.thread = rpc_thread;
125 threadid = CreateThread(&
thread);
128 dprintf(OUT_ERROR,
"Failed to make thread\n");
129 return MODULE_NO_RESIDENT_END;
132 StartThread(threadid, 0);
134 return MODULE_RESIDENT_END;