Qlauncher firmware 19

This commit is contained in:
Pavel Barabanov 2025-04-14 13:13:50 +03:00 committed by swurl
parent d6eff706f2
commit b66ebe638b
15 changed files with 288 additions and 67 deletions

View file

@ -99,6 +99,7 @@ public:
{140, nullptr, "GetNetworkServiceLicenseCache"}, // 5.0.0+
{141, nullptr, "RefreshNetworkServiceLicenseCacheAsync"}, // 5.0.0+
{142, nullptr, "RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed"}, // 5.0.0+
{143, D<&IManagerForSystemService::GetNetworkServiceLicenseCacheEx>, "GetNetworkServiceLicenseCacheEx"}, // 15.0.0+
{150, nullptr, "CreateAuthorizationRequest"},
{160, nullptr, "RequiresUpdateNetworkServiceAccountIdTokenCache"},
{161, nullptr, "RequireReauthenticationOfNetworkServiceAccount"},
@ -122,6 +123,14 @@ private:
R_SUCCEED();
}
Result GetNetworkServiceLicenseCacheEx() {
LOG_DEBUG(Service_ACC, "(STUBBED) called.");
// TODO (jarrodnorwell)
R_RETURN(ResultUnknown);
}
Common::UUID account_id;
};
@ -318,30 +327,73 @@ public:
explicit IProfileCommon(Core::System& system_, const char* name, bool editor_commands,
Common::UUID user_id_, ProfileManager& profile_manager_)
: ServiceFramework{system_, name}, profile_manager{profile_manager_}, user_id{user_id_} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &IProfileCommon::Get, "Get"},
{1, &IProfileCommon::GetBase, "GetBase"},
{10, &IProfileCommon::GetImageSize, "GetImageSize"},
{11, &IProfileCommon::LoadImage, "LoadImage"},
{20, nullptr, "GetLargeImageSize"}, // 18.0.0+
{21, nullptr, "LoadLargeImage"}, // 18.0.0+
{30, nullptr, "GetImageId"} // 18.0.0+
{20, &IProfileCommon::Unknown20, "Unknown20"},
{21, &IProfileCommon::Unknown21, "Unknown21"},
{30, &IProfileCommon::Unknown30, "Unknown30"}
};
// clang-format on
RegisterHandlers(functions);
if (editor_commands) {
// clang-format off
static const FunctionInfo editor_functions[] = {
{100, &IProfileCommon::Store, "Store"},
{101, &IProfileCommon::StoreWithImage, "StoreWithImage"},
{110, nullptr, "StoreWithLargeImage"} // 18.0.0+
{110, &IProfileCommon::Unknown110, "Unknown110"}
};
// clang-format on
RegisterHandlers(editor_functions);
}
}
protected:
void Unknown20(HLERequestContext& ctx) {
LOG_DEBUG(Service_ACC, "(STUBBED) called.");
// TODO (jarrodnorwell)
// inbytes: 0x0, outbytes: 0x4
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
}
void Unknown21(HLERequestContext& ctx) {
LOG_DEBUG(Service_ACC, "(STUBBED) called.");
// TODO (jarrodnorwell)
// buffers: [0x6], inbytes: 0x0, outbytes: 0x4
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
}
void Unknown30(HLERequestContext& ctx) {
LOG_DEBUG(Service_ACC, "(STUBBED) called.");
// TODO (jarrodnorwell)
// inbytes: 0x0, outbytes: 0x10
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
}
void Unknown110(HLERequestContext& ctx) {
LOG_DEBUG(Service_ACC, "(STUBBED) called.");
// TODO (jarrodnorwell)
// buffer_entry_sizes: [0x80, 0x0], buffers: [0x19, 0x5], inbytes: 0x38, outbytes: 0x0
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(ResultSuccess);
}
void Get(HLERequestContext& ctx) {
LOG_DEBUG(Service_ACC, "called user_id=0x{}", user_id.RawString());
ProfileBase profile_base{};
@ -1020,6 +1072,29 @@ void Module::Interface::StoreSaveDataThumbnail(HLERequestContext& ctx, const Com
rb.Push(ResultSuccess);
}
void Module::Interface::TrySelectUserWithoutInteractionDeprecated(HLERequestContext& ctx) {
LOG_DEBUG(Service_ACC, "called");
// A u8 is passed into this function which we can safely ignore. It's to determine if we have
// access to use the network or not by the looks of it
IPC::ResponseBuilder rb{ctx, 6};
if (profile_manager->GetUserCount() != 1) {
rb.Push(ResultSuccess);
rb.PushRaw(Common::InvalidUUID);
return;
}
const auto user_list = profile_manager->GetAllUsers();
if (std::ranges::all_of(user_list, [](const auto& user) { return user.IsInvalid(); })) {
rb.Push(ResultUnknown); // TODO(ogniK): Find the correct error code
rb.PushRaw(Common::InvalidUUID);
return;
}
// Select the first user we have
rb.Push(ResultSuccess);
rb.PushRaw(profile_manager->GetUser(0)->uuid);
}
void Module::Interface::TrySelectUserWithoutInteraction(HLERequestContext& ctx) {
LOG_DEBUG(Service_ACC, "called");
// A u8 is passed into this function which we can safely ignore. It's to determine if we have
@ -1046,8 +1121,8 @@ void Module::Interface::TrySelectUserWithoutInteraction(HLERequestContext& ctx)
Module::Interface::Interface(std::shared_ptr<Module> module_,
std::shared_ptr<ProfileManager> profile_manager_,
Core::System& system_, const char* name)
: ServiceFramework{system_, name}, module{std::move(module_)}, profile_manager{std::move(
profile_manager_)} {}
: ServiceFramework{system_, name}, module{std::move(module_)},
profile_manager{std::move(profile_manager_)} {}
Module::Interface::~Interface() = default;