Merge pull request #166 from Lectem/IPCrefactor

IPC refactor
This commit is contained in:
fincs 2015-10-03 13:26:54 +02:00
commit 7256f74320
41 changed files with 466 additions and 414 deletions

View File

@ -101,9 +101,9 @@ Result APT_GetAppletInfo(NS_APPID appID, u64* pProgramID, u8* pMediaType, u8* pR
Result APT_GetAppletProgramInfo(u32 id, u32 flags, u16 *titleversion);
Result APT_GetProgramID(u64* pProgramID);
Result APT_PrepareToJumpToHomeMenu(void);
Result APT_JumpToHomeMenu(u32 a, u32 b, u32 c);
Result APT_JumpToHomeMenu(const u8 *param, size_t paramSize, Handle handle);
Result APT_PrepareToJumpToApplication(u32 a);
Result APT_JumpToApplication(u32 a, u32 b, u32 c);
Result APT_JumpToApplication(const u8 *param, size_t paramSize, Handle handle);
Result APT_IsRegistered(NS_APPID appID, u8* out);
Result APT_InquireNotification(u32 appID, u8* signalType);
Result APT_NotifyToWait(NS_APPID appID);
@ -115,7 +115,7 @@ Result APT_SendCaptureBufferInfo(u32 bufferSize, u32* buffer);
Result APT_ReplySleepQuery(NS_APPID appID, u32 a);
Result APT_ReplySleepNotificationComplete(NS_APPID appID);
Result APT_PrepareToCloseApplication(u8 a);
Result APT_CloseApplication(u32 a, u32 b, u32 c);
Result APT_CloseApplication(const u8 *param, size_t paramSize, Handle handle);
Result APT_SetAppCpuTimeLimit(u32 percent);
Result APT_GetAppCpuTimeLimit(u32 *percent);
Result APT_CheckNew3DS_Application(u8 *out);// Note: this function is unreliable, see: http://3dbrew.org/wiki/APT:PrepareToStartApplication

View File

@ -3,6 +3,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/ac.h>
#include <3ds/ipc.h>
static Handle acHandle;
@ -22,21 +23,21 @@ Result acExit(void)
Result ACU_CreateDefaultConfig(Handle* servhandle, u32 *ptr)
{
if(!servhandle)servhandle=&acHandle;
u32 tmp0, tmp1;
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
u32 *staticbufs = getThreadStaticBuffers();
tmp0 = cmdbuf[0x100>>2];
tmp1 = cmdbuf[0x104>>2];
u32 savedValue0 = staticbufs[0];
u32 savedValue1 = staticbufs[1];
cmdbuf[0] = 0x00010000;
cmdbuf[0x100>>2] = 0x00800002;
cmdbuf[0x104>>2] = (u32)ptr;
cmdbuf[0] = IPC_MakeHeader(0x1,0,0); // 0x00010000
staticbufs[0] = IPC_Desc_StaticBuffer(0x200,0);
staticbufs[1] = (u32)ptr;
if((ret = svcSendSyncRequest(*servhandle))!=0)return ret;
cmdbuf[0x100>>2] = tmp0;
cmdbuf[0x104>>2] = tmp1;
staticbufs[0] = savedValue0;
staticbufs[1] = savedValue1;
return (Result)cmdbuf[1];
}
@ -45,24 +46,24 @@ Result ACU_CreateDefaultConfig(Handle* servhandle, u32 *ptr)
Result ACU_cmd26(Handle* servhandle, u32 *ptr, u8 val)
{
if(!servhandle)servhandle=&acHandle;
u32 tmp0, tmp1;
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
u32 *staticbufs = getThreadStaticBuffers();
tmp0 = cmdbuf[0x100>>2];
tmp1 = cmdbuf[0x104>>2];
u32 savedValue0 = staticbufs[0];
u32 savedValue1 = staticbufs[1];
cmdbuf[0] = 0x00260042;
cmdbuf[0] = IPC_MakeHeader(0x26,1,2); // 0x00260042
cmdbuf[1] = (u32)val;
cmdbuf[0x100>>2] = 0x00800002;
cmdbuf[0x104>>2] = (u32)ptr;
cmdbuf[2] = 0x00800002;
staticbufs[0] = IPC_Desc_StaticBuffer(0x200,0);
staticbufs[1] = (u32)ptr;
cmdbuf[2] = IPC_Desc_StaticBuffer(0x200,0);
cmdbuf[3] = (u32)ptr;
if((ret = svcSendSyncRequest(*servhandle))!=0)return ret;
cmdbuf[0x100>>2] = tmp0;
cmdbuf[0x104>>2] = tmp1;
staticbufs[0] = savedValue0;
staticbufs[1] = savedValue1;
return (Result)cmdbuf[1];
}
@ -73,7 +74,7 @@ Result ACU_GetWifiStatus(Handle* servhandle, u32 *out)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000D0000;
cmdbuf[0] = IPC_MakeHeader(0xD,0,0); // 0x000D0000
if((ret = svcSendSyncRequest(*servhandle))!=0)return ret;

View File

@ -5,6 +5,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/am.h>
#include <3ds/ipc.h>
static Handle amHandle = 0;
@ -34,7 +35,7 @@ Result AM_GetTitleCount(u8 mediatype, u32 *count)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00010040;
cmdbuf[0] = IPC_MakeHeader(0x1,1,0); // 0x00010040
cmdbuf[1] = mediatype;
if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
@ -49,10 +50,10 @@ Result AM_GetTitleIdList(u8 mediatype, u32 count, u64 *titleIDs)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00020082;
cmdbuf[0] = IPC_MakeHeader(0x2,2,2); // 0x00020082
cmdbuf[1] = count;
cmdbuf[2] = mediatype;
cmdbuf[3] = ((count*8) << 4) | 12;
cmdbuf[3] = IPC_Desc_Buffer(count*sizeof(u64),IPC_BUFFER_W);
cmdbuf[4] = (u32)titleIDs;
if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
@ -65,12 +66,12 @@ Result AM_ListTitles(u8 mediatype, u32 titleCount, u64 *titleIdList, TitleList *
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00030084;
cmdbuf[0] = IPC_MakeHeader(0x3,2,4); // 0x00030084
cmdbuf[1] = mediatype;
cmdbuf[2] = titleCount;
cmdbuf[3] = ((titleCount*8)<<4) | 10;
cmdbuf[3] = IPC_Desc_Buffer(titleCount*sizeof(u64),IPC_BUFFER_R);
cmdbuf[4] = (u32)titleIdList;
cmdbuf[5] = ((sizeof(TitleList)*titleCount)<<4) | 12;
cmdbuf[5] = IPC_Desc_Buffer(titleCount*sizeof(TitleList),IPC_BUFFER_W);
cmdbuf[6] = (u32)titleList;
if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
@ -83,7 +84,7 @@ Result AM_GetDeviceId(u32 *deviceID)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000A0000;
cmdbuf[0] = IPC_MakeHeader(0xA,0,0); // 0x000A0000
if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
@ -97,7 +98,7 @@ Result AM_StartCiaInstall(u8 mediatype, Handle *ciaHandle)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x04020040;
cmdbuf[0] = IPC_MakeHeader(0x402,1,0); // 0x04020040
cmdbuf[1] = mediatype;
if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
@ -112,7 +113,7 @@ Result AM_StartDlpChildCiaInstall(Handle *ciaHandle)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x04030000;
cmdbuf[0] = IPC_MakeHeader(0x403,0,0); // 0x04030000
if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
@ -126,8 +127,8 @@ Result AM_CancelCIAInstall(Handle *ciaHandle)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x04040002;
cmdbuf[1] = 0x10;
cmdbuf[0] = IPC_MakeHeader(0x404,0,2); // 0x04040002
cmdbuf[1] = IPC_Desc_MoveHandles(1);
cmdbuf[2] = *ciaHandle;
if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
@ -140,8 +141,8 @@ Result AM_FinishCiaInstall(u8 mediatype, Handle *ciaHandle)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x04050002;
cmdbuf[1] = 0x10;
cmdbuf[0] = IPC_MakeHeader(0x405,0,2); // 0x04050002
cmdbuf[1] = IPC_Desc_MoveHandles(1);
cmdbuf[2] = *ciaHandle;
if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
@ -154,7 +155,7 @@ Result AM_DeleteTitle(u8 mediatype, u64 titleID)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x041000C0;
cmdbuf[0] = IPC_MakeHeader(0x410,3,0); // 0x041000C0
cmdbuf[1] = mediatype;
cmdbuf[2] = titleID & 0xffffffff;
cmdbuf[3] = (u32)(titleID >> 32);
@ -169,7 +170,7 @@ Result AM_DeleteAppTitle(u8 mediatype, u64 titleID)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000400C0;
cmdbuf[0] = IPC_MakeHeader(0x4,3,0); // 0x000400C0
cmdbuf[1] = mediatype;
cmdbuf[2] = titleID & 0xffffffff;
cmdbuf[3] = (u32)(titleID >> 32);
@ -184,7 +185,7 @@ Result AM_InstallNativeFirm(void)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x040F0000;
cmdbuf[0] = IPC_MakeHeader(0x40F,0,0); // 0x040F0000
if((ret = svcSendSyncRequest(amHandle))!=0) return ret;
@ -196,7 +197,7 @@ Result AM_GetTitleProductCode(u8 mediatype, u64 titleID, char* productCode)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000500C0;
cmdbuf[0] = IPC_MakeHeader(0x5,3,0); // 0x000500C0
cmdbuf[1] = mediatype;
cmdbuf[2] = titleID & 0xffffffff;
cmdbuf[3] = (u32)(titleID >> 32);
@ -214,9 +215,9 @@ Result AM_GetCiaFileInfo(u8 mediatype, TitleList *titleEntry, Handle fileHandle)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x04080042;
cmdbuf[0] = IPC_MakeHeader(0x408,1,2); // 0x04080042
cmdbuf[1] = mediatype;
cmdbuf[2] = 0;
cmdbuf[2] = IPC_Desc_SharedHandles(1);
cmdbuf[3] = fileHandle;
if((ret = svcSendSyncRequest(amHandle))!=0) return ret;

View File

@ -9,6 +9,7 @@
#include <3ds/srv.h>
#include <3ds/services/apt.h>
#include <3ds/services/gsp.h>
#include <3ds/ipc.h>
#define APT_HANDLER_STACKSIZE (0x1000)
@ -714,7 +715,7 @@ void aptSignalReadyForSleep(void)
Result APT_GetLockHandle(u16 flags, Handle* lockHandle)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x10040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x1,1,0); // 0x10040
cmdbuf[1]=flags;
Result ret=0;
@ -728,7 +729,7 @@ Result APT_GetLockHandle(u16 flags, Handle* lockHandle)
Result APT_Initialize(NS_APPID appId, Handle* eventHandle1, Handle* eventHandle2)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x20080; //request header code
cmdbuf[0]=IPC_MakeHeader(0x2,2,0); // 0x20080
cmdbuf[1]=appId;
cmdbuf[2]=0x0;
@ -744,7 +745,7 @@ Result APT_Initialize(NS_APPID appId, Handle* eventHandle1, Handle* eventHandle2
Result APT_Finalize(NS_APPID appId)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x40040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x4,1,0); // 0x40040
cmdbuf[1]=appId;
Result ret=0;
@ -755,7 +756,7 @@ Result APT_Finalize(NS_APPID appId)
Result APT_HardwareResetAsync()
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x4E0000; //request header code
cmdbuf[0]=IPC_MakeHeader(0x4E,0,0); // 0x4E0000
Result ret=0;
if((ret=svcSendSyncRequest(aptuHandle)))return ret;
@ -766,7 +767,7 @@ Result APT_HardwareResetAsync()
Result APT_Enable(u32 a)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x30040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x3,1,0); // 0x30040
cmdbuf[1]=a;
Result ret=0;
@ -778,7 +779,7 @@ Result APT_Enable(u32 a)
Result APT_GetAppletManInfo(u8 inval, u8 *outval8, u32 *outval32, NS_APPID *menu_appid, NS_APPID *active_appid)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x00050040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x5,1,0); // 0x50040
cmdbuf[1]=inval;
Result ret=0;
@ -795,7 +796,7 @@ Result APT_GetAppletManInfo(u8 inval, u8 *outval8, u32 *outval32, NS_APPID *menu
Result APT_GetAppletInfo(NS_APPID appID, u64* pProgramID, u8* pMediaType, u8* pRegistered, u8* pLoadState, u32* pAttributes)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x00060040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x6,1,0); // 0x60040
cmdbuf[1]=appID;
Result ret=0;
@ -813,7 +814,7 @@ Result APT_GetAppletInfo(NS_APPID appID, u64* pProgramID, u8* pMediaType, u8* pR
Result APT_GetAppletProgramInfo(u32 id, u32 flags, u16 *titleversion)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x004D0080; //request header code
cmdbuf[0]=IPC_MakeHeader(0x4D,2,0); // 0x4D0080
cmdbuf[1]=id;
cmdbuf[2]=flags;
@ -828,8 +829,8 @@ Result APT_GetAppletProgramInfo(u32 id, u32 flags, u16 *titleversion)
Result APT_GetProgramID(u64* pProgramID)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0] = 0x00580002; //request header code
cmdbuf[1] = 0x20;
cmdbuf[0] = IPC_MakeHeader(0x58,0,2); // 0x580002
cmdbuf[1] = IPC_Desc_CurProcessHandle();
Result ret=0;
if((ret=svcSendSyncRequest(aptuHandle)))return ret;
@ -847,7 +848,7 @@ Result APT_GetProgramID(u64* pProgramID)
Result APT_IsRegistered(NS_APPID appID, u8* out)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x90040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x9,1,0); // 0x90040
cmdbuf[1]=appID;
Result ret=0;
@ -861,7 +862,7 @@ Result APT_IsRegistered(NS_APPID appID, u8* out)
Result APT_InquireNotification(u32 appID, u8* signalType)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0xB0040; //request header code
cmdbuf[0]=IPC_MakeHeader(0xB,1,0); // 0xB0040
cmdbuf[1]=appID;
Result ret=0;
@ -872,10 +873,10 @@ Result APT_InquireNotification(u32 appID, u8* signalType)
return cmdbuf[1];
}
Result APT_PrepareToJumpToHomeMenu()
Result APT_PrepareToJumpToHomeMenu(void)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x2b0000; //request header code
cmdbuf[0]=IPC_MakeHeader(0x2B,0,0); // 0x2B0000
Result ret=0;
if((ret=svcSendSyncRequest(aptuHandle)))return ret;
@ -883,25 +884,26 @@ Result APT_PrepareToJumpToHomeMenu()
return cmdbuf[1];
}
Result APT_JumpToHomeMenu(u32 a, u32 b, u32 c)
Result APT_JumpToHomeMenu(const u8 *param, size_t paramSize, Handle handle)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x2C0044; //request header code
cmdbuf[1]=a;
cmdbuf[2]=b;
cmdbuf[3]=c;
cmdbuf[4]=(b<<14)|2;
cmdbuf[0]=IPC_MakeHeader(0x2C,1,4); // 0x2C0044
cmdbuf[1]=paramSize;
cmdbuf[2]=IPC_Desc_SharedHandles(1);
cmdbuf[3]=handle;
cmdbuf[4]=IPC_Desc_StaticBuffer(paramSize,0);
cmdbuf[5]= (u32) param;
Result ret=0;
if((ret=svcSendSyncRequest(aptuHandle)))return ret;
return cmdbuf[1];
}
Result APT_PrepareToJumpToApplication(u32 a)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x230040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x23,1,0); // 0x230040
cmdbuf[1]=a;
Result ret=0;
@ -910,14 +912,15 @@ Result APT_PrepareToJumpToApplication(u32 a)
return cmdbuf[1];
}
Result APT_JumpToApplication(u32 a, u32 b, u32 c)
Result APT_JumpToApplication(const u8 *param, size_t paramSize, Handle handle)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x240044; //request header code
cmdbuf[1]=a;
cmdbuf[2]=b;
cmdbuf[3]=c;
cmdbuf[4]=(b<<14)|2;
cmdbuf[0]=IPC_MakeHeader(0x24,1,4); // 0x240044
cmdbuf[1]=paramSize;
cmdbuf[2]=IPC_Desc_SharedHandles(1);
cmdbuf[3]=handle;
cmdbuf[4]=IPC_Desc_StaticBuffer(paramSize,0);
cmdbuf[5]= (u32) param;
Result ret=0;
if((ret=svcSendSyncRequest(aptuHandle)))return ret;
@ -928,7 +931,7 @@ Result APT_JumpToApplication(u32 a, u32 b, u32 c)
Result APT_NotifyToWait(NS_APPID appID)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x430040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x43,1,0); // 0x430040
cmdbuf[1]=appID;
Result ret=0;
@ -940,15 +943,16 @@ Result APT_NotifyToWait(NS_APPID appID)
Result APT_AppletUtility(u32* out, u32 a, u32 size1, u8* buf1, u32 size2, u8* buf2)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x4B00C2; //request header code
cmdbuf[0]=IPC_MakeHeader(0x4B,3,2); // 0x4B00C2
cmdbuf[1]=a;
cmdbuf[2]=size1;
cmdbuf[3]=size2;
cmdbuf[4]=(size1<<14)|0x402;
cmdbuf[4]=IPC_Desc_StaticBuffer(size1,1);
cmdbuf[5]=(u32)buf1;
cmdbuf[0+0x100/4]=(size2<<14)|2;
cmdbuf[1+0x100/4]=(u32)buf2;
u32 *staticbufs = getThreadStaticBuffers();
staticbufs[0]=IPC_Desc_StaticBuffer(size2,0);
staticbufs[1]=(u32)buf2;
Result ret=0;
if((ret=svcSendSyncRequest(aptuHandle)))return ret;
@ -961,12 +965,13 @@ Result APT_AppletUtility(u32* out, u32 a, u32 size1, u8* buf1, u32 size2, u8* bu
Result APT_GlanceParameter(NS_APPID appID, u32 bufferSize, u32* buffer, u32* actualSize, u8* signalType)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0xE0080; //request header code
cmdbuf[0]=IPC_MakeHeader(0xE,2,0); // 0xE0080
cmdbuf[1]=appID;
cmdbuf[2]=bufferSize;
cmdbuf[0+0x100/4]=(bufferSize<<14)|2;
cmdbuf[1+0x100/4]=(u32)buffer;
u32 *staticbufs = getThreadStaticBuffers();
staticbufs[0]=IPC_Desc_StaticBuffer(bufferSize,0);
staticbufs[1]=(u32)buffer;
Result ret=0;
if((ret=svcSendSyncRequest(aptuHandle)))return ret;
@ -980,12 +985,13 @@ Result APT_GlanceParameter(NS_APPID appID, u32 bufferSize, u32* buffer, u32* act
Result APT_ReceiveParameter(NS_APPID appID, u32 bufferSize, u32* buffer, u32* actualSize, u8* signalType)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0xD0080; //request header code
cmdbuf[0]=IPC_MakeHeader(0xD,2,0); // 0xD0080
cmdbuf[1]=appID;
cmdbuf[2]=bufferSize;
cmdbuf[0+0x100/4]=(bufferSize<<14)|2;
cmdbuf[1+0x100/4]=(u32)buffer;
u32 *staticbufs = getThreadStaticBuffers();
staticbufs[0]=IPC_Desc_StaticBuffer(bufferSize,0);
staticbufs[1]=(u32)buffer;
Result ret=0;
if((ret=svcSendSyncRequest(aptuHandle)))return ret;
@ -1000,16 +1006,16 @@ Result APT_SendParameter(NS_APPID src_appID, NS_APPID dst_appID, u32 bufferSize,
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0] = 0x000C0104; //request header code
cmdbuf[0] = IPC_MakeHeader(0xC,4,4); // 0xC0104
cmdbuf[1] = src_appID;
cmdbuf[2] = dst_appID;
cmdbuf[3] = signalType;
cmdbuf[4] = bufferSize;
cmdbuf[5]=0x0;
cmdbuf[5] = IPC_Desc_SharedHandles(1);
cmdbuf[6] = paramhandle;
cmdbuf[7] = (bufferSize<<14) | 2;
cmdbuf[7] = IPC_Desc_StaticBuffer(bufferSize,0);
cmdbuf[8] = (u32)buffer;
Result ret=0;
@ -1022,9 +1028,9 @@ Result APT_SendCaptureBufferInfo(u32 bufferSize, u32* buffer)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0] = 0x00400042; //request header code
cmdbuf[0] = IPC_MakeHeader(0x40,1,2); // 0x400042
cmdbuf[1] = bufferSize;
cmdbuf[2] = (bufferSize<<14) | 2;
cmdbuf[2] = IPC_Desc_StaticBuffer(bufferSize,0);
cmdbuf[3] = (u32)buffer;
Result ret=0;
@ -1036,7 +1042,7 @@ Result APT_SendCaptureBufferInfo(u32 bufferSize, u32* buffer)
Result APT_ReplySleepQuery(NS_APPID appID, u32 a)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x3E0080; //request header code
cmdbuf[0]=IPC_MakeHeader(0x3E,2,0); // 0x3E0080
cmdbuf[1]=appID;
cmdbuf[2]=a;
@ -1049,7 +1055,7 @@ Result APT_ReplySleepQuery(NS_APPID appID, u32 a)
Result APT_ReplySleepNotificationComplete(NS_APPID appID)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x3F0040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x3F,1,0); // 0x3F0040
cmdbuf[1]=appID;
Result ret=0;
@ -1061,7 +1067,7 @@ Result APT_ReplySleepNotificationComplete(NS_APPID appID)
Result APT_PrepareToCloseApplication(u8 a)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x220040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x22,1,0); // 0x220040
cmdbuf[1]=a;
Result ret=0;
@ -1070,15 +1076,15 @@ Result APT_PrepareToCloseApplication(u8 a)
return cmdbuf[1];
}
Result APT_CloseApplication(u32 a, u32 b, u32 c)
Result APT_CloseApplication(const u8 *param, size_t paramSize, Handle handle)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x270044; //request header code
cmdbuf[1]=a;
cmdbuf[2]=0x0;
cmdbuf[3]=b;
cmdbuf[4]=(a<<14)|2;
cmdbuf[5]=c;
cmdbuf[0]=IPC_MakeHeader(0x27,1,4); // 0x270044
cmdbuf[1]=paramSize;
cmdbuf[2]=IPC_Desc_SharedHandles(1);
cmdbuf[3]=handle;
cmdbuf[4]=IPC_Desc_StaticBuffer(paramSize,0);
cmdbuf[5]= (u32) param;
Result ret=0;
if((ret=svcSendSyncRequest(aptuHandle)))return ret;
@ -1090,7 +1096,7 @@ Result APT_CloseApplication(u32 a, u32 b, u32 c)
Result APT_SetAppCpuTimeLimit(u32 percent)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x4F0080;
cmdbuf[0]=IPC_MakeHeader(0x4F,2,0); // 0x4F0080
cmdbuf[1]=1;
cmdbuf[2]=percent;
@ -1103,7 +1109,7 @@ Result APT_SetAppCpuTimeLimit(u32 percent)
Result APT_GetAppCpuTimeLimit(u32 *percent)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x500040;
cmdbuf[0]=IPC_MakeHeader(0x50,1,0); // 0x500040
cmdbuf[1]=1;
Result ret=0;
@ -1118,7 +1124,7 @@ Result APT_GetAppCpuTimeLimit(u32 *percent)
Result APT_CheckNew3DS_Application(u8 *out)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x01010000;
cmdbuf[0]=IPC_MakeHeader(0x101,0,0); // 0x1010000
Result ret=0;
if((ret=svcSendSyncRequest(aptuHandle)))return ret;
@ -1137,7 +1143,7 @@ Result APT_CheckNew3DS_Application(u8 *out)
Result APT_CheckNew3DS_System(u8 *out)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x01020000;
cmdbuf[0]=IPC_MakeHeader(0x102,0,0); // 0x1020000
Result ret=0;
if((ret=svcSendSyncRequest(aptuHandle)))return ret;
@ -1180,7 +1186,7 @@ Result APT_CheckNew3DS(u8 *out)
Result APT_PrepareToDoAppJump(u8 flags, u64 programID, u8 mediatype)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x310100; //request header code
cmdbuf[0]=IPC_MakeHeader(0x31,4,0); // 0x310100
cmdbuf[1]=flags;
cmdbuf[2]=(u32)programID;
cmdbuf[3]=(u32)(programID>>32);
@ -1195,12 +1201,12 @@ Result APT_PrepareToDoAppJump(u8 flags, u64 programID, u8 mediatype)
Result APT_DoAppJump(u32 NSbuf0Size, u32 NSbuf1Size, u8 *NSbuf0Ptr, u8 *NSbuf1Ptr)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x320084; //request header code
cmdbuf[0]=IPC_MakeHeader(0x32,2,4); // 0x320084
cmdbuf[1]=NSbuf0Size;
cmdbuf[2]=NSbuf1Size;
cmdbuf[3]=(NSbuf0Size<<14)|2;
cmdbuf[3]=IPC_Desc_StaticBuffer(NSbuf0Size,0);
cmdbuf[4]=(u32)NSbuf0Ptr;
cmdbuf[5]=(NSbuf1Size<<14)|0x802;
cmdbuf[5]=IPC_Desc_StaticBuffer(NSbuf1Size,2);
cmdbuf[6]=(u32)NSbuf1Ptr;
Result ret=0;
@ -1212,7 +1218,7 @@ Result APT_DoAppJump(u32 NSbuf0Size, u32 NSbuf1Size, u8 *NSbuf0Ptr, u8 *NSbuf1Pt
Result APT_PrepareToStartLibraryApplet(NS_APPID appID)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x180040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x18,1,0); // 0x180040
cmdbuf[1]=appID;
Result ret=0;
@ -1224,12 +1230,12 @@ Result APT_PrepareToStartLibraryApplet(NS_APPID appID)
Result APT_StartLibraryApplet(NS_APPID appID, Handle inhandle, u32 *parambuf, u32 parambufsize)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x1E0084; //request header code
cmdbuf[0]=IPC_MakeHeader(0x1E,2,4); // 0x1E0084
cmdbuf[1]=appID;
cmdbuf[2]=parambufsize;
cmdbuf[3]=0;
cmdbuf[3]=IPC_Desc_SharedHandles(1);
cmdbuf[4]=inhandle;
cmdbuf[5]=(parambufsize<<14)|2;
cmdbuf[5]=IPC_Desc_StaticBuffer(parambufsize,0);
cmdbuf[6]=(u32)parambuf;
Result ret=0;
@ -1303,7 +1309,7 @@ Result APT_LaunchLibraryApplet(NS_APPID appID, Handle inhandle, u32 *parambuf, u
Result APT_PrepareToStartSystemApplet(NS_APPID appID)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x00190040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x19,1,0); // 0x190040
cmdbuf[1]=appID;
Result ret=0;
@ -1315,12 +1321,12 @@ Result APT_PrepareToStartSystemApplet(NS_APPID appID)
Result APT_StartSystemApplet(NS_APPID appID, u32 bufSize, Handle applHandle, u8 *buf)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0] = 0x001F0084; //request header code
cmdbuf[0] = IPC_MakeHeader(0x1F,2,4); // 0x001F0084
cmdbuf[1] = appID;
cmdbuf[2] = bufSize;
cmdbuf[3] = 0;
cmdbuf[3] = IPC_Desc_SharedHandles(1);
cmdbuf[4] = applHandle;
cmdbuf[5] = (bufSize<<14) | 2;
cmdbuf[5] = IPC_Desc_StaticBuffer(bufSize,0);
cmdbuf[6] = (u32)buf;
Result ret=0;

