Skip to content

Add DualShock 3 / SIXAXIS support (diagnostics) - #272

Open
mathiasm74 wants to merge 2 commits into
dualshock-tools:mainfrom
mathiasm74:feature/ds3-support
Open

mathiasm74 wants to merge 2 commits into
dualshock-tools:mainfrom
mathiasm74:feature/ds3-support

Conversation

@mathiasm74

@mathiasm74 mathiasm74 commented Aug 29, 2026

Copy link
Copy Markdown
Collaborator

What the PR changes

Adds basic support for the DualShock 3 / SIXAXIS as a diagnose-only device:

  • The controller can be connected over USB and shows its hardware info, including its own Bluetooth address and the console/PC it is currently paired to (the DS3 stores its master's address in flash, which explains many "it keeps waking up my PS3" cases).
  • Buttons and sticks are shown live on the main screen for input testing.
  • Since the DS3 stays silent over USB until the PS button is pressed, the connect flow prompts for that.
  • Calibration, save and reboot controls are hidden for it — the DS3 has no known calibration protocol, so the tool offers testing only. This adds two small UI flags so a controller profile can hide the range-calibration and save/reboot buttons.

mathiasm74 and others added 2 commits August 29, 2026 15:48
The DS3 enumerates as HID but stays silent until set operational: on
connect the app reads feature report 0xF2 and prompts the user to
press the PS button, after which input reports flow (see the earlier
Debug-tab probe for how this was found). No WebUSB or native app
needed.

- New DS3Controller: USB input mapping (buttons, dpad via
  parseDeviceSpecificInputs since it is discrete bits not a hat,
  sticks, L2/R2 analog), identity from the Bluetooth MAC read from
  0xF2, paired-console MAC from 0xF5, USB battery status. Byte offsets
  are provisional (documented layout) pending the raw inspector.
- Factory: register 0x054c:0x0268 in filters, instance, name and a
  diagnose-only UI config.
- Connect flow: exempt the DS3 from the 63-byte USB gate, run the 0xF2
  handshake with a "press PS" prompt, and hide range calibration,
  save and reboot (new showRangeCalib/showSaveReboot UI flags) since
  the DS3 has no calibration path yet.
- The DS3 reuses the DualShock 4 SVG artwork; presses light the body,
  triggers show the analog gradient, sticks drive the dials.

DS3 stick-center calibration over feature report 0xF1 exists but can
brick a controller, so it is deferred to a scoped follow-up.

New strings pending translation in lang/*.json.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit 5864169)
Generated with scripts/process_lang.py --auto.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DVo2fLzyxnPEJWordoQxwZ
@carpikes

Copy link
Copy Markdown
Contributor

Nice PR, thank you!

I tried to connect it to a PS3 controller and the UI kept spinning on Connecting without any visible message.
After a while I looked in the console and there was a message Missing translation for "Press the PS button on the DualShock 3 to continue.". So I realized I completely missed the popup at the bottom of the screen.

I would change the UI in this way:

  • It tries to connect for 1 second, if it manages to do it, all good: no popup is shown.
  • after 1 second a bigger popup is shown, something like the "Range Calibration" window, which asks the user to press the PS button, with a close button to terminate the connection (if the button is broken, for example).

Other minor things:

  • Moving the analog sticks doesn't make them move in the SVG.
  • Both the Info and Debug tab are not used, maybe they can be hidden. The buttons in Debug trigger errors if pressed.

What do you think?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants