diff options
| -rw-r--r-- | src/core/hle/service/acc/acc.cpp | 43 | ||||
| -rw-r--r-- | src/core/hle/service/acc/acc.h | 3 | ||||
| -rw-r--r-- | src/core/hle/service/acc/acc_su.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/service/acc/profile_manager.h | 3 | ||||
| -rw-r--r-- | src/core/hle/service/am/am.cpp | 41 | ||||
| -rw-r--r-- | src/core/hle/service/am/am.h | 3 | 
6 files changed, 91 insertions, 8 deletions
| diff --git a/src/core/hle/service/acc/acc.cpp b/src/core/hle/service/acc/acc.cpp index b971401e6..b7d14060c 100644 --- a/src/core/hle/service/acc/acc.cpp +++ b/src/core/hle/service/acc/acc.cpp @@ -49,7 +49,7 @@ public:          : ServiceFramework{system_, "IManagerForSystemService"} {          // clang-format off          static const FunctionInfo functions[] = { -            {0, nullptr, "CheckAvailability"}, +            {0, &IManagerForSystemService::CheckAvailability, "CheckAvailability"},              {1, nullptr, "GetAccountId"},              {2, nullptr, "EnsureIdTokenCacheAsync"},              {3, nullptr, "LoadIdTokenCache"}, @@ -78,6 +78,13 @@ public:          RegisterHandlers(functions);      } + +private: +    void CheckAvailability(HLERequestContext& ctx) { +        LOG_WARNING(Service_ACC, "(STUBBED) called"); +        IPC::ResponseBuilder rb{ctx, 2}; +        rb.Push(ResultSuccess); +    }  };  // 3.0.0+ @@ -837,6 +844,29 @@ void Module::Interface::InitializeApplicationInfoV2(HLERequestContext& ctx) {      rb.Push(ResultSuccess);  } +void Module::Interface::BeginUserRegistration(HLERequestContext& ctx) { +    const auto user_id = Common::UUID::MakeRandom(); +    profile_manager->CreateNewUser(user_id, "yuzu"); + +    LOG_INFO(Service_ACC, "called, uuid={}", user_id.FormattedString()); + +    IPC::ResponseBuilder rb{ctx, 6}; +    rb.Push(ResultSuccess); +    rb.PushRaw(user_id); +} + +void Module::Interface::CompleteUserRegistration(HLERequestContext& ctx) { +    IPC::RequestParser rp{ctx}; +    Common::UUID user_id = rp.PopRaw<Common::UUID>(); + +    LOG_INFO(Service_ACC, "called, uuid={}", user_id.FormattedString()); + +    profile_manager->WriteUserSaveFile(); + +    IPC::ResponseBuilder rb{ctx, 2}; +    rb.Push(ResultSuccess); +} +  void Module::Interface::GetProfileEditor(HLERequestContext& ctx) {      IPC::RequestParser rp{ctx};      Common::UUID user_id = rp.PopRaw<Common::UUID>(); @@ -880,6 +910,17 @@ void Module::Interface::StoreSaveDataThumbnailApplication(HLERequestContext& ctx      StoreSaveDataThumbnail(ctx, uuid, tid);  } +void Module::Interface::GetBaasAccountManagerForSystemService(HLERequestContext& ctx) { +    IPC::RequestParser rp{ctx}; +    const auto uuid = rp.PopRaw<Common::UUID>(); + +    LOG_INFO(Service_ACC, "called, uuid=0x{}", uuid.RawString()); + +    IPC::ResponseBuilder rb{ctx, 2, 0, 1}; +    rb.Push(ResultSuccess); +    rb.PushIpcInterface<IManagerForSystemService>(system, uuid); +} +  void Module::Interface::StoreSaveDataThumbnailSystem(HLERequestContext& ctx) {      IPC::RequestParser rp{ctx};      const auto uuid = rp.PopRaw<Common::UUID>(); diff --git a/src/core/hle/service/acc/acc.h b/src/core/hle/service/acc/acc.h index 6b4735c2f..0395229b4 100644 --- a/src/core/hle/service/acc/acc.h +++ b/src/core/hle/service/acc/acc.h @@ -33,10 +33,13 @@ public:          void TrySelectUserWithoutInteraction(HLERequestContext& ctx);          void IsUserAccountSwitchLocked(HLERequestContext& ctx);          void InitializeApplicationInfoV2(HLERequestContext& ctx); +        void BeginUserRegistration(HLERequestContext& ctx); +        void CompleteUserRegistration(HLERequestContext& ctx);          void GetProfileEditor(HLERequestContext& ctx);          void ListQualifiedUsers(HLERequestContext& ctx);          void ListOpenContextStoredUsers(HLERequestContext& ctx);          void StoreSaveDataThumbnailApplication(HLERequestContext& ctx); +        void GetBaasAccountManagerForSystemService(HLERequestContext& ctx);          void StoreSaveDataThumbnailSystem(HLERequestContext& ctx);      private: diff --git a/src/core/hle/service/acc/acc_su.cpp b/src/core/hle/service/acc/acc_su.cpp index d9882ecd3..770d13ec5 100644 --- a/src/core/hle/service/acc/acc_su.cpp +++ b/src/core/hle/service/acc/acc_su.cpp @@ -23,7 +23,7 @@ ACC_SU::ACC_SU(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager>          {99, nullptr, "DebugActivateOpenContextRetention"},          {100, nullptr, "GetUserRegistrationNotifier"},          {101, nullptr, "GetUserStateChangeNotifier"}, -        {102, nullptr, "GetBaasAccountManagerForSystemService"}, +        {102, &ACC_SU::GetBaasAccountManagerForSystemService, "GetBaasAccountManagerForSystemService"},          {103, nullptr, "GetBaasUserAvailabilityChangeNotifier"},          {104, nullptr, "GetProfileUpdateNotifier"},          {105, nullptr, "CheckNetworkServiceAvailabilityAsync"}, @@ -40,8 +40,8 @@ ACC_SU::ACC_SU(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager>          {152, nullptr, "LoadSignedDeviceIdentifierCacheForNintendoAccount"},          {190, nullptr, "GetUserLastOpenedApplication"},          {191, nullptr, "ActivateOpenContextHolder"}, -        {200, nullptr, "BeginUserRegistration"}, -        {201, nullptr, "CompleteUserRegistration"}, +        {200, &ACC_SU::BeginUserRegistration, "BeginUserRegistration"}, +        {201, &ACC_SU::CompleteUserRegistration, "CompleteUserRegistration"},          {202, nullptr, "CancelUserRegistration"},          {203, nullptr, "DeleteUser"},          {204, nullptr, "SetUserPosition"}, diff --git a/src/core/hle/service/acc/profile_manager.h b/src/core/hle/service/acc/profile_manager.h index 993a5a57a..900e32200 100644 --- a/src/core/hle/service/acc/profile_manager.h +++ b/src/core/hle/service/acc/profile_manager.h @@ -96,9 +96,10 @@ public:      bool SetProfileBaseAndData(Common::UUID uuid, const ProfileBase& profile_new,                                 const UserData& data_new); +    void WriteUserSaveFile(); +  private:      void ParseUserSaveFile(); -    void WriteUserSaveFile();      std::optional<std::size_t> AddToProfiles(const ProfileInfo& profile);      bool RemoveProfileAtIndex(std::size_t index); diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index ac376b55a..98765b81a 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp @@ -210,8 +210,8 @@ IDisplayController::IDisplayController(Core::System& system_)          {21, nullptr, "ClearAppletTransitionBuffer"},          {22, nullptr, "AcquireLastApplicationCaptureSharedBuffer"},          {23, nullptr, "ReleaseLastApplicationCaptureSharedBuffer"}, -        {24, nullptr, "AcquireLastForegroundCaptureSharedBuffer"}, -        {25, nullptr, "ReleaseLastForegroundCaptureSharedBuffer"}, +        {24, &IDisplayController::AcquireLastForegroundCaptureSharedBuffer, "AcquireLastForegroundCaptureSharedBuffer"}, +        {25, &IDisplayController::ReleaseLastForegroundCaptureSharedBuffer, "ReleaseLastForegroundCaptureSharedBuffer"},          {26, &IDisplayController::AcquireCallerAppletCaptureSharedBuffer, "AcquireCallerAppletCaptureSharedBuffer"},          {27, &IDisplayController::ReleaseCallerAppletCaptureSharedBuffer, "ReleaseCallerAppletCaptureSharedBuffer"},          {28, nullptr, "TakeScreenShotOfOwnLayerEx"}, @@ -239,6 +239,22 @@ void IDisplayController::TakeScreenShotOfOwnLayer(HLERequestContext& ctx) {      rb.Push(ResultSuccess);  } +void IDisplayController::AcquireLastForegroundCaptureSharedBuffer(HLERequestContext& ctx) { +    LOG_WARNING(Service_AM, "(STUBBED) called"); + +    IPC::ResponseBuilder rb{ctx, 4}; +    rb.Push(ResultSuccess); +    rb.Push(1U); +    rb.Push(0); +} + +void IDisplayController::ReleaseLastForegroundCaptureSharedBuffer(HLERequestContext& ctx) { +    LOG_WARNING(Service_AM, "(STUBBED) called"); + +    IPC::ResponseBuilder rb{ctx, 2}; +    rb.Push(ResultSuccess); +} +  void IDisplayController::AcquireCallerAppletCaptureSharedBuffer(HLERequestContext& ctx) {      LOG_WARNING(Service_AM, "(STUBBED) called"); @@ -1557,7 +1573,7 @@ ILibraryAppletSelfAccessor::ILibraryAppletSelfAccessor(Core::System& system_)          {100, nullptr, "CreateGameMovieTrimmer"},          {101, nullptr, "ReserveResourceForMovieOperation"},          {102, nullptr, "UnreserveResourceForMovieOperation"}, -        {110, nullptr, "GetMainAppletAvailableUsers"}, +        {110, &ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers, "GetMainAppletAvailableUsers"},          {120, nullptr, "GetLaunchStorageInfoForDebug"},          {130, nullptr, "GetGpuErrorDetectedSystemEvent"},          {140, nullptr, "SetApplicationMemoryReservation"}, @@ -1652,6 +1668,25 @@ void ILibraryAppletSelfAccessor::GetCallerAppletIdentityInfo(HLERequestContext&      rb.PushRaw(applet_info);  } +void ILibraryAppletSelfAccessor::GetMainAppletAvailableUsers(HLERequestContext& ctx) { +    const Service::Account::ProfileManager manager{}; +    bool is_empty{true}; +    s32 user_count{-1}; + +    LOG_INFO(Service_AM, "called"); + +    if (manager.GetUserCount() > 0) { +        is_empty = false; +        user_count = static_cast<s32>(manager.GetUserCount()); +        ctx.WriteBuffer(manager.GetAllUsers()); +    } + +    IPC::ResponseBuilder rb{ctx, 4}; +    rb.Push(ResultSuccess); +    rb.Push<u8>(is_empty); +    rb.Push(user_count); +} +  void ILibraryAppletSelfAccessor::PushInShowAlbum() {      const Applets::CommonArguments arguments{          .arguments_version = Applets::CommonArgumentVersion::Version3, diff --git a/src/core/hle/service/am/am.h b/src/core/hle/service/am/am.h index 4a045cfd4..64b3f3fe2 100644 --- a/src/core/hle/service/am/am.h +++ b/src/core/hle/service/am/am.h @@ -124,6 +124,8 @@ public:  private:      void GetCallerAppletCaptureImageEx(HLERequestContext& ctx);      void TakeScreenShotOfOwnLayer(HLERequestContext& ctx); +    void AcquireLastForegroundCaptureSharedBuffer(HLERequestContext& ctx); +    void ReleaseLastForegroundCaptureSharedBuffer(HLERequestContext& ctx);      void AcquireCallerAppletCaptureSharedBuffer(HLERequestContext& ctx);      void ReleaseCallerAppletCaptureSharedBuffer(HLERequestContext& ctx);  }; @@ -345,6 +347,7 @@ private:      void GetLibraryAppletInfo(HLERequestContext& ctx);      void ExitProcessAndReturn(HLERequestContext& ctx);      void GetCallerAppletIdentityInfo(HLERequestContext& ctx); +    void GetMainAppletAvailableUsers(HLERequestContext& ctx);      void PushInShowAlbum();      void PushInShowCabinetData(); | 
