mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-05 06:22:45 +01:00
Merge pull request #5168 from Morph1984/aoc-PurchaseEventManager
aoc_u: Stub IPurchaseEventManager and its service commands
This commit is contained in:
commit
df6427d30b
2 changed files with 76 additions and 2 deletions
|
@ -48,6 +48,62 @@ static std::vector<u64> AccumulateAOCTitleIDs(Core::System& system) {
|
||||||
return add_on_content;
|
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_)
|
AOC_U::AOC_U(Core::System& system_)
|
||||||
: ServiceFramework{system_, "aoc:u"}, add_on_content{AccumulateAOCTitleIDs(system)} {
|
: ServiceFramework{system_, "aoc:u"}, add_on_content{AccumulateAOCTitleIDs(system)} {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
|
@ -62,8 +118,8 @@ AOC_U::AOC_U(Core::System& system_)
|
||||||
{7, &AOC_U::PrepareAddOnContent, "PrepareAddOnContent"},
|
{7, &AOC_U::PrepareAddOnContent, "PrepareAddOnContent"},
|
||||||
{8, &AOC_U::GetAddOnContentListChangedEvent, "GetAddOnContentListChangedEvent"},
|
{8, &AOC_U::GetAddOnContentListChangedEvent, "GetAddOnContentListChangedEvent"},
|
||||||
{9, nullptr, "GetAddOnContentLostErrorCode"},
|
{9, nullptr, "GetAddOnContentLostErrorCode"},
|
||||||
{100, nullptr, "CreateEcPurchasedEventManager"},
|
{100, &AOC_U::CreateEcPurchasedEventManager, "CreateEcPurchasedEventManager"},
|
||||||
{101, nullptr, "CreatePermanentEcPurchasedEventManager"},
|
{101, &AOC_U::CreatePermanentEcPurchasedEventManager, "CreatePermanentEcPurchasedEventManager"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
@ -201,6 +257,22 @@ void AOC_U::GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx) {
|
||||||
rb.PushCopyObjects(aoc_change_event.readable);
|
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) {
|
void InstallInterfaces(SM::ServiceManager& service_manager, Core::System& system) {
|
||||||
std::make_shared<AOC_U>(system)->InstallAsService(service_manager);
|
std::make_shared<AOC_U>(system)->InstallAsService(service_manager);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,8 @@ private:
|
||||||
void GetAddOnContentBaseId(Kernel::HLERequestContext& ctx);
|
void GetAddOnContentBaseId(Kernel::HLERequestContext& ctx);
|
||||||
void PrepareAddOnContent(Kernel::HLERequestContext& ctx);
|
void PrepareAddOnContent(Kernel::HLERequestContext& ctx);
|
||||||
void GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx);
|
void GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx);
|
||||||
|
void CreateEcPurchasedEventManager(Kernel::HLERequestContext& ctx);
|
||||||
|
void CreatePermanentEcPurchasedEventManager(Kernel::HLERequestContext& ctx);
|
||||||
|
|
||||||
std::vector<u64> add_on_content;
|
std::vector<u64> add_on_content;
|
||||||
Kernel::EventPair aoc_change_event;
|
Kernel::EventPair aoc_change_event;
|
||||||
|
|
Loading…
Reference in a new issue