int main()
{
- srvInit();
- aptInit();
- gfxInit();
- hidInit(NULL);
+ srvInit(); // Needed
+ aptInit(); // Needed
+ gfxInit(); // Init graphic stuff
+ hidInit(NULL); // For input (buttons, touchscreen...)
+ // We need these 2 buffers for APT_DoAppJump() later. They can be smaller too
u8 buf0[0x300];
u8 buf1[0x20];
+ // Loop as long as the status is not exit
while(aptMainLoop())
{
+ // Scan hid shared memory for input events
hidScanInput();
- if(hidKeysDown() & KEY_A)
+ if(hidKeysDown() & KEY_A) // If the A button got pressed, start the app launch
{
+ // Clear both buffers
memset(buf0, 0, 0x300);
memset(buf1, 0, 0x20);
+ // Open an APT session so we can talk to the APT service
aptOpenSession();
- APT_PrepareToDoAppJump(NULL, 0, 0x0004001000022400LL, 0); // *EUR* camera app
- APT_DoAppJump(NULL, 0x300, 0x20, buf0, buf1);
+ // Prepare for the app launch
+ APT_PrepareToDoAppJump(NULL, 0, 0x0004001000022400LL, 0); // *EUR* camera app title ID
+ // Tell APT to trigger the app launch and set the status of this app to exit
+ APT_DoAppJump(NULL, 0x300 /* size of buf0 */, 0x20 /* size of buf1 */, buf0, buf1);
+ // Close the APT session because we don't need APT anymore
aptCloseSession();
}
+ // Flush + swap framebuffers and wait for VBlank. Not really needed in this example
gfxFlushBuffers();
gfxSwapBuffers();
gspWaitForVBlank();
}
+ // Deinit everything before the app process get's terminated
hidExit();
gfxExit();
aptExit();