[PATCH 2/4] winebus.sys: Process quirky DualSense bluetooth reports.

Arkadiusz Hiler ahiler at codeweavers.com
Mon Jan 24 12:09:54 CST 2022


On Mon, Jan 24, 2022 at 08:37:14AM -0800, Roderick Colenbrander wrote:
> On Mon, Jan 24, 2022 at 2:25 AM Arkadiusz Hiler <ahiler at codeweavers.com> wrote:
> >
> > On Mon, Jan 24, 2022 at 12:48:21AM +0100, Rémi Bernon wrote:
> > > On 1/22/22 21:01, Roderick Colenbrander wrote:
> > > > Hi Arkadiusz,
> > > >
> > > > I'm not a big fan of this type of fixup here (and the same for DS4 to
> > > > be honest). The DS4/DualSense have unusual HID reports, but this type
> > > > of fixup causes issues for applications which properly parse the HID
> > > > data. For example various applications for example do use our
> > > > libScePad.dll for games on Windows. They go through the Windows HID
> > > > APIs. This breaks such applications.
> > > >
> > > > Thanks,
> > > >
> > > > Roderick Colenbrander
> > > > Sony Interactive Entertainment, LLC
> > >
> > > Hi Roderick,
> > >
> > > Thanks for giving some feedback. The fixups have been added for games and
> > > applications which do not expect to receive the extended reports, and only
> > > support the reports that are openly described in the HID descriptors.
> > >
> > > As Arek has found already, and as you say, some other applications or
> > > middlewares are explicitly requesting them, so we were considering adding
> > > some more logic to remove the fixups and send the extended reports in the
> > > same way as on Windows, when they are requested.
> > >
> > > I understand that these extended reports are triggered by some feature
> > > report requests, and this is automatically done on Linux by the kernel and
> > > evdev driver, to the contrary to what happens on Windows, or maybe there's
> > > something we've missed?
> >
> > Hi folks,
> >
> > As Rémi has mentioned this is only to "undo" the mode switch that
> > hid_playstation/hid_sony does on Linux for Sony controllers when they
> > are used over Bluetooth.
> >
> > On Windows those use the basic reports (#1) by default and require
> > getting calibration feature report (#5) to switch modes.
> >
> > The next patch in this series handles the mode switch:
> > https://source.winehq.org/patches/data/224003
> >
> > That's at least how SDL does that. If there are more ways to trigger
> > this please let us know so we can support it.
> 
> I believe feature report 5 is the main way.

Good to know.

> > Also after switching the modes the controller no longer works through
> > DirectInput and requires to be reconnected, as it seems to be a one way
> > transition.
> >
> > I've found a fairly new game that comes with libScePad.dll - God of War.
> > The game does handle DualSense and DualShock 4 over USB only. When those
> > contollers are connected over Bluetooth the game does not detect them.
> 
> Correct, libScePad.dll doesn't handle Bluetooth devices and I'm not
> sure why that decision was made (on older Windows version there
> inconsistent Bluetooth stacks, so may have been related).

Then it won't support the controllers over Bluetooth whether we apply
the quirk or not.

> > If you have any suggestions for a game that I could use for testing the
> > Bluetooth extended mode switching please let me know.
> 
> Unfortunately I don't know other games by head as I'm not part of the
> Windows / game support teams. A good starting point would probably be
> Sony games e.g. Horizon. There have been some other published as well.

I can check HZD, but I doubt that it will support Bluetooth if the newer
GoW doesn't. It take a while to download though.

> >
> > --
> > Cheers,
> > Arek
> 
> Overall I'm not sure what the best thing to do is. As I shared in the
> other email various other applications (e.g. Chrome) do handle the
> extended report data properly and would thus break.

Why would they break? I've just tested a few things on Windows and
Chrome works with DualShock 4 over Bluetooth in both basic and enhanced
modes.

Also Chrome doesn't switch the controller mode by itself, it's just fine
if something else switches the mode for it.

Switching mode to extended on Windows makes the DualShock 4 unusable
through DirectInput though which breaks *a lot* of games. This is also
the case with our dinput HID backend in Wine.

> One method, but also not ideal at all. Would be to override the device
> descriptors and report it as a USB device. However that would mean
> spoofing various other reports as well and would make more like
> hid-sony/hid-playstation. It would be the most compatible way and not
> break other applications.

I still don't understand what's bad about having the quirk and disabling
the it on feture report #5? This will make the controller behave just
like it does on Windows - if application wants the extended reports and
can understand them it can still request them.

> I really hate HID so bad it is such a poor abstraction and since every
> application accesses the device directly any state is lost (e.g. for
> our devices you can change power management, reporting speed, light
> colors and more).

I share the sentiment but at least it somewhat works across various
platoforms with no need for dedicated drivers.

-- 
Cheers,
Arek



More information about the wine-devel mailing list