mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-12-24 09:20:58 +01:00
Service/ACC: convert to module, add acc:aa, acc:su, acc:u1 services
This commit is contained in:
parent
227bc78cbe
commit
3769a80fac
11 changed files with 342 additions and 127 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
|
Loading…
Reference in a new issue