]> Chaos Git - corbenik/ctrulib.git/commitdiff
APT WORKAROUND (update 3dsx_crt0.s to https://gist.github.com/smealum/305802b2b9bf4c8...
authorsmea <smealum@gmail.com>
Mon, 25 Aug 2014 06:25:54 +0000 (23:25 -0700)
committersmea <smealum@gmail.com>
Mon, 25 Aug 2014 06:25:54 +0000 (23:25 -0700)
libctru/include/3ds/APT.h
libctru/source/services/apt.c

index 3a42e9fc2084e8230a1f4bcb263265ca7134efd1..aae153cf30a7e19514dd64f6bdba2e2bbe4e446b 100644 (file)
@@ -1,6 +1,9 @@
 #ifndef APT_H
 #define APT_H
 
+// TODO : find a better place to put this
+#define RUNFLAG_APTWORKAROUND (BIT(0))
+
 typedef enum{
        APPID_HOMEMENU = 0x101, // Home Menu
        APPID_CAMERA = 0x110, // Camera applet
@@ -35,7 +38,7 @@ enum {
 
 extern Handle aptEvents[3];
 
-Result aptInit(NS_APPID appID);
+Result aptInit();
 void aptExit();
 void aptOpenSession();
 void aptCloseSession();
index 786fb68c9b15be73708a2cb970b10f86cef2bae6..80b975b13209955bf310210f0efd50ad79683d0b 100644 (file)
 
 #define APT_HANDLER_STACKSIZE (0x1000)
 
+//TODO : better place to put this ?
+extern u32 __apt_appid;
+extern u32 __system_runflags;
+
 NS_APPID currentAppId;
 
 Handle aptLockHandle;
@@ -292,7 +296,7 @@ void aptEventHandler(u32 arg)
        svcExitThread();
 }
 
-Result aptInit(NS_APPID appID)
+Result aptInit(void)
 {
        Result ret=0;
 
@@ -301,19 +305,22 @@ Result aptInit(NS_APPID appID)
        if((ret=APT_GetLockHandle(&aptuHandle, 0x0, &aptLockHandle)))return ret;
        svcCloseHandle(aptuHandle);
 
-       currentAppId = appID;
+       currentAppId = __apt_appid;
 
        aptOpenSession();
        if((ret=APT_Initialize(NULL, currentAppId, &aptEvents[0], &aptEvents[1])))return ret;
        aptCloseSession();
-       
-       aptOpenSession();
-       if((ret=APT_Enable(NULL, 0x0)))return ret;
-       aptCloseSession();
-       
-       aptOpenSession();
-       if((ret=APT_NotifyToWait(NULL, currentAppId)))return ret;
-       aptCloseSession();
+
+       if(!(__system_runflags&RUNFLAG_APTWORKAROUND))
+       {
+               aptOpenSession();
+               if((ret=APT_Enable(NULL, 0x0)))return ret;
+               aptCloseSession();
+               
+               aptOpenSession();
+               if((ret=APT_NotifyToWait(NULL, currentAppId)))return ret;
+               aptCloseSession();
+       }
 
        svcCreateEvent(&aptStatusEvent, 0);
        return 0;
@@ -331,13 +338,16 @@ void aptExit()
                aptCloseSession();
        }
 
-       aptOpenSession();
-       APT_PrepareToCloseApplication(NULL, 0x1);
-       aptCloseSession();
-       
-       aptOpenSession();
-       APT_CloseApplication(NULL, 0x0, 0x0, 0x0);
-       aptCloseSession();
+       if(!(__system_runflags&RUNFLAG_APTWORKAROUND))
+       {
+               aptOpenSession();
+               APT_PrepareToCloseApplication(NULL, 0x1);
+               aptCloseSession();
+               
+               aptOpenSession();
+               APT_CloseApplication(NULL, 0x0, 0x0, 0x0);
+               aptCloseSession();
+       }
 
        svcCloseHandle(aptStatusMutex);
        //svcCloseHandle(aptLockHandle);
@@ -370,21 +380,24 @@ void aptSetupEventHandler()
        APT_AppletUtility(NULL, NULL, 0x4, 0x1, buf1, 0x1, buf2);
        aptCloseSession();*/
 
-       memset(buf1, 0, 4);
+       if(!(__system_runflags&RUNFLAG_APTWORKAROUND))
+       {
+               memset(buf1, 0, 4);
 
-       buf1[0] = 0x10;
-       aptOpenSession();
-       APT_AppletUtility(NULL, NULL, 0x7, 0x4, buf1, 0x1, buf2);
-       aptCloseSession();
+               buf1[0] = 0x10;
+               aptOpenSession();
+               APT_AppletUtility(NULL, NULL, 0x7, 0x4, buf1, 0x1, buf2);
+               aptCloseSession();
 
-       buf1[0] = 0x00;
-       aptOpenSession();
-       APT_AppletUtility(NULL, NULL, 0x4, 0x1, buf1, 0x1, buf2);
-       aptCloseSession();
+               buf1[0] = 0x00;
+               aptOpenSession();
+               APT_AppletUtility(NULL, NULL, 0x4, 0x1, buf1, 0x1, buf2);
+               aptCloseSession();
 
-       aptOpenSession();
-       APT_AppletUtility(NULL, NULL, 0x4, 0x1, buf1, 0x1, buf2);
-       aptCloseSession();
+               aptOpenSession();
+               APT_AppletUtility(NULL, NULL, 0x4, 0x1, buf1, 0x1, buf2);
+               aptCloseSession();
+       }
 
        svcCreateMutex(&aptStatusMutex, true);
        aptStatus=0;