|
|
|
@ -56,7 +56,8 @@ struct LaunchParameters { |
|
|
|
}; |
|
|
|
static_assert(sizeof(LaunchParameters) == 0x88); |
|
|
|
|
|
|
|
IWindowController::IWindowController() : ServiceFramework("IWindowController") { |
|
|
|
IWindowController::IWindowController(Core::System& system_) |
|
|
|
: ServiceFramework("IWindowController"), system{system_} { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "CreateWindow"}, |
|
|
|
@ -75,7 +76,7 @@ IWindowController::IWindowController() : ServiceFramework("IWindowController") { |
|
|
|
IWindowController::~IWindowController() = default; |
|
|
|
|
|
|
|
void IWindowController::GetAppletResourceUserId(Kernel::HLERequestContext& ctx) { |
|
|
|
const u64 process_id = Core::System::GetInstance().Kernel().CurrentProcess()->GetProcessID(); |
|
|
|
const u64 process_id = system.CurrentProcess()->GetProcessID(); |
|
|
|
|
|
|
|
LOG_DEBUG(Service_AM, "called. Process ID=0x{:016X}", process_id); |
|
|
|
|
|
|
|
@ -231,8 +232,9 @@ IDebugFunctions::IDebugFunctions() : ServiceFramework{"IDebugFunctions"} { |
|
|
|
|
|
|
|
IDebugFunctions::~IDebugFunctions() = default; |
|
|
|
|
|
|
|
ISelfController::ISelfController(std::shared_ptr<NVFlinger::NVFlinger> nvflinger) |
|
|
|
: ServiceFramework("ISelfController"), nvflinger(std::move(nvflinger)) { |
|
|
|
ISelfController::ISelfController(Core::System& system_, |
|
|
|
std::shared_ptr<NVFlinger::NVFlinger> nvflinger_) |
|
|
|
: ServiceFramework("ISelfController"), nvflinger(std::move(nvflinger_)) { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, nullptr, "Exit"}, |
|
|
|
@ -280,7 +282,7 @@ ISelfController::ISelfController(std::shared_ptr<NVFlinger::NVFlinger> nvflinger |
|
|
|
|
|
|
|
RegisterHandlers(functions); |
|
|
|
|
|
|
|
auto& kernel = Core::System::GetInstance().Kernel(); |
|
|
|
auto& kernel = system_.Kernel(); |
|
|
|
launchable_event = Kernel::WritableEvent::CreateEventPair(kernel, Kernel::ResetType::Manual, |
|
|
|
"ISelfController:LaunchableEvent"); |
|
|
|
|
|
|
|
@ -501,8 +503,7 @@ void ISelfController::GetAccumulatedSuspendedTickChangedEvent(Kernel::HLERequest |
|
|
|
rb.PushCopyObjects(accumulated_suspended_tick_changed_event.readable); |
|
|
|
} |
|
|
|
|
|
|
|
AppletMessageQueue::AppletMessageQueue() { |
|
|
|
auto& kernel = Core::System::GetInstance().Kernel(); |
|
|
|
AppletMessageQueue::AppletMessageQueue(Kernel::KernelCore& kernel) { |
|
|
|
on_new_message = Kernel::WritableEvent::CreateEventPair(kernel, Kernel::ResetType::Manual, |
|
|
|
"AMMessageQueue:OnMessageRecieved"); |
|
|
|
on_operation_mode_changed = Kernel::WritableEvent::CreateEventPair( |
|
|
|
@ -937,9 +938,8 @@ void IStorageAccessor::Read(Kernel::HLERequestContext& ctx) { |
|
|
|
rb.Push(RESULT_SUCCESS); |
|
|
|
} |
|
|
|
|
|
|
|
ILibraryAppletCreator::ILibraryAppletCreator(u64 current_process_title_id) |
|
|
|
: ServiceFramework("ILibraryAppletCreator"), |
|
|
|
current_process_title_id(current_process_title_id) { |
|
|
|
ILibraryAppletCreator::ILibraryAppletCreator(Core::System& system_) |
|
|
|
: ServiceFramework("ILibraryAppletCreator"), system{system_} { |
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, &ILibraryAppletCreator::CreateLibraryApplet, "CreateLibraryApplet"}, |
|
|
|
{1, nullptr, "TerminateAllLibraryApplets"}, |
|
|
|
@ -961,8 +961,8 @@ void ILibraryAppletCreator::CreateLibraryApplet(Kernel::HLERequestContext& ctx) |
|
|
|
LOG_DEBUG(Service_AM, "called with applet_id={:08X}, applet_mode={:08X}", |
|
|
|
static_cast<u32>(applet_id), applet_mode); |
|
|
|
|
|
|
|
const auto& applet_manager{Core::System::GetInstance().GetAppletManager()}; |
|
|
|
const auto applet = applet_manager.GetApplet(applet_id, current_process_title_id); |
|
|
|
const auto& applet_manager{system.GetAppletManager()}; |
|
|
|
const auto applet = applet_manager.GetApplet(applet_id); |
|
|
|
|
|
|
|
if (applet == nullptr) { |
|
|
|
LOG_ERROR(Service_AM, "Applet doesn't exist! applet_id={}", static_cast<u32>(applet_id)); |
|
|
|
@ -999,8 +999,7 @@ void ILibraryAppletCreator::CreateTransferMemoryStorage(Kernel::HLERequestContex |
|
|
|
const auto handle{rp.Pop<Kernel::Handle>()}; |
|
|
|
|
|
|
|
const auto transfer_mem = |
|
|
|
Core::System::GetInstance().CurrentProcess()->GetHandleTable().Get<Kernel::TransferMemory>( |
|
|
|
handle); |
|
|
|
system.CurrentProcess()->GetHandleTable().Get<Kernel::TransferMemory>(handle); |
|
|
|
|
|
|
|
if (transfer_mem == nullptr) { |
|
|
|
LOG_ERROR(Service_AM, "shared_mem is a nullpr for handle={:08X}", handle); |
|
|
|
@ -1018,7 +1017,8 @@ void ILibraryAppletCreator::CreateTransferMemoryStorage(Kernel::HLERequestContex |
|
|
|
rb.PushIpcInterface(std::make_shared<IStorage>(std::move(memory))); |
|
|
|
} |
|
|
|
|
|
|
|
IApplicationFunctions::IApplicationFunctions() : ServiceFramework("IApplicationFunctions") { |
|
|
|
IApplicationFunctions::IApplicationFunctions(Core::System& system_) |
|
|
|
: ServiceFramework("IApplicationFunctions"), system{system_} { |
|
|
|
// clang-format off
|
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{1, &IApplicationFunctions::PopLaunchParameter, "PopLaunchParameter"}, |
|
|
|
@ -1180,7 +1180,7 @@ void IApplicationFunctions::GetDesiredLanguage(Kernel::HLERequestContext& ctx) { |
|
|
|
// Get supported languages from NACP, if possible
|
|
|
|
// Default to 0 (all languages supported)
|
|
|
|
u32 supported_languages = 0; |
|
|
|
FileSys::PatchManager pm{Core::System::GetInstance().CurrentProcess()->GetTitleID()}; |
|
|
|
FileSys::PatchManager pm{system.CurrentProcess()->GetTitleID()}; |
|
|
|
|
|
|
|
const auto res = pm.GetControlMetadata(); |
|
|
|
if (res.first != nullptr) { |
|
|
|
@ -1188,8 +1188,8 @@ void IApplicationFunctions::GetDesiredLanguage(Kernel::HLERequestContext& ctx) { |
|
|
|
} |
|
|
|
|
|
|
|
// Call IApplicationManagerInterface implementation.
|
|
|
|
auto& service_manager = Core::System::GetInstance().ServiceManager(); |
|
|
|
auto ns_am2 = service_manager.GetService<Service::NS::NS>("ns:am2"); |
|
|
|
auto& service_manager = system.ServiceManager(); |
|
|
|
auto ns_am2 = service_manager.GetService<NS::NS>("ns:am2"); |
|
|
|
auto app_man = ns_am2->GetApplicationManagerInterface(); |
|
|
|
|
|
|
|
// Get desired application language
|
|
|
|
@ -1261,8 +1261,8 @@ void IApplicationFunctions::ExtendSaveData(Kernel::HLERequestContext& ctx) { |
|
|
|
"new_journal={:016X}", |
|
|
|
static_cast<u8>(type), user_id[1], user_id[0], new_normal_size, new_journal_size); |
|
|
|
|
|
|
|
FileSystem::WriteSaveDataSize(type, Core::CurrentProcess()->GetTitleID(), user_id, |
|
|
|
{new_normal_size, new_journal_size}); |
|
|
|
const auto title_id = system.CurrentProcess()->GetTitleID(); |
|
|
|
FileSystem::WriteSaveDataSize(type, title_id, user_id, {new_normal_size, new_journal_size}); |
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 4}; |
|
|
|
rb.Push(RESULT_SUCCESS); |
|
|
|
@ -1281,8 +1281,8 @@ void IApplicationFunctions::GetSaveDataSize(Kernel::HLERequestContext& ctx) { |
|
|
|
LOG_DEBUG(Service_AM, "called with type={:02X}, user_id={:016X}{:016X}", static_cast<u8>(type), |
|
|
|
user_id[1], user_id[0]); |
|
|
|
|
|
|
|
const auto size = |
|
|
|
FileSystem::ReadSaveDataSize(type, Core::CurrentProcess()->GetTitleID(), user_id); |
|
|
|
const auto title_id = system.CurrentProcess()->GetTitleID(); |
|
|
|
const auto size = FileSystem::ReadSaveDataSize(type, title_id, user_id); |
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 6}; |
|
|
|
rb.Push(RESULT_SUCCESS); |
|
|
|
@ -1300,9 +1300,9 @@ void IApplicationFunctions::GetGpuErrorDetectedSystemEvent(Kernel::HLERequestCon |
|
|
|
|
|
|
|
void InstallInterfaces(SM::ServiceManager& service_manager, |
|
|
|
std::shared_ptr<NVFlinger::NVFlinger> nvflinger, Core::System& system) { |
|
|
|
auto message_queue = std::make_shared<AppletMessageQueue>(); |
|
|
|
message_queue->PushMessage(AppletMessageQueue::AppletMessage::FocusStateChanged); // Needed on
|
|
|
|
// game boot
|
|
|
|
auto message_queue = std::make_shared<AppletMessageQueue>(system.Kernel()); |
|
|
|
// Needed on game boot
|
|
|
|
message_queue->PushMessage(AppletMessageQueue::AppletMessage::FocusStateChanged); |
|
|
|
|
|
|
|
std::make_shared<AppletAE>(nvflinger, message_queue, system)->InstallAsService(service_manager); |
|
|
|
std::make_shared<AppletOE>(nvflinger, message_queue, system)->InstallAsService(service_manager); |
|
|
|
|