From d35233fb1c74eeffd4952b943d16ca9226856388 Mon Sep 17 00:00:00 2001 From: plutoo Date: Mon, 28 Jul 2014 23:23:24 +0200 Subject: [PATCH] Revamped "srv.c". --- examples/arm11u/source/main.c | 2 +- examples/gpu/source/main.c | 2 +- examples/sdmc/source/main.c | 4 +- libctru/include/3ds/srv.h | 8 ++-- libctru/source/services/ac.c | 2 +- libctru/source/services/apt.c | 4 +- libctru/source/services/cfgnor.c | 2 +- libctru/source/services/csnd.c | 2 +- libctru/source/services/gsp.c | 2 +- libctru/source/services/hid.c | 2 +- libctru/source/services/ir.c | 2 +- libctru/source/services/soc.c | 2 +- libctru/source/srv.c | 73 +++++++++++++++++++------------- 13 files changed, 60 insertions(+), 47 deletions(-) diff --git a/examples/arm11u/source/main.c b/examples/arm11u/source/main.c index 9b35369..c770d06 100644 --- a/examples/arm11u/source/main.c +++ b/examples/arm11u/source/main.c @@ -112,7 +112,7 @@ void renderEffect() int main() { - initSrv(); + srvInit(); aptInit(APPID_APPLICATION); diff --git a/examples/gpu/source/main.c b/examples/gpu/source/main.c index 7490417..81655f2 100644 --- a/examples/gpu/source/main.c +++ b/examples/gpu/source/main.c @@ -81,7 +81,7 @@ void swapBuffers() int main() { - initSrv(); + srvInit(); aptInit(APPID_APPLICATION); diff --git a/examples/sdmc/source/main.c b/examples/sdmc/source/main.c index c6dacf3..cce8d51 100644 --- a/examples/sdmc/source/main.c +++ b/examples/sdmc/source/main.c @@ -112,7 +112,7 @@ void renderEffect() int main() { - initSrv(); + srvInit(); aptInit(APPID_APPLICATION); @@ -121,7 +121,7 @@ int main() hidInit(NULL); Handle fsuHandle; - srv_getServiceHandle(NULL, &fsuHandle, "fs:USER"); + srvGetServiceHandle(&fsuHandle, "fs:USER"); FSUSER_Initialize(fsuHandle); Handle fileHandle; diff --git a/libctru/include/3ds/srv.h b/libctru/include/3ds/srv.h index 43ae29f..09d5afe 100644 --- a/libctru/include/3ds/srv.h +++ b/libctru/include/3ds/srv.h @@ -1,9 +1,9 @@ #ifndef SRV_H #define SRV_H -Result initSrv(); -Result exitSrv(); -Result srv_RegisterClient(Handle* handleptr); -Result srv_getServiceHandle(Handle* handleptr, Handle* out, char* server); +Result srvInit(); +Result srvExit(); +Result srvRegisterClient(); +Result srvGetServiceHandle(Handle* out, char* name); #endif diff --git a/libctru/source/services/ac.c b/libctru/source/services/ac.c index 0a9175c..7bab808 100644 --- a/libctru/source/services/ac.c +++ b/libctru/source/services/ac.c @@ -69,7 +69,7 @@ Result ACU_WaitInternetConnection() Result ret=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) { diff --git a/libctru/source/services/apt.c b/libctru/source/services/apt.c index a224c68..9cdca30 100644 --- a/libctru/source/services/apt.c +++ b/libctru/source/services/apt.c @@ -275,7 +275,7 @@ Result aptInit(NS_APPID appID) Result ret=0; //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; svcCloseHandle(aptuHandle); @@ -420,7 +420,7 @@ void aptSetStatusPower(u32 status) void aptOpenSession() { svcWaitSynchronization1(aptLockHandle, U64_MAX); - srv_getServiceHandle(NULL, &aptuHandle, "APT:U"); + srvGetServiceHandle(&aptuHandle, "APT:U"); } void aptCloseSession() diff --git a/libctru/source/services/cfgnor.c b/libctru/source/services/cfgnor.c index 417825f..45aa4e3 100644 --- a/libctru/source/services/cfgnor.c +++ b/libctru/source/services/cfgnor.c @@ -11,7 +11,7 @@ Result CFGNOR_Initialize(u8 value) Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); - ret = srv_getServiceHandle(NULL, &CFGNOR_handle, "cfg:nor"); + ret = srvGetServiceHandle(&CFGNOR_handle, "cfg:nor"); if(ret!=0)return ret; cmdbuf[0] = 0x00010040; diff --git a/libctru/source/services/csnd.c b/libctru/source/services/csnd.c index d1ce512..c0e7c52 100644 --- a/libctru/source/services/csnd.c +++ b/libctru/source/services/csnd.c @@ -70,7 +70,7 @@ Result CSND_initialize(u32* sharedMem) if(sharedMem==NULL)sharedMem = (u32*)CSND_SHAREDMEM_DEFAULT; CSND_sharedmem = sharedMem; - ret = srv_getServiceHandle(NULL, &CSND_handle, "csnd:SND"); + ret = srvGetServiceHandle(&CSND_handle, "csnd:SND"); 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); diff --git a/libctru/source/services/gsp.c b/libctru/source/services/gsp.c index 7d74407..50c1600 100644 --- a/libctru/source/services/gsp.c +++ b/libctru/source/services/gsp.c @@ -8,7 +8,7 @@ Handle gspGpuHandle=0; Result gspInit() { - return srv_getServiceHandle(NULL, &gspGpuHandle, "gsp::Gpu"); + return srvGetServiceHandle(&gspGpuHandle, "gsp::Gpu"); } void gspExit() diff --git a/libctru/source/services/hid.c b/libctru/source/services/hid.c index 4a709f4..7d35e60 100644 --- a/libctru/source/services/hid.c +++ b/libctru/source/services/hid.c @@ -14,7 +14,7 @@ Result hidInit(u32* sharedMem) if(!sharedMem)sharedMem=(u32*)HID_SHAREDMEM_DEFAULT; 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; hidSharedMem=sharedMem; diff --git a/libctru/source/services/ir.c b/libctru/source/services/ir.c index 40624bf..b2e4078 100644 --- a/libctru/source/services/ir.c +++ b/libctru/source/services/ir.c @@ -162,7 +162,7 @@ Result IRU_Initialize(u32 *sharedmem_addr, u32 sharedmem_size) if(iru_handle)return 0; - ret = srv_getServiceHandle(NULL, &iru_handle, "ir:u"); + ret = srvGetServiceHandle(&iru_handle, "ir:u"); if(ret!=0)return ret; ret = irucmd_Initialize(); diff --git a/libctru/source/services/soc.c b/libctru/source/services/soc.c index 9be4fe0..2298537 100644 --- a/libctru/source/services/soc.c +++ b/libctru/source/services/soc.c @@ -142,7 +142,7 @@ Result SOC_Initialize(u32 *context_addr, u32 context_size) ret = svcCreateMemoryBlock(&memhandle, (u32)context_addr, context_size, 0, 3); 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); } diff --git a/libctru/source/srv.c b/libctru/source/srv.c index 23a1f35..da34c35 100644 --- a/libctru/source/srv.c +++ b/libctru/source/srv.c @@ -1,51 +1,64 @@ +/* + srv.c _ Service manager. +*/ + #include <3ds/types.h> #include <3ds/srv.h> #include <3ds/svc.h> -Handle srvHandle=0; -Result initSrv() +static Handle g_srv_handle = 0; + +Result srvInit() { - Result ret=0; - if(svcConnectToPort(&srvHandle, "srv:"))return ret; - return srv_RegisterClient(&srvHandle); + Result rc = 0; + + if(rc = svcConnectToPort(&g_srv_handle, "srv:")) + return rc; + + if(rc = srvRegisterClient()) { + svcCloseHandle(g_srv_handle); + g_srv_handle = 0; + } + + return rc; } -Result exitSrv() +Result srvExit() { - if(srvHandle)svcCloseHandle(srvHandle); + if(g_srv_handle != 0) + svcCloseHandle(g_srv_handle); + + g_srv_handle = 0; } -Result srv_RegisterClient(Handle* handleptr) +Result srvRegisterClient() { - if(!handleptr)handleptr=&srvHandle; - u32* cmdbuf=getThreadCommandBuffer(); - cmdbuf[0]=0x10002; //request header code - cmdbuf[1]=0x20; + u32* cmdbuf = getThreadCommandBuffer(); + cmdbuf[0] = 0x10002; + cmdbuf[1] = 0x20; - Result ret=0; - if((ret=svcSendSyncRequest(*handleptr)))return ret; + Result rc; + 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 l=strlen(server); - if(!out || !server || l>8)return -1; + u8 len = strlen(name); + Result rc; - u32* cmdbuf=getThreadCommandBuffer(); + u32* cmdbuf = getThreadCommandBuffer(); + cmdbuf[0] = 0x50100; + strcpy((char*) &cmdbuf[1], name); + cmdbuf[3] = len; + cmdbuf[4] = 0x0; - cmdbuf[0]=0x50100; //request header code - strcpy((char*)&cmdbuf[1], server); - cmdbuf[3]=l; - cmdbuf[4]=0x0; + if(rc = svcSendSyncRequest(g_srv_handle)) + return rc; - Result ret=0; - if((ret=svcSendSyncRequest(*handleptr)))return ret; - - *out=cmdbuf[3]; - - return cmdbuf[1]; + *out = cmdbuf[3]; + return cmdbuf[1]; }