Files
Mihawk 4788d35076 Up to four controllers, one per signed-in PS5 user
The console pairs each controller with a signed-in user, and scePadOpen
opens a user's controller, so RetroArch read only the first player's.
The joypad driver now connects controllers the way ProsperoEden does
(PS5_ProsperoEden b919847, headless/pad.cpp):

- Port 0 (player 1) is the user who started the title, and stays theirs.
- About once a second sceUserServiceGetLoginUserIdList is read again. A
  new user's controller takes the first free port (1 to 3); a port is
  let go, and announced gone, when its user signs out. A pad the process
  already holds is reused through scePadGetHandle.
- Each port is announced to RetroArch's autoconfiguration on its own and
  has its own buttons, axes, rumble and haptic stream. The pad script
  still plays port 0.

The console's config already maps players 1-4 to joypad indexes 0-3.
For test runs, tools/run-title.sh --pad-monitor arms
/app0/pad-monitor.txt, which traces each port's whole button word as it
changes, including the bit that says the system holds the controller.

Evidence: evidence/multi-controller/ (capture.json, expectation.json;
console user ids masked). On the base PS5 13.40 with two DualSense
controllers and two signed-in users (build 95a82988):
  run 211620: ports 0 and 1 opened, each with its haptic stream, and
    both reported connected
  the owner's own launch from the home screen: the launching user's
    controller became port 0 and the other port 1; both were opened again
    after RetroArch re-initialised input, and a racing game played with
    both controllers
The committed source differs from build 95a82988 only in the monitor's
trace format, which the host test covers; that build was not run on the
console.
Host test: tests/test_input_ps5.py PASS (the four-player scenario: join,
separate input and rumble, sign-out, rejoin, the first player kept, an
open failure, a full house, the monitor, re-announcement after a reset).
Command:
  tools/run-title.sh --no-build --no-deploy --pad-monitor --watch 120
Gates: tools/verify.sh PASS (format unit build integration evidence).
2026-10-04 21:26:17 -04:00

13 lines
738 B
JSON

{
"step": "multi-controller",
"note": "Up to four controllers, one per signed-in user, as ProsperoEden connects them: port 0 the user who started the title, later users the first free port, a port let go at sign-out. Two controllers on the base PS5 opened as ports 0 and 1 with their own haptic streams, and the owner played a racing game with both.",
"must_contain": [
"input: signed-in users A B -1 -1",
"input: pad opened, port=1 user=B haptic_thread=1 format=s16",
"input: port 1: user B's controller connected",
"four players by signed-in user"
],
"must_not_contain": [],
"human_check": "The owner played a racing game with two controllers on the base PS5 (build 95a82988) and reported that both work."
}