Browse Source

Merge pull request #13032 from german77/qlauncher

service: Implement functions needed by Qlaunch
pull/15/merge
liamwhite 2 years ago
committed by GitHub
parent
commit
1fc86b1e3a
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 5
      src/core/hle/service/acc/profile_manager.cpp
  2. 18
      src/core/hle/service/am/applet_manager.cpp
  3. 6
      src/core/hle/service/am/service/library_applet_self_accessor.cpp
  4. 2
      src/core/hle/service/am/service/library_applet_self_accessor.h
  5. 11
      src/core/hle/service/caps/caps_a.cpp
  6. 3
      src/core/hle/service/caps/caps_a.h
  7. 12
      src/core/hle/service/erpt/erpt.cpp

5
src/core/hle/service/acc/profile_manager.cpp

@ -329,9 +329,8 @@ bool ProfileManager::GetProfileBaseAndData(const ProfileInfo& user, ProfileBase&
/// Returns if the system is allowing user registrations or not /// Returns if the system is allowing user registrations or not
bool ProfileManager::CanSystemRegisterUser() const { bool ProfileManager::CanSystemRegisterUser() const {
return false; // TODO(ogniK): Games shouldn't have
// access to user registration, when we
// emulate qlaunch. Update this to dynamically change.
// TODO: Both games and applets can register users. Determine when this condition is not meet.
return true;
} }
bool ProfileManager::RemoveUser(UUID uuid) { bool ProfileManager::RemoveUser(UUID uuid) {

18
src/core/hle/service/am/applet_manager.cpp

@ -35,6 +35,21 @@ AppletStorageChannel& InitializeFakeCallerApplet(Core::System& system,
return applet->caller_applet_broker->GetInData(); return applet->caller_applet_broker->GetInData();
} }
void PushInShowQlaunch(Core::System& system, AppletStorageChannel& channel) {
const CommonArguments arguments{
.arguments_version = CommonArgumentVersion::Version3,
.size = CommonArgumentSize::Version3,
.library_version = 0,
.theme_color = ThemeColor::BasicBlack,
.play_startup_sound = true,
.system_tick = system.CoreTiming().GetClockTicks(),
};
std::vector<u8> argument_data(sizeof(arguments));
std::memcpy(argument_data.data(), &arguments, sizeof(arguments));
channel.Push(std::make_shared<IStorage>(system, std::move(argument_data)));
}
void PushInShowAlbum(Core::System& system, AppletStorageChannel& channel) { void PushInShowAlbum(Core::System& system, AppletStorageChannel& channel) {
const CommonArguments arguments{ const CommonArguments arguments{
.arguments_version = CommonArgumentVersion::Version3, .arguments_version = CommonArgumentVersion::Version3,
@ -284,6 +299,9 @@ void AppletManager::CreateAndInsertByFrontendAppletParameters(
// Starting from frontend, some applets require input data. // Starting from frontend, some applets require input data.
switch (applet->applet_id) { switch (applet->applet_id) {
case AppletId::QLaunch:
PushInShowQlaunch(m_system, InitializeFakeCallerApplet(m_system, applet));
break;
case AppletId::Cabinet: case AppletId::Cabinet:
PushInShowCabinetData(m_system, InitializeFakeCallerApplet(m_system, applet)); PushInShowCabinetData(m_system, InitializeFakeCallerApplet(m_system, applet));
break; break;

6
src/core/hle/service/am/service/library_applet_self_accessor.cpp

@ -284,17 +284,17 @@ Result ILibraryAppletSelfAccessor::GetCurrentApplicationId(Out<u64> out_applicat
} }
Result ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers( Result ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers(
Out<bool> out_no_users_available, Out<s32> out_users_count,
Out<bool> out_can_select_any_user, Out<s32> out_users_count,
OutArray<Common::UUID, BufferAttr_HipcMapAlias> out_users) { OutArray<Common::UUID, BufferAttr_HipcMapAlias> out_users) {
const Service::Account::ProfileManager manager{}; const Service::Account::ProfileManager manager{};
*out_no_users_available = true;
*out_can_select_any_user = false;
*out_users_count = -1; *out_users_count = -1;
LOG_INFO(Service_AM, "called"); LOG_INFO(Service_AM, "called");
if (manager.GetUserCount() > 0) { if (manager.GetUserCount() > 0) {
*out_no_users_available = false;
*out_can_select_any_user = true;
*out_users_count = static_cast<s32>(manager.GetUserCount()); *out_users_count = static_cast<s32>(manager.GetUserCount());
const auto users = manager.GetAllUsers(); const auto users = manager.GetAllUsers();

2
src/core/hle/service/am/service/library_applet_self_accessor.h

@ -71,7 +71,7 @@ private:
ErrorCode error_code, InLargeData<ErrorContext, BufferAttr_HipcMapAlias> error_context); ErrorCode error_code, InLargeData<ErrorContext, BufferAttr_HipcMapAlias> error_context);
Result GetMainAppletApplicationDesiredLanguage(Out<u64> out_desired_language); Result GetMainAppletApplicationDesiredLanguage(Out<u64> out_desired_language);
Result GetCurrentApplicationId(Out<u64> out_application_id); Result GetCurrentApplicationId(Out<u64> out_application_id);
Result GetMainAppletAvailableUsers(Out<bool> out_no_users_available, Out<s32> out_users_count,
Result GetMainAppletAvailableUsers(Out<bool> out_can_select_any_user, Out<s32> out_users_count,
OutArray<Common::UUID, BufferAttr_HipcMapAlias> out_users); OutArray<Common::UUID, BufferAttr_HipcMapAlias> out_users);
Result ShouldSetGpuTimeSliceManually(Out<bool> out_should_set_gpu_time_slice_manually); Result ShouldSetGpuTimeSliceManually(Out<bool> out_should_set_gpu_time_slice_manually);
Result Cmd160(Out<u64> out_unknown0); Result Cmd160(Out<u64> out_unknown0);

11
src/core/hle/service/caps/caps_a.cpp

@ -16,7 +16,7 @@ IAlbumAccessorService::IAlbumAccessorService(Core::System& system_,
// clang-format off // clang-format off
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
{0, nullptr, "GetAlbumFileCount"}, {0, nullptr, "GetAlbumFileCount"},
{1, nullptr, "GetAlbumFileList"},
{1, C<&IAlbumAccessorService::GetAlbumFileList>, "GetAlbumFileList"},
{2, nullptr, "LoadAlbumFile"}, {2, nullptr, "LoadAlbumFile"},
{3, C<&IAlbumAccessorService::DeleteAlbumFile>, "DeleteAlbumFile"}, {3, C<&IAlbumAccessorService::DeleteAlbumFile>, "DeleteAlbumFile"},
{4, nullptr, "StorageCopyAlbumFile"}, {4, nullptr, "StorageCopyAlbumFile"},
@ -62,6 +62,15 @@ IAlbumAccessorService::IAlbumAccessorService(Core::System& system_,
IAlbumAccessorService::~IAlbumAccessorService() = default; IAlbumAccessorService::~IAlbumAccessorService() = default;
Result IAlbumAccessorService::GetAlbumFileList(
Out<u64> out_count, AlbumStorage storage,
OutArray<AlbumEntry, BufferAttr_HipcMapAlias> out_entries) {
LOG_INFO(Service_Capture, "called, storage={}", storage);
const Result result = manager->GetAlbumFileList(out_entries, *out_count, storage, 0);
R_RETURN(TranslateResult(result));
}
Result IAlbumAccessorService::DeleteAlbumFile(AlbumFileId file_id) { Result IAlbumAccessorService::DeleteAlbumFile(AlbumFileId file_id) {
LOG_INFO(Service_Capture, "called, application_id=0x{:0x}, storage={}, type={}", LOG_INFO(Service_Capture, "called, application_id=0x{:0x}, storage={}, type={}",
file_id.application_id, file_id.storage, file_id.type); file_id.application_id, file_id.storage, file_id.type);

3
src/core/hle/service/caps/caps_a.h

@ -21,6 +21,9 @@ public:
~IAlbumAccessorService() override; ~IAlbumAccessorService() override;
private: private:
Result GetAlbumFileList(Out<u64> out_count, AlbumStorage storage,
OutArray<AlbumEntry, BufferAttr_HipcMapAlias> out_entries);
Result DeleteAlbumFile(AlbumFileId file_id); Result DeleteAlbumFile(AlbumFileId file_id);
Result IsAlbumMounted(Out<bool> out_is_mounted, AlbumStorage storage); Result IsAlbumMounted(Out<bool> out_is_mounted, AlbumStorage storage);

12
src/core/hle/service/erpt/erpt.cpp

@ -3,6 +3,8 @@
#include <memory> #include <memory>
#include "common/logging/log.h"
#include "core/hle/service/cmif_serialization.h"
#include "core/hle/service/erpt/erpt.h" #include "core/hle/service/erpt/erpt.h"
#include "core/hle/service/server_manager.h" #include "core/hle/service/server_manager.h"
#include "core/hle/service/service.h" #include "core/hle/service/service.h"
@ -15,7 +17,7 @@ public:
explicit ErrorReportContext(Core::System& system_) : ServiceFramework{system_, "erpt:c"} { explicit ErrorReportContext(Core::System& system_) : ServiceFramework{system_, "erpt:c"} {
// clang-format off // clang-format off
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
{0, nullptr, "SubmitContext"},
{0, C<&ErrorReportContext::SubmitContext>, "SubmitContext"},
{1, nullptr, "CreateReportV0"}, {1, nullptr, "CreateReportV0"},
{2, nullptr, "SetInitialLaunchSettingsCompletionTime"}, {2, nullptr, "SetInitialLaunchSettingsCompletionTime"},
{3, nullptr, "ClearInitialLaunchSettingsCompletionTime"}, {3, nullptr, "ClearInitialLaunchSettingsCompletionTime"},
@ -36,6 +38,14 @@ public:
RegisterHandlers(functions); RegisterHandlers(functions);
} }
private:
Result SubmitContext(InBuffer<BufferAttr_HipcMapAlias> buffer_a,
InBuffer<BufferAttr_HipcMapAlias> buffer_b) {
LOG_WARNING(Service_SET, "(STUBBED) called, buffer_a_size={}, buffer_b_size={}",
buffer_a.size(), buffer_b.size());
R_SUCCEED();
}
}; };
class ErrorReportSession final : public ServiceFramework<ErrorReportSession> { class ErrorReportSession final : public ServiceFramework<ErrorReportSession> {

Loading…
Cancel
Save