|
|
|
@ -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);
|
|
|
|
|