void aptSetStatusPower(u32 status);
void aptReturnToMenu();//This should be called by the user application when aptGetStatus() returns APP_SUSPENDING, not calling this will result in return-to-menu being disabled with the status left at APP_SUSPENDING. This function will not return until the system returns to the application, or when the status was changed to APP_EXITING.
void aptWaitStatusEvent();
+void aptSignalReadyForSleep();
NS_APPID aptGetMenuAppID();
Result APT_GetLockHandle(Handle* handle, u16 flags, Handle* lockHandle);
APP_STATUS aptStatus = APP_NOTINITIALIZED;
APP_STATUS aptStatusBeforeSleep = APP_NOTINITIALIZED;
u32 aptStatusPower = 0;
+Handle aptSleepSync = 0;
u32 aptParameters[0x1000/4]; //TEMP
case APTSIGNAL_PREPARESLEEP:
// Reply to sleep-request.
aptStatusBeforeSleep = aptGetStatus();
+ aptSetStatus(APP_PREPARE_SLEEPMODE);
+ svcWaitSynchronization(aptSleepSync, U64_MAX);
+ svcClearEvent(aptSleepSync);
+
aptOpenSession();
APT_ReplySleepQuery(NULL, currentAppId, 0x1);
aptCloseSession();
-
- aptSetStatus(APP_PREPARE_SLEEPMODE);
break;
case APTSIGNAL_ENTERSLEEP:
if(aptGetStatus() == APP_PREPARE_SLEEPMODE)
{
// Report into sleep-mode.
+ aptSetStatus(APP_SLEEPMODE);
+
aptOpenSession();
APT_ReplySleepNotificationComplete(NULL, currentAppId);
aptCloseSession();
- aptSetStatus(APP_SLEEPMODE);
}
break;
}
svcCreateEvent(&aptStatusEvent, 0);
+ svcCreateEvent(&aptSleepSync, 0);
return 0;
}
APT_CloseApplication(NULL, 0x0, 0x0, 0x0);
aptCloseSession();
}
+
+ svcCloseHandle(aptSleepSync);
svcCloseHandle(aptStatusMutex);
//svcCloseHandle(aptLockHandle);
svcWaitSynchronization(aptStatusMutex, U64_MAX);
- prevstatus = status;
+ prevstatus = aptStatus;
aptStatus = status;
if(prevstatus != APP_NOTINITIALIZED)
svcReleaseMutex(aptLockHandle);
}
+void aptSignalReadyForSleep()
+{
+ svcSignalEvent(aptSleepSync);
+}
+
Result APT_GetLockHandle(Handle* handle, u16 flags, Handle* lockHandle)
{
if(!handle)handle=&aptuHandle;