sceMoveClose returns INVALID_HANDLE for a handle that is not open since 808d67e715 (#8252), and sceMoveOpen returns ALREADY_OPENED for an open slot since c478789949 (#8252) and throws only for users other than the initial user since 95ea06e80b (#8125). The sentence came from 8a1bd363ef (#9137), which left both bodies alone; the rest of the entry already describes them.
sceMoveOpen returned a new handle for any user, type and index, although
the console's result for a user other than the initial user and for a
type and index that are already open is not known. Both now throw, as
libSceHmd2 does for another user. Record which shadPS4 behaviour the
handle and open checks add to.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Arbzg9c2DA4DEFKVSvRgYv
Track the handles sceMoveOpen issues. A handle that was never opened,
is closed or was opened before sceMoveTerm now throws instead of
succeeding, since the console's INVALID_HANDLE result and its order
against INVALID_ARG are not known. List the no-controller path under
Silent stubs, as libSceHmd and libSceBluetoothHid do, and check the
handle values in the test.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Arbzg9c2DA4DEFKVSvRgYv
Add sceMoveInit, sceMoveTerm, sceMoveOpen, sceMoveGetDeviceInfo and
sceMoveSetVibration, and replace the throwing stubs of the other six
exports. Behaviour and error codes follow shadPS4; signatures follow
Orbital. A guest test covers the init state, argument checks and the
no-controller results.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Arbzg9c2DA4DEFKVSvRgYv