[GH-ISSUE #34] Feature Request: DualSense Edge → Standard DualSense Relay/Spoof Mode #10

Closed
opened 2026-10-15 12:51:10 +00:00 by bsakaguchi · 2 comments
Owner

Originally created by @philipobenito on GitHub (Jan 12, 2026).
Original GitHub issue: https://github.com/games-on-whales/inputtino/issues/34

Add support for relaying input from a physical DualSense Edge controller (054C:0DF2) through a virtual standard DualSense (054C:0CE6), enabling Edge users to access native DualSense features in games that haven't updated their hardware ID detection.

Problem

The DualSense Edge uses a different hardware ID (054C:0DF2) than the standard DualSense (054C:0CE6). Many PC games with native DualSense support (haptic feedback, adaptive triggers, speaker) hardcode detection for the standard controller's ID and don't recognise the Edge variant.

On Windows, tools like Special K can intercept HID calls and spoof the hardware ID. No equivalent solution exists for Linux. Special K's HID spoofing doesn't work reliably under Proton, leaving Linux users without access to advanced DualSense features in affected games.

Affected Games (Examples)

Games with native DualSense support that don't recognise the Edge:

  • Alan Wake 2
  • Returnal
  • Death Stranding Director's Cut
  • Final Fantasy VII Remake/Rebirth
  • Metro Exodus Enhanced Edition
  • etc...

Current Workarounds

  • Windows: Special K hardware ID spoofing works
  • Linux: None. Users must use a standard DualSense instead

Proposed Solution

inputtino already creates fully-functional virtual DualSense controllers via UHID. The missing piece is a relay mode that:

  1. Reads from physical Edge via hidraw (/dev/hidraw* for 054C:0DF2)
  2. Creates virtual standard DualSense using existing inputtino UHID implementation with ID 054C:0CE6
  3. Forwards input bidirectionally:
    • Edge → Virtual: buttons, sticks, gyro, accelerometer, touchpad
    • Virtual → Edge: haptic feedback, adaptive trigger effects, LED, speaker audio
  4. Hides physical Edge from applications (via exclusive hidraw access or udev rules)

Architecture

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│  Physical Edge  │────▶│  inputtino relay │────▶│ Virtual DS5     │
│  054C:0DF2      │◀────│  daemon          │◀────│ 054C:0CE6       │
│  (hidraw)       │     │                  │     │ (UHID)          │
└─────────────────┘     └──────────────────┘     └─────────────────┘
        │                                                │
        │ haptics/triggers/LED                           │ detected by
        │ forwarded back                                 │ games as
        │                                                │ standard DS5
        ▼                                                ▼
   User feels                                      Game sends
   feedback                                        haptic data

Implementation Notes

  • The Edge and standard DualSense share identical HID report structures (same underlying hardware)
  • Only the VID:PID identification differs
  • inputtino's existing PS5Joypad implementation handles all the UHID/report complexity
  • Main new work: hidraw reading, device hiding, bidirectional forwarding

Potential API

// Option 1: Dedicated relay class
auto relay = DualSenseEdgeRelay::create();
// Automatically finds Edge, creates virtual DS5, handles forwarding

// Option 2: Extension to existing Joypad
auto joypad = Joypad::create(Joypad::PS, Joypad::RELAY_EDGE);
// Internally manages the relay

Benefits

  • Fills a gap: No other Linux solution exists for this problem
  • Leverages existing code: inputtino already has 90% of what's needed
  • Benefits streaming users: Sunshine/Wolf users with Edge controllers would gain full DualSense support
  • Additional Linux Users: Edge is a popular controller; many Linux gamers are affected

Additional Context

Hardware IDs

Controller VID:PID
DualSense 054C:0CE6
DualSense Edge 054C:0DF2

Why Not Upstream Kernel Fix?

The hid-playstation kernel driver correctly identifies both controllers. The problem is application-level: games check for specific hardware IDs when looking for the controller's audio device (for haptics) or when initialising HID communication. This can only be solved by:

  1. Each game adding Edge support (slow, unreliable)
  2. System-level ID spoofing (this request)

I'm Happy to Help

I'm a software engineer and would be willing to:

  • Test development builds
  • Provide detailed logs/debugging info
  • Contribute code if pointed in the right direction
  • Document the feature once implemented
Originally created by @philipobenito on GitHub (Jan 12, 2026). Original GitHub issue: https://github.com/games-on-whales/inputtino/issues/34 Add support for relaying input from a physical DualSense Edge controller (`054C:0DF2`) through a virtual standard DualSense (`054C:0CE6`), enabling Edge users to access native DualSense features in games that haven't updated their hardware ID detection. ## Problem The DualSense Edge uses a different hardware ID (`054C:0DF2`) than the standard DualSense (`054C:0CE6`). Many PC games with native DualSense support (haptic feedback, adaptive triggers, speaker) hardcode detection for the standard controller's ID and don't recognise the Edge variant. On Windows, tools like Special K can intercept HID calls and spoof the hardware ID. **No equivalent solution exists for Linux.** Special K's HID spoofing doesn't work reliably under Proton, leaving Linux users without access to advanced DualSense features in affected games. ### Affected Games (Examples) Games with native DualSense support that don't recognise the Edge: - Alan Wake 2 - Returnal - Death Stranding Director's Cut - Final Fantasy VII Remake/Rebirth - Metro Exodus Enhanced Edition - etc... ### Current Workarounds - **Windows**: Special K hardware ID spoofing works - **Linux**: None. Users must use a standard DualSense instead ## Proposed Solution inputtino already creates fully-functional virtual DualSense controllers via UHID. The missing piece is a **relay mode** that: 1. **Reads from physical Edge** via hidraw (`/dev/hidraw*` for `054C:0DF2`) 2. **Creates virtual standard DualSense** using existing inputtino UHID implementation with ID `054C:0CE6` 3. **Forwards input bidirectionally**: - Edge → Virtual: buttons, sticks, gyro, accelerometer, touchpad - Virtual → Edge: haptic feedback, adaptive trigger effects, LED, speaker audio 4. **Hides physical Edge** from applications (via exclusive hidraw access or udev rules) ### Architecture ``` ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ Physical Edge │────▶│ inputtino relay │────▶│ Virtual DS5 │ │ 054C:0DF2 │◀────│ daemon │◀────│ 054C:0CE6 │ │ (hidraw) │ │ │ │ (UHID) │ └─────────────────┘ └──────────────────┘ └─────────────────┘ │ │ │ haptics/triggers/LED │ detected by │ forwarded back │ games as │ │ standard DS5 ▼ ▼ User feels Game sends feedback haptic data ``` ### Implementation Notes - The Edge and standard DualSense share identical HID report structures (same underlying hardware) - Only the VID:PID identification differs - inputtino's existing `PS5Joypad` implementation handles all the UHID/report complexity - Main new work: hidraw reading, device hiding, bidirectional forwarding ### Potential API ```cpp // Option 1: Dedicated relay class auto relay = DualSenseEdgeRelay::create(); // Automatically finds Edge, creates virtual DS5, handles forwarding // Option 2: Extension to existing Joypad auto joypad = Joypad::create(Joypad::PS, Joypad::RELAY_EDGE); // Internally manages the relay ``` ## Benefits - **Fills a gap**: No other Linux solution exists for this problem - **Leverages existing code**: inputtino already has 90% of what's needed - **Benefits streaming users**: Sunshine/Wolf users with Edge controllers would gain full DualSense support - **Additional Linux Users**: Edge is a popular controller; many Linux gamers are affected ## Additional Context ### Related Discussions - Proton DualSense tracking issue: https://github.com/ValveSoftware/Proton/issues/5900 - PCGamingWiki DualSense Edge: https://www.pcgamingwiki.com/wiki/Controller:DualSense_Edge - Your excellent blog series on UHID/DualSense virtualisation was invaluable in understanding this space ### Hardware IDs | Controller | VID:PID | |------------|---------| | DualSense | `054C:0CE6` | | DualSense Edge | `054C:0DF2` | ### Why Not Upstream Kernel Fix? The `hid-playstation` kernel driver correctly identifies both controllers. The problem is application-level: games check for specific hardware IDs when looking for the controller's audio device (for haptics) or when initialising HID communication. This can only be solved by: 1. Each game adding Edge support (slow, unreliable) 2. System-level ID spoofing (this request) ## I'm Happy to Help I'm a software engineer and would be willing to: - Test development builds - Provide detailed logs/debugging info - Contribute code if pointed in the right direction - Document the feature once implemented
Author
Owner

@ABeltramo commented on GitHub (Jan 12, 2026):

I'm sorry you've burned LLMs tokens to generate all that, but you can already set a custom Hardware ID via the APIs exposed in inputtino. See for example: https://github.com/games-on-whales/inputtino/blob/stable/tests%2FtestCAPI.cpp#L185-L188

<!-- gh-comment-id:3737421607 --> @ABeltramo commented on GitHub (Jan 12, 2026): I'm sorry you've burned LLMs tokens to generate all that, but you can already set a custom Hardware ID via the APIs exposed in inputtino. See for example: https://github.com/games-on-whales/inputtino/blob/stable/tests%2FtestCAPI.cpp#L185-L188
Author
Owner

@Follen22 commented on GitHub (Mar 14, 2026):

https://aur.archlinux.org/packages/ds5-edge-relay
yay -S ds5-edge-relay
I made it yesterday)

<!-- gh-comment-id:4060188462 --> @Follen22 commented on GitHub (Mar 14, 2026): https://aur.archlinux.org/packages/ds5-edge-relay yay -S ds5-edge-relay I made it yesterday)
Sign in to join this conversation.
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
games-on-whales/inputtino#10
No description provided.