diff options
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/service/aoc/aoc_u.cpp | 76 | ||||
| -rw-r--r-- | src/core/hle/service/aoc/aoc_u.h | 2 | 
2 files changed, 76 insertions, 2 deletions
| diff --git a/src/core/hle/service/aoc/aoc_u.cpp b/src/core/hle/service/aoc/aoc_u.cpp index 6abac3f78..9c404db96 100644 --- a/src/core/hle/service/aoc/aoc_u.cpp +++ b/src/core/hle/service/aoc/aoc_u.cpp @@ -48,6 +48,62 @@ static std::vector<u64> AccumulateAOCTitleIDs(Core::System& system) {      return add_on_content;  } +class IPurchaseEventManager final : public ServiceFramework<IPurchaseEventManager> { +public: +    explicit IPurchaseEventManager(Core::System& system_) +        : ServiceFramework{system_, "IPurchaseEventManager"} { +        // clang-format off +        static const FunctionInfo functions[] = { +            {0, &IPurchaseEventManager::SetDefaultDeliveryTarget, "SetDefaultDeliveryTarget"}, +            {1, &IPurchaseEventManager::SetDeliveryTarget, "SetDeliveryTarget"}, +            {2, &IPurchaseEventManager::GetPurchasedEventReadableHandle, "GetPurchasedEventReadableHandle"}, +            {3, nullptr, "PopPurchasedProductInfo"}, +            {4, nullptr, "PopPurchasedProductInfoWithUid"}, +        }; +        // clang-format on + +        RegisterHandlers(functions); + +        purchased_event = Kernel::WritableEvent::CreateEventPair( +            system.Kernel(), "IPurchaseEventManager:PurchasedEvent"); +    } + +private: +    void SetDefaultDeliveryTarget(Kernel::HLERequestContext& ctx) { +        IPC::RequestParser rp{ctx}; + +        const auto unknown_1 = rp.Pop<u64>(); +        [[maybe_unused]] const auto unknown_2 = ctx.ReadBuffer(); + +        LOG_WARNING(Service_AOC, "(STUBBED) called, unknown_1={}", unknown_1); + +        IPC::ResponseBuilder rb{ctx, 2}; +        rb.Push(RESULT_SUCCESS); +    } + +    void SetDeliveryTarget(Kernel::HLERequestContext& ctx) { +        IPC::RequestParser rp{ctx}; + +        const auto unknown_1 = rp.Pop<u64>(); +        [[maybe_unused]] const auto unknown_2 = ctx.ReadBuffer(); + +        LOG_WARNING(Service_AOC, "(STUBBED) called, unknown_1={}", unknown_1); + +        IPC::ResponseBuilder rb{ctx, 2}; +        rb.Push(RESULT_SUCCESS); +    } + +    void GetPurchasedEventReadableHandle(Kernel::HLERequestContext& ctx) { +        LOG_WARNING(Service_AOC, "called"); + +        IPC::ResponseBuilder rb{ctx, 2, 1}; +        rb.Push(RESULT_SUCCESS); +        rb.PushCopyObjects(purchased_event.readable); +    } + +    Kernel::EventPair purchased_event; +}; +  AOC_U::AOC_U(Core::System& system_)      : ServiceFramework{system_, "aoc:u"}, add_on_content{AccumulateAOCTitleIDs(system)} {      // clang-format off @@ -62,8 +118,8 @@ AOC_U::AOC_U(Core::System& system_)          {7, &AOC_U::PrepareAddOnContent, "PrepareAddOnContent"},          {8, &AOC_U::GetAddOnContentListChangedEvent, "GetAddOnContentListChangedEvent"},          {9, nullptr, "GetAddOnContentLostErrorCode"}, -        {100, nullptr, "CreateEcPurchasedEventManager"}, -        {101, nullptr, "CreatePermanentEcPurchasedEventManager"}, +        {100, &AOC_U::CreateEcPurchasedEventManager, "CreateEcPurchasedEventManager"}, +        {101, &AOC_U::CreatePermanentEcPurchasedEventManager, "CreatePermanentEcPurchasedEventManager"},      };      // clang-format on @@ -201,6 +257,22 @@ void AOC_U::GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx) {      rb.PushCopyObjects(aoc_change_event.readable);  } +void AOC_U::CreateEcPurchasedEventManager(Kernel::HLERequestContext& ctx) { +    LOG_WARNING(Service_AOC, "(STUBBED) called"); + +    IPC::ResponseBuilder rb{ctx, 2, 0, 1}; +    rb.Push(RESULT_SUCCESS); +    rb.PushIpcInterface<IPurchaseEventManager>(system); +} + +void AOC_U::CreatePermanentEcPurchasedEventManager(Kernel::HLERequestContext& ctx) { +    LOG_WARNING(Service_AOC, "(STUBBED) called"); + +    IPC::ResponseBuilder rb{ctx, 2, 0, 1}; +    rb.Push(RESULT_SUCCESS); +    rb.PushIpcInterface<IPurchaseEventManager>(system); +} +  void InstallInterfaces(SM::ServiceManager& service_manager, Core::System& system) {      std::make_shared<AOC_U>(system)->InstallAsService(service_manager);  } diff --git a/src/core/hle/service/aoc/aoc_u.h b/src/core/hle/service/aoc/aoc_u.h index 7628f4568..26ee51be0 100644 --- a/src/core/hle/service/aoc/aoc_u.h +++ b/src/core/hle/service/aoc/aoc_u.h @@ -27,6 +27,8 @@ private:      void GetAddOnContentBaseId(Kernel::HLERequestContext& ctx);      void PrepareAddOnContent(Kernel::HLERequestContext& ctx);      void GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx); +    void CreateEcPurchasedEventManager(Kernel::HLERequestContext& ctx); +    void CreatePermanentEcPurchasedEventManager(Kernel::HLERequestContext& ctx);      std::vector<u64> add_on_content;      Kernel::EventPair aoc_change_event; | 
