Result GSPGPU_AcquireRight(u8 flags) { u32* cmdbuf=getThreadCommandBuffer(); cmdbuf[0]=IPC_MakeHeader(0x16,1,2); // 0x160042 cmdbuf[1]=flags; cmdbuf[2]=IPC_Desc_SharedHandles(1); cmdbuf[3]=CUR_PROCESS_HANDLE; Result ret=0; if(R_FAILED(ret=svcSendSyncRequest(gspGpuHandle)))return ret; return cmdbuf[1]; }
Result _GSPGPU_SetBufferSwap(Handle handle, u32 screenid, GSP_FramebufferInfo framebufinfo) { Result ret=0; u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = 0x00050200; cmdbuf[1] = screenid; memcpy(&cmdbuf[2], &framebufinfo, sizeof(GSP_FramebufferInfo)); if((ret=svc_sendSyncRequest(handle)))return ret; return cmdbuf[1]; }
Result GSPGPU_SetBufferSwap(u32 screenid, GSPGPU_FramebufferInfo*framebufinfo) { u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x5,8,0); // 0x50200 cmdbuf[1] = screenid; memcpy(&cmdbuf[2], framebufinfo, sizeof(GSPGPU_FramebufferInfo)); Result ret=0; if(R_FAILED(ret=svcSendSyncRequest(gspGpuHandle)))return ret; return cmdbuf[1]; }
Result IRU_SetIRLEDState(u32 value) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = 0x000B0040; cmdbuf[1] = value; if((ret = svcSendSyncRequest(iru_handle))!=0)return ret; ret = (Result)cmdbuf[1]; return ret; }
Result PS_GetLocalFriendCodeSeed(u64* seed) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = 0x000A0000; if((ret = svcSendSyncRequest(psHandle))!=0)return ret; *seed = (u64)cmdbuf[2] | (u64)cmdbuf[3] << 32; return (Result)cmdbuf[1]; }
Result PMDBG_RunQueuedProcess(Handle *outDebug) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x3, 0, 0); // 0x30000 if(R_FAILED(ret = svcSendSyncRequest(pmDbgHandle)))return ret; *outDebug = cmdbuf[3]; return (Result)cmdbuf[1]; }
Result HTTPC_InitializeConnectionSession(Handle handle, Handle contextHandle) { u32* cmdbuf=getThreadCommandBuffer(); cmdbuf[0]=0x80042; //request header code cmdbuf[1]=contextHandle; cmdbuf[2]=0x20; //unk, constant afaict Result ret=0; if((ret=svcSendSyncRequest(handle)))return ret; return cmdbuf[1]; }
static Result CSND_AcquireSoundChannels(Handle csndHandle, u32* channelMask) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = 0x00050000; if ((ret = svcSendSyncRequest(csndHandle)) != 0)return ret; *channelMask = cmdbuf[2]; return (Result)cmdbuf[1]; }
static Result SOCU_Shutdown(void) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x19,0,0); // 0x190000 ret = svcSendSyncRequest(SOCU_handle); if(ret != 0) return ret; return cmdbuf[1]; }
Result CAMU_SetTrimmingParams(u32 port, s16 xStart, s16 yStart, s16 xEnd, s16 yEnd) { Result ret = 0; u32* cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x10,5,0); // 0x100140 cmdbuf[1] = port; cmdbuf[2] = xStart; cmdbuf[3] = yStart; cmdbuf[4] = xEnd; cmdbuf[5] = yEnd; if (R_FAILED(ret = svcSendSyncRequest(camHandle))) return ret; return cmdbuf[1]; }
Result PS_GetDeviceId(u32* device_id) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = 0x000B0000; if((ret = svcSendSyncRequest(psHandle))!=0)return ret; *device_id = cmdbuf[2]; return (Result)cmdbuf[1]; }
/*! Flush an open file * * @param[in] handle Open file handle * * @returns error * * @internal * * #### Request * * Index Word | Description * -----------|------------------------- * 0 | Header code [0x08090000] * * #### Response * * Index Word | Description * -----------|------------------------- * 0 | Header code * 1 | Result code */ Result FSFILE_Flush(Handle handle) { u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = 0x08090000; Result ret = 0; if((ret = svcSendSyncRequest(handle))) return ret; return cmdbuf[1]; }
Result APT_PrepareToStartSystemApplet(Handle* handle, NS_APPID appID) { if(!handle)handle=&aptuHandle; u32* cmdbuf=getThreadCommandBuffer(); cmdbuf[0]=0x00190040; //request header code cmdbuf[1]=appID; Result ret=0; if((ret=svcSendSyncRequest(*handle)))return ret; return cmdbuf[1]; }
Result NFC_ResetTagScanState(void) { Result ret=0; u32* cmdbuf=getThreadCommandBuffer(); cmdbuf[0]=IPC_MakeHeader(0x8,0,0); // 0x80000 if(R_FAILED(ret = svcSendSyncRequest(nfcHandle)))return ret; ret = (Result)cmdbuf[1]; return ret; }
Result NFC_StopCommunication(void) { Result ret=0; u32* cmdbuf=getThreadCommandBuffer(); cmdbuf[0]=IPC_MakeHeader(0x4,0,0); // 0x40000 if(R_FAILED(ret = svcSendSyncRequest(nfcHandle)))return ret; ret = (Result)cmdbuf[1]; return ret; }
Result NFC_LoadAmiiboData(void) { Result ret=0; u32* cmdbuf=getThreadCommandBuffer(); cmdbuf[0]=IPC_MakeHeader(0x7,0,0); // 0x70000 if(R_FAILED(ret = svcSendSyncRequest(nfcHandle)))return ret; ret = (Result)cmdbuf[1]; return ret; }
//? Result HTTPC_Initialize(Handle handle) { u32* cmdbuf=getThreadCommandBuffer(); cmdbuf[0]=0x10044; //request header code cmdbuf[1]=0x1000; //unk cmdbuf[2]=0x20; //unk Result ret=0; if((ret=svc_sendSyncRequest(handle)))return ret; return cmdbuf[1]; }
Result ERRF_Throw(const ERRF_FatalErrInfo* error) { uint32_t *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x1,32,0); // 0x10800 memcpy(&cmdbuf[1], error, sizeof(ERRF_FatalErrInfo)); Result ret = 0; if (R_FAILED(ret = svcSendSyncRequest(errfHandle))) return ret; return cmdbuf[1]; }
Result APT_ReplySleepNotificationComplete(Handle* handle, NS_APPID appID) { if(!handle)handle=&aptuHandle; u32* cmdbuf=getThreadCommandBuffer(); cmdbuf[0]=0x3F0040; //request header code cmdbuf[1]=appID; Result ret=0; if((ret=svcSendSyncRequest(*handle)))return ret; return cmdbuf[1]; }
Result IRRST_GetHandles(Handle* outMemHandle, Handle* outEventHandle) { u32* cmdbuf=getThreadCommandBuffer(); cmdbuf[0]=IPC_MakeHeader(0x1,0,0); // 0x10000 Result ret=0; if(R_FAILED(ret=svcSendSyncRequest(irrstHandle)))return ret; if(outMemHandle)*outMemHandle=cmdbuf[3]; if(outEventHandle)*outEventHandle=cmdbuf[4]; return cmdbuf[1]; }
Result APT_PrepareToCloseApplication(Handle* handle, u8 a) { if(!handle)handle=&aptuHandle; u32* cmdbuf=getThreadCommandBuffer(); cmdbuf[0]=0x220040; //request header code cmdbuf[1]=a; Result ret=0; if((ret=svcSendSyncRequest(*handle)))return ret; return cmdbuf[1]; }
Result GSPGPU_SetLcdForceBlack(Handle* handle, u8 flags) { if(!handle)handle=&gspGpuHandle; u32* cmdbuf=getThreadCommandBuffer(); cmdbuf[0]=0xB0040; //request header code cmdbuf[1]=flags; Result ret=0; if((ret=svc_sendSyncRequest(*handle)))return ret; return cmdbuf[1]; }
Result PMDBG_LaunchApp(const FS_ProgramInfo *programInfo, u32 launchFlags) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x2, 5, 0); // 0x20140 memcpy(&cmdbuf[1], programInfo, sizeof(FS_ProgramInfo)); cmdbuf[5] = launchFlags; if(R_FAILED(ret = svcSendSyncRequest(pmDbgHandle)))return ret; return (Result)cmdbuf[1]; }
int _main(Result ret, int currentHandleIndex) { int i; for(i=0;i<HB_NUM_HANDLES;i++)sentHandleTable[i].handle=0; targetProcessHandle=0x0; while(1) { if(ret==0xc920181a) { //close session handle svc_closeHandle(sessionHandles[currentHandleIndex]); sessionHandles[currentHandleIndex]=sessionHandles[*numSessionHandles]; sessionHandles[*numSessionHandles]=0x0; currentHandleIndex=(*numSessionHandles)--; //we want to have replyTarget=0x0 }else{ switch(currentHandleIndex) { case 0: svc_exitProcess(); break; case 1: { // receiving new session svc_acceptSession(&sessionHandles[*numSessionHandles], sessionHandles[currentHandleIndex]); (*numSessionHandles)++; currentHandleIndex = *numSessionHandles; sessionHandles[currentHandleIndex] = 0; //we want to have replyTarget=0x0 } break; default: { //receiving command from ongoing session u32* cmdbuf=getThreadCommandBuffer(); u8 cmdIndex=cmdbuf[0]>>16; if(cmdIndex<=NUM_CMD && cmdIndex>0) { commandHandlers[cmdIndex-1](cmdbuf); } else { cmdbuf[0] = (cmdbuf[0] & 0x00FF0000) | 0x40; cmdbuf[1] = 0xFFFFFFFF; } } break; } } ret=svc_replyAndReceive((s32*)¤tHandleIndex, sessionHandles, *numSessionHandles, sessionHandles[currentHandleIndex]); } return 0; }
int socAccept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) { Result ret = 0; int tmp_addrlen = 0x1c; u32 *cmdbuf = getThreadCommandBuffer(); u8 tmpaddr[0x1c]; u32 saved_threadstorage[2]; memset(tmpaddr, 0, 0x1c); cmdbuf[0] = IPC_MakeHeader(0x4,2,2); // 0x40082 cmdbuf[1] = (u32)sockfd; cmdbuf[2] = (u32)tmp_addrlen; cmdbuf[3] = IPC_Desc_CurProcessHandle(); u32 *staticbufs = getThreadStaticBuffers(); saved_threadstorage[0] = staticbufs[0]; saved_threadstorage[1] = staticbufs[1]; staticbufs[0] = IPC_Desc_StaticBuffer(tmp_addrlen,0); staticbufs[1] = (u32)tmpaddr; ret = svcSendSyncRequest(SOCU_handle); staticbufs[0] = saved_threadstorage[0]; staticbufs[1] = saved_threadstorage[1]; if(ret != 0) return ret; ret = (int)cmdbuf[1]; if(ret == 0) ret = _net_convert_error(cmdbuf[2]); if(ret < 0) //errno = -ret; if(ret >= 0 && addr != NULL) { addr->sa_family = tmpaddr[1]; if(*addrlen > tmpaddr[0]) *addrlen = tmpaddr[0]; memcpy(addr->sa_data, &tmpaddr[2], *addrlen - 2); } if(ret < 0) return -1; return ret; }
Result PS_GenerateRandomBytes(void* out, size_t len) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0xD,1,2); // 0xD0042 cmdbuf[1] = len; cmdbuf[2] = IPC_Desc_Buffer(len, IPC_BUFFER_W); cmdbuf[3] = (u32)out; if(R_FAILED(ret = svcSendSyncRequest(psHandle)))return ret; return (Result)cmdbuf[1]; }
Result CFGU_GetCountryCodeID(u16 string, u16* code) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0xA,1,0); // 0xA0040 cmdbuf[1] = (u32)string; if(R_FAILED(ret = svcSendSyncRequest(cfguHandle)))return ret; *code = (u16)cmdbuf[2] & 0xFFFF; return (Result)cmdbuf[1]; }
Result udsSetApplicationData(const void *buf, size_t size) { u32* cmdbuf=getThreadCommandBuffer(); cmdbuf[0]=IPC_MakeHeader(0x10,1,2); // 0x100042 cmdbuf[1]=size; cmdbuf[2]=IPC_Desc_StaticBuffer(size, 4); cmdbuf[3]=(u32)buf; Result ret=0; if(R_FAILED(ret=svcSendSyncRequest(__uds_servhandle)))return ret; return cmdbuf[1]; }
Result CFGU_GetCountryCodeString(u16 code, u16* string) { Result ret = 0; u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = IPC_MakeHeader(0x9,1,0); // 0x90040 cmdbuf[1] = (u32)code; if(R_FAILED(ret = svcSendSyncRequest(cfguHandle)))return ret; *string = (u16)cmdbuf[2] & 0xFFFF; return (Result)cmdbuf[1]; }
long gethostid(void) { int ret=0; u32 *cmdbuf = getThreadCommandBuffer(); cmdbuf[0] = 0x00160000; if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret; ret = (int)cmdbuf[1]; if(ret==0)ret = cmdbuf[2]; return ret; }