mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-23 15:22:45 +01:00
commit
b1556309fe
34 changed files with 853 additions and 193 deletions
|
@ -88,8 +88,14 @@ add_library(core STATIC
|
||||||
hle/romfs.h
|
hle/romfs.h
|
||||||
hle/service/acc/acc.cpp
|
hle/service/acc/acc.cpp
|
||||||
hle/service/acc/acc.h
|
hle/service/acc/acc.h
|
||||||
|
hle/service/acc/acc_aa.cpp
|
||||||
|
hle/service/acc/acc_aa.h
|
||||||
|
hle/service/acc/acc_su.cpp
|
||||||
|
hle/service/acc/acc_su.h
|
||||||
hle/service/acc/acc_u0.cpp
|
hle/service/acc/acc_u0.cpp
|
||||||
hle/service/acc/acc_u0.h
|
hle/service/acc/acc_u0.h
|
||||||
|
hle/service/acc/acc_u1.cpp
|
||||||
|
hle/service/acc/acc_u1.h
|
||||||
hle/service/am/am.cpp
|
hle/service/am/am.cpp
|
||||||
hle/service/am/am.h
|
hle/service/am/am.h
|
||||||
hle/service/am/applet_ae.cpp
|
hle/service/am/applet_ae.cpp
|
||||||
|
|
|
@ -2,14 +2,142 @@
|
||||||
// Licensed under GPLv2 or any later version
|
// Licensed under GPLv2 or any later version
|
||||||
// Refer to the license.txt file included.
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include "common/logging/log.h"
|
||||||
|
#include "core/hle/ipc_helpers.h"
|
||||||
#include "core/hle/service/acc/acc.h"
|
#include "core/hle/service/acc/acc.h"
|
||||||
|
#include "core/hle/service/acc/acc_aa.h"
|
||||||
|
#include "core/hle/service/acc/acc_su.h"
|
||||||
#include "core/hle/service/acc/acc_u0.h"
|
#include "core/hle/service/acc/acc_u0.h"
|
||||||
|
#include "core/hle/service/acc/acc_u1.h"
|
||||||
|
|
||||||
namespace Service {
|
namespace Service {
|
||||||
namespace Account {
|
namespace Account {
|
||||||
|
|
||||||
|
// TODO: RE this structure
|
||||||
|
struct UserData {
|
||||||
|
INSERT_PADDING_WORDS(1);
|
||||||
|
u32 icon_id;
|
||||||
|
u8 bg_color_id;
|
||||||
|
INSERT_PADDING_BYTES(0x7);
|
||||||
|
INSERT_PADDING_BYTES(0x10);
|
||||||
|
INSERT_PADDING_BYTES(0x60);
|
||||||
|
};
|
||||||
|
static_assert(sizeof(UserData) == 0x80, "UserData structure has incorrect size");
|
||||||
|
|
||||||
|
struct ProfileBase {
|
||||||
|
u8 user_id[0x10];
|
||||||
|
u64 timestamp;
|
||||||
|
u8 username[0x20];
|
||||||
|
};
|
||||||
|
static_assert(sizeof(ProfileBase) == 0x38, "ProfileBase structure has incorrect size");
|
||||||
|
|
||||||
|
using Uid = std::array<u64, 2>;
|
||||||
|
static constexpr Uid DEFAULT_USER_ID{0x10ull, 0x20ull};
|
||||||
|
|
||||||
|
class IProfile final : public ServiceFramework<IProfile> {
|
||||||
|
public:
|
||||||
|
IProfile() : ServiceFramework("IProfile") {
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{1, &IProfile::GetBase, "GetBase"},
|
||||||
|
};
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void GetBase(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
||||||
|
ProfileBase profile_base{};
|
||||||
|
IPC::ResponseBuilder rb{ctx, 16};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushRaw(profile_base);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class IManagerForApplication final : public ServiceFramework<IManagerForApplication> {
|
||||||
|
public:
|
||||||
|
IManagerForApplication() : ServiceFramework("IManagerForApplication") {
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, &IManagerForApplication::CheckAvailability, "CheckAvailability"},
|
||||||
|
{1, &IManagerForApplication::GetAccountId, "GetAccountId"},
|
||||||
|
};
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void CheckAvailability(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.Push(true); // TODO: Check when this is supposed to return true and when not
|
||||||
|
}
|
||||||
|
|
||||||
|
void GetAccountId(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
||||||
|
IPC::ResponseBuilder rb{ctx, 4};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.Push<u64>(0x12345678ABCDEF);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void Module::Interface::GetUserExistence(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.Push(true); // TODO: Check when this is supposed to return true and when not
|
||||||
|
}
|
||||||
|
|
||||||
|
void Module::Interface::ListAllUsers(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
||||||
|
constexpr std::array<u128, 10> user_ids{DEFAULT_USER_ID};
|
||||||
|
ctx.WriteBuffer(user_ids.data(), user_ids.size());
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Module::Interface::ListOpenUsers(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
||||||
|
constexpr std::array<u128, 10> user_ids{DEFAULT_USER_ID};
|
||||||
|
ctx.WriteBuffer(user_ids.data(), user_ids.size());
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Module::Interface::GetProfile(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushIpcInterface<IProfile>();
|
||||||
|
LOG_DEBUG(Service_ACC, "called");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Module::Interface::InitializeApplicationInfo(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Module::Interface::GetBaasAccountManagerForApplication(Kernel::HLERequestContext& ctx) {
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushIpcInterface<IManagerForApplication>();
|
||||||
|
LOG_DEBUG(Service_ACC, "called");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Module::Interface::GetLastOpenedUser(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
||||||
|
IPC::ResponseBuilder rb{ctx, 6};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushRaw(DEFAULT_USER_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
Module::Interface::Interface(std::shared_ptr<Module> module, const char* name)
|
||||||
|
: ServiceFramework(name), module(std::move(module)) {}
|
||||||
|
|
||||||
void InstallInterfaces(SM::ServiceManager& service_manager) {
|
void InstallInterfaces(SM::ServiceManager& service_manager) {
|
||||||
std::make_shared<ACC_U0>()->InstallAsService(service_manager);
|
auto module = std::make_shared<Module>();
|
||||||
|
std::make_shared<ACC_AA>(module)->InstallAsService(service_manager);
|
||||||
|
std::make_shared<ACC_SU>(module)->InstallAsService(service_manager);
|
||||||
|
std::make_shared<ACC_U0>(module)->InstallAsService(service_manager);
|
||||||
|
std::make_shared<ACC_U1>(module)->InstallAsService(service_manager);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Account
|
} // namespace Account
|
||||||
|
|
|
@ -9,6 +9,25 @@
|
||||||
namespace Service {
|
namespace Service {
|
||||||
namespace Account {
|
namespace Account {
|
||||||
|
|
||||||
|
class Module final {
|
||||||
|
public:
|
||||||
|
class Interface : public ServiceFramework<Interface> {
|
||||||
|
public:
|
||||||
|
Interface(std::shared_ptr<Module> module, const char* name);
|
||||||
|
|
||||||
|
void GetUserExistence(Kernel::HLERequestContext& ctx);
|
||||||
|
void ListAllUsers(Kernel::HLERequestContext& ctx);
|
||||||
|
void ListOpenUsers(Kernel::HLERequestContext& ctx);
|
||||||
|
void GetLastOpenedUser(Kernel::HLERequestContext& ctx);
|
||||||
|
void GetProfile(Kernel::HLERequestContext& ctx);
|
||||||
|
void InitializeApplicationInfo(Kernel::HLERequestContext& ctx);
|
||||||
|
void GetBaasAccountManagerForApplication(Kernel::HLERequestContext& ctx);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
std::shared_ptr<Module> module;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
/// Registers all ACC services with the specified service manager.
|
/// Registers all ACC services with the specified service manager.
|
||||||
void InstallInterfaces(SM::ServiceManager& service_manager);
|
void InstallInterfaces(SM::ServiceManager& service_manager);
|
||||||
|
|
||||||
|
|
22
src/core/hle/service/acc/acc_aa.cpp
Normal file
22
src/core/hle/service/acc/acc_aa.cpp
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
// Copyright 2018 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include "core/hle/service/acc/acc_aa.h"
|
||||||
|
|
||||||
|
namespace Service {
|
||||||
|
namespace Account {
|
||||||
|
|
||||||
|
ACC_AA::ACC_AA(std::shared_ptr<Module> module) : Module::Interface(std::move(module), "acc:aa") {
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, nullptr, "EnsureCacheAsync"},
|
||||||
|
{1, nullptr, "LoadCache"},
|
||||||
|
{2, nullptr, "GetDeviceAccountId"},
|
||||||
|
{50, nullptr, "RegisterNotificationTokenAsync"},
|
||||||
|
{51, nullptr, "UnregisterNotificationTokenAsync"},
|
||||||
|
};
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Account
|
||||||
|
} // namespace Service
|
18
src/core/hle/service/acc/acc_aa.h
Normal file
18
src/core/hle/service/acc/acc_aa.h
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
// Copyright 2018 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "core/hle/service/acc/acc.h"
|
||||||
|
|
||||||
|
namespace Service {
|
||||||
|
namespace Account {
|
||||||
|
|
||||||
|
class ACC_AA final : public Module::Interface {
|
||||||
|
public:
|
||||||
|
explicit ACC_AA(std::shared_ptr<Module> module);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Account
|
||||||
|
} // namespace Service
|
55
src/core/hle/service/acc/acc_su.cpp
Normal file
55
src/core/hle/service/acc/acc_su.cpp
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
// Copyright 2018 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include "core/hle/service/acc/acc_su.h"
|
||||||
|
|
||||||
|
namespace Service {
|
||||||
|
namespace Account {
|
||||||
|
|
||||||
|
ACC_SU::ACC_SU(std::shared_ptr<Module> module) : Module::Interface(std::move(module), "acc:su") {
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, nullptr, "GetUserCount"},
|
||||||
|
{1, &ACC_SU::GetUserExistence, "GetUserExistence"},
|
||||||
|
{2, &ACC_SU::ListAllUsers, "ListAllUsers"},
|
||||||
|
{3, &ACC_SU::ListOpenUsers, "ListOpenUsers"},
|
||||||
|
{4, &ACC_SU::GetLastOpenedUser, "GetLastOpenedUser"},
|
||||||
|
{5, &ACC_SU::GetProfile, "GetProfile"},
|
||||||
|
{6, nullptr, "GetProfileDigest"},
|
||||||
|
{50, nullptr, "IsUserRegistrationRequestPermitted"},
|
||||||
|
{51, nullptr, "TrySelectUserWithoutInteraction"},
|
||||||
|
{60, nullptr, "ListOpenContextStoredUsers"},
|
||||||
|
{100, nullptr, "GetUserRegistrationNotifier"},
|
||||||
|
{101, nullptr, "GetUserStateChangeNotifier"},
|
||||||
|
{102, nullptr, "GetBaasAccountManagerForSystemService"},
|
||||||
|
{103, nullptr, "GetBaasUserAvailabilityChangeNotifier"},
|
||||||
|
{104, nullptr, "GetProfileUpdateNotifier"},
|
||||||
|
{105, nullptr, "CheckNetworkServiceAvailabilityAsync"},
|
||||||
|
{110, nullptr, "StoreSaveDataThumbnail"},
|
||||||
|
{111, nullptr, "ClearSaveDataThumbnail"},
|
||||||
|
{112, nullptr, "LoadSaveDataThumbnail"},
|
||||||
|
{113, nullptr, "GetSaveDataThumbnailExistence"},
|
||||||
|
{190, nullptr, "GetUserLastOpenedApplication"},
|
||||||
|
{191, nullptr, "ActivateOpenContextHolder"},
|
||||||
|
{200, nullptr, "BeginUserRegistration"},
|
||||||
|
{201, nullptr, "CompleteUserRegistration"},
|
||||||
|
{202, nullptr, "CancelUserRegistration"},
|
||||||
|
{203, nullptr, "DeleteUser"},
|
||||||
|
{204, nullptr, "SetUserPosition"},
|
||||||
|
{205, nullptr, "GetProfileEditor"},
|
||||||
|
{206, nullptr, "CompleteUserRegistrationForcibly"},
|
||||||
|
{210, nullptr, "CreateFloatingRegistrationRequest"},
|
||||||
|
{230, nullptr, "AuthenticateServiceAsync"},
|
||||||
|
{250, nullptr, "GetBaasAccountAdministrator"},
|
||||||
|
{290, nullptr, "ProxyProcedureForGuestLoginWithNintendoAccount"},
|
||||||
|
{291, nullptr, "ProxyProcedureForFloatingRegistrationWithNintendoAccount"},
|
||||||
|
{299, nullptr, "SuspendBackgroundDaemon"},
|
||||||
|
{997, nullptr, "DebugInvalidateTokenCacheForUser"},
|
||||||
|
{998, nullptr, "DebugSetUserStateClose"},
|
||||||
|
{999, nullptr, "DebugSetUserStateOpen"},
|
||||||
|
};
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Account
|
||||||
|
} // namespace Service
|
18
src/core/hle/service/acc/acc_su.h
Normal file
18
src/core/hle/service/acc/acc_su.h
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
// Copyright 2018 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "core/hle/service/acc/acc.h"
|
||||||
|
|
||||||
|
namespace Service {
|
||||||
|
namespace Account {
|
||||||
|
|
||||||
|
class ACC_SU final : public Module::Interface {
|
||||||
|
public:
|
||||||
|
explicit ACC_SU(std::shared_ptr<Module> module);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Account
|
||||||
|
} // namespace Service
|
|
@ -2,120 +2,31 @@
|
||||||
// Licensed under GPLv2 or any later version
|
// Licensed under GPLv2 or any later version
|
||||||
// Refer to the license.txt file included.
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
#include "common/logging/log.h"
|
|
||||||
#include "core/hle/ipc_helpers.h"
|
|
||||||
#include "core/hle/service/acc/acc_u0.h"
|
#include "core/hle/service/acc/acc_u0.h"
|
||||||
|
|
||||||
namespace Service {
|
namespace Service {
|
||||||
namespace Account {
|
namespace Account {
|
||||||
|
|
||||||
using Uid = std::array<u64, 2>;
|
ACC_U0::ACC_U0(std::shared_ptr<Module> module) : Module::Interface(std::move(module), "acc:u0") {
|
||||||
static constexpr Uid DEFAULT_USER_ID{0x10ull, 0x20ull};
|
|
||||||
|
|
||||||
class IProfile final : public ServiceFramework<IProfile> {
|
|
||||||
public:
|
|
||||||
IProfile() : ServiceFramework("IProfile") {
|
|
||||||
static const FunctionInfo functions[] = {
|
|
||||||
{1, &IProfile::GetBase, "GetBase"},
|
|
||||||
};
|
|
||||||
RegisterHandlers(functions);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
void GetBase(Kernel::HLERequestContext& ctx) {
|
|
||||||
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
|
||||||
ProfileBase profile_base{};
|
|
||||||
IPC::ResponseBuilder rb{ctx, 16};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
rb.PushRaw(profile_base);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class IManagerForApplication final : public ServiceFramework<IManagerForApplication> {
|
|
||||||
public:
|
|
||||||
IManagerForApplication() : ServiceFramework("IManagerForApplication") {
|
|
||||||
static const FunctionInfo functions[] = {
|
|
||||||
{0, &IManagerForApplication::CheckAvailability, "CheckAvailability"},
|
|
||||||
{1, &IManagerForApplication::GetAccountId, "GetAccountId"},
|
|
||||||
};
|
|
||||||
RegisterHandlers(functions);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
void CheckAvailability(Kernel::HLERequestContext& ctx) {
|
|
||||||
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
|
||||||
IPC::ResponseBuilder rb{ctx, 3};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
rb.Push(true); // TODO: Check when this is supposed to return true and when not
|
|
||||||
}
|
|
||||||
|
|
||||||
void GetAccountId(Kernel::HLERequestContext& ctx) {
|
|
||||||
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
|
||||||
IPC::ResponseBuilder rb{ctx, 4};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
rb.Push<u64>(0x12345678ABCDEF);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void ACC_U0::GetUserExistence(Kernel::HLERequestContext& ctx) {
|
|
||||||
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
|
||||||
IPC::ResponseBuilder rb{ctx, 3};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
rb.Push(true); // TODO: Check when this is supposed to return true and when not
|
|
||||||
}
|
|
||||||
|
|
||||||
void ACC_U0::ListAllUsers(Kernel::HLERequestContext& ctx) {
|
|
||||||
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
|
||||||
constexpr std::array<u128, 10> user_ids{DEFAULT_USER_ID};
|
|
||||||
ctx.WriteBuffer(user_ids.data(), user_ids.size());
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ACC_U0::ListOpenUsers(Kernel::HLERequestContext& ctx) {
|
|
||||||
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
|
||||||
constexpr std::array<u128, 10> user_ids{DEFAULT_USER_ID};
|
|
||||||
ctx.WriteBuffer(user_ids.data(), user_ids.size());
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ACC_U0::GetProfile(Kernel::HLERequestContext& ctx) {
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
rb.PushIpcInterface<IProfile>();
|
|
||||||
LOG_DEBUG(Service_ACC, "called");
|
|
||||||
}
|
|
||||||
|
|
||||||
void ACC_U0::InitializeApplicationInfo(Kernel::HLERequestContext& ctx) {
|
|
||||||
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ACC_U0::GetBaasAccountManagerForApplication(Kernel::HLERequestContext& ctx) {
|
|
||||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
rb.PushIpcInterface<IManagerForApplication>();
|
|
||||||
LOG_DEBUG(Service_ACC, "called");
|
|
||||||
}
|
|
||||||
|
|
||||||
void ACC_U0::GetLastOpenedUser(Kernel::HLERequestContext& ctx) {
|
|
||||||
LOG_WARNING(Service_ACC, "(STUBBED) called");
|
|
||||||
IPC::ResponseBuilder rb{ctx, 6};
|
|
||||||
rb.Push(RESULT_SUCCESS);
|
|
||||||
rb.PushRaw(DEFAULT_USER_ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
ACC_U0::ACC_U0() : ServiceFramework("acc:u0") {
|
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, nullptr, "GetUserCount"},
|
||||||
{1, &ACC_U0::GetUserExistence, "GetUserExistence"},
|
{1, &ACC_U0::GetUserExistence, "GetUserExistence"},
|
||||||
{2, &ACC_U0::ListAllUsers, "ListAllUsers"},
|
{2, &ACC_U0::ListAllUsers, "ListAllUsers"},
|
||||||
{3, &ACC_U0::ListOpenUsers, "ListOpenUsers"},
|
{3, &ACC_U0::ListOpenUsers, "ListOpenUsers"},
|
||||||
{4, &ACC_U0::GetLastOpenedUser, "GetLastOpenedUser"},
|
{4, &ACC_U0::GetLastOpenedUser, "GetLastOpenedUser"},
|
||||||
{5, &ACC_U0::GetProfile, "GetProfile"},
|
{5, &ACC_U0::GetProfile, "GetProfile"},
|
||||||
|
{6, nullptr, "GetProfileDigest"},
|
||||||
|
{50, nullptr, "IsUserRegistrationRequestPermitted"},
|
||||||
|
{51, nullptr, "TrySelectUserWithoutInteraction"},
|
||||||
|
{60, nullptr, "ListOpenContextStoredUsers"},
|
||||||
{100, &ACC_U0::InitializeApplicationInfo, "InitializeApplicationInfo"},
|
{100, &ACC_U0::InitializeApplicationInfo, "InitializeApplicationInfo"},
|
||||||
{101, &ACC_U0::GetBaasAccountManagerForApplication, "GetBaasAccountManagerForApplication"},
|
{101, &ACC_U0::GetBaasAccountManagerForApplication, "GetBaasAccountManagerForApplication"},
|
||||||
|
{102, nullptr, "AuthenticateApplicationAsync"},
|
||||||
|
{103, nullptr, "CheckNetworkServiceAvailabilityAsync"},
|
||||||
|
{110, nullptr, "StoreSaveDataThumbnail"},
|
||||||
|
{111, nullptr, "ClearSaveDataThumbnail"},
|
||||||
|
{120, nullptr, "CreateGuestLoginRequest"},
|
||||||
|
{130, nullptr, "LoadOpenContext"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,36 +4,14 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "core/hle/service/service.h"
|
#include "core/hle/service/acc/acc.h"
|
||||||
|
|
||||||
namespace Service {
|
namespace Service {
|
||||||
namespace Account {
|
namespace Account {
|
||||||
|
|
||||||
// TODO: RE this structure
|
class ACC_U0 final : public Module::Interface {
|
||||||
struct UserData {
|
|
||||||
INSERT_PADDING_BYTES(0x80);
|
|
||||||
};
|
|
||||||
static_assert(sizeof(UserData) == 0x80, "UserData structure has incorrect size");
|
|
||||||
|
|
||||||
// TODO: RE this structure
|
|
||||||
struct ProfileBase {
|
|
||||||
INSERT_PADDING_BYTES(0x38);
|
|
||||||
};
|
|
||||||
static_assert(sizeof(ProfileBase) == 0x38, "ProfileBase structure has incorrect size");
|
|
||||||
|
|
||||||
class ACC_U0 final : public ServiceFramework<ACC_U0> {
|
|
||||||
public:
|
public:
|
||||||
ACC_U0();
|
explicit ACC_U0(std::shared_ptr<Module> module);
|
||||||
~ACC_U0() = default;
|
|
||||||
|
|
||||||
private:
|
|
||||||
void GetUserExistence(Kernel::HLERequestContext& ctx);
|
|
||||||
void ListAllUsers(Kernel::HLERequestContext& ctx);
|
|
||||||
void ListOpenUsers(Kernel::HLERequestContext& ctx);
|
|
||||||
void GetLastOpenedUser(Kernel::HLERequestContext& ctx);
|
|
||||||
void GetProfile(Kernel::HLERequestContext& ctx);
|
|
||||||
void InitializeApplicationInfo(Kernel::HLERequestContext& ctx);
|
|
||||||
void GetBaasAccountManagerForApplication(Kernel::HLERequestContext& ctx);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Account
|
} // namespace Account
|
||||||
|
|
42
src/core/hle/service/acc/acc_u1.cpp
Normal file
42
src/core/hle/service/acc/acc_u1.cpp
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// Copyright 2018 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include "core/hle/service/acc/acc_u1.h"
|
||||||
|
|
||||||
|
namespace Service {
|
||||||
|
namespace Account {
|
||||||
|
|
||||||
|
ACC_U1::ACC_U1(std::shared_ptr<Module> module) : Module::Interface(std::move(module), "acc:u1") {
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, nullptr, "GetUserCount"},
|
||||||
|
{1, &ACC_U1::GetUserExistence, "GetUserExistence"},
|
||||||
|
{2, &ACC_U1::ListAllUsers, "ListAllUsers"},
|
||||||
|
{3, &ACC_U1::ListOpenUsers, "ListOpenUsers"},
|
||||||
|
{4, &ACC_U1::GetLastOpenedUser, "GetLastOpenedUser"},
|
||||||
|
{5, &ACC_U1::GetProfile, "GetProfile"},
|
||||||
|
{6, nullptr, "GetProfileDigest"},
|
||||||
|
{50, nullptr, "IsUserRegistrationRequestPermitted"},
|
||||||
|
{51, nullptr, "TrySelectUserWithoutInteraction"},
|
||||||
|
{60, nullptr, "ListOpenContextStoredUsers"},
|
||||||
|
{100, nullptr, "GetUserRegistrationNotifier"},
|
||||||
|
{101, nullptr, "GetUserStateChangeNotifier"},
|
||||||
|
{102, nullptr, "GetBaasAccountManagerForSystemService"},
|
||||||
|
{103, nullptr, "GetProfileUpdateNotifier"},
|
||||||
|
{104, nullptr, "CheckNetworkServiceAvailabilityAsync"},
|
||||||
|
{105, nullptr, "GetBaasUserAvailabilityChangeNotifier"},
|
||||||
|
{110, nullptr, "StoreSaveDataThumbnail"},
|
||||||
|
{111, nullptr, "ClearSaveDataThumbnail"},
|
||||||
|
{112, nullptr, "LoadSaveDataThumbnail"},
|
||||||
|
{113, nullptr, "GetSaveDataThumbnailExistence"},
|
||||||
|
{190, nullptr, "GetUserLastOpenedApplication"},
|
||||||
|
{191, nullptr, "ActivateOpenContextHolder"},
|
||||||
|
{997, nullptr, "DebugInvalidateTokenCacheForUser"},
|
||||||
|
{998, nullptr, "DebugSetUserStateClose"},
|
||||||
|
{999, nullptr, "DebugSetUserStateOpen"},
|
||||||
|
};
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Account
|
||||||
|
} // namespace Service
|
18
src/core/hle/service/acc/acc_u1.h
Normal file
18
src/core/hle/service/acc/acc_u1.h
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
// Copyright 2018 yuzu emulator team
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "core/hle/service/acc/acc.h"
|
||||||
|
|
||||||
|
namespace Service {
|
||||||
|
namespace Account {
|
||||||
|
|
||||||
|
class ACC_U1 final : public Module::Interface {
|
||||||
|
public:
|
||||||
|
explicit ACC_U1(std::shared_ptr<Module> module);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Account
|
||||||
|
} // namespace Service
|
|
@ -19,8 +19,11 @@ namespace AM {
|
||||||
|
|
||||||
IWindowController::IWindowController() : ServiceFramework("IWindowController") {
|
IWindowController::IWindowController() : ServiceFramework("IWindowController") {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, nullptr, "CreateWindow"},
|
||||||
{1, &IWindowController::GetAppletResourceUserId, "GetAppletResourceUserId"},
|
{1, &IWindowController::GetAppletResourceUserId, "GetAppletResourceUserId"},
|
||||||
{10, &IWindowController::AcquireForegroundRights, "AcquireForegroundRights"},
|
{10, &IWindowController::AcquireForegroundRights, "AcquireForegroundRights"},
|
||||||
|
{11, nullptr, "ReleaseForegroundRights"},
|
||||||
|
{12, nullptr, "RejectToChangeIntoBackground"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
@ -78,8 +81,11 @@ IDebugFunctions::IDebugFunctions() : ServiceFramework("IDebugFunctions") {}
|
||||||
ISelfController::ISelfController(std::shared_ptr<NVFlinger::NVFlinger> nvflinger)
|
ISelfController::ISelfController(std::shared_ptr<NVFlinger::NVFlinger> nvflinger)
|
||||||
: ServiceFramework("ISelfController"), nvflinger(std::move(nvflinger)) {
|
: ServiceFramework("ISelfController"), nvflinger(std::move(nvflinger)) {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, nullptr, "Exit"},
|
||||||
{1, &ISelfController::LockExit, "LockExit"},
|
{1, &ISelfController::LockExit, "LockExit"},
|
||||||
{2, &ISelfController::UnlockExit, "UnlockExit"},
|
{2, &ISelfController::UnlockExit, "UnlockExit"},
|
||||||
|
{3, nullptr, "EnterFatalSection"},
|
||||||
|
{4, nullptr, "LeaveFatalSection"},
|
||||||
{9, &ISelfController::GetLibraryAppletLaunchableEvent, "GetLibraryAppletLaunchableEvent"},
|
{9, &ISelfController::GetLibraryAppletLaunchableEvent, "GetLibraryAppletLaunchableEvent"},
|
||||||
{10, &ISelfController::SetScreenShotPermission, "SetScreenShotPermission"},
|
{10, &ISelfController::SetScreenShotPermission, "SetScreenShotPermission"},
|
||||||
{11, &ISelfController::SetOperationModeChangedNotification,
|
{11, &ISelfController::SetOperationModeChangedNotification,
|
||||||
|
@ -88,8 +94,29 @@ ISelfController::ISelfController(std::shared_ptr<NVFlinger::NVFlinger> nvflinger
|
||||||
"SetPerformanceModeChangedNotification"},
|
"SetPerformanceModeChangedNotification"},
|
||||||
{13, &ISelfController::SetFocusHandlingMode, "SetFocusHandlingMode"},
|
{13, &ISelfController::SetFocusHandlingMode, "SetFocusHandlingMode"},
|
||||||
{14, &ISelfController::SetRestartMessageEnabled, "SetRestartMessageEnabled"},
|
{14, &ISelfController::SetRestartMessageEnabled, "SetRestartMessageEnabled"},
|
||||||
|
{15, nullptr, "SetScreenShotAppletIdentityInfo"},
|
||||||
{16, &ISelfController::SetOutOfFocusSuspendingEnabled, "SetOutOfFocusSuspendingEnabled"},
|
{16, &ISelfController::SetOutOfFocusSuspendingEnabled, "SetOutOfFocusSuspendingEnabled"},
|
||||||
|
{17, nullptr, "SetControllerFirmwareUpdateSection"},
|
||||||
|
{18, nullptr, "SetRequiresCaptureButtonShortPressedMessage"},
|
||||||
|
{19, nullptr, "SetScreenShotImageOrientation"},
|
||||||
|
{20, nullptr, "SetDesirableKeyboardLayout"},
|
||||||
{40, &ISelfController::CreateManagedDisplayLayer, "CreateManagedDisplayLayer"},
|
{40, &ISelfController::CreateManagedDisplayLayer, "CreateManagedDisplayLayer"},
|
||||||
|
{41, nullptr, "IsSystemBufferSharingEnabled"},
|
||||||
|
{42, nullptr, "GetSystemSharedLayerHandle"},
|
||||||
|
{50, nullptr, "SetHandlesRequestToDisplay"},
|
||||||
|
{51, nullptr, "ApproveToDisplay"},
|
||||||
|
{60, nullptr, "OverrideAutoSleepTimeAndDimmingTime"},
|
||||||
|
{61, nullptr, "SetMediaPlaybackState"},
|
||||||
|
{62, nullptr, "SetIdleTimeDetectionExtension"},
|
||||||
|
{63, nullptr, "GetIdleTimeDetectionExtension"},
|
||||||
|
{64, nullptr, "SetInputDetectionSourceSet"},
|
||||||
|
{65, nullptr, "ReportUserIsActive"},
|
||||||
|
{66, nullptr, "GetCurrentIlluminance"},
|
||||||
|
{67, nullptr, "IsIlluminanceAvailable"},
|
||||||
|
{68, nullptr, "SetAutoSleepDisabled"},
|
||||||
|
{69, nullptr, "IsAutoSleepDisabled"},
|
||||||
|
{70, nullptr, "ReportMultimediaError"},
|
||||||
|
{80, nullptr, "SetWirelessPriorityMode"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
|
|
||||||
|
@ -206,9 +233,30 @@ ICommonStateGetter::ICommonStateGetter() : ServiceFramework("ICommonStateGetter"
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &ICommonStateGetter::GetEventHandle, "GetEventHandle"},
|
{0, &ICommonStateGetter::GetEventHandle, "GetEventHandle"},
|
||||||
{1, &ICommonStateGetter::ReceiveMessage, "ReceiveMessage"},
|
{1, &ICommonStateGetter::ReceiveMessage, "ReceiveMessage"},
|
||||||
|
{2, nullptr, "GetThisAppletKind"},
|
||||||
|
{3, nullptr, "AllowToEnterSleep"},
|
||||||
|
{4, nullptr, "DisallowToEnterSleep"},
|
||||||
{5, &ICommonStateGetter::GetOperationMode, "GetOperationMode"},
|
{5, &ICommonStateGetter::GetOperationMode, "GetOperationMode"},
|
||||||
{6, &ICommonStateGetter::GetPerformanceMode, "GetPerformanceMode"},
|
{6, &ICommonStateGetter::GetPerformanceMode, "GetPerformanceMode"},
|
||||||
|
{7, nullptr, "GetCradleStatus"},
|
||||||
|
{8, nullptr, "GetBootMode"},
|
||||||
{9, &ICommonStateGetter::GetCurrentFocusState, "GetCurrentFocusState"},
|
{9, &ICommonStateGetter::GetCurrentFocusState, "GetCurrentFocusState"},
|
||||||
|
{10, nullptr, "RequestToAcquireSleepLock"},
|
||||||
|
{11, nullptr, "ReleaseSleepLock"},
|
||||||
|
{12, nullptr, "ReleaseSleepLockTransiently"},
|
||||||
|
{13, nullptr, "GetAcquiredSleepLockEvent"},
|
||||||
|
{20, nullptr, "PushToGeneralChannel"},
|
||||||
|
{30, nullptr, "GetHomeButtonReaderLockAccessor"},
|
||||||
|
{31, nullptr, "GetReaderLockAccessorEx"},
|
||||||
|
{40, nullptr, "GetCradleFwVersion"},
|
||||||
|
{50, nullptr, "IsVrModeEnabled"},
|
||||||
|
{51, nullptr, "SetVrModeEnabled"},
|
||||||
|
{52, nullptr, "SwitchLcdBacklight"},
|
||||||
|
{55, nullptr, "IsInControllerFirmwareUpdateSection"},
|
||||||
|
{60, nullptr, "GetDefaultDisplayResolution"},
|
||||||
|
{61, nullptr, "GetDefaultDisplayResolutionChangeEvent"},
|
||||||
|
{62, nullptr, "GetHdcpAuthenticationState"},
|
||||||
|
{63, nullptr, "GetHdcpAuthenticationStateChangeEvent"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
|
|
||||||
|
@ -278,7 +326,7 @@ public:
|
||||||
{104, nullptr, "PopInteractiveOutData"},
|
{104, nullptr, "PopInteractiveOutData"},
|
||||||
{105, nullptr, "GetPopOutDataEvent"},
|
{105, nullptr, "GetPopOutDataEvent"},
|
||||||
{106, nullptr, "GetPopInteractiveOutDataEvent"},
|
{106, nullptr, "GetPopInteractiveOutDataEvent"},
|
||||||
{120, nullptr, "NeedsToExitProcess"},
|
{110, nullptr, "NeedsToExitProcess"},
|
||||||
{120, nullptr, "GetLibraryAppletInfo"},
|
{120, nullptr, "GetLibraryAppletInfo"},
|
||||||
{150, nullptr, "RequestForAppletToGetForeground"},
|
{150, nullptr, "RequestForAppletToGetForeground"},
|
||||||
{160, nullptr, "GetIndirectLayerConsumerHandle"},
|
{160, nullptr, "GetIndirectLayerConsumerHandle"},
|
||||||
|
@ -330,6 +378,7 @@ public:
|
||||||
: ServiceFramework("IStorageAccessor"), buffer(std::move(buffer)) {
|
: ServiceFramework("IStorageAccessor"), buffer(std::move(buffer)) {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &IStorageAccessor::GetSize, "GetSize"},
|
{0, &IStorageAccessor::GetSize, "GetSize"},
|
||||||
|
{10, nullptr, "Write"},
|
||||||
{11, &IStorageAccessor::Read, "Read"},
|
{11, &IStorageAccessor::Read, "Read"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
|
@ -372,6 +421,7 @@ public:
|
||||||
: ServiceFramework("IStorage"), buffer(std::move(buffer)) {
|
: ServiceFramework("IStorage"), buffer(std::move(buffer)) {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &IStorage::Open, "Open"},
|
{0, &IStorage::Open, "Open"},
|
||||||
|
{1, nullptr, "OpenTransferStorage"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
@ -392,12 +442,42 @@ private:
|
||||||
IApplicationFunctions::IApplicationFunctions() : ServiceFramework("IApplicationFunctions") {
|
IApplicationFunctions::IApplicationFunctions() : ServiceFramework("IApplicationFunctions") {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{1, &IApplicationFunctions::PopLaunchParameter, "PopLaunchParameter"},
|
{1, &IApplicationFunctions::PopLaunchParameter, "PopLaunchParameter"},
|
||||||
|
{10, nullptr, "CreateApplicationAndPushAndRequestToStart"},
|
||||||
|
{11, nullptr, "CreateApplicationAndPushAndRequestToStartForQuest"},
|
||||||
|
{12, nullptr, "CreateApplicationAndRequestToStart"},
|
||||||
|
{13, nullptr, "CreateApplicationAndRequestToStartForQuest"},
|
||||||
{20, &IApplicationFunctions::EnsureSaveData, "EnsureSaveData"},
|
{20, &IApplicationFunctions::EnsureSaveData, "EnsureSaveData"},
|
||||||
{21, &IApplicationFunctions::GetDesiredLanguage, "GetDesiredLanguage"},
|
{21, &IApplicationFunctions::GetDesiredLanguage, "GetDesiredLanguage"},
|
||||||
{22, &IApplicationFunctions::SetTerminateResult, "SetTerminateResult"},
|
{22, &IApplicationFunctions::SetTerminateResult, "SetTerminateResult"},
|
||||||
|
{23, nullptr, "GetDisplayVersion"},
|
||||||
|
{24, nullptr, "GetLaunchStorageInfoForDebug"},
|
||||||
|
{25, nullptr, "ExtendSaveData"},
|
||||||
|
{26, nullptr, "GetSaveDataSize"},
|
||||||
|
{30, nullptr, "BeginBlockingHomeButtonShortAndLongPressed"},
|
||||||
|
{31, nullptr, "EndBlockingHomeButtonShortAndLongPressed"},
|
||||||
|
{32, nullptr, "BeginBlockingHomeButton"},
|
||||||
|
{33, nullptr, "EndBlockingHomeButton"},
|
||||||
|
{40, &IApplicationFunctions::NotifyRunning, "NotifyRunning"},
|
||||||
|
{50, nullptr, "GetPseudoDeviceId"},
|
||||||
|
{60, nullptr, "SetMediaPlaybackStateForApplication"},
|
||||||
|
{65, nullptr, "IsGamePlayRecordingSupported"},
|
||||||
{66, &IApplicationFunctions::InitializeGamePlayRecording, "InitializeGamePlayRecording"},
|
{66, &IApplicationFunctions::InitializeGamePlayRecording, "InitializeGamePlayRecording"},
|
||||||
{67, &IApplicationFunctions::SetGamePlayRecordingState, "SetGamePlayRecordingState"},
|
{67, &IApplicationFunctions::SetGamePlayRecordingState, "SetGamePlayRecordingState"},
|
||||||
{40, &IApplicationFunctions::NotifyRunning, "NotifyRunning"},
|
{68, nullptr, "RequestFlushGamePlayingMovieForDebug"},
|
||||||
|
{70, nullptr, "RequestToShutdown"},
|
||||||
|
{71, nullptr, "RequestToReboot"},
|
||||||
|
{80, nullptr, "ExitAndRequestToShowThanksMessage"},
|
||||||
|
{90, nullptr, "EnableApplicationCrashReport"},
|
||||||
|
{100, nullptr, "InitializeApplicationCopyrightFrameBuffer"},
|
||||||
|
{101, nullptr, "SetApplicationCopyrightImage"},
|
||||||
|
{102, nullptr, "SetApplicationCopyrightVisibility"},
|
||||||
|
{110, nullptr, "QueryApplicationPlayStatistics"},
|
||||||
|
{120, nullptr, "ExecuteProgram"},
|
||||||
|
{121, nullptr, "ClearUserChannel"},
|
||||||
|
{122, nullptr, "UnpopToUserChannel"},
|
||||||
|
{500, nullptr, "StartContinuousRecordingFlushForDebug"},
|
||||||
|
{1000, nullptr, "CreateMovieMaker"},
|
||||||
|
{1001, nullptr, "PrepareForJit"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ public:
|
||||||
{2, &ILibraryAppletProxy::GetWindowController, "GetWindowController"},
|
{2, &ILibraryAppletProxy::GetWindowController, "GetWindowController"},
|
||||||
{3, &ILibraryAppletProxy::GetAudioController, "GetAudioController"},
|
{3, &ILibraryAppletProxy::GetAudioController, "GetAudioController"},
|
||||||
{4, &ILibraryAppletProxy::GetDisplayController, "GetDisplayController"},
|
{4, &ILibraryAppletProxy::GetDisplayController, "GetDisplayController"},
|
||||||
|
{10, nullptr, "GetProcessWindingController"},
|
||||||
{11, &ILibraryAppletProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"},
|
{11, &ILibraryAppletProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"},
|
||||||
{20, &ILibraryAppletProxy::GetApplicationFunctions, "GetApplicationFunctions"},
|
{20, &ILibraryAppletProxy::GetApplicationFunctions, "GetApplicationFunctions"},
|
||||||
{1000, &ILibraryAppletProxy::GetDebugFunctions, "GetDebugFunctions"},
|
{1000, &ILibraryAppletProxy::GetDebugFunctions, "GetDebugFunctions"},
|
||||||
|
|
|
@ -21,6 +21,7 @@ public:
|
||||||
{2, &IApplicationProxy::GetWindowController, "GetWindowController"},
|
{2, &IApplicationProxy::GetWindowController, "GetWindowController"},
|
||||||
{3, &IApplicationProxy::GetAudioController, "GetAudioController"},
|
{3, &IApplicationProxy::GetAudioController, "GetAudioController"},
|
||||||
{4, &IApplicationProxy::GetDisplayController, "GetDisplayController"},
|
{4, &IApplicationProxy::GetDisplayController, "GetDisplayController"},
|
||||||
|
{10, nullptr, "GetProcessWindingController"},
|
||||||
{11, &IApplicationProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"},
|
{11, &IApplicationProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"},
|
||||||
{20, &IApplicationProxy::GetApplicationFunctions, "GetApplicationFunctions"},
|
{20, &IApplicationProxy::GetApplicationFunctions, "GetApplicationFunctions"},
|
||||||
{1000, &IApplicationProxy::GetDebugFunctions, "GetDebugFunctions"},
|
{1000, &IApplicationProxy::GetDebugFunctions, "GetDebugFunctions"},
|
||||||
|
|
|
@ -19,6 +19,7 @@ AOC_U::AOC_U() : ServiceFramework("aoc:u") {
|
||||||
{5, nullptr, "GetAddOnContentBaseId"},
|
{5, nullptr, "GetAddOnContentBaseId"},
|
||||||
{6, nullptr, "PrepareAddOnContentByApplicationId"},
|
{6, nullptr, "PrepareAddOnContentByApplicationId"},
|
||||||
{7, nullptr, "PrepareAddOnContent"},
|
{7, nullptr, "PrepareAddOnContent"},
|
||||||
|
{8, nullptr, "GetAddOnContentListChangedEvent"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,15 +14,20 @@ class IAudioIn final : public ServiceFramework<IAudioIn> {
|
||||||
public:
|
public:
|
||||||
IAudioIn() : ServiceFramework("IAudioIn") {
|
IAudioIn() : ServiceFramework("IAudioIn") {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0x0, nullptr, "GetAudioInState"},
|
{0, nullptr, "GetAudioInState"},
|
||||||
{0x1, nullptr, "StartAudioIn"},
|
{1, nullptr, "StartAudioIn"},
|
||||||
{0x2, nullptr, "StopAudioIn"},
|
{2, nullptr, "StopAudioIn"},
|
||||||
{0x3, nullptr, "AppendAudioInBuffer_1"},
|
{3, nullptr, "AppendAudioInBuffer"},
|
||||||
{0x4, nullptr, "RegisterBufferEvent"},
|
{4, nullptr, "RegisterBufferEvent"},
|
||||||
{0x5, nullptr, "GetReleasedAudioInBuffer_1"},
|
{5, nullptr, "GetReleasedAudioInBuffer"},
|
||||||
{0x6, nullptr, "ContainsAudioInBuffer"},
|
{6, nullptr, "ContainsAudioInBuffer"},
|
||||||
{0x7, nullptr, "AppendAudioInBuffer_2"},
|
{7, nullptr, "AppendAudioInBufferWithUserEvent"},
|
||||||
{0x8, nullptr, "GetReleasedAudioInBuffer_2"},
|
{8, nullptr, "AppendAudioInBufferAuto"},
|
||||||
|
{9, nullptr, "GetReleasedAudioInBufferAuto"},
|
||||||
|
{10, nullptr, "AppendAudioInBufferWithUserEventAuto"},
|
||||||
|
{11, nullptr, "GetAudioInBufferCount"},
|
||||||
|
{12, nullptr, "SetAudioInDeviceGain"},
|
||||||
|
{13, nullptr, "GetAudioInDeviceGain"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
@ -31,8 +36,10 @@ public:
|
||||||
|
|
||||||
AudInU::AudInU() : ServiceFramework("audin:u") {
|
AudInU::AudInU() : ServiceFramework("audin:u") {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0x00000000, nullptr, "ListAudioIns"},
|
{0, nullptr, "ListAudioIns"},
|
||||||
{0x00000001, nullptr, "OpenAudioIn"},
|
{1, nullptr, "OpenAudioIn"},
|
||||||
|
{3, nullptr, "OpenAudioInAuto"},
|
||||||
|
{4, nullptr, "ListAudioInsAuto"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,15 +25,18 @@ class IAudioOut final : public ServiceFramework<IAudioOut> {
|
||||||
public:
|
public:
|
||||||
IAudioOut() : ServiceFramework("IAudioOut"), audio_out_state(AudioState::Stopped) {
|
IAudioOut() : ServiceFramework("IAudioOut"), audio_out_state(AudioState::Stopped) {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0x0, &IAudioOut::GetAudioOutState, "GetAudioOutState"},
|
{0, &IAudioOut::GetAudioOutState, "GetAudioOutState"},
|
||||||
{0x1, &IAudioOut::StartAudioOut, "StartAudioOut"},
|
{1, &IAudioOut::StartAudioOut, "StartAudioOut"},
|
||||||
{0x2, &IAudioOut::StopAudioOut, "StopAudioOut"},
|
{2, &IAudioOut::StopAudioOut, "StopAudioOut"},
|
||||||
{0x3, &IAudioOut::AppendAudioOutBuffer_1, "AppendAudioOutBuffer_1"},
|
{3, &IAudioOut::AppendAudioOutBuffer, "AppendAudioOutBuffer"},
|
||||||
{0x4, &IAudioOut::RegisterBufferEvent, "RegisterBufferEvent"},
|
{4, &IAudioOut::RegisterBufferEvent, "RegisterBufferEvent"},
|
||||||
{0x5, &IAudioOut::GetReleasedAudioOutBuffer_1, "GetReleasedAudioOutBuffer_1"},
|
{5, &IAudioOut::GetReleasedAudioOutBuffer, "GetReleasedAudioOutBuffer"},
|
||||||
{0x6, nullptr, "ContainsAudioOutBuffer"},
|
{6, nullptr, "ContainsAudioOutBuffer"},
|
||||||
{0x7, nullptr, "AppendAudioOutBuffer_2"},
|
{7, nullptr, "AppendAudioOutBufferAuto"},
|
||||||
{0x8, nullptr, "GetReleasedAudioOutBuffer_2"},
|
{8, nullptr, "GetReleasedAudioOutBufferAuto"},
|
||||||
|
{9, nullptr, "GetAudioOutBufferCount"},
|
||||||
|
{10, nullptr, "GetAudioOutPlayedSampleCount"},
|
||||||
|
{11, nullptr, "FlushAudioOutBuffers"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
|
|
||||||
|
@ -94,7 +97,7 @@ private:
|
||||||
rb.PushCopyObjects(buffer_event);
|
rb.PushCopyObjects(buffer_event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppendAudioOutBuffer_1(Kernel::HLERequestContext& ctx) {
|
void AppendAudioOutBuffer(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_WARNING(Service_Audio, "(STUBBED) called");
|
LOG_WARNING(Service_Audio, "(STUBBED) called");
|
||||||
IPC::RequestParser rp{ctx};
|
IPC::RequestParser rp{ctx};
|
||||||
|
|
||||||
|
@ -105,7 +108,7 @@ private:
|
||||||
rb.Push(RESULT_SUCCESS);
|
rb.Push(RESULT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GetReleasedAudioOutBuffer_1(Kernel::HLERequestContext& ctx) {
|
void GetReleasedAudioOutBuffer(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_WARNING(Service_Audio, "(STUBBED) called");
|
LOG_WARNING(Service_Audio, "(STUBBED) called");
|
||||||
|
|
||||||
// TODO(st4rk): This is how libtransistor currently implements the
|
// TODO(st4rk): This is how libtransistor currently implements the
|
||||||
|
@ -196,8 +199,8 @@ void AudOutU::OpenAudioOut(Kernel::HLERequestContext& ctx) {
|
||||||
AudOutU::AudOutU() : ServiceFramework("audout:u") {
|
AudOutU::AudOutU() : ServiceFramework("audout:u") {
|
||||||
static const FunctionInfo functions[] = {{0x00000000, &AudOutU::ListAudioOuts, "ListAudioOuts"},
|
static const FunctionInfo functions[] = {{0x00000000, &AudOutU::ListAudioOuts, "ListAudioOuts"},
|
||||||
{0x00000001, &AudOutU::OpenAudioOut, "OpenAudioOut"},
|
{0x00000001, &AudOutU::OpenAudioOut, "OpenAudioOut"},
|
||||||
{0x00000002, nullptr, "Unknown2"},
|
{0x00000002, nullptr, "ListAudioOutsAuto"},
|
||||||
{0x00000003, nullptr, "Unknown3"}};
|
{0x00000003, nullptr, "OpenAudioOutAuto"}};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,13 +14,15 @@ class IFinalOutputRecorder final : public ServiceFramework<IFinalOutputRecorder>
|
||||||
public:
|
public:
|
||||||
IFinalOutputRecorder() : ServiceFramework("IFinalOutputRecorder") {
|
IFinalOutputRecorder() : ServiceFramework("IFinalOutputRecorder") {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0x0, nullptr, "GetFinalOutputRecorderState"},
|
{0, nullptr, "GetFinalOutputRecorderState"},
|
||||||
{0x1, nullptr, "StartFinalOutputRecorder"},
|
{1, nullptr, "StartFinalOutputRecorder"},
|
||||||
{0x2, nullptr, "StopFinalOutputRecorder"},
|
{2, nullptr, "StopFinalOutputRecorder"},
|
||||||
{0x3, nullptr, "AppendFinalOutputRecorderBuffer"},
|
{3, nullptr, "AppendFinalOutputRecorderBuffer"},
|
||||||
{0x4, nullptr, "RegisterBufferEvent"},
|
{4, nullptr, "RegisterBufferEvent"},
|
||||||
{0x5, nullptr, "GetReleasedFinalOutputRecorderBuffer"},
|
{5, nullptr, "GetReleasedFinalOutputRecorderBuffer"},
|
||||||
{0x6, nullptr, "ContainsFinalOutputRecorderBuffer"},
|
{6, nullptr, "ContainsFinalOutputRecorderBuffer"},
|
||||||
|
{8, nullptr, "AppendFinalOutputRecorderBufferAuto"},
|
||||||
|
{9, nullptr, "GetReleasedFinalOutputRecorderBufferAuto"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,16 +19,18 @@ class IAudioRenderer final : public ServiceFramework<IAudioRenderer> {
|
||||||
public:
|
public:
|
||||||
IAudioRenderer() : ServiceFramework("IAudioRenderer") {
|
IAudioRenderer() : ServiceFramework("IAudioRenderer") {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0x0, nullptr, "GetAudioRendererSampleRate"},
|
{0, nullptr, "GetAudioRendererSampleRate"},
|
||||||
{0x1, nullptr, "GetAudioRendererSampleCount"},
|
{1, nullptr, "GetAudioRendererSampleCount"},
|
||||||
{0x2, nullptr, "GetAudioRendererMixBufferCount"},
|
{2, nullptr, "GetAudioRendererMixBufferCount"},
|
||||||
{0x3, nullptr, "GetAudioRendererState"},
|
{3, nullptr, "GetAudioRendererState"},
|
||||||
{0x4, &IAudioRenderer::RequestUpdateAudioRenderer, "RequestUpdateAudioRenderer"},
|
{4, &IAudioRenderer::RequestUpdateAudioRenderer, "RequestUpdateAudioRenderer"},
|
||||||
{0x5, &IAudioRenderer::StartAudioRenderer, "StartAudioRenderer"},
|
{5, &IAudioRenderer::StartAudioRenderer, "StartAudioRenderer"},
|
||||||
{0x6, &IAudioRenderer::StopAudioRenderer, "StopAudioRenderer"},
|
{6, &IAudioRenderer::StopAudioRenderer, "StopAudioRenderer"},
|
||||||
{0x7, &IAudioRenderer::QuerySystemEvent, "QuerySystemEvent"},
|
{7, &IAudioRenderer::QuerySystemEvent, "QuerySystemEvent"},
|
||||||
{0x8, nullptr, "SetAudioRendererRenderingTimeLimit"},
|
{8, nullptr, "SetAudioRendererRenderingTimeLimit"},
|
||||||
{0x9, nullptr, "GetAudioRendererRenderingTimeLimit"},
|
{9, nullptr, "GetAudioRendererRenderingTimeLimit"},
|
||||||
|
{10, nullptr, "RequestUpdateAudioRendererAuto"},
|
||||||
|
{11, nullptr, "ExecuteAudioRendererRendering"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
|
|
||||||
|
@ -237,6 +239,8 @@ AudRenU::AudRenU() : ServiceFramework("audren:u") {
|
||||||
{0, &AudRenU::OpenAudioRenderer, "OpenAudioRenderer"},
|
{0, &AudRenU::OpenAudioRenderer, "OpenAudioRenderer"},
|
||||||
{1, &AudRenU::GetAudioRendererWorkBufferSize, "GetAudioRendererWorkBufferSize"},
|
{1, &AudRenU::GetAudioRendererWorkBufferSize, "GetAudioRendererWorkBufferSize"},
|
||||||
{2, &AudRenU::GetAudioDevice, "GetAudioDevice"},
|
{2, &AudRenU::GetAudioDevice, "GetAudioDevice"},
|
||||||
|
{3, nullptr, "OpenAudioRendererAuto"},
|
||||||
|
{4, nullptr, "GetAudioDeviceServiceWithRevisionInfo"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,9 +22,9 @@ CodecCtl::CodecCtl() : ServiceFramework("codecctl") {
|
||||||
{0x00000007, nullptr, "SetCodecActiveTarget"},
|
{0x00000007, nullptr, "SetCodecActiveTarget"},
|
||||||
{0x00000008, nullptr, "Unknown"},
|
{0x00000008, nullptr, "Unknown"},
|
||||||
{0x00000009, nullptr, "BindCodecHeadphoneMicJackInterrupt"},
|
{0x00000009, nullptr, "BindCodecHeadphoneMicJackInterrupt"},
|
||||||
{0x0000000A, nullptr, "IsCodecHeadphoneMicJackInserted"},
|
{0x00000010, nullptr, "IsCodecHeadphoneMicJackInserted"},
|
||||||
{0x0000000B, nullptr, "ClearCodecHeadphoneMicJackInterrupt"},
|
{0x00000011, nullptr, "ClearCodecHeadphoneMicJackInterrupt"},
|
||||||
{0x0000000C, nullptr, "IsCodecDeviceRequested"},
|
{0x00000012, nullptr, "IsCodecDeviceRequested"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ public:
|
||||||
: ServiceFramework("IStorage"), backend(std::move(backend)) {
|
: ServiceFramework("IStorage"), backend(std::move(backend)) {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &IStorage::Read, "Read"}, {1, nullptr, "Write"}, {2, nullptr, "Flush"},
|
{0, &IStorage::Read, "Read"}, {1, nullptr, "Write"}, {2, nullptr, "Flush"},
|
||||||
{3, nullptr, "SetSize"}, {4, nullptr, "GetSize"},
|
{3, nullptr, "SetSize"}, {4, nullptr, "GetSize"}, {5, nullptr, "OperateRange"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
@ -72,8 +72,9 @@ public:
|
||||||
explicit IFile(std::unique_ptr<FileSys::StorageBackend>&& backend)
|
explicit IFile(std::unique_ptr<FileSys::StorageBackend>&& backend)
|
||||||
: ServiceFramework("IFile"), backend(std::move(backend)) {
|
: ServiceFramework("IFile"), backend(std::move(backend)) {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &IFile::Read, "Read"}, {1, &IFile::Write, "Write"}, {2, nullptr, "Flush"},
|
{0, &IFile::Read, "Read"}, {1, &IFile::Write, "Write"},
|
||||||
{3, &IFile::SetSize, "SetSize"}, {4, &IFile::GetSize, "GetSize"},
|
{2, nullptr, "Flush"}, {3, &IFile::SetSize, "SetSize"},
|
||||||
|
{4, &IFile::GetSize, "GetSize"}, {5, nullptr, "OperateRange"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
@ -227,11 +228,21 @@ public:
|
||||||
: ServiceFramework("IFileSystem"), backend(std::move(backend)) {
|
: ServiceFramework("IFileSystem"), backend(std::move(backend)) {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &IFileSystem::CreateFile, "CreateFile"},
|
{0, &IFileSystem::CreateFile, "CreateFile"},
|
||||||
|
{1, nullptr, "DeleteFile"},
|
||||||
{2, &IFileSystem::CreateDirectory, "CreateDirectory"},
|
{2, &IFileSystem::CreateDirectory, "CreateDirectory"},
|
||||||
|
{3, nullptr, "DeleteDirectory"},
|
||||||
|
{4, nullptr, "DeleteDirectoryRecursively"},
|
||||||
|
{5, nullptr, "RenameFile"},
|
||||||
|
{6, nullptr, "RenameDirectory"},
|
||||||
{7, &IFileSystem::GetEntryType, "GetEntryType"},
|
{7, &IFileSystem::GetEntryType, "GetEntryType"},
|
||||||
{8, &IFileSystem::OpenFile, "OpenFile"},
|
{8, &IFileSystem::OpenFile, "OpenFile"},
|
||||||
{9, &IFileSystem::OpenDirectory, "OpenDirectory"},
|
{9, &IFileSystem::OpenDirectory, "OpenDirectory"},
|
||||||
{10, &IFileSystem::Commit, "Commit"},
|
{10, &IFileSystem::Commit, "Commit"},
|
||||||
|
{11, nullptr, "GetFreeSpaceSize"},
|
||||||
|
{12, nullptr, "GetTotalSpaceSize"},
|
||||||
|
{13, nullptr, "CleanDirectoryRecursively"},
|
||||||
|
{14, nullptr, "GetFileTimeStampRaw"},
|
||||||
|
{15, nullptr, "QueryEntry"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
@ -356,14 +367,94 @@ private:
|
||||||
|
|
||||||
FSP_SRV::FSP_SRV() : ServiceFramework("fsp-srv") {
|
FSP_SRV::FSP_SRV() : ServiceFramework("fsp-srv") {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, nullptr, "MountContent"},
|
||||||
{1, &FSP_SRV::Initialize, "Initialize"},
|
{1, &FSP_SRV::Initialize, "Initialize"},
|
||||||
|
{2, nullptr, "OpenDataFileSystemByCurrentProcess"},
|
||||||
|
{7, nullptr, "OpenFileSystemWithPatch"},
|
||||||
|
{8, nullptr, "OpenFileSystemWithId"},
|
||||||
|
{9, nullptr, "OpenDataFileSystemByApplicationId"},
|
||||||
|
{11, nullptr, "OpenBisFileSystem"},
|
||||||
|
{12, nullptr, "OpenBisStorage"},
|
||||||
|
{13, nullptr, "InvalidateBisCache"},
|
||||||
|
{17, nullptr, "OpenHostFileSystem"},
|
||||||
{18, &FSP_SRV::MountSdCard, "MountSdCard"},
|
{18, &FSP_SRV::MountSdCard, "MountSdCard"},
|
||||||
|
{19, nullptr, "FormatSdCardFileSystem"},
|
||||||
|
{21, nullptr, "DeleteSaveDataFileSystem"},
|
||||||
{22, &FSP_SRV::CreateSaveData, "CreateSaveData"},
|
{22, &FSP_SRV::CreateSaveData, "CreateSaveData"},
|
||||||
|
{23, nullptr, "CreateSaveDataFileSystemBySystemSaveDataId"},
|
||||||
|
{24, nullptr, "RegisterSaveDataFileSystemAtomicDeletion"},
|
||||||
|
{25, nullptr, "DeleteSaveDataFileSystemBySaveDataSpaceId"},
|
||||||
|
{26, nullptr, "FormatSdCardDryRun"},
|
||||||
|
{27, nullptr, "IsExFatSupported"},
|
||||||
|
{28, nullptr, "DeleteSaveDataFileSystemBySaveDataAttribute"},
|
||||||
|
{30, nullptr, "OpenGameCardStorage"},
|
||||||
|
{31, nullptr, "OpenGameCardFileSystem"},
|
||||||
|
{32, nullptr, "ExtendSaveDataFileSystem"},
|
||||||
|
{33, nullptr, "DeleteCacheStorage"},
|
||||||
|
{34, nullptr, "GetCacheStorageSize"},
|
||||||
{51, &FSP_SRV::MountSaveData, "MountSaveData"},
|
{51, &FSP_SRV::MountSaveData, "MountSaveData"},
|
||||||
|
{52, nullptr, "OpenSaveDataFileSystemBySystemSaveDataId"},
|
||||||
|
{53, nullptr, "OpenReadOnlySaveDataFileSystem"},
|
||||||
|
{57, nullptr, "ReadSaveDataFileSystemExtraDataBySaveDataSpaceId"},
|
||||||
|
{58, nullptr, "ReadSaveDataFileSystemExtraData"},
|
||||||
|
{59, nullptr, "WriteSaveDataFileSystemExtraData"},
|
||||||
|
{60, nullptr, "OpenSaveDataInfoReader"},
|
||||||
|
{61, nullptr, "OpenSaveDataInfoReaderBySaveDataSpaceId"},
|
||||||
|
{62, nullptr, "OpenCacheStorageList"},
|
||||||
|
{64, nullptr, "OpenSaveDataInternalStorageFileSystem"},
|
||||||
|
{65, nullptr, "UpdateSaveDataMacForDebug"},
|
||||||
|
{66, nullptr, "WriteSaveDataFileSystemExtraData2"},
|
||||||
|
{80, nullptr, "OpenSaveDataMetaFile"},
|
||||||
|
{81, nullptr, "OpenSaveDataTransferManager"},
|
||||||
|
{82, nullptr, "OpenSaveDataTransferManagerVersion2"},
|
||||||
|
{100, nullptr, "OpenImageDirectoryFileSystem"},
|
||||||
|
{110, nullptr, "OpenContentStorageFileSystem"},
|
||||||
{200, &FSP_SRV::OpenDataStorageByCurrentProcess, "OpenDataStorageByCurrentProcess"},
|
{200, &FSP_SRV::OpenDataStorageByCurrentProcess, "OpenDataStorageByCurrentProcess"},
|
||||||
|
{201, nullptr, "OpenDataStorageByProgramId"},
|
||||||
{202, nullptr, "OpenDataStorageByDataId"},
|
{202, nullptr, "OpenDataStorageByDataId"},
|
||||||
{203, &FSP_SRV::OpenRomStorage, "OpenRomStorage"},
|
{203, &FSP_SRV::OpenRomStorage, "OpenRomStorage"},
|
||||||
|
{400, nullptr, "OpenDeviceOperator"},
|
||||||
|
{500, nullptr, "OpenSdCardDetectionEventNotifier"},
|
||||||
|
{501, nullptr, "OpenGameCardDetectionEventNotifier"},
|
||||||
|
{510, nullptr, "OpenSystemDataUpdateEventNotifier"},
|
||||||
|
{511, nullptr, "NotifySystemDataUpdateEvent"},
|
||||||
|
{600, nullptr, "SetCurrentPosixTime"},
|
||||||
|
{601, nullptr, "QuerySaveDataTotalSize"},
|
||||||
|
{602, nullptr, "VerifySaveDataFileSystem"},
|
||||||
|
{603, nullptr, "CorruptSaveDataFileSystem"},
|
||||||
|
{604, nullptr, "CreatePaddingFile"},
|
||||||
|
{605, nullptr, "DeleteAllPaddingFiles"},
|
||||||
|
{606, nullptr, "GetRightsId"},
|
||||||
|
{607, nullptr, "RegisterExternalKey"},
|
||||||
|
{608, nullptr, "UnregisterAllExternalKey"},
|
||||||
|
{609, nullptr, "GetRightsIdByPath"},
|
||||||
|
{610, nullptr, "GetRightsIdAndKeyGenerationByPath"},
|
||||||
|
{611, nullptr, "SetCurrentPosixTimeWithTimeDifference"},
|
||||||
|
{612, nullptr, "GetFreeSpaceSizeForSaveData"},
|
||||||
|
{613, nullptr, "VerifySaveDataFileSystemBySaveDataSpaceId"},
|
||||||
|
{614, nullptr, "CorruptSaveDataFileSystemBySaveDataSpaceId"},
|
||||||
|
{615, nullptr, "QuerySaveDataInternalStorageTotalSize"},
|
||||||
|
{620, nullptr, "SetSdCardEncryptionSeed"},
|
||||||
|
{630, nullptr, "SetSdCardAccessibility"},
|
||||||
|
{631, nullptr, "IsSdCardAccessible"},
|
||||||
|
{640, nullptr, "IsSignedSystemPartitionOnSdCardValid"},
|
||||||
|
{700, nullptr, "OpenAccessFailureResolver"},
|
||||||
|
{701, nullptr, "GetAccessFailureDetectionEvent"},
|
||||||
|
{702, nullptr, "IsAccessFailureDetected"},
|
||||||
|
{710, nullptr, "ResolveAccessFailure"},
|
||||||
|
{720, nullptr, "AbandonAccessFailure"},
|
||||||
|
{800, nullptr, "GetAndClearFileSystemProxyErrorInfo"},
|
||||||
|
{1000, nullptr, "SetBisRootForHost"},
|
||||||
|
{1001, nullptr, "SetSaveDataSize"},
|
||||||
|
{1002, nullptr, "SetSaveDataRootPath"},
|
||||||
|
{1003, nullptr, "DisableAutoSaveDataCreation"},
|
||||||
|
{1004, nullptr, "SetGlobalAccessLogMode"},
|
||||||
{1005, &FSP_SRV::GetGlobalAccessLogMode, "GetGlobalAccessLogMode"},
|
{1005, &FSP_SRV::GetGlobalAccessLogMode, "GetGlobalAccessLogMode"},
|
||||||
|
{1006, nullptr, "OutputAccessLogToSdCard"},
|
||||||
|
{1007, nullptr, "RegisterUpdatePartition"},
|
||||||
|
{1008, nullptr, "OpenRegisteredUpdatePartition"},
|
||||||
|
{1009, nullptr, "GetAndClearMemoryReportInfo"},
|
||||||
|
{1100, nullptr, "OverrideSaveDataTransferTokenSignVerificationKey"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
namespace Service {
|
namespace Service {
|
||||||
namespace Friend {
|
namespace Friend {
|
||||||
|
|
||||||
void Module::Interface::Unknown(Kernel::HLERequestContext& ctx) {
|
void Module::Interface::CreateFriendService(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::ResponseBuilder rb{ctx, 2};
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
rb.Push(RESULT_SUCCESS);
|
rb.Push(RESULT_SUCCESS);
|
||||||
LOG_WARNING(Service_Friend, "(STUBBED) called");
|
LOG_WARNING(Service_Friend, "(STUBBED) called");
|
||||||
|
|
|
@ -15,7 +15,7 @@ public:
|
||||||
public:
|
public:
|
||||||
Interface(std::shared_ptr<Module> module, const char* name);
|
Interface(std::shared_ptr<Module> module, const char* name);
|
||||||
|
|
||||||
void Unknown(Kernel::HLERequestContext& ctx);
|
void CreateFriendService(Kernel::HLERequestContext& ctx);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::shared_ptr<Module> module;
|
std::shared_ptr<Module> module;
|
||||||
|
|
|
@ -10,7 +10,8 @@ namespace Friend {
|
||||||
Friend_A::Friend_A(std::shared_ptr<Module> module)
|
Friend_A::Friend_A(std::shared_ptr<Module> module)
|
||||||
: Module::Interface(std::move(module), "friend:a") {
|
: Module::Interface(std::move(module), "friend:a") {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &Friend_A::Unknown, "Unknown"},
|
{0, &Friend_A::CreateFriendService, "CreateFriendService"},
|
||||||
|
{1, nullptr, "CreateNotificationService"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,8 @@ namespace Friend {
|
||||||
Friend_U::Friend_U(std::shared_ptr<Module> module)
|
Friend_U::Friend_U(std::shared_ptr<Module> module)
|
||||||
: Module::Interface(std::move(module), "friend:u") {
|
: Module::Interface(std::move(module), "friend:u") {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &Friend_U::Unknown, "Unknown"},
|
{0, &Friend_U::CreateFriendService, "CreateFriendService"},
|
||||||
|
{1, nullptr, "CreateNotificationService"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,25 +198,75 @@ public:
|
||||||
{11, &Hid::ActivateTouchScreen, "ActivateTouchScreen"},
|
{11, &Hid::ActivateTouchScreen, "ActivateTouchScreen"},
|
||||||
{21, &Hid::ActivateMouse, "ActivateMouse"},
|
{21, &Hid::ActivateMouse, "ActivateMouse"},
|
||||||
{31, &Hid::ActivateKeyboard, "ActivateKeyboard"},
|
{31, &Hid::ActivateKeyboard, "ActivateKeyboard"},
|
||||||
|
{40, nullptr, "AcquireXpadIdEventHandle"},
|
||||||
|
{41, nullptr, "ReleaseXpadIdEventHandle"},
|
||||||
|
{51, nullptr, "ActivateXpad"},
|
||||||
|
{55, nullptr, "GetXpadIds"},
|
||||||
|
{56, nullptr, "ActivateJoyXpad"},
|
||||||
|
{58, nullptr, "GetJoyXpadLifoHandle"},
|
||||||
|
{59, nullptr, "GetJoyXpadIds"},
|
||||||
|
{60, nullptr, "ActivateSixAxisSensor"},
|
||||||
|
{61, nullptr, "DeactivateSixAxisSensor"},
|
||||||
|
{62, nullptr, "GetSixAxisSensorLifoHandle"},
|
||||||
|
{63, nullptr, "ActivateJoySixAxisSensor"},
|
||||||
|
{64, nullptr, "DeactivateJoySixAxisSensor"},
|
||||||
|
{65, nullptr, "GetJoySixAxisSensorLifoHandle"},
|
||||||
{66, &Hid::StartSixAxisSensor, "StartSixAxisSensor"},
|
{66, &Hid::StartSixAxisSensor, "StartSixAxisSensor"},
|
||||||
|
{67, nullptr, "StopSixAxisSensor"},
|
||||||
|
{68, nullptr, "IsSixAxisSensorFusionEnabled"},
|
||||||
|
{69, nullptr, "EnableSixAxisSensorFusion"},
|
||||||
|
{70, nullptr, "SetSixAxisSensorFusionParameters"},
|
||||||
|
{71, nullptr, "GetSixAxisSensorFusionParameters"},
|
||||||
|
{72, nullptr, "ResetSixAxisSensorFusionParameters"},
|
||||||
|
{73, nullptr, "SetAccelerometerParameters"},
|
||||||
|
{74, nullptr, "GetAccelerometerParameters"},
|
||||||
|
{75, nullptr, "ResetAccelerometerParameters"},
|
||||||
|
{76, nullptr, "SetAccelerometerPlayMode"},
|
||||||
|
{77, nullptr, "GetAccelerometerPlayMode"},
|
||||||
|
{78, nullptr, "ResetAccelerometerPlayMode"},
|
||||||
{79, &Hid::SetGyroscopeZeroDriftMode, "SetGyroscopeZeroDriftMode"},
|
{79, &Hid::SetGyroscopeZeroDriftMode, "SetGyroscopeZeroDriftMode"},
|
||||||
|
{80, nullptr, "GetGyroscopeZeroDriftMode"},
|
||||||
|
{81, nullptr, "ResetGyroscopeZeroDriftMode"},
|
||||||
|
{82, nullptr, "IsSixAxisSensorAtRest"},
|
||||||
|
{91, nullptr, "ActivateGesture"},
|
||||||
{100, &Hid::SetSupportedNpadStyleSet, "SetSupportedNpadStyleSet"},
|
{100, &Hid::SetSupportedNpadStyleSet, "SetSupportedNpadStyleSet"},
|
||||||
{101, &Hid::GetSupportedNpadStyleSet, "GetSupportedNpadStyleSet"},
|
{101, &Hid::GetSupportedNpadStyleSet, "GetSupportedNpadStyleSet"},
|
||||||
{102, &Hid::SetSupportedNpadIdType, "SetSupportedNpadIdType"},
|
{102, &Hid::SetSupportedNpadIdType, "SetSupportedNpadIdType"},
|
||||||
{103, &Hid::ActivateNpad, "ActivateNpad"},
|
{103, &Hid::ActivateNpad, "ActivateNpad"},
|
||||||
|
{104, nullptr, "DeactivateNpad"},
|
||||||
{106, &Hid::AcquireNpadStyleSetUpdateEventHandle,
|
{106, &Hid::AcquireNpadStyleSetUpdateEventHandle,
|
||||||
"AcquireNpadStyleSetUpdateEventHandle"},
|
"AcquireNpadStyleSetUpdateEventHandle"},
|
||||||
|
{107, nullptr, "DisconnectNpad"},
|
||||||
|
{108, nullptr, "GetPlayerLedPattern"},
|
||||||
{120, &Hid::SetNpadJoyHoldType, "SetNpadJoyHoldType"},
|
{120, &Hid::SetNpadJoyHoldType, "SetNpadJoyHoldType"},
|
||||||
{121, &Hid::GetNpadJoyHoldType, "GetNpadJoyHoldType"},
|
{121, &Hid::GetNpadJoyHoldType, "GetNpadJoyHoldType"},
|
||||||
{122, &Hid::SetNpadJoyAssignmentModeSingleByDefault,
|
{122, &Hid::SetNpadJoyAssignmentModeSingleByDefault,
|
||||||
"SetNpadJoyAssignmentModeSingleByDefault"},
|
"SetNpadJoyAssignmentModeSingleByDefault"},
|
||||||
|
{123, nullptr, "SetNpadJoyAssignmentModeSingleByDefault"},
|
||||||
{124, &Hid::SetNpadJoyAssignmentModeDual, "SetNpadJoyAssignmentModeDual"},
|
{124, &Hid::SetNpadJoyAssignmentModeDual, "SetNpadJoyAssignmentModeDual"},
|
||||||
|
{125, nullptr, "MergeSingleJoyAsDualJoy"},
|
||||||
|
{126, nullptr, "StartLrAssignmentMode"},
|
||||||
|
{127, nullptr, "StopLrAssignmentMode"},
|
||||||
{128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"},
|
{128, &Hid::SetNpadHandheldActivationMode, "SetNpadHandheldActivationMode"},
|
||||||
|
{129, nullptr, "GetNpadHandheldActivationMode"},
|
||||||
|
{130, nullptr, "SwapNpadAssignment"},
|
||||||
|
{131, nullptr, "IsUnintendedHomeButtonInputProtectionEnabled"},
|
||||||
|
{132, nullptr, "EnableUnintendedHomeButtonInputProtection"},
|
||||||
{200, &Hid::GetVibrationDeviceInfo, "GetVibrationDeviceInfo"},
|
{200, &Hid::GetVibrationDeviceInfo, "GetVibrationDeviceInfo"},
|
||||||
{201, &Hid::SendVibrationValue, "SendVibrationValue"},
|
{201, &Hid::SendVibrationValue, "SendVibrationValue"},
|
||||||
{202, &Hid::GetActualVibrationValue, "GetActualVibrationValue"},
|
{202, &Hid::GetActualVibrationValue, "GetActualVibrationValue"},
|
||||||
{203, &Hid::CreateActiveVibrationDeviceList, "CreateActiveVibrationDeviceList"},
|
{203, &Hid::CreateActiveVibrationDeviceList, "CreateActiveVibrationDeviceList"},
|
||||||
|
{204, nullptr, "PermitVibration"},
|
||||||
|
{205, nullptr, "IsVibrationPermitted"},
|
||||||
{206, &Hid::SendVibrationValues, "SendVibrationValues"},
|
{206, &Hid::SendVibrationValues, "SendVibrationValues"},
|
||||||
|
{300, nullptr, "ActivateConsoleSixAxisSensor"},
|
||||||
|
{301, nullptr, "StartConsoleSixAxisSensor"},
|
||||||
|
{302, nullptr, "StopConsoleSixAxisSensor"},
|
||||||
|
{400, nullptr, "IsUsbFullKeyControllerEnabled"},
|
||||||
|
{401, nullptr, "EnableUsbFullKeyController"},
|
||||||
|
{402, nullptr, "IsUsbFullKeyControllerConnected"},
|
||||||
|
{1000, nullptr, "SetNpadCommunicationMode"},
|
||||||
|
{1001, nullptr, "GetNpadCommunicationMode"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,9 @@ PL_U::PL_U() : ServiceFramework("pl:u") {
|
||||||
{1, &PL_U::GetLoadState, "GetLoadState"},
|
{1, &PL_U::GetLoadState, "GetLoadState"},
|
||||||
{2, &PL_U::GetSize, "GetSize"},
|
{2, &PL_U::GetSize, "GetSize"},
|
||||||
{3, &PL_U::GetSharedMemoryAddressOffset, "GetSharedMemoryAddressOffset"},
|
{3, &PL_U::GetSharedMemoryAddressOffset, "GetSharedMemoryAddressOffset"},
|
||||||
{4, &PL_U::GetSharedMemoryNativeHandle, "GetSharedMemoryNativeHandle"}};
|
{4, &PL_U::GetSharedMemoryNativeHandle, "GetSharedMemoryNativeHandle"},
|
||||||
|
{5, nullptr, "GetSharedFontInOrderOfPriority"},
|
||||||
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
|
|
||||||
// Attempt to load shared font data from disk
|
// Attempt to load shared font data from disk
|
||||||
|
|
|
@ -96,7 +96,14 @@ NVDRV::NVDRV(std::shared_ptr<Module> nvdrv, const char* name)
|
||||||
{2, &NVDRV::Close, "Close"},
|
{2, &NVDRV::Close, "Close"},
|
||||||
{3, &NVDRV::Initialize, "Initialize"},
|
{3, &NVDRV::Initialize, "Initialize"},
|
||||||
{4, &NVDRV::QueryEvent, "QueryEvent"},
|
{4, &NVDRV::QueryEvent, "QueryEvent"},
|
||||||
|
{5, nullptr, "MapSharedMem"},
|
||||||
|
{6, nullptr, "GetStatus"},
|
||||||
|
{7, nullptr, "ForceSetClientPID"},
|
||||||
{8, &NVDRV::SetClientPID, "SetClientPID"},
|
{8, &NVDRV::SetClientPID, "SetClientPID"},
|
||||||
|
{9, nullptr, "DumpGraphicsMemoryInfo"},
|
||||||
|
{10, nullptr, "InitializeDevtools"},
|
||||||
|
{11, nullptr, "Ioctl2"},
|
||||||
|
{12, nullptr, "Ioctl3"},
|
||||||
{13, &NVDRV::FinishInitialize, "FinishInitialize"},
|
{13, &NVDRV::FinishInitialize, "FinishInitialize"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
|
|
|
@ -13,17 +13,17 @@ namespace Nvidia {
|
||||||
|
|
||||||
NVMEMP::NVMEMP() : ServiceFramework("nvmemp") {
|
NVMEMP::NVMEMP() : ServiceFramework("nvmemp") {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &NVMEMP::Unknown0, "Unknown0"},
|
{0, &NVMEMP::Cmd0, "Cmd0"},
|
||||||
{1, &NVMEMP::Unknown1, "Unknown1"},
|
{1, &NVMEMP::Cmd1, "Cmd1"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NVMEMP::Unknown0(Kernel::HLERequestContext& ctx) {
|
void NVMEMP::Cmd0(Kernel::HLERequestContext& ctx) {
|
||||||
UNIMPLEMENTED();
|
UNIMPLEMENTED();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NVMEMP::Unknown1(Kernel::HLERequestContext& ctx) {
|
void NVMEMP::Cmd1(Kernel::HLERequestContext& ctx) {
|
||||||
UNIMPLEMENTED();
|
UNIMPLEMENTED();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,8 @@ public:
|
||||||
~NVMEMP() = default;
|
~NVMEMP() = default;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void Unknown0(Kernel::HLERequestContext& ctx);
|
void Cmd0(Kernel::HLERequestContext& ctx);
|
||||||
void Unknown1(Kernel::HLERequestContext& ctx);
|
void Cmd1(Kernel::HLERequestContext& ctx);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Nvidia
|
} // namespace Nvidia
|
||||||
|
|
|
@ -11,10 +11,106 @@ namespace PCTL {
|
||||||
|
|
||||||
class IParentalControlService final : public ServiceFramework<IParentalControlService> {
|
class IParentalControlService final : public ServiceFramework<IParentalControlService> {
|
||||||
public:
|
public:
|
||||||
IParentalControlService() : ServiceFramework("IParentalControlService") {}
|
IParentalControlService() : ServiceFramework("IParentalControlService") {
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{1, nullptr, "Initialize"},
|
||||||
|
{1001, nullptr, "CheckFreeCommunicationPermission"},
|
||||||
|
{1002, nullptr, "ConfirmLaunchApplicationPermission"},
|
||||||
|
{1003, nullptr, "ConfirmResumeApplicationPermission"},
|
||||||
|
{1004, nullptr, "ConfirmSnsPostPermission"},
|
||||||
|
{1005, nullptr, "ConfirmSystemSettingsPermission"},
|
||||||
|
{1006, nullptr, "IsRestrictionTemporaryUnlocked"},
|
||||||
|
{1007, nullptr, "RevertRestrictionTemporaryUnlocked"},
|
||||||
|
{1008, nullptr, "EnterRestrictedSystemSettings"},
|
||||||
|
{1009, nullptr, "LeaveRestrictedSystemSettings"},
|
||||||
|
{1010, nullptr, "IsRestrictedSystemSettingsEntered"},
|
||||||
|
{1011, nullptr, "RevertRestrictedSystemSettingsEntered"},
|
||||||
|
{1012, nullptr, "GetRestrictedFeatures"},
|
||||||
|
{1013, nullptr, "ConfirmStereoVisionPermission"},
|
||||||
|
{1014, nullptr, "ConfirmPlayableApplicationVideoOld"},
|
||||||
|
{1015, nullptr, "ConfirmPlayableApplicationVideo"},
|
||||||
|
{1031, nullptr, "IsRestrictionEnabled"},
|
||||||
|
{1032, nullptr, "GetSafetyLevel"},
|
||||||
|
{1033, nullptr, "SetSafetyLevel"},
|
||||||
|
{1034, nullptr, "GetSafetyLevelSettings"},
|
||||||
|
{1035, nullptr, "GetCurrentSettings"},
|
||||||
|
{1036, nullptr, "SetCustomSafetyLevelSettings"},
|
||||||
|
{1037, nullptr, "GetDefaultRatingOrganization"},
|
||||||
|
{1038, nullptr, "SetDefaultRatingOrganization"},
|
||||||
|
{1039, nullptr, "GetFreeCommunicationApplicationListCount"},
|
||||||
|
{1042, nullptr, "AddToFreeCommunicationApplicationList"},
|
||||||
|
{1043, nullptr, "DeleteSettings"},
|
||||||
|
{1044, nullptr, "GetFreeCommunicationApplicationList"},
|
||||||
|
{1045, nullptr, "UpdateFreeCommunicationApplicationList"},
|
||||||
|
{1046, nullptr, "DisableFeaturesForReset"},
|
||||||
|
{1047, nullptr, "NotifyApplicationDownloadStarted"},
|
||||||
|
{1061, nullptr, "ConfirmStereoVisionRestrictionConfigurable"},
|
||||||
|
{1062, nullptr, "GetStereoVisionRestriction"},
|
||||||
|
{1063, nullptr, "SetStereoVisionRestriction"},
|
||||||
|
{1064, nullptr, "ResetConfirmedStereoVisionPermission"},
|
||||||
|
{1065, nullptr, "IsStereoVisionPermitted"},
|
||||||
|
{1201, nullptr, "UnlockRestrictionTemporarily"},
|
||||||
|
{1202, nullptr, "UnlockSystemSettingsRestriction"},
|
||||||
|
{1203, nullptr, "SetPinCode"},
|
||||||
|
{1204, nullptr, "GenerateInquiryCode"},
|
||||||
|
{1205, nullptr, "CheckMasterKey"},
|
||||||
|
{1206, nullptr, "GetPinCodeLength"},
|
||||||
|
{1207, nullptr, "GetPinCodeChangedEvent"},
|
||||||
|
{1208, nullptr, "GetPinCode"},
|
||||||
|
{1403, nullptr, "IsPairingActive"},
|
||||||
|
{1406, nullptr, "GetSettingsLastUpdated"},
|
||||||
|
{1411, nullptr, "GetPairingAccountInfo"},
|
||||||
|
{1421, nullptr, "GetAccountNickname"},
|
||||||
|
{1424, nullptr, "GetAccountState"},
|
||||||
|
{1432, nullptr, "GetSynchronizationEvent"},
|
||||||
|
{1451, nullptr, "StartPlayTimer"},
|
||||||
|
{1452, nullptr, "StopPlayTimer"},
|
||||||
|
{1453, nullptr, "IsPlayTimerEnabled"},
|
||||||
|
{1454, nullptr, "GetPlayTimerRemainingTime"},
|
||||||
|
{1455, nullptr, "IsRestrictedByPlayTimer"},
|
||||||
|
{1456, nullptr, "GetPlayTimerSettings"},
|
||||||
|
{1457, nullptr, "GetPlayTimerEventToRequestSuspension"},
|
||||||
|
{1458, nullptr, "IsPlayTimerAlarmDisabled"},
|
||||||
|
{1471, nullptr, "NotifyWrongPinCodeInputManyTimes"},
|
||||||
|
{1472, nullptr, "CancelNetworkRequest"},
|
||||||
|
{1473, nullptr, "GetUnlinkedEvent"},
|
||||||
|
{1474, nullptr, "ClearUnlinkedEvent"},
|
||||||
|
{1601, nullptr, "DisableAllFeatures"},
|
||||||
|
{1602, nullptr, "PostEnableAllFeatures"},
|
||||||
|
{1603, nullptr, "IsAllFeaturesDisabled"},
|
||||||
|
{1901, nullptr, "DeleteFromFreeCommunicationApplicationListForDebug"},
|
||||||
|
{1902, nullptr, "ClearFreeCommunicationApplicationListForDebug"},
|
||||||
|
{1903, nullptr, "GetExemptApplicationListCountForDebug"},
|
||||||
|
{1904, nullptr, "GetExemptApplicationListForDebug"},
|
||||||
|
{1905, nullptr, "UpdateExemptApplicationListForDebug"},
|
||||||
|
{1906, nullptr, "AddToExemptApplicationListForDebug"},
|
||||||
|
{1907, nullptr, "DeleteFromExemptApplicationListForDebug"},
|
||||||
|
{1908, nullptr, "ClearExemptApplicationListForDebug"},
|
||||||
|
{1941, nullptr, "DeletePairing"},
|
||||||
|
{1951, nullptr, "SetPlayTimerSettingsForDebug"},
|
||||||
|
{1952, nullptr, "GetPlayTimerSpentTimeForTest"},
|
||||||
|
{1953, nullptr, "SetPlayTimerAlarmDisabledForDebug"},
|
||||||
|
{2001, nullptr, "RequestPairingAsync"},
|
||||||
|
{2002, nullptr, "FinishRequestPairing"},
|
||||||
|
{2003, nullptr, "AuthorizePairingAsync"},
|
||||||
|
{2004, nullptr, "FinishAuthorizePairing"},
|
||||||
|
{2005, nullptr, "RetrievePairingInfoAsync"},
|
||||||
|
{2006, nullptr, "FinishRetrievePairingInfo"},
|
||||||
|
{2007, nullptr, "UnlinkPairingAsync"},
|
||||||
|
{2008, nullptr, "FinishUnlinkPairing"},
|
||||||
|
{2009, nullptr, "GetAccountMiiImageAsync"},
|
||||||
|
{2010, nullptr, "FinishGetAccountMiiImage"},
|
||||||
|
{2011, nullptr, "GetAccountMiiImageContentTypeAsync"},
|
||||||
|
{2012, nullptr, "FinishGetAccountMiiImageContentType"},
|
||||||
|
{2013, nullptr, "SynchronizeParentalControlSettingsAsync"},
|
||||||
|
{2014, nullptr, "FinishSynchronizeParentalControlSettings"},
|
||||||
|
{2015, nullptr, "FinishSynchronizeParentalControlSettingsWithLastUpdated"},
|
||||||
|
{2016, nullptr, "RequestUpdateExemptionListAsync"},
|
||||||
};
|
};
|
||||||
|
RegisterHandlers(functions);
|
||||||
void PCTL_A::GetService(Kernel::HLERequestContext& ctx) {
|
}
|
||||||
|
};
|
||||||
|
void PCTL_A::CreateService(Kernel::HLERequestContext& ctx) {
|
||||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
rb.Push(RESULT_SUCCESS);
|
rb.Push(RESULT_SUCCESS);
|
||||||
rb.PushIpcInterface<IParentalControlService>();
|
rb.PushIpcInterface<IParentalControlService>();
|
||||||
|
@ -23,7 +119,8 @@ void PCTL_A::GetService(Kernel::HLERequestContext& ctx) {
|
||||||
|
|
||||||
PCTL_A::PCTL_A() : ServiceFramework("pctl:a") {
|
PCTL_A::PCTL_A() : ServiceFramework("pctl:a") {
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, &PCTL_A::GetService, "GetService"},
|
{0, &PCTL_A::CreateService, "CreateService"},
|
||||||
|
{1, nullptr, "CreateServiceWithoutInitialize"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ public:
|
||||||
~PCTL_A() = default;
|
~PCTL_A() = default;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void GetService(Kernel::HLERequestContext& ctx);
|
void CreateService(Kernel::HLERequestContext& ctx);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace PCTL
|
} // namespace PCTL
|
||||||
|
|
|
@ -2,12 +2,106 @@
|
||||||
// Licensed under GPLv2 or any later version
|
// Licensed under GPLv2 or any later version
|
||||||
// Refer to the license.txt file included.
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include "core/hle/ipc_helpers.h"
|
||||||
#include "core/hle/service/ssl/ssl.h"
|
#include "core/hle/service/ssl/ssl.h"
|
||||||
|
|
||||||
namespace Service {
|
namespace Service {
|
||||||
namespace SSL {
|
namespace SSL {
|
||||||
|
|
||||||
SSL::SSL() : ServiceFramework("ssl") {}
|
class ISslConnection final : public ServiceFramework<ISslConnection> {
|
||||||
|
public:
|
||||||
|
ISslConnection() : ServiceFramework("ISslConnection") {
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, nullptr, "SetSocketDescriptor"},
|
||||||
|
{1, nullptr, "SetHostName"},
|
||||||
|
{2, nullptr, "SetVerifyOption"},
|
||||||
|
{3, nullptr, "SetIoMode"},
|
||||||
|
{4, nullptr, "GetSocketDescriptor"},
|
||||||
|
{5, nullptr, "GetHostName"},
|
||||||
|
{6, nullptr, "GetVerifyOption"},
|
||||||
|
{7, nullptr, "GetIoMode"},
|
||||||
|
{8, nullptr, "DoHandshake"},
|
||||||
|
{9, nullptr, "DoHandshakeGetServerCert"},
|
||||||
|
{10, nullptr, "Read"},
|
||||||
|
{11, nullptr, "Write"},
|
||||||
|
{12, nullptr, "Pending"},
|
||||||
|
{13, nullptr, "Peek"},
|
||||||
|
{14, nullptr, "Poll"},
|
||||||
|
{15, nullptr, "GetVerifyCertError"},
|
||||||
|
{16, nullptr, "GetNeededServerCertBufferSize"},
|
||||||
|
{17, nullptr, "SetSessionCacheMode"},
|
||||||
|
{18, nullptr, "GetSessionCacheMode"},
|
||||||
|
{19, nullptr, "FlushSessionCache"},
|
||||||
|
{20, nullptr, "SetRenegotiationMode"},
|
||||||
|
{21, nullptr, "GetRenegotiationMode"},
|
||||||
|
{22, nullptr, "SetOption"},
|
||||||
|
{23, nullptr, "GetOption"},
|
||||||
|
{24, nullptr, "GetVerifyCertErrors"},
|
||||||
|
{25, nullptr, "GetCipherInfo"},
|
||||||
|
};
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class ISslContext final : public ServiceFramework<ISslContext> {
|
||||||
|
public:
|
||||||
|
ISslContext() : ServiceFramework("ISslContext") {
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, &ISslContext::SetOption, "SetOption"},
|
||||||
|
{1, nullptr, "GetOption"},
|
||||||
|
{2, &ISslContext::CreateConnection, "CreateConnection"},
|
||||||
|
{3, nullptr, "GetConnectionCount"},
|
||||||
|
{4, nullptr, "ImportServerPki"},
|
||||||
|
{5, nullptr, "ImportClientPki"},
|
||||||
|
{6, nullptr, "RemoveServerPki"},
|
||||||
|
{7, nullptr, "RemoveClientPki"},
|
||||||
|
{8, nullptr, "RegisterInternalPki"},
|
||||||
|
{9, nullptr, "AddPolicyOid"},
|
||||||
|
{10, nullptr, "ImportCrl"},
|
||||||
|
{11, nullptr, "RemoveCrl"},
|
||||||
|
};
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
~ISslContext() = default;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void SetOption(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_SSL, "(STUBBED) called");
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb = rp.MakeBuilder(2, 0, 0);
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CreateConnection(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_SSL, "(STUBBED) called");
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushIpcInterface<ISslConnection>();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void SSL::CreateContext(Kernel::HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_SSL, "(STUBBED) called");
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.PushIpcInterface<ISslContext>();
|
||||||
|
}
|
||||||
|
|
||||||
|
SSL::SSL() : ServiceFramework("ssl") {
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, &SSL::CreateContext, "CreateContext"},
|
||||||
|
{1, nullptr, "GetContextCount"},
|
||||||
|
{2, nullptr, "GetCertificates"},
|
||||||
|
{3, nullptr, "GetCertificateBufSize"},
|
||||||
|
{4, nullptr, "DebugIoctl"},
|
||||||
|
{5, nullptr, "SetInterfaceVersion"},
|
||||||
|
{6, nullptr, "FlushSessionCache"},
|
||||||
|
};
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
void InstallInterfaces(SM::ServiceManager& service_manager) {
|
void InstallInterfaces(SM::ServiceManager& service_manager) {
|
||||||
std::make_shared<SSL>()->InstallAsService(service_manager);
|
std::make_shared<SSL>()->InstallAsService(service_manager);
|
||||||
|
|
|
@ -13,6 +13,9 @@ class SSL final : public ServiceFramework<SSL> {
|
||||||
public:
|
public:
|
||||||
explicit SSL();
|
explicit SSL();
|
||||||
~SSL() = default;
|
~SSL() = default;
|
||||||
|
|
||||||
|
private:
|
||||||
|
void CreateContext(Kernel::HLERequestContext& ctx);
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Registers all SSL services with the specified service manager.
|
/// Registers all SSL services with the specified service manager.
|
||||||
|
|
Loading…
Reference in a new issue