View File

@ -3,6 +3,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/cfgnor.h>
#include <3ds/ipc.h>
Handle CFGNOR_handle = 0;
@ -14,7 +15,7 @@ Result CFGNOR_Initialize(u8 value)
ret = srvGetServiceHandle(&CFGNOR_handle, "cfg:nor");
if(ret!=0)return ret;
cmdbuf[0] = 0x00010040;
cmdbuf[0] = IPC_MakeHeader(0x1,1,0); // 0x10040
cmdbuf[1] = (u32)value;
if((ret = svcSendSyncRequest(CFGNOR_handle))!=0)return ret;
@ -28,7 +29,7 @@ Result CFGNOR_Shutdown()
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00020000;
cmdbuf[0] = IPC_MakeHeader(0x2,0,0); // 0x20000
if((ret = svcSendSyncRequest(CFGNOR_handle))!=0)return ret;
ret = (Result)cmdbuf[1];
@ -44,10 +45,10 @@ Result CFGNOR_ReadData(u32 offset, u32 *buf, u32 size)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00050082;
cmdbuf[0] = IPC_MakeHeader(0x5,2,2); // 0x50082
cmdbuf[1] = offset;
cmdbuf[2] = size;
cmdbuf[3] = (size<<4) | 12;
cmdbuf[3] = IPC_Desc_Buffer(size,IPC_BUFFER_W);
cmdbuf[4] = (u32)buf;
if((ret = svcSendSyncRequest(CFGNOR_handle))!=0)return ret;
@ -61,10 +62,10 @@ Result CFGNOR_WriteData(u32 offset, u32 *buf, u32 size)
u32 ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00060082;
cmdbuf[0] = IPC_MakeHeader(0x6,2,2); // 0x60082
cmdbuf[1] = offset;
cmdbuf[2] = size;
cmdbuf[3] = (size<<4) | 10;
cmdbuf[3] = IPC_Desc_Buffer(size,IPC_BUFFER_R);
cmdbuf[4] = (u32)buf;
if((ret = svcSendSyncRequest(CFGNOR_handle))!=0)return ret;

