mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Service/ACC: convert to module, add acc:aa, acc:su, acc:u1 services
This commit is contained in:
		
							parent
							
								
									227bc78cbe
								
							
						
					
					
						commit
						3769a80fac
					
				@ -88,8 +88,14 @@ add_library(core STATIC
 | 
			
		||||
    hle/romfs.h
 | 
			
		||||
    hle/service/acc/acc.cpp
 | 
			
		||||
    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.h
 | 
			
		||||
    hle/service/acc/acc_u1.cpp
 | 
			
		||||
    hle/service/acc/acc_u1.h
 | 
			
		||||
    hle/service/am/am.cpp
 | 
			
		||||
    hle/service/am/am.h
 | 
			
		||||
    hle/service/am/applet_ae.cpp
 | 
			
		||||
 | 
			
		||||
@ -2,14 +2,142 @@
 | 
			
		||||
// Licensed under GPLv2 or any later version
 | 
			
		||||
// 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_aa.h"
 | 
			
		||||
#include "core/hle/service/acc/acc_su.h"
 | 
			
		||||
#include "core/hle/service/acc/acc_u0.h"
 | 
			
		||||
#include "core/hle/service/acc/acc_u1.h"
 | 
			
		||||
 | 
			
		||||
namespace Service {
 | 
			
		||||
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) {
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
@ -9,6 +9,25 @@
 | 
			
		||||
namespace Service {
 | 
			
		||||
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.
 | 
			
		||||
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
 | 
			
		||||
// 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"
 | 
			
		||||
 | 
			
		||||
namespace Service {
 | 
			
		||||
namespace Account {
 | 
			
		||||
 | 
			
		||||
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 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") {
 | 
			
		||||
ACC_U0::ACC_U0(std::shared_ptr<Module> module) : Module::Interface(std::move(module), "acc:u0") {
 | 
			
		||||
    static const FunctionInfo functions[] = {
 | 
			
		||||
        {0, nullptr, "GetUserCount"},
 | 
			
		||||
        {1, &ACC_U0::GetUserExistence, "GetUserExistence"},
 | 
			
		||||
        {2, &ACC_U0::ListAllUsers, "ListAllUsers"},
 | 
			
		||||
        {3, &ACC_U0::ListOpenUsers, "ListOpenUsers"},
 | 
			
		||||
        {4, &ACC_U0::GetLastOpenedUser, "GetLastOpenedUser"},
 | 
			
		||||
        {5, &ACC_U0::GetProfile, "GetProfile"},
 | 
			
		||||
        {6, nullptr, "GetProfileDigest"},
 | 
			
		||||
        {50, nullptr, "IsUserRegistrationRequestPermitted"},
 | 
			
		||||
        {51, nullptr, "TrySelectUserWithoutInteraction"},
 | 
			
		||||
        {60, nullptr, "ListOpenContextStoredUsers"},
 | 
			
		||||
        {100, &ACC_U0::InitializeApplicationInfo, "InitializeApplicationInfo"},
 | 
			
		||||
        {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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -4,36 +4,14 @@
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "core/hle/service/service.h"
 | 
			
		||||
#include "core/hle/service/acc/acc.h"
 | 
			
		||||
 | 
			
		||||
namespace Service {
 | 
			
		||||
namespace Account {
 | 
			
		||||
 | 
			
		||||
// TODO: RE this structure
 | 
			
		||||
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> {
 | 
			
		||||
class ACC_U0 final : public Module::Interface {
 | 
			
		||||
public:
 | 
			
		||||
    ACC_U0();
 | 
			
		||||
    ~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);
 | 
			
		||||
    explicit ACC_U0(std::shared_ptr<Module> module);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // 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 New Issue
	
	Block a user