int main()
{
- initSrv();
+ srvInit();
aptInit(APPID_APPLICATION);
int main()
{
- initSrv();
+ srvInit();
aptInit(APPID_APPLICATION);
int main()
{
- initSrv();
+ srvInit();
aptInit(APPID_APPLICATION);
hidInit(NULL);
Handle fsuHandle;
- srv_getServiceHandle(NULL, &fsuHandle, "fs:USER");
+ srvGetServiceHandle(&fsuHandle, "fs:USER");
FSUSER_Initialize(fsuHandle);
Handle fileHandle;
#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
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)
{
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);
void aptOpenSession()
{
svcWaitSynchronization1(aptLockHandle, U64_MAX);
- srv_getServiceHandle(NULL, &aptuHandle, "APT:U");
+ srvGetServiceHandle(&aptuHandle, "APT:U");
}
void aptCloseSession()
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;
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);
Result gspInit()
{
- return srv_getServiceHandle(NULL, &gspGpuHandle, "gsp::Gpu");
+ return srvGetServiceHandle(&gspGpuHandle, "gsp::Gpu");
}
void gspExit()
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;
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();
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);
}
+/*
+ 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;
-
- u32* cmdbuf=getThreadCommandBuffer();
-
- cmdbuf[0]=0x50100; //request header code
- strcpy((char*)&cmdbuf[1], server);
- cmdbuf[3]=l;
- cmdbuf[4]=0x0;
+ u8 len = strlen(name);
+ Result rc;
- Result ret=0;
- if((ret=svcSendSyncRequest(*handleptr)))return ret;
+ u32* cmdbuf = getThreadCommandBuffer();
+ cmdbuf[0] = 0x50100;
+ strcpy((char*) &cmdbuf[1], name);
+ cmdbuf[3] = len;
+ cmdbuf[4] = 0x0;
- *out=cmdbuf[3];
+ if(rc = svcSendSyncRequest(g_srv_handle))
+ return rc;
- return cmdbuf[1];
+ *out = cmdbuf[3];
+ return cmdbuf[1];
}