HLE/APT: Always return an error from PrepareToStartNewestHomeMenu so that the Home Menu doesn't try to reboot the system.
As per 3dbrew: "During Home Menu start-up it uses APT:PrepareToStartNewestHomeMenu. If that doesn't return an error(normally NS returns 0xC8A0CFFC for that), Home Menu starts a hardware reboot with APT:StartNewestHomeMenu etc. "
This commit is contained in:
parent
b57d58c0dc
commit
7096f01c14
3 changed files with 26 additions and 2 deletions
|
@ -776,6 +776,20 @@ void PrepareToStartLibraryApplet(Service::Interface* self) {
|
||||||
LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id);
|
LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PrepareToStartNewestHomeMenu(Service::Interface* self) {
|
||||||
|
IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1A, 0, 0); // 0x1A0000
|
||||||
|
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
|
||||||
|
|
||||||
|
// TODO(Subv): This command can only be called by a System Applet (return 0xC8A0CC04 otherwise).
|
||||||
|
|
||||||
|
// This command must return an error when called, otherwise the Home Menu will try to reboot the
|
||||||
|
// system.
|
||||||
|
rb.Push(ResultCode(ErrorDescription::AlreadyExists, ErrorModule::Applet,
|
||||||
|
ErrorSummary::InvalidState, ErrorLevel::Status));
|
||||||
|
|
||||||
|
LOG_DEBUG(Service_APT, "called");
|
||||||
|
}
|
||||||
|
|
||||||
void PreloadLibraryApplet(Service::Interface* self) {
|
void PreloadLibraryApplet(Service::Interface* self) {
|
||||||
IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x16, 1, 0); // 0x160040
|
IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x16, 1, 0); // 0x160040
|
||||||
AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>());
|
AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>());
|
||||||
|
|
|
@ -419,6 +419,16 @@ void GetAppCpuTimeLimit(Service::Interface* self);
|
||||||
*/
|
*/
|
||||||
void PrepareToStartLibraryApplet(Service::Interface* self);
|
void PrepareToStartLibraryApplet(Service::Interface* self);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APT::PrepareToStartNewestHomeMenu service function
|
||||||
|
* Inputs:
|
||||||
|
* 0 : Command header [0x001A0000]
|
||||||
|
* Outputs:
|
||||||
|
* 0 : Return header
|
||||||
|
* 1 : Result of function
|
||||||
|
*/
|
||||||
|
void PrepareToStartNewestHomeMenu(Service::Interface* self);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APT::PreloadLibraryApplet service function
|
* APT::PreloadLibraryApplet service function
|
||||||
* Inputs:
|
* Inputs:
|
||||||
|
|
|
@ -17,7 +17,7 @@ const Interface::FunctionInfo FunctionTable[] = {
|
||||||
{0x00060040, GetAppletInfo, "GetAppletInfo"},
|
{0x00060040, GetAppletInfo, "GetAppletInfo"},
|
||||||
{0x00070000, nullptr, "GetLastSignaledAppletId"},
|
{0x00070000, nullptr, "GetLastSignaledAppletId"},
|
||||||
{0x00080000, nullptr, "CountRegisteredApplet"},
|
{0x00080000, nullptr, "CountRegisteredApplet"},
|
||||||
{0x00090040, nullptr, "IsRegistered"},
|
{0x00090040, IsRegistered, "IsRegistered"},
|
||||||
{0x000A0040, nullptr, "GetAttribute"},
|
{0x000A0040, nullptr, "GetAttribute"},
|
||||||
{0x000B0040, InquireNotification, "InquireNotification"},
|
{0x000B0040, InquireNotification, "InquireNotification"},
|
||||||
{0x000C0104, nullptr, "SendParameter"},
|
{0x000C0104, nullptr, "SendParameter"},
|
||||||
|
@ -34,7 +34,7 @@ const Interface::FunctionInfo FunctionTable[] = {
|
||||||
{0x00170040, nullptr, "FinishPreloadingLibraryApplet"},
|
{0x00170040, nullptr, "FinishPreloadingLibraryApplet"},
|
||||||
{0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"},
|
{0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"},
|
||||||
{0x00190040, nullptr, "PrepareToStartSystemApplet"},
|
{0x00190040, nullptr, "PrepareToStartSystemApplet"},
|
||||||
{0x001A0000, nullptr, "PrepareToStartNewestHomeMenu"},
|
{0x001A0000, PrepareToStartNewestHomeMenu, "PrepareToStartNewestHomeMenu"},
|
||||||
{0x001B00C4, nullptr, "StartApplication"},
|
{0x001B00C4, nullptr, "StartApplication"},
|
||||||
{0x001C0000, nullptr, "WakeupApplication"},
|
{0x001C0000, nullptr, "WakeupApplication"},
|
||||||
{0x001D0000, nullptr, "CancelApplication"},
|
{0x001D0000, nullptr, "CancelApplication"},
|
||||||
|
|
Loading…
Reference in a new issue