diff --git a/libctru/include/3ds/services/apt.h b/libctru/include/3ds/services/apt.h index 636ecdb..8839d3e 100644 --- a/libctru/include/3ds/services/apt.h +++ b/libctru/include/3ds/services/apt.h @@ -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 diff --git a/libctru/source/services/ac.c b/libctru/source/services/ac.c index 888609a..7c99ad2 100644 --- a/libctru/source/services/ac.c +++ b/libctru/source/services/ac.c @@ -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; diff --git a/libctru/source/services/am.c b/libctru/source/services/am.c index b010273..44e2db4 100644 --- a/libctru/source/services/am.c +++ b/libctru/source/services/am.c @@ -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; diff --git a/libctru/source/services/apt.c b/libctru/source/services/apt.c index 90cd6af..6e7e136 100644 --- a/libctru/source/services/apt.c +++ b/libctru/source/services/apt.c @@ -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; diff --git a/libctru/source/services/cfgnor.c b/libctru/source/services/cfgnor.c index e467655..c21c830 100644 --- a/libctru/source/services/cfgnor.c +++ b/libctru/source/services/cfgnor.c @@ -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; diff --git a/libctru/source/services/cfgu.c b/libctru/source/services/cfgu.c index 6b89bba..1a9c78f 100644 --- a/libctru/source/services/cfgu.c +++ b/libctru/source/services/cfgu.c @@ -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; diff --git a/libctru/source/services/csnd.c b/libctru/source/services/csnd.c index d034237..43148bc 100644 --- a/libctru/source/services/csnd.c +++ b/libctru/source/services/csnd.c @@ -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; diff --git a/libctru/source/services/fs.c b/libctru/source/services/fs.c index 21d42dd..e9c6fa6 100644 --- a/libctru/source/services/fs.c +++ b/libctru/source/services/fs.c @@ -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))) diff --git a/libctru/source/services/hb.c b/libctru/source/services/hb.c index 7ef8f1e..6c1efc2 100644 --- a/libctru/source/services/hb.c +++ b/libctru/source/services/hb.c @@ -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; diff --git a/libctru/source/services/hid.c b/libctru/source/services/hid.c index 6de81b8..9e8918a 100644 --- a/libctru/source/services/hid.c +++ b/libctru/source/services/hid.c @@ -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; diff --git a/libctru/source/services/httpc.c b/libctru/source/services/httpc.c index 6bf6221..0179bd9 100644 --- a/libctru/source/services/httpc.c +++ b/libctru/source/services/httpc.c @@ -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; diff --git a/libctru/source/services/ir.c b/libctru/source/services/ir.c index 65eef42..b883fcb 100644 --- a/libctru/source/services/ir.c +++ b/libctru/source/services/ir.c @@ -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]; diff --git a/libctru/source/services/irrst.c b/libctru/source/services/irrst.c index dc3e179..b7bea6e 100644 --- a/libctru/source/services/irrst.c +++ b/libctru/source/services/irrst.c @@ -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; diff --git a/libctru/source/services/mic.c b/libctru/source/services/mic.c index 33909d0..1743280 100644 --- a/libctru/source/services/mic.c +++ b/libctru/source/services/mic.c @@ -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; diff --git a/libctru/source/services/mvd.c b/libctru/source/services/mvd.c index e85317b..fdad9c1 100644 --- a/libctru/source/services/mvd.c +++ b/libctru/source/services/mvd.c @@ -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; diff --git a/libctru/source/services/news.c b/libctru/source/services/news.c index b206c83..75b415d 100644 --- a/libctru/source/services/news.c +++ b/libctru/source/services/news.c @@ -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; diff --git a/libctru/source/services/ns.c b/libctru/source/services/ns.c index 0d8f999..84501f2 100644 --- a/libctru/source/services/ns.c +++ b/libctru/source/services/ns.c @@ -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; diff --git a/libctru/source/services/pm.c b/libctru/source/services/pm.c index 26a03e2..a21de43 100644 --- a/libctru/source/services/pm.c +++ b/libctru/source/services/pm.c @@ -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; diff --git a/libctru/source/services/ps.c b/libctru/source/services/ps.c index 4f318d6..482fd4a 100644 --- a/libctru/source/services/ps.c +++ b/libctru/source/services/ps.c @@ -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; diff --git a/libctru/source/services/ptm.c b/libctru/source/services/ptm.c index dc1dd2a..96de48a 100644 --- a/libctru/source/services/ptm.c +++ b/libctru/source/services/ptm.c @@ -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; diff --git a/libctru/source/services/qtm.c b/libctru/source/services/qtm.c index 36d06f7..3d8e4c0 100644 --- a/libctru/source/services/qtm.c +++ b/libctru/source/services/qtm.c @@ -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; diff --git a/libctru/source/services/soc/soc_accept.c b/libctru/source/services/soc/soc_accept.c index 71ce790..a5a39e3 100644 --- a/libctru/source/services/soc/soc_accept.c +++ b/libctru/source/services/soc/soc_accept.c @@ -1,6 +1,7 @@ #include "soc_common.h" #include #include +#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) diff --git a/libctru/source/services/soc/soc_bind.c b/libctru/source/services/soc/soc_bind.c index 610cdf6..b452992 100644 --- a/libctru/source/services/soc/soc_bind.c +++ b/libctru/source/services/soc/soc_bind.c @@ -1,6 +1,7 @@ #include "soc_common.h" #include #include +#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); diff --git a/libctru/source/services/soc/soc_connect.c b/libctru/source/services/soc/soc_connect.c index 4cab7cc..5778858 100644 --- a/libctru/source/services/soc/soc_connect.c +++ b/libctru/source/services/soc/soc_connect.c @@ -1,6 +1,7 @@ #include "soc_common.h" #include #include +#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); diff --git a/libctru/source/services/soc/soc_fcntl.c b/libctru/source/services/soc/soc_fcntl.c index f14a0e0..824fea0 100644 --- a/libctru/source/services/soc/soc_fcntl.c +++ b/libctru/source/services/soc/soc_fcntl.c @@ -2,6 +2,7 @@ #include #include #include +#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) { diff --git a/libctru/source/services/soc/soc_gethostbyname.c b/libctru/source/services/soc/soc_gethostbyname.c index 2121c3b..50c44aa 100644 --- a/libctru/source/services/soc/soc_gethostbyname.c +++ b/libctru/source/services/soc/soc_gethostbyname.c @@ -1,5 +1,6 @@ #include "soc_common.h" #include +#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) diff --git a/libctru/source/services/soc/soc_gethostid.c b/libctru/source/services/soc/soc_gethostid.c index 7a254aa..ba4fe4f 100644 --- a/libctru/source/services/soc/soc_gethostid.c +++ b/libctru/source/services/soc/soc_gethostid.c @@ -1,12 +1,13 @@ #include "soc_common.h" #include +#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) { diff --git a/libctru/source/services/soc/soc_getpeername.c b/libctru/source/services/soc/soc_getpeername.c index 977b14b..b0aedab 100644 --- a/libctru/source/services/soc/soc_getpeername.c +++ b/libctru/source/services/soc/soc_getpeername.c @@ -1,6 +1,7 @@ #include "soc_common.h" #include #include +#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) diff --git a/libctru/source/services/soc/soc_getsockname.c b/libctru/source/services/soc/soc_getsockname.c index 2fd16b3..9b9f0c3 100644 --- a/libctru/source/services/soc/soc_getsockname.c +++ b/libctru/source/services/soc/soc_getsockname.c @@ -1,6 +1,7 @@ #include "soc_common.h" #include #include +#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) diff --git a/libctru/source/services/soc/soc_getsockopt.c b/libctru/source/services/soc/soc_getsockopt.c index 8b48994..52d0f6e 100644 --- a/libctru/source/services/soc/soc_getsockopt.c +++ b/libctru/source/services/soc/soc_getsockopt.c @@ -1,6 +1,7 @@ #include "soc_common.h" #include #include +#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) diff --git a/libctru/source/services/soc/soc_init.c b/libctru/source/services/soc/soc_init.c index 3b84b65..e6263d7 100644 --- a/libctru/source/services/soc/soc_init.c +++ b/libctru/source/services/soc/soc_init.c @@ -1,6 +1,7 @@ #include "soc_common.h" #include #include +#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) { diff --git a/libctru/source/services/soc/soc_listen.c b/libctru/source/services/soc/soc_listen.c index 53257d2..542fa02 100644 --- a/libctru/source/services/soc/soc_listen.c +++ b/libctru/source/services/soc/soc_listen.c @@ -1,6 +1,7 @@ #include "soc_common.h" #include #include +#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) { diff --git a/libctru/source/services/soc/soc_poll.c b/libctru/source/services/soc/soc_poll.c index 324612c..2d6f3bc 100644 --- a/libctru/source/services/soc/soc_poll.c +++ b/libctru/source/services/soc/soc_poll.c @@ -3,6 +3,7 @@ #include #include #include +#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) diff --git a/libctru/source/services/soc/soc_recvfrom.c b/libctru/source/services/soc/soc_recvfrom.c index f9b206a..03365f4 100644 --- a/libctru/source/services/soc/soc_recvfrom.c +++ b/libctru/source/services/soc/soc_recvfrom.c @@ -1,6 +1,7 @@ #include "soc_common.h" #include #include +#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) diff --git a/libctru/source/services/soc/soc_sendto.c b/libctru/source/services/soc/soc_sendto.c index 4b84749..5c0f3a5 100644 --- a/libctru/source/services/soc/soc_sendto.c +++ b/libctru/source/services/soc/soc_sendto.c @@ -1,6 +1,7 @@ #include "soc_common.h" #include #include +#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); diff --git a/libctru/source/services/soc/soc_setsockopt.c b/libctru/source/services/soc/soc_setsockopt.c index 600d8cf..b2386d2 100644 --- a/libctru/source/services/soc/soc_setsockopt.c +++ b/libctru/source/services/soc/soc_setsockopt.c @@ -1,6 +1,7 @@ #include "soc_common.h" #include #include +#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); diff --git a/libctru/source/services/soc/soc_shutdown.c b/libctru/source/services/soc/soc_shutdown.c index 89b2db6..0af20a8 100644 --- a/libctru/source/services/soc/soc_shutdown.c +++ b/libctru/source/services/soc/soc_shutdown.c @@ -1,6 +1,7 @@ #include "soc_common.h" #include #include +#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) { diff --git a/libctru/source/services/soc/soc_sockatmark.c b/libctru/source/services/soc/soc_sockatmark.c index f774389..ea44543 100644 --- a/libctru/source/services/soc/soc_sockatmark.c +++ b/libctru/source/services/soc/soc_sockatmark.c @@ -1,6 +1,7 @@ #include "soc_common.h" #include #include +#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) { diff --git a/libctru/source/services/soc/soc_socket.c b/libctru/source/services/soc/soc_socket.c index bf02700..53b7aa2 100644 --- a/libctru/source/services/soc/soc_socket.c +++ b/libctru/source/services/soc/soc_socket.c @@ -2,6 +2,7 @@ #include #include #include +#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) { diff --git a/libctru/source/services/y2r.c b/libctru/source/services/y2r.c index d29b38a..af2ae0e 100644 --- a/libctru/source/services/y2r.c +++ b/libctru/source/services/y2r.c @@ -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]; diff --git a/libctru/source/srv.c b/libctru/source/srv.c index b67cbfe..1a9bfdd 100644 --- a/libctru/source/srv.c +++ b/libctru/source/srv.c @@ -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;