View File

@ -3,6 +3,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/cfgu.h>
#include <3ds/ipc.h>
static Handle CFGU_handle = 0;
@ -24,7 +25,7 @@ Result CFGU_SecureInfoGetRegion(u8* region)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00020000;
cmdbuf[0] = IPC_MakeHeader(0x2,0,0); // 0x20000
if((ret = svcSendSyncRequest(CFGU_handle))!=0)return ret;
@ -38,7 +39,7 @@ Result CFGU_GenHashConsoleUnique(u32 appIDSalt, u64* hash)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00030040;
cmdbuf[0] = IPC_MakeHeader(0x3,1,0); // 0x30040
cmdbuf[1] = appIDSalt;
if((ret = svcSendSyncRequest(CFGU_handle))!=0)return ret;
@ -54,7 +55,7 @@ Result CFGU_GetRegionCanadaUSA(u8* value)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00040000;
cmdbuf[0] = IPC_MakeHeader(0x4,0,0); // 0x40000
if((ret = svcSendSyncRequest(CFGU_handle))!=0)return ret;
@ -68,7 +69,7 @@ Result CFGU_GetSystemModel(u8* model)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00050000;
cmdbuf[0] = IPC_MakeHeader(0x5,0,0); // 0x50000
if((ret = svcSendSyncRequest(CFGU_handle))!=0)return ret;
@ -82,7 +83,7 @@ Result CFGU_GetModelNintendo2DS(u8* value)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00060000;
cmdbuf[0] = IPC_MakeHeader(0x6,0,0); // 0x60000
if((ret = svcSendSyncRequest(CFGU_handle))!=0)return ret;
@ -96,7 +97,7 @@ Result CFGU_GetCountryCodeString(u16 code, u16* string)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00090040;
cmdbuf[0] = IPC_MakeHeader(0x9,1,0); // 0x90040
cmdbuf[1] = (u32)code;
if((ret = svcSendSyncRequest(CFGU_handle))!=0)return ret;
@ -111,7 +112,7 @@ Result CFGU_GetCountryCodeID(u16 string, u16* code)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000A0040;
cmdbuf[0] = IPC_MakeHeader(0xA,1,0); // 0xA0040
cmdbuf[1] = (u32)string;
if((ret = svcSendSyncRequest(CFGU_handle))!=0)return ret;
@ -128,10 +129,10 @@ Result CFGU_GetConfigInfoBlk2(u32 size, u32 blkID, u8* outData)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00010082;
cmdbuf[0] = IPC_MakeHeader(0x1,2,2); // 0x10082
cmdbuf[1] = size;
cmdbuf[2] = blkID;
cmdbuf[3] = (size<<4)|12;
cmdbuf[3] = IPC_Desc_Buffer(size,IPC_BUFFER_W);
cmdbuf[4] = (u32)outData;
if((ret = svcSendSyncRequest(CFGU_handle))!=0)return ret;

View File

@ -5,6 +5,7 @@
#include <3ds/srv.h>
#include <3ds/os.h>
#include <3ds/services/csnd.h>
#include <3ds/ipc.h>
// See here regarding CSND shared-mem commands, etc: http://3dbrew.org/wiki/CSND_Shared_Memory
@ -26,7 +27,7 @@ static Result CSND_Initialize(void)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00010140;
cmdbuf[0] = IPC_MakeHeader(0x1,5,0); // 0x10140
cmdbuf[1] = csndSharedMemSize;
memcpy(&cmdbuf[2], &csndOffsets[0], 4*sizeof(u32));
@ -43,7 +44,7 @@ static Result CSND_Shutdown()
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00020000;
cmdbuf[0] = IPC_MakeHeader(0x2,0,0); // 0x20000
if((ret = svcSendSyncRequest(csndHandle))!=0)return ret;
@ -55,7 +56,7 @@ static Result CSND_AcquireSoundChannels(u32* channelMask)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00050000;
cmdbuf[0] = IPC_MakeHeader(0x5,0,0); // 0x50000
if((ret = svcSendSyncRequest(csndHandle))!=0)return ret;
@ -69,7 +70,7 @@ static Result CSND_ReleaseSoundChannels(void)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00060000;
cmdbuf[0] = IPC_MakeHeader(0x6,0,0); // 0x60000
if((ret = svcSendSyncRequest(csndHandle))!=0)return ret;
@ -81,7 +82,7 @@ Result CSND_AcquireCapUnit(u32* capUnit)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00070000;
cmdbuf[0] = IPC_MakeHeader(0x7,0,0); // 0x70000
if((ret = svcSendSyncRequest(csndHandle))!=0)return ret;
@ -95,7 +96,7 @@ Result CSND_ReleaseCapUnit(u32 capUnit)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00080040;
cmdbuf[0] = IPC_MakeHeader(0x8,1,0); // 0x80040
cmdbuf[1] = capUnit;
if((ret = svcSendSyncRequest(csndHandle))!=0)return ret;
@ -108,7 +109,7 @@ Result CSND_Reset(void)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000C0000;
cmdbuf[0] = IPC_MakeHeader(0xC,0,0); // 0xC0000
if((ret = svcSendSyncRequest(csndHandle))!=0)return ret;
@ -169,7 +170,7 @@ static Result CSND_ExecuteCommands(u32 offset)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00030040;
cmdbuf[0] = IPC_MakeHeader(0x3,1,0); // 0x30040
cmdbuf[1] = offset;
if((ret = svcSendSyncRequest(csndHandle))!=0)return ret;

View File

