From e56ce402968f2c7d03fb778b35b9248b7c12a70b Mon Sep 17 00:00:00 2001 From: Codex Date: Fri, 30 Oct 2026 00:56:25 +0200 Subject: [PATCH] feat(mbus): add missing device inventory exports --- core/libs/prx/libSceMbus/PendingExports.cpp | 44 +++++++++++++++++++++ core/libs/prx/libSceMbus/include/Api.hpp | 11 ++++++ docs/dev/debt/libSceMbus.md | 2 + 3 files changed, 57 insertions(+) diff --git a/core/libs/prx/libSceMbus/PendingExports.cpp b/core/libs/prx/libSceMbus/PendingExports.cpp index d5f6a7f050..3a75a20f09 100644 --- a/core/libs/prx/libSceMbus/PendingExports.cpp +++ b/core/libs/prx/libSceMbus/PendingExports.cpp @@ -584,4 +584,48 @@ int APS5_VABI sceMbusUserLogout(std::int32_t userId) { return 0; } +int APS5_VABI sceMbusGetCurrentChatBalanceId() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceMbusGetInitialUser() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceMbusGetSimulatedBusUsableStatusByBusType2() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceMbusSetChatBalance() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceMbusSetCronosOutputMode() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceMbusSetCronosPrimaryUser() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceMbusSetHmd2SocialScreenAudioMode() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceMbusSetVibrationTriggerEffectWeakWhileEmbeddedMicInUse() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceMbusSetVolumeDownForDiscPlayerFG() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceMbusStartAudioOutScreenShare() { + NotImplemented_nid_no_patch(__func__); +} + +int APS5_VABI sceMbusStopAudioOutScreenShare() { + NotImplemented_nid_no_patch(__func__); +} + } diff --git a/core/libs/prx/libSceMbus/include/Api.hpp b/core/libs/prx/libSceMbus/include/Api.hpp index d31c99a8aa..c65ebc6864 100644 --- a/core/libs/prx/libSceMbus/include/Api.hpp +++ b/core/libs/prx/libSceMbus/include/Api.hpp @@ -188,5 +188,16 @@ int APS5_VABI sceMbusTerm(); int APS5_VABI sceMbusUnregisterDriver(std::int32_t driverId); int APS5_VABI sceMbusUserLogin(std::int32_t userId); int APS5_VABI sceMbusUserLogout(std::int32_t userId); +int APS5_VABI sceMbusGetCurrentChatBalanceId(); +int APS5_VABI sceMbusGetInitialUser(); +int APS5_VABI sceMbusGetSimulatedBusUsableStatusByBusType2(); +int APS5_VABI sceMbusSetChatBalance(); +int APS5_VABI sceMbusSetCronosOutputMode(); +int APS5_VABI sceMbusSetCronosPrimaryUser(); +int APS5_VABI sceMbusSetHmd2SocialScreenAudioMode(); +int APS5_VABI sceMbusSetVibrationTriggerEffectWeakWhileEmbeddedMicInUse(); +int APS5_VABI sceMbusSetVolumeDownForDiscPlayerFG(); +int APS5_VABI sceMbusStartAudioOutScreenShare(); +int APS5_VABI sceMbusStopAudioOutScreenShare(); } diff --git a/docs/dev/debt/libSceMbus.md b/docs/dev/debt/libSceMbus.md index 4fccfba7a6..a75929963e 100644 --- a/docs/dev/debt/libSceMbus.md +++ b/docs/dev/debt/libSceMbus.md @@ -6,6 +6,8 @@ ### Unknown function info +- [sceMbusGetCurrentChatBalanceId, sceMbusGetInitialUser, sceMbusGetSimulatedBusUsableStatusByBusType2, sceMbusSetChatBalance, sceMbusSetCronosOutputMode, sceMbusSetCronosPrimaryUser, sceMbusSetHmd2SocialScreenAudioMode, sceMbusSetVibrationTriggerEffectWeakWhileEmbeddedMicInUse, sceMbusSetVolumeDownForDiscPlayerFG, sceMbusStartAudioOutScreenShare and sceMbusStopAudioOutScreenShare](../../../core/libs/prx/libSceMbus/PendingExports.cpp) have unknown signatures and behaviour. The parameterless `int` declarations are import-resolution placeholders, not confirmed ABI signatures, and every call throws through `NotImplemented_nid_no_patch`. Only the names and NIDs are established by the [13.60 export inventory](https://github.com/xdCloudy/PS5-13.60-Function-Stub-Library/blob/bfec40deb4c47a17d7603ee2bc79aa6862c0c56b/data/firmware-13.60/libscembus-c03d5277f5.jsonl); not measured on a console. + - [sceDeviceServiceQueryDeviceInfo_](../../../core/libs/prx/libSceMbus/Export.cpp): the 112-byte device-info layout and the third argument's meaning remain unresolved. The second argument is a six-byte HID usage filter pointer, not an integer. Initialization takes an optional 16-byte parameter structure with an optional thread configuration; custom scheduling throws because the host has no event worker. `sceDeviceServiceGetEventState` takes a clear flag, not a device type. - [sceMbus remaining declarations](../../../core/libs/prx/libSceMbus/PendingExports.cpp): SetDeviceFunctionState takes a 64-bit device identifier and a 180-byte aggregate by value on the stack. Its service-side fields and source alignment remain unresolved; the declaration preserves the observed stack ABI with opaque storage. AcquireControlList and Term return constants without reading incoming arguments, so their original parameter lists cannot be established from the callees.