From cf66112d4e367f4dfdc15f72d6752d3f309fa89b Mon Sep 17 00:00:00 2001 From: Fire Cube Date: Tue, 20 May 2025 22:55:10 +0200 Subject: [PATCH] more --- .../libraries/companion/companion_util.cpp | 38 ++++++++++++++++++- src/core/libraries/companion/companion_util.h | 18 ++++++++- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/core/libraries/companion/companion_util.cpp b/src/core/libraries/companion/companion_util.cpp index a1d9bb0be..8070f5886 100644 --- a/src/core/libraries/companion/companion_util.cpp +++ b/src/core/libraries/companion/companion_util.cpp @@ -8,8 +8,42 @@ namespace Libraries::CompanionUtil { -s32 PS4_SYSV_ABI sceCompanionUtilGetEvent() { - return 0x8000000; +uint32_t PS4_SYSV_ABI getEvent(sceCompanionUtilContext* ctx, sceCompanionUtilEvent* outEvent, + s32 param_3) { + uint32_t return_var; + + if (outEvent == 0) { + return_var = ORBIS_COMPANION_UTIL_INVALID_ARGUMENT; + } + + if (ctx == nullptr) { + return_var = ORBIS_COMPANION_UTIL_INVALID_POINTER; + } else { + uint8_t* base = ctx->blob; + int flag = *reinterpret_cast(base + 0x178); + if (flag == 0) { + return_var = ORBIS_COMPANION_UTIL_NO_EVENT; + } else { + return_var = ORBIS_COMPANION_UTIL_OK; + } + } + + return return_var; +} + +s32 PS4_SYSV_ABI sceCompanionUtilGetEvent(sceCompanionUtilEvent* outEvent) { + + sceCompanionUtilContext* ctx = nullptr; + uint32_t ret = getEvent(ctx, outEvent, + 1); + uint32_t return_var; + LOG_DEBUG(Lib_CompanionUtil, "(STUBBED) called ret: {}", ret); + return_var = ret | 0xad0000; + if (-1 < (int)ret) { + return_var = ret; + } + + return return_var; } s32 PS4_SYSV_ABI sceCompanionUtilGetRemoteOskEvent() { diff --git a/src/core/libraries/companion/companion_util.h b/src/core/libraries/companion/companion_util.h index 96f37ee27..3d7edc377 100644 --- a/src/core/libraries/companion/companion_util.h +++ b/src/core/libraries/companion/companion_util.h @@ -11,7 +11,23 @@ class SymbolsResolver; namespace Libraries::CompanionUtil { -s32 PS4_SYSV_ABI sceCompanionUtilGetEvent(); +static constexpr uint32_t ORBIS_COMPANION_UTIL_OK = 0; + +static constexpr uint32_t ORBIS_COMPANION_UTIL_INVALID_ARGUMENT = 0x80000004; +static constexpr uint32_t ORBIS_COMPANION_UTIL_INVALID_POINTER = 0x80000006; +static constexpr uint32_t ORBIS_COMPANION_UTIL_NO_EVENT = 0x80000008; + +struct sceCompanionUtilEvent { + std::uint8_t blob[0x104]{}; /// 0x104 bytes of data, dont know what it is exactly +}; + +struct sceCompanionUtilContext { + std::uint8_t blob[0x27B]{}; /// 0x27B bytes of data, dont know what it is exactly +}; + +uint32_t PS4_SYSV_ABI getEvent(sceCompanionUtilContext* ctx, sceCompanionUtilEvent* outEvent, + s32 param_3); +s32 PS4_SYSV_ABI sceCompanionUtilGetEvent(sceCompanionUtilEvent* outEvent); s32 PS4_SYSV_ABI sceCompanionUtilGetRemoteOskEvent(); s32 PS4_SYSV_ABI sceCompanionUtilInitialize(); s32 PS4_SYSV_ABI sceCompanionUtilOptParamInitialize();