Skip to content
This repository was archived by the owner on Dec 14, 2025. It is now read-only.
This repository was archived by the owner on Dec 14, 2025. It is now read-only.

Implement SInput Gamepad Support #1272

@mitchellcairns

Description

@mitchellcairns

Answers checklist.

  • I have read and will follow the terms above.
  • I have read the documentation BlueRetro wiki and the issue is not addressed there.
  • I have updated my BlueRetro to latest version available.
  • I have searched the issue tracker for a similar issue and not found a similar issue.

BlueRetro firmware version

N/A

BlueRetro firmware specification

HW1

BlueRetro firmware variant

Universal

BlueRetro hardware type

External adapter dongle (1 port only)

Manufacturer

N/A

System used

Nintendo GameCube

Bluetooth controller brand & name

No response

What is the problem? (only list ONE problem per report)

We had discussed earlier implementing an open protocol (#1081). I've since redone and formalized an input standard that can be used by all of my gamepads.

The protocol and all struct definitions can be found here: https://docs.handheldlegend.com/s/sinput

This protocol supports dual analog joysticks, along with analog triggers. Dual-stage triggers are supported as part of the protocol (Digital ZL/ZR are considered the 'full press' basically)

Some specific VID/PIDs that you may want to utilize for better mappings:


GC Ultimate
Product (Name varies for model variants, do not use as a means of locating): GC Ultimate
VID: 0x2E8A
PID: 0x10DD

This has the analog triggers as well as the digital press. Let me know if you have any questions here.


ProGCC
Product (Name varies for model variants, do not use as a means of locating): ProGCC
VID: 0x2E8A
PID: 0x10DF

This features digital triggers only


Hoja Gamepad
Product (Name varies for model variants, do not use as a means of locating): Generic Gamepad Fallback
VID: 0x2E8A
PID: 0x10C6

This is basically for hobbyists to have a way to target this input protocol and have an expected/supported means of achieving digital + analog triggers, gyro etc. Of course the gyro/accelerometer is irrelevant here but still worth noting why I'm including it.


Feature Flags
For the feature flags, unless you intend on utilizing motion features, you can pretty much ignore it, unless you want to have a simpler time dealing with determining whether or not one of these 'SInput' gamepads supports a specific feature such as analog triggers etc.


Haptics
Haptic output is defined with a neat organized structure. There's a structure type designed for typical ERM style feedback with a brake parameter.


Player Number Assignment
There is an HID Output report command that supports setting player number. Any 8 bit value is supported.

What did you expect to happen?

N/A

Attach BlueRetro debug trace here

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions