Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature Request] DualShock 3 Pressure-Sensitive buttons support #2304

Open
eVenent opened this issue Dec 30, 2021 · 7 comments
Open

[Feature Request] DualShock 3 Pressure-Sensitive buttons support #2304

eVenent opened this issue Dec 30, 2021 · 7 comments

Comments

@eVenent
Copy link

eVenent commented Dec 30, 2021

Quick summary

Xbox offers pressure sensitive buttons support. I saw that OG controller is finally supported properly with pressure sensitive features, but there are other controllers like DualShock 2 and DualShock 3 which support this feature as well. Maybe it will be worth to support them too.

Details

While DualShock 2 requires Bliss Box or Mayflash adapters to support pressure sensitive buttons, DualShock 3 requires only DsHidMini driver, so implementation is much easier. This driver already enables pressure sensitive buttons for DS3 controller for PCSX2 and RPCS3. Everything works perfectly fine. It would be great to have PlayStation's controller signals properly translated into Xbox controller signals within emulator.

System Configuration:

Windows 10, DualShock 3 controller, DsHidMini driver.

Additional Information (if any):

As PlayStation controllers don't have "white" and "black" buttons, I think their role can be took over by L1 and R2 buttons, which are pressure sensitive too.

@ergo720
Copy link
Member

ergo720 commented Dec 30, 2021

Cxbxr already supports emulating the pressure-sensitive buttons of the Duke and S controllers, it's implemented in this line

ControlState state = (bindings[i] != nullptr) ? dynamic_cast<InputDevice::Input*>(bindings[i])->GetState() : 0.0;
.
This takes the current input state of the bound io control of your device (which is a number in the range 0.0 - 1.0) and converts it to the corresponding xbox input value for the analog button. So, if your input value is an intermediate value (say 0.5), it will also generate an intermediate xbox input value, which is what pressure-sensitive buttons are all about. This means it's up to your device / API used, to generate these middle values. I know that XInput does not support analog buttons, so that leaves us with SDL. So, this will only work if SDL recognizes the buttons as analog and exposes them with an SDL axis, because if it treats them as buttons, then it always report them as digital, as explained here. If that's the case, you'll have to ask SDL to add support for analog buttons instead, which I see you already did here.

Not related specifically to the drivers you mentioned, but the driver that the user uses can also be a problem. For example, I too have a DualShock 2 controller, but the driver I'm using for it still treats the buttons as digital, and thus breaks their functionality.

So overall, I'm keen to close this because cxbxr already supports this and it's an issue of SDL actually.

@eVenent
Copy link
Author

eVenent commented Dec 30, 2021

Ok, so all leads to SDL's new feature implementation and without it we are unable to go forward. Thank you for clarification.

@CookiePLMonster
Copy link
Contributor

I can't see SDL implementing this API extension anytime soon though.

@Masamune3210
Copy link

Considering no modern controllers support pressure sensitivity on their face buttons I'm kinda with you unfortunately, it was a cool thing but apparently the console manu's decided it wasn't worth it or it wasn't being used enough to keep it going

@mirh
Copy link

mirh commented Aug 31, 2022

There are even analog keyboards in this day and age...
(and a DS2 + SPI-USB adapter isn't really any different from any other device to handle)
Anyway, this is the feature request libsdl-org/SDL#5148

@eVenent
Copy link
Author

eVenent commented Sep 11, 2022

So it finally happened for DualShock 3 with this commit and SDL is supporting pressure-sensitive face buttons. 😁 For now, supports only DS3 and DS2 adapters which convert signals to DS3 (like Ostent ones), it does not have Xbox OG pressure-sensitive buttons yet, but maybe it will change in the future. BUT DS3 controllers for sure will cover a big chunk of the total number of use cases.

@eVenent eVenent changed the title [Feature Request] DualShock 3 Pressure-Sensitive buttons support with DsHidMini driver [Feature Request] DualShock 3 Pressure-Sensitive buttons support Oct 10, 2022
@eVenent
Copy link
Author

eVenent commented Oct 14, 2022

I have one interesting update.

ReWASD team has introduced Virtual DS3 controller which can emulate pressure-sensitive buttons on every supported controller. It means that even Xbox One controllers can have pressure-sensitive options depends how we will configure it (I'm usually using other button modifiers or combos like RB+A i giving only 20% pressure, but normal press A is 100% or short press 20%, double press 50% long press 100%). This solution is tested for PS emulators and works great.

They even modified PCSX2's code to support native DS3 driver for pressure-sensitivity - Native DualShock 3 support in Windows by official Sony driver (sixaxis). I think it's worth to implement this feature in this way by adding support for official DS3 driver and the rest job can be done by rewasd's virtual DS3 controller or the real one.

@Cxbx-Reloaded Cxbx-Reloaded deleted a comment from uncaged9000 May 16, 2023
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

No branches or pull requests

5 participants