diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/applets/applet.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/apt/apt.cpp | 21 | ||||
| -rw-r--r-- | src/core/hle/service/apt/apt.h | 11 | ||||
| -rw-r--r-- | src/core/hle/service/apt/apt_a.cpp | 1 | ||||
| -rw-r--r-- | src/core/hle/service/apt/apt_s.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/service/apt/apt_u.cpp | 2 |
6 files changed, 36 insertions, 5 deletions
diff --git a/src/core/hle/applets/applet.cpp b/src/core/hle/applets/applet.cpp index e9ab6ffd8..bc2a1829e 100644 --- a/src/core/hle/applets/applet.cpp +++ b/src/core/hle/applets/applet.cpp | |||
| @@ -91,7 +91,7 @@ ResultCode Applet::Start(const Service::APT::AppletStartupParameter& parameter) | |||
| 91 | 91 | ||
| 92 | bool IsLibraryAppletRunning() { | 92 | bool IsLibraryAppletRunning() { |
| 93 | // Check the applets map for instances of any applet | 93 | // Check the applets map for instances of any applet |
| 94 | for (auto& itr = applets.begin(); itr != applets.end(); ++itr) | 94 | for (auto itr = applets.begin(); itr != applets.end(); ++itr) |
| 95 | if (itr->second != nullptr) | 95 | if (itr->second != nullptr) |
| 96 | return true; | 96 | return true; |
| 97 | return false; | 97 | return false; |
diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 1988be521..35402341b 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp | |||
| @@ -334,7 +334,26 @@ void GetAppCpuTimeLimit(Service::Interface* self) { | |||
| 334 | void PrepareToStartLibraryApplet(Service::Interface* self) { | 334 | void PrepareToStartLibraryApplet(Service::Interface* self) { |
| 335 | u32* cmd_buff = Kernel::GetCommandBuffer(); | 335 | u32* cmd_buff = Kernel::GetCommandBuffer(); |
| 336 | AppletId applet_id = static_cast<AppletId>(cmd_buff[1]); | 336 | AppletId applet_id = static_cast<AppletId>(cmd_buff[1]); |
| 337 | cmd_buff[1] = HLE::Applets::Applet::Create(applet_id).raw; | 337 | auto applet = HLE::Applets::Applet::Get(applet_id); |
| 338 | if (applet) { | ||
| 339 | LOG_WARNING(Service_APT, "applet has already been started id=%08X", applet_id); | ||
| 340 | cmd_buff[1] = RESULT_SUCCESS.raw; | ||
| 341 | } else { | ||
| 342 | cmd_buff[1] = HLE::Applets::Applet::Create(applet_id).raw; | ||
| 343 | } | ||
| 344 | LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); | ||
| 345 | } | ||
| 346 | |||
| 347 | void PreloadLibraryApplet(Service::Interface* self) { | ||
| 348 | u32* cmd_buff = Kernel::GetCommandBuffer(); | ||
| 349 | AppletId applet_id = static_cast<AppletId>(cmd_buff[1]); | ||
| 350 | auto applet = HLE::Applets::Applet::Get(applet_id); | ||
| 351 | if (applet) { | ||
| 352 | LOG_WARNING(Service_APT, "applet has already been started id=%08X", applet_id); | ||
| 353 | cmd_buff[1] = RESULT_SUCCESS.raw; | ||
| 354 | } else { | ||
| 355 | cmd_buff[1] = HLE::Applets::Applet::Create(applet_id).raw; | ||
| 356 | } | ||
| 338 | LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); | 357 | LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); |
| 339 | } | 358 | } |
| 340 | 359 | ||
diff --git a/src/core/hle/service/apt/apt.h b/src/core/hle/service/apt/apt.h index 563068d5a..4a72b6b5c 100644 --- a/src/core/hle/service/apt/apt.h +++ b/src/core/hle/service/apt/apt.h | |||
| @@ -303,6 +303,17 @@ void GetAppCpuTimeLimit(Service::Interface* self); | |||
| 303 | void PrepareToStartLibraryApplet(Service::Interface* self); | 303 | void PrepareToStartLibraryApplet(Service::Interface* self); |
| 304 | 304 | ||
| 305 | /** | 305 | /** |
| 306 | * APT::PreloadLibraryApplet service function | ||
| 307 | * Inputs: | ||
| 308 | * 0 : Command header [0x00160040] | ||
| 309 | * 1 : Id of the applet to start | ||
| 310 | * Outputs: | ||
| 311 | * 0 : Return header | ||
| 312 | * 1 : Result of function, 0 on success, otherwise error code | ||
| 313 | */ | ||
| 314 | void PreloadLibraryApplet(Service::Interface* self); | ||
| 315 | |||
| 316 | /** | ||
| 306 | * APT::StartLibraryApplet service function | 317 | * APT::StartLibraryApplet service function |
| 307 | * Inputs: | 318 | * Inputs: |
| 308 | * 0 : Command header [0x001E0084] | 319 | * 0 : Command header [0x001E0084] |
diff --git a/src/core/hle/service/apt/apt_a.cpp b/src/core/hle/service/apt/apt_a.cpp index 88de339f9..22800c56f 100644 --- a/src/core/hle/service/apt/apt_a.cpp +++ b/src/core/hle/service/apt/apt_a.cpp | |||
| @@ -21,6 +21,7 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
| 21 | {0x000D0080, ReceiveParameter, "ReceiveParameter"}, | 21 | {0x000D0080, ReceiveParameter, "ReceiveParameter"}, |
| 22 | {0x000E0080, GlanceParameter, "GlanceParameter"}, | 22 | {0x000E0080, GlanceParameter, "GlanceParameter"}, |
| 23 | {0x000F0100, CancelParameter, "CancelParameter"}, | 23 | {0x000F0100, CancelParameter, "CancelParameter"}, |
| 24 | {0x00160040, PreloadLibraryApplet, "PreloadLibraryApplet"}, | ||
| 24 | {0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"}, | 25 | {0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"}, |
| 25 | {0x001E0084, StartLibraryApplet, "StartLibraryApplet"}, | 26 | {0x001E0084, StartLibraryApplet, "StartLibraryApplet"}, |
| 26 | {0x003B0040, nullptr, "CancelLibraryApplet?"}, | 27 | {0x003B0040, nullptr, "CancelLibraryApplet?"}, |
diff --git a/src/core/hle/service/apt/apt_s.cpp b/src/core/hle/service/apt/apt_s.cpp index 396d1f04a..3ac6ff94f 100644 --- a/src/core/hle/service/apt/apt_s.cpp +++ b/src/core/hle/service/apt/apt_s.cpp | |||
| @@ -32,9 +32,9 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
| 32 | {0x00130000, nullptr, "GetPreparationState"}, | 32 | {0x00130000, nullptr, "GetPreparationState"}, |
| 33 | {0x00140040, nullptr, "SetPreparationState"}, | 33 | {0x00140040, nullptr, "SetPreparationState"}, |
| 34 | {0x00150140, nullptr, "PrepareToStartApplication"}, | 34 | {0x00150140, nullptr, "PrepareToStartApplication"}, |
| 35 | {0x00160040, nullptr, "PreloadLibraryApplet"}, | 35 | {0x00160040, PreloadLibraryApplet, "PreloadLibraryApplet"}, |
| 36 | {0x00170040, nullptr, "FinishPreloadingLibraryApplet"}, | 36 | {0x00170040, nullptr, "FinishPreloadingLibraryApplet"}, |
| 37 | {0x00180040, nullptr, "PrepareToStartLibraryApplet"}, | 37 | {0x00180040, PrepareToStartLibraryApplet,"PrepareToStartLibraryApplet"}, |
| 38 | {0x00190040, nullptr, "PrepareToStartSystemApplet"}, | 38 | {0x00190040, nullptr, "PrepareToStartSystemApplet"}, |
| 39 | {0x001A0000, nullptr, "PrepareToStartNewestHomeMenu"}, | 39 | {0x001A0000, nullptr, "PrepareToStartNewestHomeMenu"}, |
| 40 | {0x001B00C4, nullptr, "StartApplication"}, | 40 | {0x001B00C4, nullptr, "StartApplication"}, |
diff --git a/src/core/hle/service/apt/apt_u.cpp b/src/core/hle/service/apt/apt_u.cpp index b724cd72b..146bfd595 100644 --- a/src/core/hle/service/apt/apt_u.cpp +++ b/src/core/hle/service/apt/apt_u.cpp | |||
| @@ -33,7 +33,7 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
| 33 | {0x00130000, nullptr, "GetPreparationState"}, | 33 | {0x00130000, nullptr, "GetPreparationState"}, |
| 34 | {0x00140040, nullptr, "SetPreparationState"}, | 34 | {0x00140040, nullptr, "SetPreparationState"}, |
| 35 | {0x00150140, nullptr, "PrepareToStartApplication"}, | 35 | {0x00150140, nullptr, "PrepareToStartApplication"}, |
| 36 | {0x00160040, nullptr, "PreloadLibraryApplet"}, | 36 | {0x00160040, PreloadLibraryApplet, "PreloadLibraryApplet"}, |
| 37 | {0x00170040, nullptr, "FinishPreloadingLibraryApplet"}, | 37 | {0x00170040, nullptr, "FinishPreloadingLibraryApplet"}, |
| 38 | {0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"}, | 38 | {0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"}, |
| 39 | {0x00190040, nullptr, "PrepareToStartSystemApplet"}, | 39 | {0x00190040, nullptr, "PrepareToStartSystemApplet"}, |