@ -3,6 +3,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/fs.h>
#include <3ds/ipc.h>
/*! @internal
*
@ -105,8 +106,8 @@ FSUSER_Initialize(Handle handle)
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08010002;
cmdbuf[1] = 0x20;
cmdbuf[0] = IPC_MakeHeader(0x801,0,2); // 0x8010002
cmdbuf[1] = IPC_Desc_CurProcessHandle();
Result ret = 0;
if((ret = svcSendSyncRequest(handle)))
@ -165,7 +166,7 @@ FSUSER_OpenFile(Handle *out,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x080201C2;
cmdbuf[0] = IPC_MakeHeader(0x802,7,2); // 0x80201C2
cmdbuf[1] = 0;
cmdbuf[2] = archive.handleLow;
cmdbuf[3] = archive.handleHigh;
@ -173,7 +174,7 @@ FSUSER_OpenFile(Handle *out,
cmdbuf[5] = fileLowPath.size;
cmdbuf[6] = openFlags;
cmdbuf[7] = attributes;
cmdbuf[8] = (fileLowPath.size << 14) | 0x2;
cmdbuf[8] = IPC_Desc_StaticBuffer(fileLowPath.size,0);
cmdbuf[9] = (u32)fileLowPath.data;
Result ret = 0;
@ -239,7 +240,7 @@ FSUSER_OpenFileDirectly(Handle *out,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[ 0] = 0x08030204;
cmdbuf[ 0] = IPC_MakeHeader(0x803,8,4); // 0x8030204
cmdbuf[ 1] = 0;
cmdbuf[ 2] = archive.id;
cmdbuf[ 3] = archive.lowPath.type;
@ -248,9 +249,9 @@ FSUSER_OpenFileDirectly(Handle *out,
cmdbuf[ 6] = fileLowPath.size;
cmdbuf[ 7] = openFlags;
cmdbuf[ 8] = attributes;
cmdbuf[ 9] = (archive.lowPath.size << 14) | 0x802;
cmdbuf[ 9] = IPC_Desc_StaticBuffer(archive.lowPath.size,2);
cmdbuf[10] = (u32)archive.lowPath.data;
cmdbuf[11] = (fileLowPath.size << 14) | 0x2;
cmdbuf[11] = IPC_Desc_StaticBuffer(fileLowPath.size,0);
cmdbuf[12] = (u32)fileLowPath.data;
Result ret = 0;
@ -298,13 +299,13 @@ FSUSER_DeleteFile(FS_archive archive,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08040142;
cmdbuf[0] = IPC_MakeHeader(0x804,5,2); // 0x8040142
cmdbuf[1] = 0;
cmdbuf[2] = archive.handleLow;
cmdbuf[3] = archive.handleHigh;
cmdbuf[4] = fileLowPath.type;
cmdbuf[5] = fileLowPath.size;
cmdbuf[6] = (fileLowPath.size << 14) | 0x2;
cmdbuf[6] = IPC_Desc_StaticBuffer(fileLowPath.size ,0);
cmdbuf[7] = (u32)fileLowPath.data;
Result ret = 0;
@ -359,7 +360,7 @@ FSUSER_RenameFile(FS_archive srcArchive,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08050244;
cmdbuf[0] = IPC_MakeHeader(0x805,9,4); // 0x8050244
cmdbuf[1] = 0;
cmdbuf[2] = srcArchive.handleLow;
cmdbuf[3] = srcArchive.handleHigh;
@ -369,9 +370,9 @@ FSUSER_RenameFile(FS_archive srcArchive,
cmdbuf[7] = destArchive.handleHigh;
cmdbuf[8] = destFileLowPath.type;
cmdbuf[9] = destFileLowPath.size;
cmdbuf[10] = (srcFileLowPath.size << 14) | 0x402;
cmdbuf[10] = IPC_Desc_StaticBuffer(srcFileLowPath.size,1);
cmdbuf[11] = (u32)srcFileLowPath.data;
cmdbuf[12] = (destFileLowPath.size << 14) | 0x802;
cmdbuf[12] = IPC_Desc_StaticBuffer(destFileLowPath.size,2);
cmdbuf[13] = (u32)destFileLowPath.data;
Result ret = 0;
@ -416,13 +417,13 @@ FSUSER_DeleteDirectory(FS_archive archive,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08060142;
cmdbuf[0] = IPC_MakeHeader(0x806,5,2); // 0x8060142
cmdbuf[1] = 0;
cmdbuf[2] = archive.handleLow;
cmdbuf[3] = archive.handleHigh;
cmdbuf[4] = dirLowPath.type;
cmdbuf[5] = dirLowPath.size;
cmdbuf[6] = (dirLowPath.size << 14) | 0x2;
cmdbuf[6] = IPC_Desc_StaticBuffer(dirLowPath.size,0);
cmdbuf[7] = (u32)dirLowPath.data;
Result ret = 0;
@ -467,13 +468,13 @@ FSUSER_DeleteDirectoryRecursively(FS_archive archive,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08070142;
cmdbuf[0] = IPC_MakeHeader(0x807,5,2); // 0x8070142
cmdbuf[1] = 0;
cmdbuf[2] = archive.handleLow;
cmdbuf[3] = archive.handleHigh;
cmdbuf[4] = dirLowPath.type;
cmdbuf[5] = dirLowPath.size;
cmdbuf[6] = (dirLowPath.size << 14) | 0x2;
cmdbuf[6] = IPC_Desc_StaticBuffer(dirLowPath.size,0);
cmdbuf[7] = (u32)dirLowPath.data;
Result ret = 0;
@ -523,7 +524,7 @@ FSUSER_CreateFile(FS_archive archive,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08080202;
cmdbuf[0] = IPC_MakeHeader(0x808,8,2); // 0x8080202
cmdbuf[1] = 0;
cmdbuf[2] = archive.handleLow;
cmdbuf[3] = archive.handleHigh;
@ -532,7 +533,7 @@ FSUSER_CreateFile(FS_archive archive,
cmdbuf[6] = 0;
cmdbuf[7] = fileSize;
cmdbuf[8] = 0;
cmdbuf[9] = (fileLowPath.size << 14) | 0x2;
cmdbuf[9] = IPC_Desc_StaticBuffer(fileLowPath.size,0);
cmdbuf[10] = (u32)fileLowPath.data;
Result ret = 0;
@ -578,14 +579,14 @@ FSUSER_CreateDirectory(FS_archive archive,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08090182;
cmdbuf[0] = IPC_MakeHeader(0x809,6,2); // 0x8090182
cmdbuf[1] = 0;
cmdbuf[2] = archive.handleLow;
cmdbuf[3] = archive.handleHigh;
cmdbuf[4] = dirLowPath.type;
cmdbuf[5] = dirLowPath.size;
cmdbuf[6] = 0;
cmdbuf[7] = (dirLowPath.size << 14) | 0x2;
cmdbuf[7] = IPC_Desc_StaticBuffer(dirLowPath.size,0);
cmdbuf[8] = (u32)dirLowPath.data;
Result ret = 0;
@ -640,7 +641,7 @@ FSUSER_RenameDirectory(FS_archive srcArchive,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x080A0244;
cmdbuf[0] = IPC_MakeHeader(0x80A,9,4); // 0x80A0244
cmdbuf[1] = 0;
cmdbuf[2] = srcArchive.handleLow;
cmdbuf[3] = srcArchive.handleHigh;
@ -650,9 +651,9 @@ FSUSER_RenameDirectory(FS_archive srcArchive,
cmdbuf[7] = destArchive.handleHigh;
cmdbuf[8] = destDirLowPath.type;
cmdbuf[9] = destDirLowPath.size;
cmdbuf[10] = (srcDirLowPath.size << 14) | 0x402;
cmdbuf[10] = IPC_Desc_StaticBuffer(srcDirLowPath.size,1);
cmdbuf[11] = (u32)srcDirLowPath.data;
cmdbuf[12] = (destDirLowPath.size << 14) | 0x802;
cmdbuf[12] = IPC_Desc_StaticBuffer(destDirLowPath.size,2);
cmdbuf[13] = (u32)destDirLowPath.data;
Result ret = 0;
@ -699,12 +700,12 @@ FSUSER_OpenDirectory(Handle *out,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x080B0102;
cmdbuf[0] = IPC_MakeHeader(0x80B,4,2); // 0x80B0102
cmdbuf[1] = archive.handleLow;
cmdbuf[2] = archive.handleHigh;
cmdbuf[3] = dirLowPath.type;
cmdbuf[4] = dirLowPath.size;
cmdbuf[5] = (dirLowPath.size << 14) | 0x2;
cmdbuf[5] = IPC_Desc_StaticBuffer(dirLowPath.size,0);
cmdbuf[6] = (u32)dirLowPath.data;
Result ret = 0;
@ -753,11 +754,11 @@ FSUSER_OpenArchive(FS_archive *archive)
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x080C00C2;
cmdbuf[0] = IPC_MakeHeader(0x80C,3,2); // 0x80C00C2
cmdbuf[1] = archive->id;
cmdbuf[2] = archive->lowPath.type;
cmdbuf[3] = archive->lowPath.size;
cmdbuf[4] = (archive->lowPath.size << 14) | 0x2;
cmdbuf[4] = IPC_Desc_StaticBuffer(archive->lowPath.size,0);
cmdbuf[5] = (u32)archive->lowPath.data;
Result ret = 0;
@ -802,7 +803,7 @@ FSUSER_CloseArchive(FS_archive *archive)
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x080E0080;
cmdbuf[0] = IPC_MakeHeader(0x80E,2,0); // 0x80E0080
cmdbuf[1] = archive->handleLow;
cmdbuf[2] = archive->handleHigh;
@ -849,7 +850,7 @@ FSUSER_GetSdmcArchiveResource(u32 *sectorSize,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08140000;
cmdbuf[0] = IPC_MakeHeader(0x814,0,0); // 0x8140000
Result ret = 0;
if((ret = svcSendSyncRequest(fsuHandle)))
@ -906,7 +907,7 @@ FSUSER_GetNandArchiveResource(u32 *sectorSize,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08150000;
cmdbuf[0] = IPC_MakeHeader(0x815,0,0); // 0x8150000
Result ret = 0;
if((ret = svcSendSyncRequest(fsuHandle)))
@ -954,7 +955,7 @@ FSUSER_IsSdmcDetected(u8 *detected)
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08170000;
cmdbuf[0] = IPC_MakeHeader(0x817,0,0); // 0x8170000
Result ret = 0;
if((ret = svcSendSyncRequest(fsuHandle)))
@ -992,7 +993,7 @@ FSUSER_GetMediaType(u8* mediatype)
{
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08680000;
cmdbuf[0] = IPC_MakeHeader(0x868,0,0); // 0x8680000
Result ret = 0;
if((ret = svcSendSyncRequest(fsuHandle)))
@ -1031,7 +1032,7 @@ FSUSER_IsSdmcWritable(u8 *writable)
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08180000;
cmdbuf[0] = IPC_MakeHeader(0x818,0,0); // 0x8180000
Result ret = 0;
if((ret = svcSendSyncRequest(fsuHandle)))
@ -1069,7 +1070,7 @@ FSFILE_Close(Handle handle)
{
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08080000;
cmdbuf[0] = IPC_MakeHeader(0x808,0,0); // 0x8080000
Result ret = 0;
if((ret = svcSendSyncRequest(handle)))
@ -1121,11 +1122,11 @@ FSFILE_Read(Handle handle,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x080200C2;
cmdbuf[0] = IPC_MakeHeader(0x802,3,2); // 0x80200C2
cmdbuf[1] = (u32)offset;
cmdbuf[2] = (u32)(offset >> 32);
cmdbuf[3] = size;
cmdbuf[4] = (size << 4) | 0xC;
cmdbuf[4] = IPC_Desc_Buffer(size,IPC_BUFFER_W);
cmdbuf[5] = (u32)buffer;
Result ret = 0;
@ -1189,12 +1190,12 @@ FSFILE_Write(Handle handle,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08030102;
cmdbuf[0] = IPC_MakeHeader(0x803,4,2); // 0x8030102
cmdbuf[1] = (u32)offset;
cmdbuf[2] = (u32)(offset >> 32);
cmdbuf[3] = size;
cmdbuf[4] = flushFlags;
cmdbuf[5] = (size << 4) | 0xA;
cmdbuf[5] = IPC_Desc_Buffer(size,IPC_BUFFER_R);
cmdbuf[6] = (u32)buffer;
Result ret = 0;
@ -1237,7 +1238,7 @@ FSFILE_GetSize(Handle handle,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08040000;
cmdbuf[0] = IPC_MakeHeader(0x804,0,0); // 0x8040000
Result ret = 0;
if((ret = svcSendSyncRequest(handle)))
@ -1279,7 +1280,7 @@ FSFILE_SetSize(Handle handle,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08050080;
cmdbuf[0] = IPC_MakeHeader(0x805,2,0); // 0x8050080
cmdbuf[1] = (u32)size;
cmdbuf[2] = (u32)(size >> 32);
@ -1320,7 +1321,7 @@ FSFILE_GetAttributes(Handle handle,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08060000;
cmdbuf[0] = IPC_MakeHeader(0x806,0,0); // 0x8060000
Result ret = 0;
if((ret = svcSendSyncRequest(handle)))
@ -1361,7 +1362,7 @@ FSFILE_SetAttributes(Handle handle,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08070040;
cmdbuf[0] = IPC_MakeHeader(0x807,1,0); // 0x8070040
cmdbuf[1] = attributes;
Result ret = 0;
@ -1397,7 +1398,7 @@ FSFILE_Flush(Handle handle)
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08090000;
cmdbuf[0] = IPC_MakeHeader(0x809,0,0); // 0x8090000
Result ret = 0;
if((ret = svcSendSyncRequest(handle)))
@ -1442,9 +1443,9 @@ FSDIR_Read(Handle handle,
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08010042;
cmdbuf[0] = IPC_MakeHeader(0x801,1,2); // 0x8010042
cmdbuf[1] = entryCount;
cmdbuf[2] = ((entryCount*0x228) << 4) | 0xC;
cmdbuf[2] = IPC_Desc_Buffer(entryCount*0x228,IPC_BUFFER_W);
cmdbuf[3] = (u32)buffer;
Result ret = 0;
@ -1483,7 +1484,7 @@ FSDIR_Close(Handle handle)
{
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x08020000;
cmdbuf[0] = IPC_MakeHeader(0x802,0,0); // 0x8020000
Result ret = 0;
if((ret = svcSendSyncRequest(handle)))

View File

@ -2,6 +2,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/hb.h>
#include <3ds/ipc.h>
static Handle hbHandle;
@ -20,9 +21,9 @@ Result HB_FlushInvalidateCache(void)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00010042;
cmdbuf[0] = IPC_MakeHeader(0x1,1,2); // 0x10042
cmdbuf[1] = 0x00000000;
cmdbuf[2] = 0x00000000;
cmdbuf[2] = IPC_Desc_SharedHandles(1);
cmdbuf[3] = CUR_PROCESS_HANDLE;
if((ret = svcSendSyncRequest(hbHandle))!=0) return ret;
@ -35,7 +36,7 @@ Result HB_GetBootloaderAddresses(void** load3dsx, void** setArgv)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00060000;
cmdbuf[0] = IPC_MakeHeader(0x6,0,0); // 0x60000
if((ret = svcSendSyncRequest(hbHandle))!=0) return ret;
@ -50,7 +51,7 @@ Result HB_ReprotectMemory(u32* addr, u32 pages, u32 mode, u32* reprotectedPages)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000900C0;
cmdbuf[0] = IPC_MakeHeader(0x9,3,0); // 0x900C0
cmdbuf[1] = (u32)addr;
cmdbuf[2] = pages;
cmdbuf[3] = mode;

View File

@ -9,6 +9,7 @@
#include <3ds/services/apt.h>
#include <3ds/services/hid.h>
#include <3ds/services/irrst.h>
#include <3ds/ipc.h>
Handle hidHandle;
Handle hidMemHandle;
@ -198,7 +199,7 @@ void hidGyroRead(angularRate* rate)
Result HIDUSER_GetHandles(Handle* outMemHandle, Handle *eventpad0, Handle *eventpad1, Handle *eventaccel, Handle *eventgyro, Handle *eventdebugpad)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0xa0000; //request header code
cmdbuf[0]=IPC_MakeHeader(0xA,0,0); // 0xA0000
Result ret=0;
if((ret=svcSendSyncRequest(hidHandle)))return ret;
@ -217,7 +218,7 @@ Result HIDUSER_GetHandles(Handle* outMemHandle, Handle *eventpad0, Handle *event
Result HIDUSER_EnableAccelerometer(void)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x110000; //request header code
cmdbuf[0]=IPC_MakeHeader(0x11,0,0); // 0x110000
Result ret=0;
if((ret=svcSendSyncRequest(hidHandle)))return ret;
@ -228,7 +229,7 @@ Result HIDUSER_EnableAccelerometer(void)
Result HIDUSER_DisableAccelerometer(void)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x120000; //request header code
cmdbuf[0]=IPC_MakeHeader(0x12,0,0); // 0x120000
Result ret=0;
if((ret=svcSendSyncRequest(hidHandle)))return ret;
@ -239,7 +240,7 @@ Result HIDUSER_DisableAccelerometer(void)
Result HIDUSER_EnableGyroscope(void)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x130000; //request header code
cmdbuf[0]=IPC_MakeHeader(0x13,0,0); // 0x130000
Result ret=0;
if((ret=svcSendSyncRequest(hidHandle)))return ret;
@ -250,7 +251,7 @@ Result HIDUSER_EnableGyroscope(void)
Result HIDUSER_DisableGyroscope(void)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x140000; //request header code
cmdbuf[0]=IPC_MakeHeader(0x14,0,0); // 0x140000
Result ret=0;
if((ret=svcSendSyncRequest(hidHandle)))return ret;
@ -261,7 +262,7 @@ Result HIDUSER_DisableGyroscope(void)
Result HIDUSER_GetGyroscopeRawToDpsCoefficient(float *coeff)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x150000; //request header code
cmdbuf[0]=IPC_MakeHeader(0x15,0,0); // 0x150000
Result ret=0;
if((ret=svcSendSyncRequest(hidHandle)))return ret;
@ -274,7 +275,7 @@ Result HIDUSER_GetGyroscopeRawToDpsCoefficient(float *coeff)
Result HIDUSER_GetSoundVolume(u8 *volume)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x170000; //request header code
cmdbuf[0]=IPC_MakeHeader(0x17,0,0); // 0x170000
Result ret=0;
if((ret=svcSendSyncRequest(hidHandle)))return ret;

View File

@ -3,6 +3,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/httpc.h>
#include <3ds/ipc.h>
Handle __httpc_servhandle = 0;
@ -146,10 +147,10 @@ Result HTTPC_Initialize(Handle handle)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x10044; //request header code
cmdbuf[0]=IPC_MakeHeader(0x1,1,4); // 0x10044
cmdbuf[1]=0x1000; //unk
cmdbuf[2]=0x20;//processID header, following word is set to processID by the arm11kernel.
cmdbuf[4]=0;
cmdbuf[2]=IPC_Desc_CurProcessHandle();
cmdbuf[4]=IPC_Desc_SharedHandles(1);
cmdbuf[5]=0;//Some sort of handle.
Result ret=0;
@ -163,10 +164,10 @@ Result HTTPC_CreateContext(Handle handle, char* url, Handle* contextHandle)
u32* cmdbuf=getThreadCommandBuffer();
u32 l=strlen(url)+1;
cmdbuf[0]=0x20082; //request header code
cmdbuf[0]=IPC_MakeHeader(0x2,2,2); // 0x20082
cmdbuf[1]=l;
cmdbuf[2]=0x01; //unk
cmdbuf[3]=(l<<4)|0xA;
cmdbuf[3]=IPC_Desc_Buffer(l,IPC_BUFFER_R);
cmdbuf[4]=(u32)url;
Result ret=0;
@ -181,9 +182,9 @@ Result HTTPC_InitializeConnectionSession(Handle handle, Handle contextHandle)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x80042; //request header code
cmdbuf[0]=IPC_MakeHeader(0x8,1,2); // 0x80042
cmdbuf[1]=contextHandle;
cmdbuf[2]=0x20; //unk, constant afaict
cmdbuf[2]=IPC_Desc_CurProcessHandle();
Result ret=0;
if((ret=svcSendSyncRequest(handle)))return ret;
@ -195,7 +196,7 @@ Result HTTPC_SetProxyDefault(Handle handle, Handle contextHandle)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0xe0040; //request header code
cmdbuf[0]=IPC_MakeHeader(0xE,1,0); // 0xE0040
cmdbuf[1]=contextHandle;
Result ret=0;
@ -208,7 +209,7 @@ Result HTTPC_CloseContext(Handle handle, Handle contextHandle)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x30040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x3,1,0); // 0x30040
cmdbuf[1]=contextHandle;
Result ret=0;
@ -224,13 +225,13 @@ Result HTTPC_AddRequestHeaderField(Handle handle, Handle contextHandle, char* na
int name_len=strlen(name)+1;
int value_len=strlen(value)+1;
cmdbuf[0]=0x1100c4; //request header code
cmdbuf[0]=IPC_MakeHeader(0x11,3,4); // 0x1100C4
cmdbuf[1]=contextHandle;
cmdbuf[2]=name_len;
cmdbuf[3]=value_len;
cmdbuf[4]=(name_len<<14)|0xC02;
cmdbuf[4]=IPC_Desc_StaticBuffer(name_len,3);
cmdbuf[5]=(u32)name;
cmdbuf[6]=(value_len<<4)|0xA;
cmdbuf[6]=IPC_Desc_Buffer(value_len,IPC_BUFFER_R);
cmdbuf[7]=(u32)value;
Result ret=0;
@ -243,7 +244,7 @@ Result HTTPC_BeginRequest(Handle handle, Handle contextHandle)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x90040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x9,1,0); // 0x90040
cmdbuf[1]=contextHandle;
Result ret=0;
@ -256,10 +257,10 @@ Result HTTPC_ReceiveData(Handle handle, Handle contextHandle, u8* buffer, u32 si
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0xB0082; //request header code
cmdbuf[0]=IPC_MakeHeader(0xB,2,2); // 0xB0082
cmdbuf[1]=contextHandle;
cmdbuf[2]=size;
cmdbuf[3]=(size<<4)|12;
cmdbuf[3]=IPC_Desc_Buffer(size,IPC_BUFFER_W);
cmdbuf[4]=(u32)buffer;
Result ret=0;
@ -272,7 +273,7 @@ Result HTTPC_GetRequestState(Handle handle, Handle contextHandle, httpcReqStatus
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x50040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x5,1,0); // 0x50040
cmdbuf[1]=contextHandle;
Result ret=0;
@ -287,7 +288,7 @@ Result HTTPC_GetDownloadSizeState(Handle handle, Handle contextHandle, u32* down
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x60040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x6,1,0); // 0x60040
cmdbuf[1]=contextHandle;
Result ret=0;
@ -324,7 +325,7 @@ Result HTTPC_GetResponseStatusCode(Handle handle, Handle contextHandle, u32* out
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x220040; //request header code
cmdbuf[0]=IPC_MakeHeader(0x22,1,0); // 0x220040
cmdbuf[1]=contextHandle;
Result ret=0;

View File

@ -4,6 +4,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/ir.h>
#include <3ds/ipc.h>
static Handle iru_handle=0;
static Handle iru_sharedmem_handle=0;
@ -15,7 +16,7 @@ Result irucmd_Initialize(void)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00010000;
cmdbuf[0] = IPC_MakeHeader(0x1,0,0); // 0x10000
if((ret = svcSendSyncRequest(iru_handle))!=0)return ret;
ret = (Result)cmdbuf[1];
@ -28,7 +29,7 @@ Result irucmd_Shutdown(void)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00020000;
cmdbuf[0] = IPC_MakeHeader(0x2,0,0); // 0x20000
if((ret = svcSendSyncRequest(iru_handle))!=0)return ret;
ret = (Result)cmdbuf[1];
@ -41,9 +42,9 @@ Result irucmd_StartSendTransfer(u8 *buf, u32 size)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00030042;
cmdbuf[0] = IPC_MakeHeader(0x3,1,2); // 0x30042
cmdbuf[1] = size;
cmdbuf[2] = (size<<4) | 10;
cmdbuf[2] = IPC_Desc_Buffer(size,IPC_BUFFER_R);
cmdbuf[3] = (u32)buf;
if((ret = svcSendSyncRequest(iru_handle))!=0)return ret;
@ -57,7 +58,7 @@ Result irucmd_WaitSendTransfer(void)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00040000;
cmdbuf[0] = IPC_MakeHeader(0x4,0,0); // 0x40000
if((ret = svcSendSyncRequest(iru_handle))!=0)return ret;
ret = (Result)cmdbuf[1];
@ -70,11 +71,11 @@ Result irucmd_StartRecvTransfer(u32 size, u8 flag)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000500C2;
cmdbuf[0] = IPC_MakeHeader(0x5,3,2); // 0x500C2
cmdbuf[1] = iru_sharedmem_size;
cmdbuf[2] = size;
cmdbuf[3] = (u8)flag;
cmdbuf[4] = 0;
cmdbuf[4] = IPC_Desc_SharedHandles(1);
cmdbuf[5] = iru_sharedmem_handle;
if((ret = svcSendSyncRequest(iru_handle))!=0)return ret;
@ -88,7 +89,7 @@ Result irucmd_WaitRecvTransfer(u32 *transfercount)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00060000;
cmdbuf[0] = IPC_MakeHeader(0x6,0,0); // 0x60000
if((ret = svcSendSyncRequest(iru_handle))!=0)return ret;
ret = (Result)cmdbuf[1];
@ -103,7 +104,7 @@ Result IRU_SetBitRate(u8 value)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00090040;
cmdbuf[0] = IPC_MakeHeader(0x9,1,0); // 0x90040
cmdbuf[1] = (u32)value;
if((ret = svcSendSyncRequest(iru_handle))!=0)return ret;
@ -117,7 +118,7 @@ Result IRU_GetBitRate(u8 *out)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000A0000;
cmdbuf[0] = IPC_MakeHeader(0xA,0,0); // 0xA0000
if((ret = svcSendSyncRequest(iru_handle))!=0)return ret;
ret = (Result)cmdbuf[1];
@ -132,7 +133,7 @@ Result IRU_SetIRLEDState(u32 value)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000B0040;
cmdbuf[0] = IPC_MakeHeader(0xB,1,0); // 0xB0040
cmdbuf[1] = value;
if((ret = svcSendSyncRequest(iru_handle))!=0)return ret;
@ -146,7 +147,7 @@ Result IRU_GetIRLEDRecvState(u32 *out)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000C0000;
cmdbuf[0] = IPC_MakeHeader(0xC,0,0); // 0xC0000
if((ret = svcSendSyncRequest(iru_handle))!=0)return ret;
ret = (Result)cmdbuf[1];

View File

@ -7,6 +7,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/irrst.h>
#include <3ds/ipc.h>
// used to determine whether or not we should do IRRST_Initialize
Handle __get_handle_from_list(char* name);
@ -119,7 +120,7 @@ void irrstCstickRead(circlePosition* pos)
Result IRRST_GetHandles(Handle* outMemHandle, Handle* outEventHandle)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x00010000; //request header code
cmdbuf[0]=IPC_MakeHeader(0x1,0,0); // 0x10000
Result ret=0;
if((ret=svcSendSyncRequest(irrstHandle)))return ret;
@ -133,7 +134,7 @@ Result IRRST_GetHandles(Handle* outMemHandle, Handle* outEventHandle)
Result IRRST_Initialize(u32 unk1, u8 unk2)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x00020080; //request header code
cmdbuf[0]=IPC_MakeHeader(0x2,2,0); // 0x20080
cmdbuf[1]=unk1;
cmdbuf[2]=unk2;
@ -146,7 +147,7 @@ Result IRRST_Initialize(u32 unk1, u8 unk2)
Result IRRST_Shutdown(void)
{
u32* cmdbuf=getThreadCommandBuffer();
cmdbuf[0]=0x00030000; //request header code
cmdbuf[0]=IPC_MakeHeader(0x3,0,0); // 0x30000
Result ret=0;
if((ret=svcSendSyncRequest(irrstHandle)))return ret;

View File

@ -4,6 +4,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/mic.h>
#include <3ds/ipc.h>
//See also: http://3dbrew.org/wiki/MIC_Services
@ -127,9 +128,9 @@ Result MIC_MapSharedMem(Handle handle, u32 size)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00010042;
cmdbuf[0] = IPC_MakeHeader(0x1,1,2); // 0x10042
cmdbuf[1] = size;
cmdbuf[2] = 0;
cmdbuf[2] = IPC_Desc_SharedHandles(1);
cmdbuf[3] = handle;
if((ret = svcSendSyncRequest(MIC_handle))!=0)return ret;
@ -142,7 +143,7 @@ Result MIC_UnmapSharedMem(void)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00020000;
cmdbuf[0] = IPC_MakeHeader(0x2,0,0); // 0x20000
if((ret = svcSendSyncRequest(MIC_handle))!=0)return ret;
@ -154,7 +155,7 @@ Result MIC_cmd3_Initialize(u8 unk0, u8 unk1, u32 sharedmem_baseoffset, u32 share
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00030140;
cmdbuf[0] = IPC_MakeHeader(0x3,5,0); // 0x30140
cmdbuf[1] = unk0;
cmdbuf[2] = unk1;
cmdbuf[3] = sharedmem_baseoffset;
@ -171,7 +172,7 @@ Result MIC_cmd5(void)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00050000;
cmdbuf[0] = IPC_MakeHeader(0x5,0,0); // 0x50000
if((ret = svcSendSyncRequest(MIC_handle))!=0)return ret;
@ -183,7 +184,7 @@ Result MIC_GetCNTBit15(u8 *out)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00060000;
cmdbuf[0] = IPC_MakeHeader(0x6,0,0); // 0x60000
if((ret = svcSendSyncRequest(MIC_handle))!=0)return ret;
@ -203,7 +204,7 @@ Result MIC_GetEventHandle(Handle *handle)
return 0;
}
cmdbuf[0] = 0x00070000;
cmdbuf[0] = IPC_MakeHeader(0x7,0,0); // 0x70000
if((ret = svcSendSyncRequest(MIC_handle))!=0)return ret;
@ -217,7 +218,7 @@ Result MIC_SetControl(u8 value)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00080040;
cmdbuf[0] = IPC_MakeHeader(0x8,1,0); // 0x80040
cmdbuf[1] = value;
if((ret = svcSendSyncRequest(MIC_handle))!=0)return ret;
@ -230,7 +231,7 @@ Result MIC_GetControl(u8 *value)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00090000;
cmdbuf[0] = IPC_MakeHeader(0x9,0,0); // 0x90000
if((ret = svcSendSyncRequest(MIC_handle))!=0)return ret;
@ -244,7 +245,7 @@ Result MIC_SetRecording(u8 value)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000A0040;
cmdbuf[0] = IPC_MakeHeader(0xA,1,0); // 0xA0040
cmdbuf[1] = value;
if((ret = svcSendSyncRequest(MIC_handle))!=0)return ret;
@ -259,7 +260,7 @@ Result MIC_IsRecoding(u8 *value)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000B0000;
cmdbuf[0] = IPC_MakeHeader(0xB,0,0); // 0xB0000
if((ret = svcSendSyncRequest(MIC_handle))!=0)return ret;

View File

@ -10,6 +10,7 @@
#include <3ds/os.h>
#include <3ds/linear.h>
#include <3ds/services/mvd.h>
#include <3ds/ipc.h>
Handle mvdstdHandle;
static u32 mvdstdInitialized = 0;
@ -22,10 +23,10 @@ static size_t mvdstd_workbufsize = 0;
static Result mvdstdipc_Initialize(u32 *buf, u32 bufsize, Handle kprocess)
{
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00010082; //request header code
cmdbuf[0] = IPC_MakeHeader(0x1,2,2); // 0x10082
cmdbuf[1] = (u32)buf;
cmdbuf[2] = bufsize;
cmdbuf[3] = 0;
cmdbuf[3] = IPC_Desc_SharedHandles(1);
cmdbuf[4] = kprocess;
Result ret=0;
@ -37,7 +38,7 @@ static Result mvdstdipc_Initialize(u32 *buf, u32 bufsize, Handle kprocess)
static Result mvdstdipc_Shutdown(void)
{
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00020000; //request header code
cmdbuf[0] = IPC_MakeHeader(0x2,0,0); // 0x20000
Result ret=0;
if((ret = svcSendSyncRequest(mvdstdHandle)))return ret;
@ -48,7 +49,7 @@ static Result mvdstdipc_Shutdown(void)
static Result mvdstdipc_cmd18(void)
{
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00180000; //request header code
cmdbuf[0] = IPC_MakeHeader(0x18,0,0); // 0x180000
Result ret=0;
if((ret=svcSendSyncRequest(mvdstdHandle)))return ret;
@ -59,7 +60,7 @@ static Result mvdstdipc_cmd18(void)
static Result mvdstdipc_cmd19(void)
{
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00190000; //request header code
cmdbuf[0] = IPC_MakeHeader(0x19,0,0); // 0x190000
Result ret=0;
if((ret=svcSendSyncRequest(mvdstdHandle)))return ret;
@ -70,7 +71,7 @@ static Result mvdstdipc_cmd19(void)
static Result mvdstdipc_cmd1a(void)
{
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x001A0000; //request header code
cmdbuf[0] = IPC_MakeHeader(0x1A,0,0); // 0x1A0000
Result ret=0;
if((ret=svcSendSyncRequest(mvdstdHandle)))return ret;
@ -81,11 +82,11 @@ static Result mvdstdipc_cmd1a(void)
Result mvdstdSetConfig(mvdstdConfig *config)
{
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x001E0044; //request header code
cmdbuf[0] = IPC_MakeHeader(0x1E,1,4); // 0x1E0044
cmdbuf[1] = sizeof(mvdstdConfig);
cmdbuf[2] = 0;
cmdbuf[2] = IPC_Desc_SharedHandles(1);
cmdbuf[3] = CUR_PROCESS_HANDLE;
cmdbuf[4] = (sizeof(mvdstdConfig)<<4) | 10;
cmdbuf[4] = IPC_Desc_Buffer(sizeof(mvdstdConfig),IPC_BUFFER_R);
cmdbuf[5] = (u32)config;
Result ret=0;

View File

@ -4,6 +4,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/news.h>
#include <3ds/ipc.h>
typedef struct {
bool dataSet;
@ -40,17 +41,17 @@ Result NEWSU_AddNotification(const u16* title, u32 titleLength, const u16* messa
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000100C8;
cmdbuf[0] = IPC_MakeHeader(0x1,3,8); // 0x100C8
cmdbuf[1] = sizeof(NotificationHeader);
cmdbuf[2] = (messageLength + 1) * sizeof(u16);
cmdbuf[3] = imageSize;
cmdbuf[4] = 0x20;
cmdbuf[4] = IPC_Desc_CurProcessHandle();
cmdbuf[5] = 0; // Process ID, Filled automatically by the ARM11 kernel.
cmdbuf[6] = (sizeof(NotificationHeader) << 4) | 10;
cmdbuf[6] = IPC_Desc_Buffer(sizeof(NotificationHeader),IPC_BUFFER_R);
cmdbuf[7] = (u32) &header;
cmdbuf[8] = (((messageLength + 1) * sizeof(u16)) << 4) | 10;
cmdbuf[8] = IPC_Desc_Buffer((messageLength + 1) * sizeof(u16),IPC_BUFFER_R);
cmdbuf[9] = (u32) message;
cmdbuf[10] = (imageSize << 4) | 10;
cmdbuf[10] = IPC_Desc_Buffer(imageSize,IPC_BUFFER_R);
cmdbuf[11] = (u32) imageData;
if((ret = svcSendSyncRequest(newsHandle))!=0) return ret;

View File

@ -3,6 +3,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/ns.h>
#include <3ds/ipc.h>
static Handle nsHandle;
@ -21,7 +22,7 @@ Result NS_LaunchTitle(u64 titleid, u32 launch_flags, u32 *procid)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000200C0;
cmdbuf[0] = IPC_MakeHeader(0x2,3,0); // 0x200C0
cmdbuf[1] = titleid & 0xffffffff;
cmdbuf[2] = (titleid >> 32) & 0xffffffff;
cmdbuf[3] = launch_flags;
@ -39,7 +40,7 @@ Result NS_RebootToTitle(u8 mediatype, u64 titleid)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00100180;
cmdbuf[0] = IPC_MakeHeader(0x10,6,0); // 0x100180
cmdbuf[1] = 0x1;
cmdbuf[2] = titleid & 0xffffffff;
cmdbuf[3] = (titleid >> 32) & 0xffffffff;

View File

@ -4,6 +4,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/pm.h>
#include <3ds/ipc.h>
static Handle pmHandle;
@ -22,7 +23,7 @@ Result PM_LaunchTitle(u8 mediatype, u64 titleid, u32 launch_flags)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00010140;
cmdbuf[0] = IPC_MakeHeader(0x1,5,0); // 0x10140
cmdbuf[1] = titleid & 0xffffffff;
cmdbuf[2] = (titleid >> 32) & 0xffffffff;
cmdbuf[3] = mediatype;
@ -39,7 +40,7 @@ Result PM_GetTitleExheaderFlags(u8 mediatype, u64 titleid, u8* out)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00080100;
cmdbuf[0] = IPC_MakeHeader(0x8,4,0); // 0x80100
cmdbuf[1] = titleid & 0xffffffff;
cmdbuf[2] = (titleid >> 32) & 0xffffffff;
cmdbuf[3] = mediatype;
@ -57,9 +58,9 @@ Result PM_SetFIRMLaunchParams(u32 size, u8* in)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00090042;
cmdbuf[0] = IPC_MakeHeader(0x9,1,2); // 0x90042
cmdbuf[1] = size;
cmdbuf[2] = (size << 0x4) | 0xa;
cmdbuf[2] = IPC_Desc_Buffer(size,IPC_BUFFER_R);
cmdbuf[3] = (u32)in;
if((ret = svcSendSyncRequest(pmHandle))!=0)return ret;
@ -72,9 +73,9 @@ Result PM_GetFIRMLaunchParams(u32 size, u8* out)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00070042;
cmdbuf[0] = IPC_MakeHeader(0x7,1,2); // 0x70042
cmdbuf[1] = size;
cmdbuf[2] = (size << 0x4) | 0xc;
cmdbuf[2] = IPC_Desc_Buffer(size,IPC_BUFFER_W);
cmdbuf[3] = (u32)out;
if((ret = svcSendSyncRequest(pmHandle))!=0)return ret;
@ -87,10 +88,10 @@ Result PM_LaunchFIRMSetParams(u32 firm_titleid_low, u32 size, u8* in)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00020082;
cmdbuf[0] = IPC_MakeHeader(0x2,2,2); // 0x20082
cmdbuf[1] = firm_titleid_low;
cmdbuf[2] = size;
cmdbuf[3] = (size << 0x4) | 0xa;
cmdbuf[3] = IPC_Desc_Buffer(size,IPC_BUFFER_R);
cmdbuf[4] = (u32)in;
if((ret = svcSendSyncRequest(pmHandle))!=0)return ret;

View File

@ -3,6 +3,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/ps.h>
#include <3ds/ipc.h>
static Handle psHandle;
@ -23,7 +24,7 @@ Result PS_EncryptDecryptAes(u32 size, u8* in, u8* out, u32 aes_algo, u32 key_typ
u32 *_iv = (u32*)iv;
cmdbuf[0] = 0x000401C4;
cmdbuf[0] = IPC_MakeHeader(0x4,7,4); // 0x401C4
cmdbuf[1] = size;
cmdbuf[2] = _iv[0];
cmdbuf[3] = _iv[1];
@ -31,9 +32,9 @@ Result PS_EncryptDecryptAes(u32 size, u8* in, u8* out, u32 aes_algo, u32 key_typ
cmdbuf[5] = _iv[3];
cmdbuf[6] = aes_algo;
cmdbuf[7] = key_type;
cmdbuf[8] = (size << 0x8) | 0x4;
cmdbuf[8] = IPC_Desc_PXIBuffer(size,0,false);
cmdbuf[9] = (u32)in;
cmdbuf[10] = (size << 0x8) | 0x14;
cmdbuf[10] = IPC_Desc_PXIBuffer(size,1,false);
cmdbuf[11] = (u32)out;
if((ret = svcSendSyncRequest(psHandle))!=0)return ret;
@ -53,7 +54,7 @@ Result PS_EncryptSignDecryptVerifyAesCcm(u8* in, u32 in_size, u8* out, u32 out_s
u32 *_nonce = (u32*)nonce;
cmdbuf[0] = 0x00050284;
cmdbuf[0] = IPC_MakeHeader(0x5,10,4); // 0x50284
cmdbuf[1] = in_size;
cmdbuf[2] = out_size;
cmdbuf[3] = mac_data_len;
@ -64,9 +65,9 @@ Result PS_EncryptSignDecryptVerifyAesCcm(u8* in, u32 in_size, u8* out, u32 out_s
cmdbuf[8] = _nonce[2];
cmdbuf[9] = aes_algo;
cmdbuf[10] = key_type;
cmdbuf[8] = (in_size << 0x8) | 0x4;
cmdbuf[8] = IPC_Desc_PXIBuffer(in_size,0,false);
cmdbuf[9] = (u32)in;
cmdbuf[10] = (out_size << 0x8) | 0x14;
cmdbuf[10] = IPC_Desc_PXIBuffer(out_size,1,false);
cmdbuf[11] = (u32)out;
if((ret = svcSendSyncRequest(psHandle))!=0)return ret;
@ -79,7 +80,7 @@ Result PS_GetLocalFriendCodeSeed(u64* seed)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000A0000;
cmdbuf[0] = IPC_MakeHeader(0xA,0,0); // 0xA0000
if((ret = svcSendSyncRequest(psHandle))!=0)return ret;
@ -93,7 +94,7 @@ Result PS_GetDeviceId(u32* device_id)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000B0000;
cmdbuf[0] = IPC_MakeHeader(0xB,0,0); // 0xB0000
if((ret = svcSendSyncRequest(psHandle))!=0)return ret;

View File

@ -3,6 +3,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/ptm.h>
#include <3ds/ipc.h>
static Handle ptmHandle;
@ -23,7 +24,7 @@ Result PTMU_GetShellState(Handle* servhandle, u8 *out)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00060000;
cmdbuf[0] = IPC_MakeHeader(0x6,0,0); // 0x60000
if((ret = svcSendSyncRequest(*servhandle))!=0)return ret;
@ -38,7 +39,7 @@ Result PTMU_GetBatteryLevel(Handle* servhandle, u8 *out)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00070000;
cmdbuf[0] = IPC_MakeHeader(0x7,0,0); // 0x70000
if((ret = svcSendSyncRequest(*servhandle))!=0)return ret;
@ -53,7 +54,7 @@ Result PTMU_GetBatteryChargeState(Handle* servhandle, u8 *out)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00080000;
cmdbuf[0] = IPC_MakeHeader(0x8,0,0); // 0x80000
if((ret = svcSendSyncRequest(*servhandle))!=0)return ret;
@ -68,7 +69,7 @@ Result PTMU_GetPedometerState(Handle* servhandle, u8 *out)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00090000;
cmdbuf[0] = IPC_MakeHeader(0x9,0,0); // 0x90000
if((ret = svcSendSyncRequest(*servhandle))!=0)return ret;
@ -83,7 +84,7 @@ Result PTMU_GetTotalStepCount(Handle* servhandle, u32 *steps)
Result ret=0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000C0000;
cmdbuf[0] = IPC_MakeHeader(0xC,0,0); // 0xC0000
if((ret = svcSendSyncRequest(*servhandle))!=0)return ret;

View File

@ -7,6 +7,7 @@
#include <3ds/svc.h>
#include <3ds/srv.h>
#include <3ds/services/qtm.h>
#include <3ds/ipc.h>
Handle qtmHandle;
@ -44,8 +45,9 @@ Result qtmGetHeadtrackingInfo(u64 val, qtmHeadtrackingInfo *out)
if(!qtmInitialized)return -1;
cmdbuf[0]=0x00020080; //request header code
memcpy(&cmdbuf[1], &val, 8);
cmdbuf[0]=IPC_MakeHeader(0x2,2,0); // 0x20080
cmdbuf[1] = val&0xFFFFFFFF;
cmdbuf[2] = val>>32;
Result ret=0;
if((ret=svcSendSyncRequest(qtmHandle)))return ret;

View File

@ -1,6 +1,7 @@
#include "soc_common.h"
#include <errno.h>
#include <sys/socket.h>
#include <3ds/ipc.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
{
@ -36,16 +37,17 @@ int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
memset(tmpaddr, 0, 0x1c);
cmdbuf[0] = 0x00040082;
cmdbuf[0] = IPC_MakeHeader(0x4,2,2); // 0x40082
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = (u32)tmp_addrlen;
cmdbuf[3] = 0x20;
cmdbuf[3] = IPC_Desc_CurProcessHandle();
saved_threadstorage[0] = cmdbuf[0x100>>2];
saved_threadstorage[1] = cmdbuf[0x104>>2];
u32 * staticbufs = getThreadStaticBuffers();
saved_threadstorage[0] = staticbufs[0];
saved_threadstorage[1] = staticbufs[1];
cmdbuf[0x100>>2] = (tmp_addrlen<<14) | 2;
cmdbuf[0x104>>2] = (u32)tmpaddr;
staticbufs[0] = IPC_Desc_StaticBuffer(tmp_addrlen,0);
staticbufs[1] = (u32)tmpaddr;
ret = svcSendSyncRequest(SOCU_handle);
if(ret != 0) {
@ -54,8 +56,8 @@ int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
return ret;
}
cmdbuf[0x100>>2] = saved_threadstorage[0];
cmdbuf[0x104>>2] = saved_threadstorage[1];
staticbufs[0] = saved_threadstorage[0];
staticbufs[1] = saved_threadstorage[1];
ret = (int)cmdbuf[1];
if(ret == 0)

View File

@ -1,6 +1,7 @@
#include "soc_common.h"
#include <errno.h>
#include <sys/socket.h>
#include <3ds/ipc.h>
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
{
@ -31,11 +32,11 @@ int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
tmpaddr[1] = addr->sa_family;
memcpy(&tmpaddr[2], &addr->sa_data, tmp_addrlen-2);
cmdbuf[0] = 0x00050084;
cmdbuf[0] = IPC_MakeHeader(0x5,2,4); // 0x50084
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = (u32)tmp_addrlen;
cmdbuf[3] = 0x20;
cmdbuf[5] = (((u32)tmp_addrlen)<<14) | 2;
cmdbuf[3] = IPC_Desc_CurProcessHandle();
cmdbuf[5] = IPC_Desc_StaticBuffer(tmp_addrlen,0);
cmdbuf[6] = (u32)tmpaddr;
ret = svcSendSyncRequest(SOCU_handle);

View File

@ -1,6 +1,7 @@
#include "soc_common.h"
#include <errno.h>
#include <sys/socket.h>
#include <3ds/ipc.h>
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
{
@ -31,11 +32,11 @@ int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
tmpaddr[1] = addr->sa_family;
memcpy(&tmpaddr[2], &addr->sa_data, tmp_addrlen-2);
cmdbuf[0] = 0x00060084;
cmdbuf[0] = IPC_MakeHeader(0x6,2,4); // 0x60084
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = (u32)addrlen;
cmdbuf[3] = 0x20;
cmdbuf[5] = (((u32)tmp_addrlen)<<14) | 2;
cmdbuf[3] = IPC_Desc_CurProcessHandle();
cmdbuf[5] = IPC_Desc_StaticBuffer(tmp_addrlen,0);
cmdbuf[6] = (u32)tmpaddr;
ret = svcSendSyncRequest(SOCU_handle);

View File

@ -2,6 +2,7 @@
#include <errno.h>
#include <fcntl.h>
#include <stdarg.h>
#include <3ds/ipc.h>
#define O_NONBLOCK_3DS 0x4
@ -63,11 +64,11 @@ int fcntl(int sockfd, int cmd, ...)
arg = to_3ds(arg);
}
cmdbuf[0] = 0x001300C2;
cmdbuf[0] = IPC_MakeHeader(0x13,3,2); // 0x1300C2
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = (u32)cmd;
cmdbuf[3] = (u32)arg;
cmdbuf[4] = 0x20;
cmdbuf[4] = IPC_Desc_CurProcessHandle();
ret = svcSendSyncRequest(SOCU_handle);
if(ret != 0) {

View File

@ -1,5 +1,6 @@
#include "soc_common.h"
#include <netdb.h>
#include <3ds/ipc.h>
#define MAX_HOSTENT_RESULTS 16
static struct hostent SOC_hostent;
@ -15,17 +16,18 @@ struct hostent* gethostbyname(const char *name)
h_errno = 0;
cmdbuf[0] = 0x000D0082;
cmdbuf[0] = IPC_MakeHeader(0xD,2,2); // 0xD0082
cmdbuf[1] = strlen(name)+1;
cmdbuf[2] = sizeof(outbuf);
cmdbuf[3] = ((strlen(name)+1) << 14) | 0xC02;
cmdbuf[4] = (u32)name;
saved_threadstorage[0] = cmdbuf[0x100>>2];
saved_threadstorage[1] = cmdbuf[0x104>>2];
u32 * staticbufs = getThreadStaticBuffers();
saved_threadstorage[0] = staticbufs[0];
saved_threadstorage[1] = staticbufs[1];
cmdbuf[0x100>>2] = (sizeof(outbuf) << 14) | 2;
cmdbuf[0x104>>2] = (u32)outbuf;
staticbufs[0] = IPC_Desc_StaticBuffer(sizeof(outbuf),0);
staticbufs[1] = (u32)outbuf;
ret = svcSendSyncRequest(SOCU_handle);
if(ret != 0) {
@ -33,9 +35,8 @@ struct hostent* gethostbyname(const char *name)
return NULL;
}
cmdbuf[0x100>>2] = saved_threadstorage[0];
cmdbuf[0x104>>2] = saved_threadstorage[1];
staticbufs[0] = saved_threadstorage[0];
staticbufs[1] = saved_threadstorage[1];
ret = (int)cmdbuf[1];
if(ret == 0)

View File

@ -1,12 +1,13 @@
#include "soc_common.h"
#include <errno.h>
#include <3ds/ipc.h>
long gethostid(void)
{
int ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00160000;
cmdbuf[0] = IPC_MakeHeader(0x16,0,0); // 0x160000
ret = svcSendSyncRequest(SOCU_handle);
if(ret != 0) {

View File

@ -1,6 +1,7 @@
#include "soc_common.h"
#include <errno.h>
#include <sys/socket.h>
#include <3ds/ipc.h>
int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
{
@ -15,16 +16,17 @@ int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
return -1;
}
cmdbuf[0] = 0x00180082;
cmdbuf[0] = IPC_MakeHeader(0x18,2,2); // 0x180082
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = 0x1c;
cmdbuf[3] = 0x20;
cmdbuf[3] = IPC_Desc_CurProcessHandle();
saved_threadstorage[0] = cmdbuf[0x100>>2];
saved_threadstorage[1] = cmdbuf[0x104>>2];
u32 * staticbufs = getThreadStaticBuffers();
saved_threadstorage[0] = staticbufs[0];
saved_threadstorage[1] = staticbufs[1];
cmdbuf[0x100>>2] = (0x1c<<14) | 2;
cmdbuf[0x104>>2] = (u32)tmpaddr;
staticbufs[0] = IPC_Desc_StaticBuffer(0x1c,0);
staticbufs[1] = (u32)tmpaddr;
ret = svcSendSyncRequest(SOCU_handle);
if(ret != 0) {
@ -32,8 +34,8 @@ int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
return ret;
}
cmdbuf[0x100>>2] = saved_threadstorage[0];
cmdbuf[0x104>>2] = saved_threadstorage[1];
staticbufs[0] = saved_threadstorage[0];
staticbufs[1] = saved_threadstorage[1];
ret = (int)cmdbuf[1];
if(ret == 0)

View File

@ -1,6 +1,7 @@
#include "soc_common.h"
#include <errno.h>
#include <sys/socket.h>
#include <3ds/ipc.h>
int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
{
@ -15,16 +16,17 @@ int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
return -1;
}
cmdbuf[0] = 0x00170082;
cmdbuf[0] = IPC_MakeHeader(0x17,2,2); // 0x170082
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = 0x1c;
cmdbuf[3] = 0x20;
cmdbuf[3] = IPC_Desc_CurProcessHandle();
saved_threadstorage[0] = cmdbuf[0x100>>2];
saved_threadstorage[1] = cmdbuf[0x104>>2];
u32 * staticbufs = getThreadStaticBuffers();
saved_threadstorage[0] = staticbufs[0];
saved_threadstorage[1] = staticbufs[1];
cmdbuf[0x100>>2] = (0x1c<<14) | 2;
cmdbuf[0x104>>2] = (u32)tmpaddr;
staticbufs[0] = IPC_Desc_StaticBuffer(0x1c,0);
staticbufs[1] = (u32)tmpaddr;
ret = svcSendSyncRequest(SOCU_handle);
if(ret != 0) {
@ -32,8 +34,8 @@ int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
return ret;
}
cmdbuf[0x100>>2] = saved_threadstorage[0];
cmdbuf[0x104>>2] = saved_threadstorage[1];
staticbufs[0] = saved_threadstorage[0];
staticbufs[1] = saved_threadstorage[1];
ret = (int)cmdbuf[1];
if(ret == 0)

View File

@ -1,6 +1,7 @@
#include "soc_common.h"
#include <errno.h>
#include <sys/socket.h>
#include <3ds/ipc.h>
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen)
{
@ -14,18 +15,19 @@ int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optl
return -1;
}
cmdbuf[0] = 0x00110102;
cmdbuf[0] = IPC_MakeHeader(0x11,4,2); // 0x110102
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = (u32)level;
cmdbuf[3] = (u32)optname;
cmdbuf[4] = (u32)*optlen;
cmdbuf[5] = 0x20;
cmdbuf[5] = IPC_Desc_CurProcessHandle();
saved_threadstorage[0] = cmdbuf[0x100>>2];
saved_threadstorage[1] = cmdbuf[0x104>>2];
u32 * staticbufs = getThreadStaticBuffers();
saved_threadstorage[0] = staticbufs[0];
saved_threadstorage[1] = staticbufs[1];
cmdbuf[0x100>>2] = ((*optlen)<<14) | 2;
cmdbuf[0x104>>2] = (u32)optval;
staticbufs[0] = IPC_Desc_StaticBuffer(*optlen,0);
staticbufs[1] = (u32)optval;
ret = svcSendSyncRequest(SOCU_handle);
if(ret != 0) {
@ -33,8 +35,8 @@ int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optl
return ret;
}
cmdbuf[0x100>>2] = saved_threadstorage[0];
cmdbuf[0x104>>2] = saved_threadstorage[1];
staticbufs[0] = saved_threadstorage[0];
staticbufs[1] = saved_threadstorage[1];
ret = (int)cmdbuf[1];
if(ret == 0)

View File

@ -1,6 +1,7 @@
#include "soc_common.h"
#include <errno.h>
#include <sys/socket.h>
#include <3ds/ipc.h>
static int soc_open(struct _reent *r, void *fileStruct, const char *path, int flags, int mode);
static int soc_close(struct _reent *r, int fd);
@ -43,10 +44,10 @@ static Result socu_cmd1(Handle memhandle, u32 memsize)
Result ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00010044;
cmdbuf[0] = IPC_MakeHeader(0x1,1,4); // 0x10044
cmdbuf[1] = memsize;
cmdbuf[2] = 0x20;
cmdbuf[4] = 0;
cmdbuf[2] = IPC_Desc_CurProcessHandle();
cmdbuf[4] = IPC_Desc_SharedHandles(1);
cmdbuf[5] = memhandle;
ret = svcSendSyncRequest(SOCU_handle);
@ -111,7 +112,7 @@ Result SOC_Shutdown(void)
svcCloseHandle(socMemhandle);
socMemhandle = 0;
cmdbuf[0] = 0x00190000;
cmdbuf[0] = IPC_MakeHeader(0x19,0,0); // 0x190000
ret = svcSendSyncRequest(SOCU_handle);
@ -146,9 +147,9 @@ soc_close(struct _reent *r,
int ret = 0;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000B0042;
cmdbuf[0] = IPC_MakeHeader(0xB,1,2); // 0xB0042
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = 0x20;
cmdbuf[2] = IPC_Desc_CurProcessHandle();
ret = svcSendSyncRequest(SOCU_handle);
if(ret != 0) {

View File

@ -1,6 +1,7 @@
#include "soc_common.h"
#include <errno.h>
#include <sys/socket.h>
#include <3ds/ipc.h>
int listen(int sockfd, int max_connections)
{
@ -13,10 +14,10 @@ int listen(int sockfd, int max_connections)
return -1;
}
cmdbuf[0] = 0x00030082;
cmdbuf[0] = IPC_MakeHeader(0x3,2,2); // 0x30082
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = (u32)max_connections;
cmdbuf[3] = 0x20;
cmdbuf[3] = IPC_Desc_CurProcessHandle();
ret = svcSendSyncRequest(SOCU_handle);
if(ret != 0) {

View File

@ -3,6 +3,7 @@
#include <poll.h>
#include <stdlib.h>
#include <stdio.h>
#include <3ds/ipc.h>
int poll(struct pollfd *fds, nfds_t nfds, int timeout)
{
@ -35,18 +36,19 @@ int poll(struct pollfd *fds, nfds_t nfds, int timeout)
tmp_fds[i].revents = 0;
}
cmdbuf[0] = 0x00140084;
cmdbuf[0] = IPC_MakeHeader(0x14,2,4); // 0x140084
cmdbuf[1] = (u32)nfds;
cmdbuf[2] = (u32)timeout;
cmdbuf[3] = 0x20;
cmdbuf[5] = (size<<14) | 0x2802;
cmdbuf[3] = IPC_Desc_CurProcessHandle();
cmdbuf[5] = IPC_Desc_StaticBuffer(size,10);
cmdbuf[6] = (u32)tmp_fds;
saved_threadstorage[0] = cmdbuf[0x100>>2];
saved_threadstorage[1] = cmdbuf[0x104>>2];
u32 * staticbufs = getThreadStaticBuffers();
saved_threadstorage[0] = staticbufs[0];
saved_threadstorage[1] = staticbufs[1];
cmdbuf[0x100>>2] = (size<<14) | 2;
cmdbuf[0x104>>2] = (u32)tmp_fds;
staticbufs[0] = IPC_Desc_StaticBuffer(size,0);
staticbufs[1] = (u32)tmp_fds;
ret = svcSendSyncRequest(SOCU_handle);
if(ret != 0) {
@ -55,8 +57,8 @@ int poll(struct pollfd *fds, nfds_t nfds, int timeout)
return ret;
}
cmdbuf[0x100>>2] = saved_threadstorage[0];
cmdbuf[0x104>>2] = saved_threadstorage[1];
staticbufs[0] = saved_threadstorage[0];
staticbufs[1] = saved_threadstorage[1];
ret = (int)cmdbuf[1];
if(ret == 0)

View File

@ -1,6 +1,7 @@
#include "soc_common.h"
#include <errno.h>
#include <sys/socket.h>
#include <3ds/ipc.h>
ssize_t socuipc_cmd7(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
{
@ -15,20 +16,21 @@ ssize_t socuipc_cmd7(int sockfd, void *buf, size_t len, int flags, struct sockad
if(src_addr)
tmp_addrlen = 0x1c;
cmdbuf[0] = 0x00070104;
cmdbuf[0] = IPC_MakeHeader(0x7,4,4); // 0x70104
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = (u32)len;
cmdbuf[3] = (u32)flags;
cmdbuf[4] = (u32)tmp_addrlen;
cmdbuf[5] = 0x20;
cmdbuf[7] = (((u32)len)<<4) | 12;
cmdbuf[5] = IPC_Desc_CurProcessHandle();
cmdbuf[7] = IPC_Desc_Buffer(len,IPC_BUFFER_W);
cmdbuf[8] = (u32)buf;
saved_threadstorage[0] = cmdbuf[0x100>>2];
saved_threadstorage[1] = cmdbuf[0x104>>2];
u32 * staticbufs = getThreadStaticBuffers();
saved_threadstorage[0] = staticbufs[0];
saved_threadstorage[1] = staticbufs[1];
cmdbuf[0x100>>2] = (tmp_addrlen<<14) | 2;
cmdbuf[0x104>>2] = (u32)tmpaddr;
staticbufs[0] = IPC_Desc_StaticBuffer(tmp_addrlen,0);
staticbufs[1] = (u32)tmpaddr;
ret = svcSendSyncRequest(SOCU_handle);
if(ret != 0) {
@ -36,8 +38,8 @@ ssize_t socuipc_cmd7(int sockfd, void *buf, size_t len, int flags, struct sockad
return -1;
}
cmdbuf[0x100>>2] = saved_threadstorage[0];
cmdbuf[0x104>>2] = saved_threadstorage[1];
staticbufs[0] = saved_threadstorage[0];
staticbufs[1] = saved_threadstorage[1];
ret = (int)cmdbuf[1];
if(ret == 0)

View File

@ -1,6 +1,7 @@
#include "soc_common.h"
#include <errno.h>
#include <sys/socket.h>
#include <3ds/ipc.h>
ssize_t socuipc_cmd9(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
{
@ -27,15 +28,15 @@ ssize_t socuipc_cmd9(int sockfd, const void *buf, size_t len, int flags, const s
memcpy(&tmpaddr[2], &dest_addr->sa_data, tmp_addrlen-2);
}
cmdbuf[0] = 0x00090106;
cmdbuf[0] = IPC_MakeHeader(0x9,4,6); // 0x90106
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = (u32)len;
cmdbuf[3] = (u32)flags;
cmdbuf[4] = (u32)tmp_addrlen;
cmdbuf[5] = 0x20;
cmdbuf[7] = (tmp_addrlen<<14) | 0x402;
cmdbuf[5] = IPC_Desc_CurProcessHandle();
cmdbuf[7] = IPC_Desc_StaticBuffer(tmp_addrlen,1);
cmdbuf[8] = (u32)tmpaddr;
cmdbuf[9] = (((u32)len)<<4) | 10;
cmdbuf[9] = IPC_Desc_Buffer(len,IPC_BUFFER_R);
cmdbuf[10] = (u32)buf;
ret = svcSendSyncRequest(SOCU_handle);
@ -81,15 +82,15 @@ ssize_t socuipc_cmda(int sockfd, const void *buf, size_t len, int flags, const s
memcpy(&tmpaddr[2], &dest_addr->sa_data, tmp_addrlen-2);
}
cmdbuf[0] = 0x000A0106;
cmdbuf[0] = IPC_MakeHeader(0xA,4,6); // 0xA0106
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = (u32)len;
cmdbuf[3] = (u32)flags;
cmdbuf[4] = (u32)tmp_addrlen;
cmdbuf[5] = 0x20;
cmdbuf[7] = (((u32)len)<<14) | 0x802;
cmdbuf[5] = IPC_Desc_CurProcessHandle();
cmdbuf[7] = IPC_Desc_StaticBuffer(len,2);
cmdbuf[8] = (u32)buf;
cmdbuf[9] = (tmp_addrlen<<14) | 0x402;
cmdbuf[9] = IPC_Desc_StaticBuffer(tmp_addrlen,1);
cmdbuf[10] = (u32)tmpaddr;
ret = svcSendSyncRequest(SOCU_handle);

View File

@ -1,6 +1,7 @@
#include "soc_common.h"
#include <errno.h>
#include <sys/socket.h>
#include <3ds/ipc.h>
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen)
{
@ -13,13 +14,13 @@ int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t
return -1;
}
cmdbuf[0] = 0x00120104;
cmdbuf[0] = IPC_MakeHeader(0x12,4,4); // 0x120104
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = (u32)level;
cmdbuf[3] = (u32)optname;
cmdbuf[4] = (u32)optlen;
cmdbuf[5] = 0x20;
cmdbuf[7] = (optlen<<14) | 0x2402;
cmdbuf[5] = IPC_Desc_CurProcessHandle();
cmdbuf[7] = IPC_Desc_StaticBuffer(optlen,9);
cmdbuf[8] = (u32)optval;
ret = svcSendSyncRequest(SOCU_handle);

View File

@ -1,6 +1,7 @@
#include "soc_common.h"
#include <errno.h>
#include <sys/socket.h>
#include <3ds/ipc.h>
int shutdown(int sockfd, int shutdown_type)
{
@ -13,10 +14,10 @@ int shutdown(int sockfd, int shutdown_type)
return -1;
}
cmdbuf[0] = 0x000C0082;
cmdbuf[0] = IPC_MakeHeader(0xC,2,2); // 0xC0082
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = (u32)shutdown_type;
cmdbuf[3] = 0x20;
cmdbuf[3] = IPC_Desc_CurProcessHandle();
ret = svcSendSyncRequest(SOCU_handle);
if(ret != 0) {

View File

@ -1,6 +1,7 @@
#include "soc_common.h"
#include <errno.h>
#include <sys/socket.h>
#include <3ds/ipc.h>
int sockatmark(int sockfd)
{
@ -13,9 +14,9 @@ int sockatmark(int sockfd)
return -1;
}
cmdbuf[0] = 0x00150042;
cmdbuf[0] = IPC_MakeHeader(0x15,1,2); // 0x150042
cmdbuf[1] = (u32)sockfd;
cmdbuf[2] = 0x20;
cmdbuf[2] = IPC_Desc_CurProcessHandle();
ret = svcSendSyncRequest(SOCU_handle);
if(ret != 0) {

View File

@ -2,6 +2,7 @@
#include <errno.h>
#include <sys/iosupport.h>
#include <sys/socket.h>
#include <3ds/ipc.h>
int socket(int domain, int type, int protocol)
{
@ -10,11 +11,11 @@ int socket(int domain, int type, int protocol)
__handle *handle;
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000200C2;
cmdbuf[0] = IPC_MakeHeader(0x2,3,2); // 0x200C2
cmdbuf[1] = domain;
cmdbuf[2] = type;
cmdbuf[3] = protocol;
cmdbuf[4] = 0x20;
cmdbuf[4] = IPC_Desc_CurProcessHandle();
dev = FindDevice("soc:");
if(dev < 0) {

View File

@ -4,6 +4,7 @@
#include <3ds/srv.h>
#include <3ds/svc.h>
#include <3ds/types.h>
#include <3ds/ipc.h>
Handle y2rHandle = 0;
static bool initialized = false;
@ -51,7 +52,7 @@ Result Y2RU_SetInputFormat(Y2R_InputFormat format)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00010040;
cmdbuf[0] = IPC_MakeHeader(0x1,1,0); // 0x10040
cmdbuf[1] = format;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -62,7 +63,7 @@ Result Y2RU_SetOutputFormat(Y2R_OutputFormat format)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00030040;
cmdbuf[0] = IPC_MakeHeader(0x3,1,0); // 0x30040
cmdbuf[1] = format;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -73,7 +74,7 @@ Result Y2RU_SetRotation(Y2R_Rotation rotation)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00050040;
cmdbuf[0] = IPC_MakeHeader(0x5,1,0); // 0x50040
cmdbuf[1] = rotation;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -84,7 +85,7 @@ Result Y2RU_SetBlockAlignment(Y2R_BlockAlignment alignment)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00070040;
cmdbuf[0] = IPC_MakeHeader(0x7,1,0); // 0x70040
cmdbuf[1] = alignment;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -95,7 +96,7 @@ Result Y2RU_SetTransferEndInterrupt(bool should_interrupt)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000D0040;
cmdbuf[0] = IPC_MakeHeader(0xD,1,0); // 0xD0040
cmdbuf[1] = should_interrupt;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -112,7 +113,7 @@ Result Y2RU_GetTransferEndEvent(Handle* end_event)
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x000F0000;
cmdbuf[0] = IPC_MakeHeader(0xF,0,0); // 0xF0000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -124,12 +125,12 @@ Result Y2RU_SetSendingY(const void* src_buf, u32 image_size, s16 transfer_unit,
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00100102;
cmdbuf[0] = IPC_MakeHeader(0x10,4,2); // 0x100102
cmdbuf[1] = (u32)src_buf;
cmdbuf[2] = image_size;
cmdbuf[3] = transfer_unit;
cmdbuf[4] = transfer_gap;
cmdbuf[5] = 0;
cmdbuf[5] = IPC_Desc_SharedHandles(1);
cmdbuf[6] = CUR_PROCESS_HANDLE;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -140,12 +141,12 @@ Result Y2RU_SetSendingU(const void* src_buf, u32 image_size, s16 transfer_unit,
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00110102;
cmdbuf[0] = IPC_MakeHeader(0x11,4,2); // 0x110102
cmdbuf[1] = (u32)src_buf;
cmdbuf[2] = image_size;
cmdbuf[3] = transfer_unit;
cmdbuf[4] = transfer_gap;
cmdbuf[5] = 0;
cmdbuf[5] = IPC_Desc_SharedHandles(1);
cmdbuf[6] = CUR_PROCESS_HANDLE;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -156,12 +157,12 @@ Result Y2RU_SetSendingV(const void* src_buf, u32 image_size, s16 transfer_unit,
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00120102;
cmdbuf[0] = IPC_MakeHeader(0x12,4,2); // 0x120102
cmdbuf[1] = (u32)src_buf;
cmdbuf[2] = image_size;
cmdbuf[3] = transfer_unit;
cmdbuf[4] = transfer_gap;
cmdbuf[5] = 0;
cmdbuf[5] = IPC_Desc_SharedHandles(1);
cmdbuf[6] = CUR_PROCESS_HANDLE;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -172,12 +173,12 @@ Result Y2RU_SetSendingYUYV(const void* src_buf, u32 image_size, s16 transfer_uni
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00130102;
cmdbuf[0] = IPC_MakeHeader(0x13,4,2); // 0x130102
cmdbuf[1] = (u32)src_buf;
cmdbuf[2] = image_size;
cmdbuf[3] = transfer_unit;
cmdbuf[4] = transfer_gap;
cmdbuf[5] = 0;
cmdbuf[5] = IPC_Desc_SharedHandles(1);
cmdbuf[6] = CUR_PROCESS_HANDLE;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -188,7 +189,7 @@ Result Y2RU_IsDoneSendingYUYV(bool* is_done)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00140000;
cmdbuf[0] = IPC_MakeHeader(0x14,0,0); // 0x140000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
*is_done = cmdbuf[2] & 0xFF;
@ -199,7 +200,7 @@ Result Y2RU_IsDoneSendingY(bool* is_done)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00150000;
cmdbuf[0] = IPC_MakeHeader(0x15,0,0); // 0x150000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
*is_done = cmdbuf[2] & 0xFF;
@ -210,7 +211,7 @@ Result Y2RU_IsDoneSendingU(bool* is_done)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00160000;
cmdbuf[0] = IPC_MakeHeader(0x16,0,0); // 0x160000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
*is_done = cmdbuf[2] & 0xFF;
@ -221,7 +222,7 @@ Result Y2RU_IsDoneSendingV(bool* is_done)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00170000;
cmdbuf[0] = IPC_MakeHeader(0x17,0,0); // 0x170000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
*is_done = cmdbuf[2] & 0xFF;
@ -232,12 +233,12 @@ Result Y2RU_SetReceiving(void* dst_buf, u32 image_size, s16 transfer_unit, s16 t
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00180102;
cmdbuf[0] = IPC_MakeHeader(0x18,4,2); // 0x180102
cmdbuf[1] = (u32)dst_buf;
cmdbuf[2] = image_size;
cmdbuf[3] = transfer_unit;
cmdbuf[4] = transfer_gap;
cmdbuf[5] = 0;
cmdbuf[5] = IPC_Desc_SharedHandles(1);
cmdbuf[6] = CUR_PROCESS_HANDLE;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -248,7 +249,7 @@ Result Y2RU_IsDoneReceiving(bool* is_done)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00190000;
cmdbuf[0] = IPC_MakeHeader(0x19,0,0); // 0x190000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
*is_done = cmdbuf[2] & 0xFF;
@ -259,7 +260,7 @@ Result Y2RU_SetInputLineWidth(u16 line_width)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x001A0040;
cmdbuf[0] = IPC_MakeHeader(0x1A,1,0); // 0x1A0040
cmdbuf[1] = line_width;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -270,7 +271,7 @@ Result Y2RU_SetInputLines(u16 num_lines)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x001C0040;
cmdbuf[0] = IPC_MakeHeader(0x1C,1,0); // 0x1C0040
cmdbuf[1] = num_lines;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -281,7 +282,7 @@ Result Y2RU_SetCoefficients(const Y2R_ColorCoefficients* coefficients)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x001E0100;
cmdbuf[0] = IPC_MakeHeader(0x1E,4,0); // 0x1E0100
memcpy(&cmdbuf[1], coefficients, sizeof(Y2R_ColorCoefficients));
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -292,7 +293,7 @@ Result Y2RU_SetStandardCoefficient(Y2R_StandardCoefficient coefficient)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00200040;
cmdbuf[0] = IPC_MakeHeader(0x20,1,0); // 0x200040
cmdbuf[1] = coefficient;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -303,7 +304,7 @@ Result Y2RU_SetAlpha(u16 alpha)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00220040;
cmdbuf[0] = IPC_MakeHeader(0x22,1,0); // 0x220040
cmdbuf[1] = alpha;
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -314,7 +315,7 @@ Result Y2RU_SetUnknownParams(const u16 params[16])
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00240200;
cmdbuf[0] = IPC_MakeHeader(0x24,8,0); // 0x240200
memcpy(&cmdbuf[1], params, sizeof(u16) * 16);
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -325,7 +326,7 @@ Result Y2RU_StartConversion(void)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00260000;
cmdbuf[0] = IPC_MakeHeader(0x26,0,0); // 0x260000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
return cmdbuf[1];
@ -335,7 +336,7 @@ Result Y2RU_StopConversion(void)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00270000;
cmdbuf[0] = IPC_MakeHeader(0x27,0,0); // 0x270000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
return cmdbuf[1];
@ -345,7 +346,7 @@ Result Y2RU_IsBusyConversion(bool* is_busy)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x00280000;
cmdbuf[0] = IPC_MakeHeader(0x28,0,0); // 0x280000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
*is_busy = cmdbuf[2] & 0xFF;
@ -356,7 +357,7 @@ Result Y2RU_SetConversionParams(const Y2R_ConversionParams* params)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x002901C0;
cmdbuf[0] = IPC_MakeHeader(0x29,7,0); // 0x2901C0
memcpy(&cmdbuf[1], params, sizeof(Y2R_ConversionParams));
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
@ -367,7 +368,7 @@ Result Y2RU_PingProcess(u8* ping)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x002A0000;
cmdbuf[0] = IPC_MakeHeader(0x2A,0,0); // 0x2A0000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
*ping = (u8)cmdbuf[2];
@ -378,7 +379,7 @@ Result Y2RU_DriverInitialize(void)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x002B0000;
cmdbuf[0] = IPC_MakeHeader(0x2B,0,0); // 0x2B0000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
return cmdbuf[1];
@ -388,7 +389,7 @@ Result Y2RU_DriverFinalize(void)
{
Result ret = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x002C0000;
cmdbuf[0] = IPC_MakeHeader(0x2C,0,0); // 0x2C0000
if ((ret = svcSendSyncRequest(y2rHandle)) != 0) return ret;
return cmdbuf[1];

View File

@ -6,6 +6,7 @@
#include <3ds/types.h>
#include <3ds/srv.h>
#include <3ds/svc.h>
#include <3ds/ipc.h>
/*
@ -108,8 +109,8 @@ Result srvRegisterClient(void)
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x10002;
cmdbuf[1] = 0x20;
cmdbuf[0] = IPC_MakeHeader(0x1,0,2); // 0x10002
cmdbuf[1] = IPC_Desc_CurProcessHandle();
if((rc = svcSendSyncRequest(g_srv_handle)))return rc;
@ -121,8 +122,8 @@ Result srvGetServiceHandleDirect(Handle* out, const char* name)
Result rc = 0;
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x50100;
strcpy((char*) &cmdbuf[1], name);
cmdbuf[0] = IPC_MakeHeader(0x5,4,0); // 0x50100
strncpy((char*) &cmdbuf[1], name,2);
cmdbuf[3] = strlen(name);
cmdbuf[4] = 0x0;
@ -149,8 +150,8 @@ Result srvGetServiceHandle(Handle* out, const char* name)
Result srvRegisterService(Handle* out, const char* name, int maxSessions)
{
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x30100;
strcpy((char*) &cmdbuf[1], name);
cmdbuf[0] = IPC_MakeHeader(0x3,4,0); // 0x30100
strncpy((char*) &cmdbuf[1], name,2);
cmdbuf[3] = strlen(name);
cmdbuf[4] = maxSessions;
@ -164,8 +165,8 @@ Result srvRegisterService(Handle* out, const char* name, int maxSessions)
Result srvUnregisterService(const char* name)
{
u32* cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x400C0;
strcpy((char*) &cmdbuf[1], name);
cmdbuf[0] = IPC_MakeHeader(0x4,3,0); // 0x400C0
strncpy((char*) &cmdbuf[1], name,2);
cmdbuf[3] = strlen(name);
Result rc;
@ -195,10 +196,10 @@ Result srvRegisterProcess(u32 procid, u32 count, void *serviceaccesscontrol)
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x04030082; // <7.x
cmdbuf[0] = IPC_MakeHeader(0x403,2,2); // 0x4030082 // <7.x
cmdbuf[1] = procid;
cmdbuf[2] = count;
cmdbuf[3] = (count << 16) | 2;
cmdbuf[3] = IPC_Desc_StaticBuffer(count*4,0);
cmdbuf[4] = (u32)serviceaccesscontrol;
if((rc = svcSendSyncRequest(g_srv_handle))) return rc;
@ -212,7 +213,7 @@ Result srvUnregisterProcess(u32 procid)
u32 *cmdbuf = getThreadCommandBuffer();
cmdbuf[0] = 0x04040040; // <7.x
cmdbuf[0] = IPC_MakeHeader(0x404,1,0); // 0x4040040 // <7.x
cmdbuf[1] = procid;
if((rc = svcSendSyncRequest(g_srv_handle))) return rc;