From 4260edd6c9c55e6c692db9fcf35766ffa45838ed Mon Sep 17 00:00:00 2001 From: yellows8 Date: Thu, 22 May 2014 13:56:16 -0400 Subject: [PATCH] Adjusted sleep-mode code so that the APP_STATUS on leaving sleep-mode, would be set to the status which was set when the prepare sleep-mode signal was triggered(and other minor changes). --- libctru/include/ctr/APT.h | 5 +++-- libctru/source/APT.c | 26 ++++++++++++++++++-------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/libctru/include/ctr/APT.h b/libctru/include/ctr/APT.h index 3d5f5fa..5ce2fd6 100644 --- a/libctru/include/ctr/APT.h +++ b/libctru/include/ctr/APT.h @@ -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]; diff --git a/libctru/source/APT.c b/libctru/source/APT.c index 4ae8e1d..4b28fcd 100644 --- a/libctru/source/APT.c +++ b/libctru/source/APT.c @@ -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);