From 0c9c97e5ea40208bcb6991ebec34ccc1d76ad1e7 Mon Sep 17 00:00:00 2001
From: pippo2931 <pippo2931@yahoo.com>
Date: Wed, 23 Nov 2016 19:57:56 -0800
Subject: [PATCH] Bravely Default/Second stuck #1822 (#2188)

* Bravely Default/Second stuck #1822
CancelLibraryApplet stub

* Log parameter.

* Taking care of comments

* Sync with 3DBrew

* White space ?

* lower case
---
 src/core/hle/service/apt/apt.cpp   |  9 +++++++++
 src/core/hle/service/apt/apt.h     | 11 +++++++++++
 src/core/hle/service/apt/apt_a.cpp |  2 +-
 src/core/hle/service/apt/apt_u.cpp |  2 +-
 4 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp
index c7198293e7..31e5e07b2f 100644
--- a/src/core/hle/service/apt/apt.cpp
+++ b/src/core/hle/service/apt/apt.cpp
@@ -396,6 +396,15 @@ void StartLibraryApplet(Service::Interface* self) {
     cmd_buff[1] = applet->Start(parameter).raw;
 }
 
+void CancelLibraryApplet(Service::Interface* self) {
+    u32* cmd_buff = Kernel::GetCommandBuffer();
+    u32 exiting = cmd_buff[1] & 0xFF;
+
+    cmd_buff[1] = 1; // TODO: Find the return code meaning
+
+    LOG_WARNING(Service_APT, "(STUBBED) called exiting=%u", exiting);
+}
+
 void SetScreenCapPostPermission(Service::Interface* self) {
     u32* cmd_buff = Kernel::GetCommandBuffer();
 
diff --git a/src/core/hle/service/apt/apt.h b/src/core/hle/service/apt/apt.h
index cbcba96a56..44dbd8757b 100644
--- a/src/core/hle/service/apt/apt.h
+++ b/src/core/hle/service/apt/apt.h
@@ -391,6 +391,17 @@ void PreloadLibraryApplet(Service::Interface* self);
  */
 void StartLibraryApplet(Service::Interface* self);
 
+/**
+ * APT::CancelLibraryApplet service function
+ *  Inputs:
+ *      0 : Command header [0x003B0040]
+ *      1 : u8, Application exiting (0 = not exiting, 1 = exiting)
+ *  Outputs:
+ *      0 : Header code
+ *      1 : Result code
+ */
+void CancelLibraryApplet(Service::Interface* self);
+
 /**
  * APT::GetStartupArgument service function
  *  Inputs:
diff --git a/src/core/hle/service/apt/apt_a.cpp b/src/core/hle/service/apt/apt_a.cpp
index f27ad91b7d..a7a0c8a41c 100644
--- a/src/core/hle/service/apt/apt_a.cpp
+++ b/src/core/hle/service/apt/apt_a.cpp
@@ -25,7 +25,7 @@ const Interface::FunctionInfo FunctionTable[] = {
     {0x00160040, PreloadLibraryApplet, "PreloadLibraryApplet"},
     {0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"},
     {0x001E0084, StartLibraryApplet, "StartLibraryApplet"},
-    {0x003B0040, nullptr, "CancelLibraryApplet?"},
+    {0x003B0040, CancelLibraryApplet, "CancelLibraryApplet"},
     {0x003E0080, nullptr, "ReplySleepQuery"},
     {0x00430040, NotifyToWait, "NotifyToWait?"},
     {0x00440000, GetSharedFont, "GetSharedFont?"},
diff --git a/src/core/hle/service/apt/apt_u.cpp b/src/core/hle/service/apt/apt_u.cpp
index d6ad42e217..a731c39f65 100644
--- a/src/core/hle/service/apt/apt_u.cpp
+++ b/src/core/hle/service/apt/apt_u.cpp
@@ -67,7 +67,7 @@ const Interface::FunctionInfo FunctionTable[] = {
     {0x00380040, nullptr, "PreloadResidentApplet"},
     {0x00390040, nullptr, "PrepareToStartResidentApplet"},
     {0x003A0044, nullptr, "StartResidentApplet"},
-    {0x003B0040, nullptr, "CancelLibraryApplet"},
+    {0x003B0040, CancelLibraryApplet, "CancelLibraryApplet"},
     {0x003C0042, nullptr, "SendDspSleep"},
     {0x003D0042, nullptr, "SendDspWakeUp"},
     {0x003E0080, nullptr, "ReplySleepQuery"},