AnyPS5/docs/dev/debt/libScePad.md

3.0 KiB

libScePad technical debt

Unknown function info

  • scePadSetAngularVelocityDeadbandState (libScePad) - with the deadband on, each angular velocity axis whose magnitude is below 0.017453292 rad/s (1 degree per second) reads as 0, before the orientation is integrated; it starts off. Threshold, per-axis test and default follow duaLib, which reimplements the PC libScePad.dll; the console's threshold is not measured, and the deadband is kept per library rather than per handle since one pad handle exists
  • scePadOpen and scePadOpenExt (libScePad) - special ports (type 2) return DEVICE_NOT_CONNECTED (0x80920007) because the host has no special controller, and scePadGetHandle has no handle for them; whether the console opens a handle and reports the device as disconnected later is unknown. scePadOpenExt handles only special ports. PPSA01317 passes a 16-byte param that names the device by vendor and product id (b7 0e 04 0e ... for 0x0eb7:0x0e04) and skips the user on any negative result. Other port types throw
  • scePadVrControllerReadState (libScePad, NID iA-DdobUen8) - the name hashes to the imported NID; the (int handle, void* state) signature follows PS5VR (PPSA99177), which passes a PS VR2 Sense controller handle from scePadOpen type 3 or 4 and a 0x68-byte state it reads as buttons at 0, stick bytes at 4 and a connected byte at 0x40. The title calls it only after sceHmd2Initialize succeeds, which it does not here, so every call throws; the state layout is otherwise unknown
  • scePadSetVibrationMode (libScePad) - modes 0 to 3 are accepted and stored; the meaning of mode 3 is unknown (PPSA21480 calls it with 3 right after scePadOpen and aborts on failure; SharpProspero names only 1 and 2). The stored mode has no other effect
  • scePadIsRemoteController (libScePad) - the name hashes to NID fCWdlnmB1Ks; the signature (int handle, bool* remote) comes from PPSA16064, which zeroes a byte, passes its address after scePadGetControllerInformation and ignores the result. The error codes follow the other pad calls. Controllers are local devices, so the answer is always false
  • scePadSetAngularVelocityBiasCorrectionState (libScePad) - inferred signature (int handle, bool enabled) follows scePadSetTiltCorrectionState and scePadSetAngularVelocityDeadbandState; an invalid handle returns PAD_ERROR_INVALID_HANDLE, disabling is a no-op, and enabling throws because bias correction is not modelled