From: fincs Date: Sat, 3 Oct 2015 10:39:09 +0000 (+0200) Subject: Merge branch 'master' into great-refactor X-Git-Tag: v1.0.0~97 X-Git-Url: https://chaos.moe/g/?a=commitdiff_plain;h=8912773f212428587487f7e8d34b9498af13f6a2;p=corbenik%2Fctrulib.git Merge branch 'master' into great-refactor Conflicts: libctru/include/3ds/services/apt.h libctru/include/3ds/services/fs.h libctru/source/services/apt.c --- 8912773f212428587487f7e8d34b9498af13f6a2 diff --cc libctru/include/3ds/services/apt.h index 74fda48,4378299..636ecdb --- a/libctru/include/3ds/services/apt.h +++ b/libctru/include/3ds/services/apt.h @@@ -91,40 -91,41 +91,41 @@@ bool aptMainLoop(void); // Use like thi void aptHook(aptHookCookie* cookie, aptHookFn callback, void* param); void aptUnhook(aptHookCookie* cookie); -Result APT_GetLockHandle(Handle* handle, u16 flags, Handle* lockHandle); -Result APT_Initialize(Handle* handle, NS_APPID appId, Handle* eventHandle1, Handle* eventHandle2); -Result APT_Finalize(Handle* handle, NS_APPID appId); -Result APT_HardwareResetAsync(Handle* handle); -Result APT_Enable(Handle* handle, u32 a); -Result APT_GetAppletManInfo(Handle* handle, u8 inval, u8 *outval8, u32 *outval32, NS_APPID *menu_appid, NS_APPID *active_appid); -Result APT_GetAppletInfo(Handle* handle, NS_APPID appID, u64* pProgramID, u8* pMediaType, u8* pRegistered, u8* pLoadState, u32* pAttributes); -Result APT_GetAppletProgramInfo(Handle* handle, u32 id, u32 flags, u16 *titleversion); -Result APT_GetProgramID(Handle* handle, u64* pProgramID); -Result APT_PrepareToJumpToHomeMenu(Handle* handle); -Result APT_JumpToHomeMenu(Handle* handle, u32 a, u32 b, u32 c); -Result APT_PrepareToJumpToApplication(Handle* handle, u32 a); -Result APT_JumpToApplication(Handle* handle, u32 a, u32 b, u32 c); -Result APT_IsRegistered(Handle* handle, NS_APPID appID, u8* out); -Result APT_InquireNotification(Handle* handle, u32 appID, u8* signalType); -Result APT_NotifyToWait(Handle* handle, NS_APPID appID); -Result APT_AppletUtility(Handle* handle, u32* out, u32 a, u32 size1, u8* buf1, u32 size2, u8* buf2); -Result APT_GlanceParameter(Handle* handle, NS_APPID appID, u32 bufferSize, u32* buffer, u32* actualSize, u8* signalType); -Result APT_ReceiveParameter(Handle* handle, NS_APPID appID, u32 bufferSize, u32* buffer, u32* actualSize, u8* signalType); -Result APT_SendParameter(Handle* handle, NS_APPID src_appID, NS_APPID dst_appID, u32 bufferSize, u32* buffer, Handle paramhandle, u8 signalType); -Result APT_SendCaptureBufferInfo(Handle* handle, u32 bufferSize, u32* buffer); -Result APT_ReplySleepQuery(Handle* handle, NS_APPID appID, u32 a); -Result APT_ReplySleepNotificationComplete(Handle* handle, NS_APPID appID); -Result APT_PrepareToCloseApplication(Handle* handle, u8 a); -Result APT_CloseApplication(Handle* handle, u32 a, u32 b, u32 c); -Result APT_SetAppCpuTimeLimit(Handle* handle, u32 percent); -Result APT_GetAppCpuTimeLimit(Handle* handle, u32 *percent); -Result APT_CheckNew3DS_Application(Handle* handle, u8 *out);// Note: this function is unreliable, see: http://3dbrew.org/wiki/APT:PrepareToStartApplication -Result APT_CheckNew3DS_System(Handle* handle, u8 *out); -Result APT_CheckNew3DS(Handle* handle, u8 *out); -Result APT_PrepareToDoAppJump(Handle* handle, u8 flags, u64 programID, u8 mediatype); -Result APT_DoAppJump(Handle* handle, u32 NSbuf0Size, u32 NSbuf1Size, u8 *NSbuf0Ptr, u8 *NSbuf1Ptr); -Result APT_PrepareToStartLibraryApplet(Handle* handle, NS_APPID appID); -Result APT_StartLibraryApplet(Handle* handle, NS_APPID appID, Handle inhandle, u32 *parambuf, u32 parambufsize); +Result APT_GetLockHandle(u16 flags, Handle* lockHandle); +Result APT_Initialize(NS_APPID appId, Handle* eventHandle1, Handle* eventHandle2); +Result APT_Finalize(NS_APPID appId); +Result APT_HardwareResetAsync(void); +Result APT_Enable(u32 a); +Result APT_GetAppletManInfo(u8 inval, u8 *outval8, u32 *outval32, NS_APPID *menu_appid, NS_APPID *active_appid); +Result APT_GetAppletInfo(NS_APPID appID, u64* pProgramID, u8* pMediaType, u8* pRegistered, u8* pLoadState, u32* pAttributes); +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_PrepareToJumpToApplication(u32 a); +Result APT_JumpToApplication(u32 a, u32 b, u32 c); +Result APT_IsRegistered(NS_APPID appID, u8* out); +Result APT_InquireNotification(u32 appID, u8* signalType); +Result APT_NotifyToWait(NS_APPID appID); +Result APT_AppletUtility(u32* out, u32 a, u32 size1, u8* buf1, u32 size2, u8* buf2); +Result APT_GlanceParameter(NS_APPID appID, u32 bufferSize, u32* buffer, u32* actualSize, u8* signalType); +Result APT_ReceiveParameter(NS_APPID appID, u32 bufferSize, u32* buffer, u32* actualSize, u8* signalType); +Result APT_SendParameter(NS_APPID src_appID, NS_APPID dst_appID, u32 bufferSize, u32* buffer, Handle paramhandle, u8 signalType); +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_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 +Result APT_CheckNew3DS_System(u8 *out); +Result APT_CheckNew3DS(u8 *out); +Result APT_PrepareToDoAppJump(u8 flags, u64 programID, u8 mediatype); +Result APT_DoAppJump(u32 NSbuf0Size, u32 NSbuf1Size, u8 *NSbuf0Ptr, u8 *NSbuf1Ptr); +Result APT_PrepareToStartLibraryApplet(NS_APPID appID); +Result APT_StartLibraryApplet(NS_APPID appID, Handle inhandle, u32 *parambuf, u32 parambufsize); Result APT_LaunchLibraryApplet(NS_APPID appID, Handle inhandle, u32 *parambuf, u32 parambufsize);//This should be used for launching library applets, this uses the above APT_StartLibraryApplet/APT_PrepareToStartLibraryApplet funcs + apt*Session(). parambuf is used for APT params input, when the applet closes the output param block is copied here. This is not usable from the homebrew launcher. This is broken: when the applet does get launched at all, the applet process doesn't actually get terminated when the applet gets closed. -Result APT_PrepareToStartSystemApplet(Handle* handle, NS_APPID appID); -Result APT_StartSystemApplet(Handle* handle, NS_APPID appID, u32 bufSize, Handle applHandle, u8 *buf); +Result APT_PrepareToStartSystemApplet(NS_APPID appID); +Result APT_StartSystemApplet(NS_APPID appID, u32 bufSize, Handle applHandle, u8 *buf); diff --cc libctru/include/3ds/services/fs.h index d85f75f,acac55a..a6e1f9b --- a/libctru/include/3ds/services/fs.h +++ b/libctru/include/3ds/services/fs.h @@@ -133,23 -133,24 +133,24 @@@ Handle *fsGetSessionHandle(void) FS_path FS_makePath(FS_pathType type, const char *path); -Result FSUSER_Initialize(Handle* handle); -Result FSUSER_OpenArchive(Handle* handle, FS_archive* archive); -Result FSUSER_OpenDirectory(Handle* handle, Handle* out, FS_archive archive, FS_path dirLowPath); -Result FSUSER_OpenFile(Handle* handle, Handle* out, FS_archive archive, FS_path fileLowPath, u32 openflags, u32 attributes); -Result FSUSER_OpenFileDirectly(Handle* handle, Handle* out, FS_archive archive, FS_path fileLowPath, u32 openflags, u32 attributes); -Result FSUSER_CloseArchive(Handle* handle, FS_archive* archive); -Result FSUSER_CreateFile(Handle* handle, FS_archive archive, FS_path fileLowPath, u32 fileSize); -Result FSUSER_CreateDirectory(Handle* handle, FS_archive archive, FS_path dirLowPath); -Result FSUSER_DeleteFile(Handle *handle, FS_archive archive, FS_path fileLowPath); -Result FSUSER_DeleteDirectory(Handle *handle, FS_archive archive, FS_path dirLowPath); -Result FSUSER_DeleteDirectoryRecursively(Handle *handle, FS_archive archive, FS_path dirLowPath); -Result FSUSER_RenameFile(Handle *handle, FS_archive srcArchive, FS_path srcFileLowPath, FS_archive destArchive, FS_path destFileLowPath); -Result FSUSER_RenameDirectory(Handle *handle, FS_archive srcArchive, FS_path srcDirLowPath, FS_archive destArchive, FS_path destDirLowPath); -Result FSUSER_GetSdmcArchiveResource(Handle *handle, u32 *sectorSize, u32 *clusterSize, u32 *numClusters, u32 *freeClusters); -Result FSUSER_GetNandArchiveResource(Handle *handle, u32 *sectorSize, u32 *clusterSize, u32 *numClusters, u32 *freeClusters); -Result FSUSER_IsSdmcDetected(Handle *handle, u8 *detected); -Result FSUSER_IsSdmcWritable(Handle *handle, u8 *writable); -Result FSUSER_GetMediaType(Handle *handle, u8* mediatype); +Result FSUSER_Initialize(Handle handle); +Result FSUSER_OpenArchive(FS_archive* archive); +Result FSUSER_OpenDirectory(Handle* out, FS_archive archive, FS_path dirLowPath); +Result FSUSER_OpenFile(Handle* out, FS_archive archive, FS_path fileLowPath, u32 openflags, u32 attributes); +Result FSUSER_OpenFileDirectly(Handle* out, FS_archive archive, FS_path fileLowPath, u32 openflags, u32 attributes); +Result FSUSER_CloseArchive(FS_archive* archive); +Result FSUSER_CreateFile(FS_archive archive, FS_path fileLowPath, u32 fileSize); +Result FSUSER_CreateDirectory(FS_archive archive, FS_path dirLowPath); +Result FSUSER_DeleteFile(FS_archive archive, FS_path fileLowPath); +Result FSUSER_DeleteDirectory(FS_archive archive, FS_path dirLowPath); +Result FSUSER_DeleteDirectoryRecursively(FS_archive archive, FS_path dirLowPath); +Result FSUSER_RenameFile(FS_archive srcArchive, FS_path srcFileLowPath, FS_archive destArchive, FS_path destFileLowPath); +Result FSUSER_RenameDirectory(FS_archive srcArchive, FS_path srcDirLowPath, FS_archive destArchive, FS_path destDirLowPath); +Result FSUSER_GetSdmcArchiveResource(u32 *sectorSize, u32 *clusterSize, u32 *numClusters, u32 *freeClusters); +Result FSUSER_GetNandArchiveResource(u32 *sectorSize, u32 *clusterSize, u32 *numClusters, u32 *freeClusters); +Result FSUSER_IsSdmcDetected(u8 *detected); +Result FSUSER_IsSdmcWritable(u8 *writable); ++Result FSUSER_GetMediaType(u8* mediatype); Result FSFILE_Close(Handle handle); Result FSFILE_Read(Handle handle, u32 *bytesRead, u64 offset, void *buffer, u32 size); diff --cc libctru/source/services/apt.c index e5260f8,95283bd..90cd6af --- a/libctru/source/services/apt.c +++ b/libctru/source/services/apt.c @@@ -825,8 -833,30 +825,27 @@@ Result APT_GetAppletProgramInfo(u32 id return cmdbuf[1]; } -Result APT_GetProgramID(Handle* handle, u64* pProgramID) ++Result APT_GetProgramID(u64* pProgramID) + { - if(!handle)handle=&aptuHandle; - + u32* cmdbuf=getThreadCommandBuffer(); + cmdbuf[0] = 0x00580002; //request header code + cmdbuf[1] = 0x20; + + Result ret=0; - if((ret=svcSendSyncRequest(*handle)))return ret; ++ if((ret=svcSendSyncRequest(aptuHandle)))return ret; + + if(ret==0)ret = cmdbuf[1]; + + if(pProgramID) + { + if(ret==0) *pProgramID=((u64)cmdbuf[3]<<32)|cmdbuf[2]; + } + + return ret; + } + -Result APT_IsRegistered(Handle* handle, NS_APPID appID, u8* out) +Result APT_IsRegistered(NS_APPID appID, u8* out) { - if(!handle)handle=&aptuHandle; u32* cmdbuf=getThreadCommandBuffer(); cmdbuf[0]=0x90040; //request header code cmdbuf[1]=appID; diff --cc libctru/source/services/fs.c index 0bbdd7a,04f93ad..21d42dd --- a/libctru/source/services/fs.c +++ b/libctru/source/services/fs.c @@@ -966,8 -1051,52 +966,46 @@@ FSUSER_IsSdmcDetected(u8 *detected return cmdbuf[1]; } + /*! Get curent process mediatype + * - * @param[in] handle fs:USER handle + * @param[out] mediatype Output curent process mediatype + * + * @returns error + * + * @internal + * + * #### Request + * + * Index Word | Description + * -----------|------------------------- + * 0 | Header code [0x08680000] + * + * #### Response + * + * Index Word | Description + * -----------|------------------------- + * 0 | Header code + * 1 | Result code + */ + Result -FSUSER_GetMediaType(Handle *handle, - u8* mediatype) ++FSUSER_GetMediaType(u8* mediatype) + { - if(!handle) - handle = &fsuHandle; - + u32* cmdbuf = getThreadCommandBuffer(); + + cmdbuf[0] = 0x08680000; + + Result ret = 0; - if((ret = svcSendSyncRequest(*handle))) ++ if((ret = svcSendSyncRequest(fsuHandle))) + return ret; + + if(mediatype) + *mediatype = cmdbuf[2]; + + return cmdbuf[1]; + } + /*! Check if SD card is writable * - * @param[in] handle fs:USER handle * @param[out] writable Output writable state * * @returns error