Result aptInit(void) { Result ret=0; if (aptInitialised) return ret; aptStatusMutex = 0; // Initialize APT stuff, escape load screen. ret = __apt_initservicehandle(); if(ret!=0)return ret; if((ret=APT_GetLockHandle(&aptuHandle, 0x0, &aptLockHandle)))return ret; svcCloseHandle(aptuHandle); currentAppId = __apt_appid; svcCreateEvent(&aptStatusEvent, 0); svcCreateEvent(&aptSleepSync, 0); if(!aptIsCrippled()) { aptOpenSession(); if((ret=APT_Initialize(NULL, currentAppId, &aptEvents[0], &aptEvents[1])))return ret; aptCloseSession(); aptOpenSession(); if((ret=APT_Enable(NULL, 0x0)))return ret; aptCloseSession(); // create APT close event svcCreateEvent(&aptEvents[2], 0); // After a cycle of APT_Finalize+APT_Initialize APT thinks the // application is suspended, so we need to tell it to unsuspend us. if (aptIsReinit()) { aptOpenSession(); APT_PrepareToJumpToApplication(NULL, 0x0); aptCloseSession(); aptOpenSession(); APT_JumpToApplication(NULL, 0x0, 0x0, 0x0); aptCloseSession(); } aptOpenSession(); if((ret=APT_NotifyToWait(NULL, currentAppId)))return ret; aptCloseSession(); // create APT event handler thread svcCreateThread(&aptEventHandlerThread, aptEventHandler, 0x0, (u32*)(&aptEventHandlerStack[APT_HANDLER_STACKSIZE/8]), 0x31, 0xfffffffe); } else aptAppStarted(); aptInitialised = true; return 0; }
Result aptInit(void) { Result ret=0; if (aptInitialised) return ret; // Initialize APT stuff, escape load screen. ret = __apt_initservicehandle(); if(ret!=0)return ret; if((ret=APT_GetLockHandle(&aptuHandle, 0x0, &aptLockHandle)))return ret; svcCloseHandle(aptuHandle); currentAppId = __apt_appid; svcCreateEvent(&aptStatusEvent, 0); svcCreateEvent(&aptSleepSync, 0); if(!(__system_runflags&RUNFLAG_APTWORKAROUND)) { aptOpenSession(); if((ret=APT_Initialize(NULL, currentAppId, &aptEvents[0], &aptEvents[1])))return ret; aptCloseSession(); aptOpenSession(); if((ret=APT_Enable(NULL, 0x0)))return ret; aptCloseSession(); aptOpenSession(); if((ret=APT_NotifyToWait(NULL, currentAppId)))return ret; aptCloseSession(); // create APT event handler thread svcCreateThread(&aptEventHandlerThread, aptEventHandler, 0x0, (u32*)(&aptEventHandlerStack[APT_HANDLER_STACKSIZE/8]), 0x31, 0xfffffffe); } else aptAppStarted(); aptInitialised = true; return 0; }
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(); }
Result aptInit(void) { Result ret=0; if (AtomicPostIncrement(&aptRefCount)) return 0; // Initialize APT stuff, escape load screen. ret = __apt_initservicehandle(); if(R_FAILED(ret)) goto _fail; if(R_FAILED(ret=APT_GetLockHandle(0x0, &aptLockHandle))) goto _fail; svcCloseHandle(aptuHandle); currentAppId = envGetAptAppId(); svcCreateEvent(&aptStatusEvent, 0); svcCreateEvent(&aptSleepSync, 0); LightLock_Init(&aptStatusMutex); aptStatus=0; if(!aptIsCrippled()) { aptOpenSession(); if(R_FAILED(ret=APT_Initialize(currentAppId, &aptEvents[0], &aptEvents[1])))return ret; aptCloseSession(); aptOpenSession(); if(R_FAILED(ret=APT_Enable(0x0))) goto _fail; aptCloseSession(); // create APT close event svcCreateEvent(&aptEvents[2], 0); // After a cycle of APT_Finalize+APT_Initialize APT thinks the // application is suspended, so we need to tell it to unsuspend us. if (aptIsReinit()) { aptOpenSession(); APT_PrepareToJumpToApplication(0x0); aptCloseSession(); aptOpenSession(); APT_JumpToApplication(0x0, 0x0, 0x0); aptCloseSession(); } aptOpenSession(); if(R_FAILED(ret=APT_NotifyToWait(currentAppId)))goto _fail; aptCloseSession(); // create APT event handler thread aptEventHandlerThread = threadCreate(aptEventHandler, 0x0, APT_HANDLER_STACKSIZE, 0x31, -2, true); // Wait for the state to become APT_RUNNING aptWaitStatusEvent(); } else aptAppStarted(); return 0; _fail: AtomicDecrement(&aptRefCount); return ret; }
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(); }