Files
AnyPS5/docs/dev/debt/libSceUsbd.md
T
juanpimg 1f1add461e feat(prx): declare the missing PS5 3.20 system exports in the next tier of libraries
AnyPS5 resolves a title's imports by NID, so a title that imports a system
function that no AnyPS5 library provides fails to load with an unresolved
import. This declares 222 such exports across 11 PS5 system libraries that
AnyPS5 implements but does not provide.

Each declaration calls NotImplemented_nid_no_patch and returns 0; none of
them implements the function. A declaration with a credible prototype uses
it and cites the source with a pinned commit; the rest are declared without
parameters, which resolves the import without making an ABI claim. The
technical-debt files record the limitation per library.

The list is the intersection of the export table of the console's library
(function symbols only), the pinned aerolib names and the functions not yet
defined anywhere in the repo. Every name recomputes to its NID with
tools/nid_names.py.

libSceAudio3d and libSceVoice are left out because #8331 declares them.
2026-10-20 23:22:17 +02:00

3.1 KiB

libSceUsbd technical debt

Silent stubs

  • libSceUsbd passes the calls through to the host with libusb built from the 3rdparty/libusb-cmake submodule. Devices, handles and descriptors are libusb's own objects: the device, config, interface and endpoint descriptor layouts of FreeBSD 11.4 libusb match libusb's field for field, which static_assert pins. Each one handed to the title is tracked, and a pointer this library did not return throws. Errors are libusb's codes mapped to 0x80240000 - code, with LIBUSB_ERROR_OTHER at 0x802400FF, following shadPS4; the null arguments FreeBSD libusb rejects (libusb10.c, libusb10_desc.c, libusb10_io.c) return 0x80240002, and sceUsbdOpen and sceUsbdGetActiveConfigDescriptor throw on a null device, which it dereferences. A submitted transfer is copied into a host transfer whose completion copies the status, actual length and iso packet results back and then calls the title's callback from sceUsbdHandleEventsTimeout; transfer flags other than short-not-ok and add-zero-packet throw. sceUsbdAttachKernelDriver returns 0 as FreeBSD's stub does, sceUsbdCheckConnected reports a device gone when reading its configuration fails with LIBUSB_ERROR_NO_DEVICE (FreeBSD asks the kernel directly), and sceUsbdEventHandlingOk returns 1. When the host has no USB access, initialization keeps the empty device list and event handling waits for its timeout. Opening, descriptors, string and control requests, interface claims and an asynchronous control transfer were checked against an Xbox 360 controller on Windows; the transfer layout, the argument lists, the error codes and isochronous transfers are unverified on PS5

Unknown function info