mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-05-23 00:37:03 +02:00
try make work
This commit is contained in:
parent
ea9f43d987
commit
ea4d36ad06
1 changed files with 41 additions and 4 deletions
|
|
@ -13,6 +13,7 @@
|
||||||
#include "core/hle/service/am/applet_data_broker.h"
|
#include "core/hle/service/am/applet_data_broker.h"
|
||||||
#include "core/hle/service/am/applet_manager.h"
|
#include "core/hle/service/am/applet_manager.h"
|
||||||
#include "core/hle/service/am/frontend/applets.h"
|
#include "core/hle/service/am/frontend/applets.h"
|
||||||
|
#include "core/hle/service/am/process_creation.h"
|
||||||
#include "core/hle/service/am/service/library_applet_self_accessor.h"
|
#include "core/hle/service/am/service/library_applet_self_accessor.h"
|
||||||
#include "core/hle/service/am/service/storage.h"
|
#include "core/hle/service/am/service/storage.h"
|
||||||
#include "core/hle/service/cmif_serialization.h"
|
#include "core/hle/service/cmif_serialization.h"
|
||||||
|
|
@ -20,7 +21,9 @@
|
||||||
#include "core/hle/service/glue/glue_manager.h"
|
#include "core/hle/service/glue/glue_manager.h"
|
||||||
#include "core/hle/service/ns/application_manager_interface.h"
|
#include "core/hle/service/ns/application_manager_interface.h"
|
||||||
#include "core/hle/service/ns/service_getter_interface.h"
|
#include "core/hle/service/ns/service_getter_interface.h"
|
||||||
|
#include "core/hle/service/server_manager.h"
|
||||||
#include "core/hle/service/sm/sm.h"
|
#include "core/hle/service/sm/sm.h"
|
||||||
|
#include "core/loader/loader.h"
|
||||||
|
|
||||||
namespace Service::AM {
|
namespace Service::AM {
|
||||||
|
|
||||||
|
|
@ -97,13 +100,33 @@ Result ILibraryAppletSelfAccessor::PopInData(Out<SharedPointer<IStorage>> out_st
|
||||||
R_RETURN(m_broker->GetInData().Pop(out_storage));
|
R_RETURN(m_broker->GetInData().Pop(out_storage));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// uLauncher emulation
|
||||||
|
static Result UloaderCreateApplication(Core::System& system, u64 program_id) {
|
||||||
|
FileSys::VirtualFile nca_raw{};
|
||||||
|
// Get the program NCA from storage.
|
||||||
|
auto& storage = system.GetContentProviderUnion();
|
||||||
|
nca_raw = storage.GetEntryRaw(program_id, FileSys::ContentRecordType::Program);
|
||||||
|
// Ensure we retrieved a program NCA.
|
||||||
|
R_UNLESS(nca_raw != nullptr, ResultUnknown);
|
||||||
|
std::vector<u8> control;
|
||||||
|
std::unique_ptr<Loader::AppLoader> loader;
|
||||||
|
Loader::ResultStatus result;
|
||||||
|
auto process = CreateApplicationProcess(control, loader, result, system, nca_raw, program_id, 0);
|
||||||
|
R_UNLESS(process != nullptr, ResultUnknown);
|
||||||
|
const auto applet = std::make_shared<Applet>(system, std::move(process), true);
|
||||||
|
applet->program_id = program_id;
|
||||||
|
applet->applet_id = AppletId::Application;
|
||||||
|
applet->type = AppletType::Application;
|
||||||
|
applet->library_applet_mode = LibraryAppletMode::AllForeground;
|
||||||
|
//window_system.TrackApplet(applet, true);
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
Result ILibraryAppletSelfAccessor::PushOutData(SharedPointer<IStorage> storage) {
|
Result ILibraryAppletSelfAccessor::PushOutData(SharedPointer<IStorage> storage) {
|
||||||
LOG_INFO(Service_AM, "called");
|
LOG_INFO(Service_AM, "called");
|
||||||
m_broker->GetOutData().Push(storage);
|
m_broker->GetOutData().Push(storage);
|
||||||
|
|
||||||
if (m_applet->applet_id == AppletId::UlauncherUmenu) {
|
if (m_applet->applet_id == AppletId::UlauncherUmenu) {
|
||||||
LOG_WARNING(Service_AM, "emulating uLauncher IPC");
|
|
||||||
|
|
||||||
enum class SystemMessage : u32 {
|
enum class SystemMessage : u32 {
|
||||||
Invalid,
|
Invalid,
|
||||||
SetSelectedUser,
|
SetSelectedUser,
|
||||||
|
|
@ -140,11 +163,23 @@ Result ILibraryAppletSelfAccessor::PushOutData(SharedPointer<IStorage> storage)
|
||||||
m_broker->GetOutData().Pop(&req_storage);
|
m_broker->GetOutData().Pop(&req_storage);
|
||||||
auto req_data = req_storage->GetData();
|
auto req_data = req_storage->GetData();
|
||||||
CommandCommonHeader req_cmd{};
|
CommandCommonHeader req_cmd{};
|
||||||
std::memcpy(req_data.data(), &req_cmd, sizeof(req_cmd));
|
std::memcpy(&req_cmd, req_data.data(), sizeof(req_cmd));
|
||||||
|
|
||||||
|
LOG_WARNING(Service_AM, "uLauncher:IPC {}, {}", req_cmd.magic, req_cmd.val);
|
||||||
switch (SystemMessage(req_cmd.val)) {
|
switch (SystemMessage(req_cmd.val)) {
|
||||||
case SystemMessage::SetSelectedUser:
|
case SystemMessage::SetSelectedUser:
|
||||||
case SystemMessage::LaunchApplication:
|
break;
|
||||||
|
case SystemMessage::LaunchApplication: {
|
||||||
|
// all applet proxies OpenSystemAppletProxy
|
||||||
|
// applet proxy GetApplicationCreator
|
||||||
|
// application creator CreateApplication
|
||||||
|
u64 args_value{};
|
||||||
|
std::memcpy(std::addressof(args_value), req_data.data() + sizeof(req_cmd), sizeof(args_value));
|
||||||
|
LOG_WARNING(Service_AM, "program_id={:016x}", args_value);
|
||||||
|
m_applet->process->Terminate();
|
||||||
|
UloaderCreateApplication(system, args_value);
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
case SystemMessage::ResumeApplication:
|
case SystemMessage::ResumeApplication:
|
||||||
case SystemMessage::TerminateApplication:
|
case SystemMessage::TerminateApplication:
|
||||||
case SystemMessage::LaunchHomebrewLibraryApplet:
|
case SystemMessage::LaunchHomebrewLibraryApplet:
|
||||||
|
|
@ -166,7 +201,9 @@ Result ILibraryAppletSelfAccessor::PushOutData(SharedPointer<IStorage> storage)
|
||||||
case SystemMessage::StartVerifyApplication:
|
case SystemMessage::StartVerifyApplication:
|
||||||
case SystemMessage::ListInVerifyApplications:
|
case SystemMessage::ListInVerifyApplications:
|
||||||
case SystemMessage::NotifyWarnedAboutOutdatedTheme:
|
case SystemMessage::NotifyWarnedAboutOutdatedTheme:
|
||||||
|
break;
|
||||||
case SystemMessage::TerminateMenu:
|
case SystemMessage::TerminateMenu:
|
||||||
|
break;
|
||||||
case SystemMessage::OpenControllerKeyRemapping:
|
case SystemMessage::OpenControllerKeyRemapping:
|
||||||
break;
|
break;
|
||||||
case SystemMessage::Invalid:
|
case SystemMessage::Invalid:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue