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; }
static int lua_check(lua_State *L) { int argc = lua_gettop(L); #ifndef SKIP_ERROR_HANDLING if (argc != 2) return luaL_error(L, "wrong number of arguments."); #endif u32 pad = luaL_checknumber(L, 1); u32 button = luaL_checknumber(L, 2); if (button == KEY_HOME){ APT_AppStatus status = aptGetStatus(); lua_pushboolean(L,((status == APP_SUSPENDING) && aptGetStatusPower() == 0)); }else if (button == KEY_POWER){ APT_AppStatus status = aptGetStatus(); lua_pushboolean(L,((status == APP_SUSPENDING) && aptGetStatusPower() == 1)); }else lua_pushboolean(L, ((pad & button) == button)); return 1; }
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 aptReturnToMenu(void) { NS_APPID menu_appid; u32 tmp0 = 1, tmp1 = 0; if(aptIsCrippled()) { svcClearEvent(aptStatusEvent); aptSetStatus(APP_EXITING); return; } // This is only executed when ret-to-menu was triggered via the home-button, not the power-button. if(aptGetStatusPower() == 0) { aptOpenSession(); APT_AppletUtility(NULL, 0x6, 0x4, (u8*)&tmp0, 0x1, (u8*)&tmp1); aptCloseSession(); } // Set status to SUSPENDED. __apt_launchapplet_appID = 0; svcClearEvent(aptStatusEvent); aptSetStatus(APP_SUSPENDED); // Prepare for return to menu aptOpenSession(); APT_PrepareToJumpToHomeMenu(); aptCloseSession(); // Save Vram GSPGPU_SaveVramSysArea(); // Capture screen. memset(__ns_capinfo, 0, 0x20); aptInitCaptureInfo(__ns_capinfo); menu_appid = aptGetMenuAppID(); // Send capture-screen info to menu. aptOpenSession(); APT_SendParameter(currentAppId, menu_appid, 0x20, __ns_capinfo, 0x0, 0x10); aptCloseSession(); aptOpenSession(); APT_SendCaptureBufferInfo(0x20, __ns_capinfo); aptCloseSession(); // Release GSP module. GSPGPU_ReleaseRight(); // Jump to menu! aptOpenSession(); APT_JumpToHomeMenu(0x0, 0x0, 0x0); aptCloseSession(); // Wait for return to application. aptOpenSession(); APT_NotifyToWait(currentAppId); aptCloseSession(); // This is only executed when ret-to-menu was triggered via the home-button, not the power-button. if(aptGetStatusPower() == 0) { tmp0 = 0; aptOpenSession(); APT_AppletUtility(NULL, 0x4, 0x1, (u8*)&tmp0, 0x1, (u8*)&tmp1); aptCloseSession(); } aptWaitStatusEvent(); }