void aptExit() { if (!aptInitialised) return; if(!(__system_runflags&RUNFLAG_APTWORKAROUND))aptAppletUtility_Exit_RetToApp(0); // This is only executed when application-termination was triggered via the home-menu power-off screen. if(aptGetStatusPower() == 1) { aptOpenSession(); APT_ReplySleepQuery(NULL, currentAppId, 0x0); aptCloseSession(); } if(!(__system_runflags&RUNFLAG_APTWORKAROUND)) { aptOpenSession(); APT_PrepareToCloseApplication(NULL, 0x1); aptCloseSession(); aptOpenSession(); APT_CloseApplication(NULL, 0x0, 0x0, 0x0); aptCloseSession(); } svcCloseHandle(aptSleepSync); svcCloseHandle(aptStatusMutex); svcCloseHandle(aptLockHandle); svcCloseHandle(aptStatusEvent); aptInitialised = false; }
void aptExit() { if (!aptInitialised) return; if(!aptIsCrippled())aptAppletUtility_Exit_RetToApp(0); // This is only executed when application-termination was triggered via the home-menu power-off screen. if(aptGetStatusPower() == 1) { aptOpenSession(); APT_ReplySleepQuery(NULL, currentAppId, 0x0); aptCloseSession(); } if(!aptIsCrippled()) { bool isReinit = aptIsReinit(); if (aptGetStatus() == APP_EXITING || !isReinit) { aptOpenSession(); APT_PrepareToCloseApplication(NULL, 0x1); aptCloseSession(); aptOpenSession(); APT_CloseApplication(NULL, 0x0, 0x0, 0x0); aptCloseSession(); if (isReinit) { extern void (*__system_retAddr)(void); __system_retAddr = NULL; } } else if (isReinit) { aptOpenSession(); APT_Finalize(NULL, currentAppId); aptCloseSession(); } } svcSignalEvent(aptEvents[2]); svcWaitSynchronization(aptEventHandlerThread, U64_MAX); svcCloseHandle(aptEventHandlerThread); svcCloseHandle(aptEvents[2]); svcCloseHandle(aptSleepSync); svcCloseHandle(aptStatusMutex); svcCloseHandle(aptLockHandle); svcCloseHandle(aptStatusEvent); aptInitialised = false; }
void aptAppletStarted(void) { u8 buf1[4], buf2[4]; memset(buf1, 0, 4); // Set status to SUSPENDED. svcClearEvent(aptStatusEvent); aptSetStatus(APP_SUSPENDED); aptOpenSession(); APT_SendCaptureBufferInfo(0x20, __ns_capinfo); aptCloseSession(); aptOpenSession(); APT_ReplySleepQuery(currentAppId, 0x0); aptCloseSession(); aptOpenSession(); APT_StartLibraryApplet(__apt_launchapplet_appID, __apt_launchapplet_inhandle, __apt_launchapplet_parambuf, __apt_launchapplet_parambufsize); aptCloseSession(); buf1[0]=0x00; aptOpenSession(); APT_AppletUtility(NULL, 0x4, 0x1, buf1, 0x1, buf2); aptCloseSession(); aptOpenSession(); APT_NotifyToWait(currentAppId); aptCloseSession(); buf1[0]=0x00; aptOpenSession(); APT_AppletUtility(NULL, 0x4, 0x1, buf1, 0x1, buf2); aptCloseSession(); }
static void __handle_notification(void) { APT_Signal type; Result ret=0; // Get notification type. aptOpenSession(); ret = APT_InquireNotification(currentAppId, &type); aptCloseSession(); if(R_FAILED(ret)) return; _aptDebug(1, type); switch(type) { case APTSIGNAL_HOMEBUTTON: case APTSIGNAL_POWERBUTTON: // The main thread should call aptReturnToMenu() when the status gets set to this. if(aptGetStatus() == APP_RUNNING) { aptOpenSession(); APT_ReplySleepQuery(currentAppId, 0x0); aptCloseSession(); if(type == APTSIGNAL_HOMEBUTTON) aptSetStatusPower(0); if(type == APTSIGNAL_POWERBUTTON) aptSetStatusPower(1); aptSetStatus(APP_SUSPENDING); } break; case APTSIGNAL_PREPARESLEEP: // Reply to sleep-request. aptStatusBeforeSleep = aptGetStatus(); aptSetStatus(APP_PREPARE_SLEEPMODE); svcWaitSynchronization(aptSleepSync, U64_MAX); svcClearEvent(aptSleepSync); aptOpenSession(); APT_ReplySleepQuery(currentAppId, 0x1); aptCloseSession(); break; case APTSIGNAL_ENTERSLEEP: if(aptGetStatus() == APP_PREPARE_SLEEPMODE) { // Report into sleep-mode. aptSetStatus(APP_SLEEPMODE); aptOpenSession(); APT_ReplySleepNotificationComplete(currentAppId); aptCloseSession(); } break; // Leaving sleep-mode. case APTSIGNAL_WAKEUP: if(aptGetStatus() == APP_SLEEPMODE) { if(aptStatusBeforeSleep == APP_RUNNING)GSPGPU_SetLcdForceBlack(0); // Restore old aptStatus. aptSetStatus(aptStatusBeforeSleep); } break; default: break; } }
Result APT_LaunchLibraryApplet(NS_APPID appID, Handle inhandle, u32 *parambuf, u32 parambufsize) { Result ret=0; u8 tmp=0; u8 buf1[4]; u8 buf2[4]; aptOpenSession(); APT_ReplySleepQuery(currentAppId, 0); aptCloseSession(); aptOpenSession(); ret=APT_PrepareToStartLibraryApplet(appID); aptCloseSession(); if(R_FAILED(ret))return ret; memset(buf1, 0, 4); aptOpenSession(); APT_AppletUtility(NULL, 0x4, 0x1, buf1, 0x1, buf2); aptCloseSession(); while(1) { aptOpenSession(); ret=APT_IsRegistered(appID, &tmp); aptCloseSession(); if(R_FAILED(ret))return ret; if(tmp!=0)break; } aptCallHook(APTHOOK_ONSUSPEND); __apt_launchapplet_appID = appID; __apt_launchapplet_inhandle = inhandle; __apt_launchapplet_parambuf = parambuf; __apt_launchapplet_parambufsize = parambufsize; // Set status to SUSPENDED. svcClearEvent(aptStatusEvent); aptSetStatus(APP_SUSPENDED); // Save Vram GSPGPU_SaveVramSysArea(); // Capture screen. memset(__ns_capinfo, 0, 0x20); aptInitCaptureInfo(__ns_capinfo); // Send capture-screen info to the library applet. aptOpenSession(); APT_SendParameter(currentAppId, appID, 0x20, __ns_capinfo, 0x0, 0x2); aptCloseSession(); // Release GSP module. GSPGPU_ReleaseRight(); return 0; }