mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-23 09:03:22 -05:00
sceNpRegisterStateCallback and sceNpRegisterStateCallbackA stored nothing, the unregister calls always succeeded and sceNpCheckCallback did nothing, so a title that waits for its NP state callback never learned the user's state. #1277 reports that Minecraft Preview (PPSA19639) needs the callback (stop 2). sceNpRegisterStateCallbackA now keeps up to 8 callbacks and returns the slot plus 1. A null callback returns INVALID_ARGUMENT, a callback that is already registered CALLBACK_ALREADY_REGISTERED and a ninth one CALLBACK_MAX (0x8055001D). sceNpUnregisterStateCallbackA returns INVALID_ARGUMENT for an id outside 1..8 and CALLBACK_NOT_REGISTERED for an empty slot. The legacy sceNpRegisterStateCallback keeps one callback with the same errors. The rules follow shadPS4 src/core/libraries/np/np_manager.cpp @15abf68c9b52 (RegisterStateCallbackA and UnregisterStateCallbackAById L857-L901, the legacy pair L981-L1005, ORBIS_NP_STATE_CALLBACK_MAX L36) and np_error.h L38. Each registration is marked pending. sceNpCheckCallback takes the pending registrations under the lock and calls them after releasing it, on the calling thread, with SIGNED_OUT for the initial user 0x10000000. For the A form this follows KytyPS5 src/libs/network.cpp @9e41d8320a27 (NpRegisterStateCallbackA L4021-L4034 marks the registration pending, NpCheckCallback L3959-L3974 delivers it once). KytyPS5 never calls the legacy callback (NpRegisterStateCallback and NpUnregisterStateCallback, L4009-L4019, do nothing). The legacy callback is called as (user, SIGNED_OUT, nullptr, userdata), as in shadPS4, which passes an NpId only for SIGNED_IN (L823, L938-L940). shadPS4 queues SIGNED_OUT from the user service login event instead (DispatchPendingNpStateCallbacks L903-L962), and the same event calls the reachability callback once with UNAVAILABLE (L922-L931, L959-L961). The reachability callback is still not called here. These differences and the unmeasured console behaviour are recorded in docs/dev/debt/libSceNpManager.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>