Revamped "srv.c".

This commit is contained in:
plutoo 2014-07-28 23:23:24 +02:00
parent ec9734bdeb
commit d35233fb1c
13 changed files with 60 additions and 47 deletions

View File

@ -112,7 +112,7 @@ void renderEffect()
int main() int main()
{ {
initSrv(); srvInit();
aptInit(APPID_APPLICATION); aptInit(APPID_APPLICATION);

View File

@ -81,7 +81,7 @@ void swapBuffers()
int main() int main()
{ {
initSrv(); srvInit();
aptInit(APPID_APPLICATION); aptInit(APPID_APPLICATION);

View File

@ -112,7 +112,7 @@ void renderEffect()
int main() int main()
{ {
initSrv(); srvInit();
aptInit(APPID_APPLICATION); aptInit(APPID_APPLICATION);
@ -121,7 +121,7 @@ int main()
hidInit(NULL); hidInit(NULL);
Handle fsuHandle; Handle fsuHandle;
srv_getServiceHandle(NULL, &fsuHandle, "fs:USER"); srvGetServiceHandle(&fsuHandle, "fs:USER");
FSUSER_Initialize(fsuHandle); FSUSER_Initialize(fsuHandle);
Handle fileHandle; Handle fileHandle;

View File

@ -1,9 +1,9 @@
#ifndef SRV_H #ifndef SRV_H
#define SRV_H #define SRV_H
Result initSrv(); Result srvInit();
Result exitSrv(); Result srvExit();
Result srv_RegisterClient(Handle* handleptr); Result srvRegisterClient();
Result srv_getServiceHandle(Handle* handleptr, Handle* out, char* server); Result srvGetServiceHandle(Handle* out, char* name);
#endif #endif

View File

@ -69,7 +69,7 @@ Result ACU_WaitInternetConnection()
Result ret=0; Result ret=0;
u32 outval=0; u32 outval=0;
if((ret = srv_getServiceHandle(NULL, &servhandle, "ac:u"))!=0)return ret; if((ret = srvGetServiceHandle(&servhandle, "ac:u"))!=0)return ret;
while(1) while(1)
{ {

View File

@ -275,7 +275,7 @@ Result aptInit(NS_APPID appID)
Result ret=0; Result ret=0;
//initialize APT stuff, escape load screen //initialize APT stuff, escape load screen
srv_getServiceHandle(NULL, &aptuHandle, "APT:U"); srvGetServiceHandle(&aptuHandle, "APT:U");
if((ret=APT_GetLockHandle(&aptuHandle, 0x0, &aptLockHandle)))return ret; if((ret=APT_GetLockHandle(&aptuHandle, 0x0, &aptLockHandle)))return ret;
svcCloseHandle(aptuHandle); svcCloseHandle(aptuHandle);
@ -420,7 +420,7 @@ void aptSetStatusPower(u32 status)
void aptOpenSession() void aptOpenSession()
{ {
svcWaitSynchronization1(aptLockHandle, U64_MAX); svcWaitSynchronization1(aptLockHandle, U64_MAX);
srv_getServiceHandle(NULL, &aptuHandle, "APT:U"); srvGetServiceHandle(&aptuHandle, "APT:U");
} }
void aptCloseSession() void aptCloseSession()

View File

@ -11,7 +11,7 @@ Result CFGNOR_Initialize(u8 value)
Result ret = 0; Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer(); u32 *cmdbuf = getThreadCommandBuffer();
ret = srv_getServiceHandle(NULL, &CFGNOR_handle, "cfg:nor"); ret = srvGetServiceHandle(&CFGNOR_handle, "cfg:nor");
if(ret!=0)return ret; if(ret!=0)return ret;
cmdbuf[0] = 0x00010040; cmdbuf[0] = 0x00010040;

View File

@ -70,7 +70,7 @@ Result CSND_initialize(u32* sharedMem)
if(sharedMem==NULL)sharedMem = (u32*)CSND_SHAREDMEM_DEFAULT; if(sharedMem==NULL)sharedMem = (u32*)CSND_SHAREDMEM_DEFAULT;
CSND_sharedmem = sharedMem; CSND_sharedmem = sharedMem;
ret = srv_getServiceHandle(NULL, &CSND_handle, "csnd:SND"); ret = srvGetServiceHandle(&CSND_handle, "csnd:SND");
if(ret!=0)return ret; if(ret!=0)return ret;
ret = CSND_cmd1(&CSND_mutexhandle, &CSND_sharedmemhandle, CSND_sharedmem_cmdblocksize+0x114, CSND_sharedmem_cmdblocksize, CSND_sharedmem_cmdblocksize+8, CSND_sharedmem_cmdblocksize+0xc8, CSND_sharedmem_cmdblocksize+0xd8); ret = CSND_cmd1(&CSND_mutexhandle, &CSND_sharedmemhandle, CSND_sharedmem_cmdblocksize+0x114, CSND_sharedmem_cmdblocksize, CSND_sharedmem_cmdblocksize+8, CSND_sharedmem_cmdblocksize+0xc8, CSND_sharedmem_cmdblocksize+0xd8);

View File

@ -8,7 +8,7 @@ Handle gspGpuHandle=0;
Result gspInit() Result gspInit()
{ {
return srv_getServiceHandle(NULL, &gspGpuHandle, "gsp::Gpu"); return srvGetServiceHandle(&gspGpuHandle, "gsp::Gpu");
} }
void gspExit() void gspExit()

View File

@ -14,7 +14,7 @@ Result hidInit(u32* sharedMem)
if(!sharedMem)sharedMem=(u32*)HID_SHAREDMEM_DEFAULT; if(!sharedMem)sharedMem=(u32*)HID_SHAREDMEM_DEFAULT;
Result ret=0; Result ret=0;
if((ret=srv_getServiceHandle(NULL, &hidHandle, "hid:USER")))return ret; if((ret=srvGetServiceHandle(&hidHandle, "hid:USER")))return ret;
if((ret=HIDUSER_GetInfo(NULL, &hidMemHandle)))return ret; if((ret=HIDUSER_GetInfo(NULL, &hidMemHandle)))return ret;
hidSharedMem=sharedMem; hidSharedMem=sharedMem;

View File

@ -162,7 +162,7 @@ Result IRU_Initialize(u32 *sharedmem_addr, u32 sharedmem_size)
if(iru_handle)return 0; if(iru_handle)return 0;
ret = srv_getServiceHandle(NULL, &iru_handle, "ir:u"); ret = srvGetServiceHandle(&iru_handle, "ir:u");
if(ret!=0)return ret; if(ret!=0)return ret;
ret = irucmd_Initialize(); ret = irucmd_Initialize();

View File

@ -142,7 +142,7 @@ Result SOC_Initialize(u32 *context_addr, u32 context_size)
ret = svcCreateMemoryBlock(&memhandle, (u32)context_addr, context_size, 0, 3); ret = svcCreateMemoryBlock(&memhandle, (u32)context_addr, context_size, 0, 3);
if(ret!=0)return ret; if(ret!=0)return ret;
if((ret = srv_getServiceHandle(NULL, &SOCU_handle, "soc:U"))!=0)return ret; if((ret = srvGetServiceHandle(&SOCU_handle, "soc:U"))!=0)return ret;
return socu_cmd1(memhandle, context_size); return socu_cmd1(memhandle, context_size);
} }

View File

@ -1,51 +1,64 @@
/*
srv.c _ Service manager.
*/
#include <3ds/types.h> #include <3ds/types.h>
#include <3ds/srv.h> #include <3ds/srv.h>
#include <3ds/svc.h> #include <3ds/svc.h>
Handle srvHandle=0;
Result initSrv() static Handle g_srv_handle = 0;
Result srvInit()
{ {
Result ret=0; Result rc = 0;
if(svcConnectToPort(&srvHandle, "srv:"))return ret;
return srv_RegisterClient(&srvHandle); if(rc = svcConnectToPort(&g_srv_handle, "srv:"))
return rc;
if(rc = srvRegisterClient()) {
svcCloseHandle(g_srv_handle);
g_srv_handle = 0;
} }
Result exitSrv() return rc;
{
if(srvHandle)svcCloseHandle(srvHandle);
} }
Result srv_RegisterClient(Handle* handleptr) Result srvExit()
{
if(g_srv_handle != 0)
svcCloseHandle(g_srv_handle);
g_srv_handle = 0;
}
Result srvRegisterClient()
{ {
if(!handleptr)handleptr=&srvHandle;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0]=0x10002; //request header code cmdbuf[0] = 0x10002;
cmdbuf[1] = 0x20; cmdbuf[1] = 0x20;
Result ret=0; Result rc;
if((ret=svcSendSyncRequest(*handleptr)))return ret; if(rc = svcSendSyncRequest(g_srv_handle))
return rc;
return cmdbuf[1]; return cmdbuf[1];
} }
Result srv_getServiceHandle(Handle* handleptr, Handle* out, char* server) Result srvGetServiceHandle(Handle* out, char* name)
{ {
if(!handleptr)handleptr=&srvHandle; u8 len = strlen(name);
u8 l=strlen(server); Result rc;
if(!out || !server || l>8)return -1;
u32* cmdbuf = getThreadCommandBuffer(); u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x50100;
cmdbuf[0]=0x50100; //request header code strcpy((char*) &cmdbuf[1], name);
strcpy((char*)&cmdbuf[1], server); cmdbuf[3] = len;
cmdbuf[3]=l;
cmdbuf[4] = 0x0; cmdbuf[4] = 0x0;
Result ret=0; if(rc = svcSendSyncRequest(g_srv_handle))
if((ret=svcSendSyncRequest(*handleptr)))return ret; return rc;
*out = cmdbuf[3]; *out = cmdbuf[3];
return cmdbuf[1]; return cmdbuf[1];
} }