예제 #1
0
파일: gspgpu.c 프로젝트: Selver-gba/ctrulib
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];
}
예제 #2
0
파일: main.c 프로젝트: meowy/ironhax
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];
}
예제 #3
0
파일: gspgpu.c 프로젝트: Selver-gba/ctrulib
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];
}
예제 #4
0
파일: ir.c 프로젝트: Almamu/ctrulib
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;
}
예제 #5
0
파일: ps.c 프로젝트: TheJosamilu/3DSBFI
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];
}
예제 #6
0
파일: pmdbg.c 프로젝트: smealum/ctrulib
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];
}
예제 #7
0
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];
}
예제 #8
0
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];
}
예제 #9
0
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];
}
예제 #10
0
파일: cam.c 프로젝트: Findus79/ctrulib
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];
}
예제 #11
0
파일: ps.c 프로젝트: TheJosamilu/3DSBFI
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];
}
예제 #12
0
파일: fs.c 프로젝트: CarlosEFML/ctrulib
/*! 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];
}
예제 #13
0
파일: apt.c 프로젝트: Bumparoo/ctrulib
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];
}
예제 #14
0
파일: nfc.c 프로젝트: Bownairo/ctrulib
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;
}
예제 #15
0
파일: nfc.c 프로젝트: Bownairo/ctrulib
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;
}
예제 #16
0
파일: nfc.c 프로젝트: Bownairo/ctrulib
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;
}
예제 #17
0
파일: main.c 프로젝트: Dazzozo/ninjhax2.x
//?
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];
}
예제 #18
0
파일: errf.c 프로젝트: Thog/ctrulib
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];
}
예제 #19
0
파일: apt.c 프로젝트: Bumparoo/ctrulib
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];
}
예제 #20
0
파일: irrst.c 프로젝트: Caboosium/ctrulib
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];
}
예제 #21
0
파일: apt.c 프로젝트: Bumparoo/ctrulib
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];
}
예제 #22
0
파일: _GSP.c 프로젝트: Dazzozo/ninjhax2.x
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];
}
예제 #23
0
파일: pmdbg.c 프로젝트: smealum/ctrulib
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];
}
예제 #24
0
파일: main.c 프로젝트: PLenz/ninjhax
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*)&currentHandleIndex, sessionHandles, *numSessionHandles, sessionHandles[currentHandleIndex]);
	}

	return 0;
}
예제 #25
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;
}
예제 #26
0
파일: ps.c 프로젝트: TuxSH/ctrulib
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];
}
예제 #27
0
파일: cfgu.c 프로젝트: Bownairo/ctrulib
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];
}
예제 #28
0
파일: uds.c 프로젝트: Caboosium/ctrulib
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];
}
예제 #29
0
파일: cfgu.c 프로젝트: Bownairo/ctrulib
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];
}
예제 #30
0
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;
}