2020-04-19 23:04:05 +02:00
|
|
|
// SPDX-License-Identifier: MPL-2.0
|
2020-03-27 20:36:02 +01:00
|
|
|
// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
|
|
|
|
|
2020-08-09 15:51:57 +02:00
|
|
|
#include <kernel/types/KProcess.h>
|
2020-07-07 13:36:17 +02:00
|
|
|
#include <services/account/IAccountServiceForApplication.h>
|
|
|
|
#include <services/am/storage/IStorage.h>
|
2020-02-19 21:35:54 +01:00
|
|
|
#include "IApplicationFunctions.h"
|
|
|
|
|
|
|
|
namespace skyline::service::am {
|
2020-09-21 12:04:26 +02:00
|
|
|
IApplicationFunctions::IApplicationFunctions(const DeviceState &state, ServiceManager &manager) : gpuErrorEvent(std::make_shared<type::KEvent>(state)), BaseService(state, manager) {}
|
2020-02-19 21:35:54 +01:00
|
|
|
|
2020-09-03 20:43:52 +02:00
|
|
|
Result IApplicationFunctions::PopLaunchParameter(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
2020-09-28 12:05:17 +02:00
|
|
|
constexpr u32 LaunchParameterMagic{0xC79497CA}; //!< The magic of the application launch parameters
|
|
|
|
constexpr size_t LaunchParameterSize{0x88}; //!< The size of the launch parameter IStorage
|
2020-07-07 13:36:17 +02:00
|
|
|
|
2020-09-26 07:17:57 +02:00
|
|
|
auto storageService{std::make_shared<IStorage>(state, manager, LaunchParameterSize)};
|
2020-07-07 13:36:17 +02:00
|
|
|
|
|
|
|
storageService->Push<u32>(LaunchParameterMagic);
|
|
|
|
storageService->Push<u32>(1);
|
|
|
|
storageService->Push(constant::DefaultUserId);
|
|
|
|
|
|
|
|
manager.RegisterService(storageService, session, response);
|
2020-09-03 20:43:52 +02:00
|
|
|
return {};
|
2020-07-07 13:36:17 +02:00
|
|
|
}
|
|
|
|
|
2020-09-03 20:43:52 +02:00
|
|
|
Result IApplicationFunctions::EnsureSaveData(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
2020-07-09 15:42:10 +02:00
|
|
|
response.Push<u8>(0);
|
2020-09-03 20:43:52 +02:00
|
|
|
return {};
|
2020-07-09 15:42:10 +02:00
|
|
|
}
|
|
|
|
|
2020-09-03 20:43:52 +02:00
|
|
|
Result IApplicationFunctions::GetDesiredLanguage(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
2020-07-07 13:36:17 +02:00
|
|
|
response.Push(util::MakeMagic<u64>("en-US"));
|
2020-09-03 20:43:52 +02:00
|
|
|
return {};
|
2020-07-07 13:36:17 +02:00
|
|
|
}
|
|
|
|
|
2020-09-03 20:43:52 +02:00
|
|
|
Result IApplicationFunctions::NotifyRunning(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
2020-02-19 21:35:54 +01:00
|
|
|
response.Push<u8>(1);
|
2020-09-03 20:43:52 +02:00
|
|
|
return {};
|
2020-02-19 21:35:54 +01:00
|
|
|
}
|
2020-07-09 15:42:10 +02:00
|
|
|
|
2020-09-03 20:43:52 +02:00
|
|
|
Result IApplicationFunctions::GetPseudoDeviceId(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
2020-08-09 15:51:57 +02:00
|
|
|
response.Push<u64>(0L);
|
|
|
|
response.Push<u64>(0L);
|
2020-09-03 20:43:52 +02:00
|
|
|
return {};
|
2020-08-09 15:51:57 +02:00
|
|
|
}
|
|
|
|
|
2020-09-03 20:43:52 +02:00
|
|
|
Result IApplicationFunctions::InitializeGamePlayRecording(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
|
|
|
return {};
|
|
|
|
}
|
2020-07-09 15:42:10 +02:00
|
|
|
|
2020-09-03 20:43:52 +02:00
|
|
|
Result IApplicationFunctions::SetGamePlayRecordingState(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
|
|
|
return {};
|
|
|
|
}
|
2020-08-09 15:51:57 +02:00
|
|
|
|
2020-09-03 20:43:52 +02:00
|
|
|
Result IApplicationFunctions::GetGpuErrorDetectedSystemEvent(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
|
2020-09-26 07:17:57 +02:00
|
|
|
auto handle{state.process->InsertItem(gpuErrorEvent)};
|
2020-08-09 15:51:57 +02:00
|
|
|
state.logger->Debug("GPU Error Event Handle: 0x{:X}", handle);
|
|
|
|
response.copyHandles.push_back(handle);
|
2020-09-03 20:43:52 +02:00
|
|
|
return {};
|
2020-08-09 15:51:57 +02:00
|
|
|
}
|
2020-02-19 21:35:54 +01:00
|
|
|
}
|