Some minor APT fixes (capture typo, race condition fix, etc)

This commit is contained in:
fincs 2015-06-20 17:06:32 +02:00
parent e7ea04e532
commit 7706270720

View File

@ -109,7 +109,7 @@ void aptInitCaptureInfo(u32 *ns_capinfo)
GSPGPU_ImportDisplayCaptureInfo(NULL, &gspcapinfo); GSPGPU_ImportDisplayCaptureInfo(NULL, &gspcapinfo);
// Fill in display-capture info for NS. // Fill in display-capture info for NS.
if(gspcapinfo.screencapture[0].framebuf0_vaddr != gspcapinfo.screencapture[1].framebuf0_vaddr)ns_capinfo[1] = 1; if(gspcapinfo.screencapture[0].framebuf0_vaddr != gspcapinfo.screencapture[0].framebuf1_vaddr)ns_capinfo[1] = 1;
ns_capinfo[4] = gspcapinfo.screencapture[0].format & 0x7; ns_capinfo[4] = gspcapinfo.screencapture[0].format & 0x7;
ns_capinfo[7] = gspcapinfo.screencapture[1].format & 0x7; ns_capinfo[7] = gspcapinfo.screencapture[1].format & 0x7;
@ -301,6 +301,7 @@ void aptAppletClosed()
svcClearEvent(aptStatusEvent); svcClearEvent(aptStatusEvent);
aptSetStatus(APP_RUNNING); aptSetStatus(APP_RUNNING);
svcClearEvent(aptStatusEvent);
} }
static void __handle_notification() { static void __handle_notification() {
@ -580,6 +581,7 @@ bool aptMainLoop()
break; break;
case APP_APPLETCLOSED: case APP_APPLETCLOSED:
aptAppletClosed(); aptAppletClosed();
aptCallHook(APTHOOK_ONRESTORE);
break; break;
case APP_PREPARE_SLEEPMODE: case APP_PREPARE_SLEEPMODE:
aptCallHook(APTHOOK_ONSLEEP); aptCallHook(APTHOOK_ONSLEEP);
@ -1147,6 +1149,16 @@ Result APT_CheckNew3DS(Handle* handle, u8 *out)
return 0; return 0;
} }
// This may be needed in future exploits because APT_CheckNew3DS has a
// compatibility mode which always return zero even on an actual N3DS.
if (__system_runflags & BIT(31))
{
__apt_new3dsflag_initialized = 1;
__apt_new3dsflag = 1;
*out = 1;
return 0;
}
aptOpenSession(); aptOpenSession();
if(currentAppId==APPID_APPLICATION) if(currentAppId==APPID_APPLICATION)
{ {
@ -1265,6 +1277,13 @@ Result APT_LaunchLibraryApplet(NS_APPID appID, Handle inhandle, u32 *parambuf, u
if(tmp!=0)break; 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. // Set status to SUSPENDED.
svcClearEvent(aptStatusEvent); svcClearEvent(aptStatusEvent);
aptSetStatus(APP_SUSPENDED); aptSetStatus(APP_SUSPENDED);
@ -1285,11 +1304,6 @@ Result APT_LaunchLibraryApplet(NS_APPID appID, Handle inhandle, u32 *parambuf, u
// Release GSP module. // Release GSP module.
GSPGPU_ReleaseRight(NULL); GSPGPU_ReleaseRight(NULL);
__apt_launchapplet_appID = appID;
__apt_launchapplet_inhandle = inhandle;
__apt_launchapplet_parambuf = parambuf;
__apt_launchapplet_parambufsize = parambufsize;
return 0; return 0;
} }