[PR #117] [CLOSED] Fix DS5 Windows game detection: expose PS5 game mode in UI, differentiate bcdDevice #206

Closed
opened 2026-10-22 05:07:36 +00:00 by roman · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/safijari/openpuck/pull/117
Author: @Copilot
Created: 7/3/2026
Status: ❌ Closed

Base: main ← Head: copilot/114-fortnite-ds5-controller-issue


📝 Commits (1)

  • 4bfc834 Fix DS5 Windows game detection: expose PS5 game mode in UI, fix bcdDevice

📊 Changes

3 files changed (+8 additions, -3 deletions)

View changed files

📝 OpenPuck/OpenPuck.ino (+1 -1)
📝 OpenPuck/mode_ps5.cpp (+5 -1)
📝 docs/index.html (+2 -1)

📄 Description

MODE_PS5_GAME (mode 7) — the clean single-HID DualSense specifically designed for strict Windows game APIs (Fortnite/UE GameInput, Windows.Gaming.Input) — was invisible in the WebUSB panel. Users were forced onto MODE_PS5 (mode 5), which includes a wake-mouse HID + WebUSB vendor interface that causes Windows game classifiers to reject the device despite the correct VID/PID. Additionally, MODE_PS5 and MODE_PS5_GAME shared bcdDevice = 0x0110, violating the descriptor-cache rule: a user who'd previously used MODE_PS5 could get Windows serving the stale extra-interface descriptor even after switching to the clean mode.

Changes

  • docs/index.html: Added "PS5 DualSense (for games)" button (mode 7) to the panel. Renamed MODE_NAMES[7] from "PS5 (game/clean)" to "PS5 DualSense (for games)".

  • OpenPuck/mode_ps5.cpp: usbIdentity() now sets bcdDevice = 0x0100 for clean PS modes (matching real wired DualSense) and 0x0110 for MODE_PS5 with extra interfaces — ensures Windows invalidates its cached descriptor on a mode switch between the two.

USBDevice.setDeviceVersion(modeIsCleanPS(g_usbMode) ? 0x0100 : 0x0110);
  • OpenPuck/OpenPuck.ino: Debug serial label update for MODE_PS5_GAME.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/safijari/openpuck/pull/117 **Author:** [@Copilot](https://github.com/apps/copilot-swe-agent) **Created:** 7/3/2026 **Status:** ❌ Closed **Base:** `main` ← **Head:** `copilot/114-fortnite-ds5-controller-issue` --- ### 📝 Commits (1) - [`4bfc834`](https://github.com/safijari/openpuck/commit/4bfc834a661592b514d327f7c91e2e1501a0bb7c) Fix DS5 Windows game detection: expose PS5 game mode in UI, fix bcdDevice ### 📊 Changes **3 files changed** (+8 additions, -3 deletions) <details> <summary>View changed files</summary> 📝 `OpenPuck/OpenPuck.ino` (+1 -1) 📝 `OpenPuck/mode_ps5.cpp` (+5 -1) 📝 `docs/index.html` (+2 -1) </details> ### 📄 Description MODE_PS5_GAME (mode 7) — the clean single-HID DualSense specifically designed for strict Windows game APIs (Fortnite/UE GameInput, Windows.Gaming.Input) — was invisible in the WebUSB panel. Users were forced onto MODE_PS5 (mode 5), which includes a wake-mouse HID + WebUSB vendor interface that causes Windows game classifiers to reject the device despite the correct VID/PID. Additionally, MODE_PS5 and MODE_PS5_GAME shared `bcdDevice = 0x0110`, violating the descriptor-cache rule: a user who'd previously used MODE_PS5 could get Windows serving the stale extra-interface descriptor even after switching to the clean mode. ## Changes - **`docs/index.html`**: Added "PS5 DualSense (for games)" button (mode 7) to the panel. Renamed `MODE_NAMES[7]` from `"PS5 (game/clean)"` to `"PS5 DualSense (for games)"`. - **`OpenPuck/mode_ps5.cpp`**: `usbIdentity()` now sets `bcdDevice = 0x0100` for clean PS modes (matching real wired DualSense) and `0x0110` for MODE_PS5 with extra interfaces — ensures Windows invalidates its cached descriptor on a mode switch between the two. ```c USBDevice.setDeviceVersion(modeIsCleanPS(g_usbMode) ? 0x0100 : 0x0110); ``` - **`OpenPuck/OpenPuck.ino`**: Debug serial label update for MODE_PS5_GAME. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
roman 2026-10-22 05:07:36 +00:00
Sign in to join this conversation.
No labels
pull-request
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
safijari/openpuck#206
No description provided.