Show who's signed in on each controller, and an Invite QR code

When the PS4 reports a user signed in on a controller, the service asks for
the user's name and adds it to the status as `user`. The PS4 may not have
finished signing the user in by then, so a failed look-up is retried every
half second for five seconds. The tile shows the name in place of
"Controller N" (the ring keeps the number), and the controller screen reads
"Controller 1 · Alex". Names are kept out of the log, since people post logs
in bug reports, and they go out cleaned: quotes and backslashes escaped, and
control characters or anything that isn't valid UTF-8 replaced, because a
browser drops the whole WebSocket on a text frame that isn't valid UTF-8.

An Invite panel, opened from a button next to the settings or from the menu,
shows the page's address as a QR code for friends to scan. The console makes
the code with the QR encoder the app already ships, from the address the page
reached it on, and sends the module grid; the page draws it as SVG, so it still
needs no libraries.

The gamepad picker's tooltip had the same "Controller 1 · Controller 1" doubling
the controller screen had; it now names the user too.
This commit is contained in:
MoHadiShibli committed 2026-10-06 01:05:33 +03:00
1 parent be950bf7b5
commit 200e2bfc0b
18 files changed
+308 -19

No files matched your search

+2
View File
@@ -14,6 +14,8 @@
/* ---- libSceUserService ---- */
int32_t sceUserServiceInitialize(void *params);
/* The user's name as the PS4 shows it: an online ID, or a local account's name. */
int32_t sceUserServiceGetUserName(int32_t userId, char *name, size_t size);
#define C4F_USER_ID_INVALID (-1)
+4
View File
@@ -74,6 +74,10 @@ void c4fPadFeedbackParse(const uint8_t *buf, size_t size, C4fPadFeedback *out);
* Returns 0, the call's error code, or -1 if the call isn't exported. */
int32_t c4fVirtualPadFeedback(const C4fVirtualPad *pad, C4fPadFeedback *out);
/* The PS4's name for a user, as it shows it. Returns 0, or the call's error.
* Not written to the log: people post logs in bug reports. */
int32_t c4fUserName(uint32_t userId, char *out, size_t size);
/* A neutral sample: sticks centred, identity quaternion, connected. */
void c4fPadDataNeutral(ScePadData *data);