]> Chaos Git - corbenik/ctrulib.git/commitdiff
Adjusted sleep-mode code so that the APP_STATUS on leaving sleep-mode, would be set...
authoryellows8 <yellowstar6@gmail.com>
Thu, 22 May 2014 17:56:16 +0000 (13:56 -0400)
committeryellows8 <yellowstar6@gmail.com>
Thu, 22 May 2014 17:56:16 +0000 (13:56 -0400)
libctru/include/ctr/APT.h
libctru/source/APT.c

index 3d5f5fa52e4f67b11f51361d6a2d5b117ade2f04..5ce2fd6d8f5cf4acfe00c59bb9a96f8df17fa219 100644 (file)
@@ -9,12 +9,13 @@ typedef enum{
 }NS_APPID; // cf http://3dbrew.org/wiki/NS#AppIDs
 
 typedef enum{
-       APT_NOTINITIALIZED,
+       APP_NOTINITIALIZED,
        APP_RUNNING,
        APP_SUSPENDED,
        APP_EXITING,
        APP_SUSPENDING,
-       APP_SLEEPMODE
+       APP_SLEEPMODE,
+       APP_PREPARE_SLEEPMODE
 }APP_STATUS;
 
 extern Handle aptEvents[3];
index 4ae8e1df0da3e870002217ad250338abcd286304..4b28fcdab728ba4593046ab6e8aaabc0bcace7c1 100644 (file)
@@ -20,7 +20,8 @@ u64 aptEventHandlerStack[APT_HANDLER_STACKSIZE/8]; //u64 so that it's 8-byte ali
 
 Handle aptStatusMutex;
 Handle aptStatusEvent = 0;
-u32 aptStatus = APT_NOTINITIALIZED;
+APP_STATUS aptStatus = APP_NOTINITIALIZED;
+APP_STATUS aptStatus_beforesleepmode = APP_NOTINITIALIZED;
 u32 aptStatusPower = 0;
 
 u32 aptParameters[0x1000/4]; //TEMP
@@ -212,21 +213,30 @@ void aptEventHandler(u32 arg)
                                                        break;
 
                                                case 0x3: //preparing to enter sleep-mode
+                                                       aptStatus_beforesleepmode = aptGetStatus();
+                                                       GSPGPU_SetLcdForceBlack(NULL, 1);
                                                        aptOpenSession();
                                                        APT_ReplySleepQuery(NULL, currentAppId, 0x1);
                                                        aptCloseSession();
+                                                       aptSetStatus(APP_PREPARE_SLEEPMODE);
                                                        break;
 
                                                case 0x5: //entering sleep-mode
-                                                       aptOpenSession();
-                                                       APT_ReplySleepNotificationComplete(NULL, currentAppId);
-                                                       aptCloseSession();
-                                                       aptSetStatus(APP_SLEEPMODE);
+                                                       if(aptGetStatus()==APP_PREPARE_SLEEPMODE)
+                                                       {
+                                                               aptOpenSession();
+                                                               APT_ReplySleepNotificationComplete(NULL, currentAppId);
+                                                               aptCloseSession();
+                                                               aptSetStatus(APP_SLEEPMODE);
+                                                       }
                                                        break;
 
                                                case 0x6: //leaving sleep-mode
-                                                       GSPGPU_SetLcdForceBlack(NULL, 0);
-                                                       aptSetStatus(APP_RUNNING);
+                                                       if(aptGetStatus()==APP_SLEEPMODE)
+                                                       {
+                                                               GSPGPU_SetLcdForceBlack(NULL, 0);
+                                                               aptSetStatus(aptStatus_beforesleepmode);
+                                                       }
                                                        break;
                                        }
                                }
@@ -385,7 +395,7 @@ void aptSetStatus(APP_STATUS status)
        prevstatus = status;
        aptStatus = status;
 
-       if(prevstatus!=APT_NOTINITIALIZED)
+       if(prevstatus!=APP_NOTINITIALIZED)
        {
                if(status==APP_RUNNING)svc_signalEvent(aptStatusEvent);
                if(status==APP_EXITING)svc_signalEvent(aptStatusEvent);