Skip to content
This repository has been archived by the owner on Jan 1, 2024. It is now read-only.

Random bouts of long rumble and connectivity issues after latest update #616

Closed
stealsfromhobos opened this issue Mar 21, 2019 · 28 comments
Closed

Comments

@stealsfromhobos
Copy link

After updating to 1.7.0 I would have dropped inputs and disconnects occasionally. Plus there would be times where the controller starts rumbling for a prolonged time without any obvious cause. It would happen randomly when playing Monster Hunter World and immediately on startup of Ocarina of Time through Retroarch's ParallellN64 core. This is all on Windows 10.

I've tried three different bluetooth adapters, all with the same result. The same thing even happened on a friend's computer with both old and new DS4 controllers. Rolling back to 1.6.14 made everything work as normal again.

@Ryochan7
Copy link
Owner

There were almost no changes made to DS4Windows for version 1.7.0 outside of changes required for ViGEmBus support. I don't have Monster World Hunter but I can test the problem in Retroarch. Also, are you using Retroarch 1.7.6? That is the version of Retroarch that I will be using for testing.

@Ryochan7
Copy link
Owner

Confirmed this. Also, testing rumble in DS4Windows makes rumble no longer work in games.

@Ryochan7 Ryochan7 added the bug label Mar 21, 2019
@Ryochan7
Copy link
Owner

It looks like ViGEmBus never returns a 0 feedback state so the rumble loop will repeat constantly. ScpVBus did return a 0 state for the rumble so rumble would stop at that point.

@Ryochan7
Copy link
Owner

This is definitely a difference between the two drivers. Other games, such as Rocket League, can report a 0 feedback state when using ViGEmBus but that Retroarch core does not. Maybe you would like to talk to Nefarius about this. You can post on the ViGEm forums or on the ViGEm Discord server.

https://discord.vigem.org/
https://forums.vigem.org/

@Ryochan7 Ryochan7 removed the bug label Mar 22, 2019
@FoetusSheldon
Copy link

I can second this. In most games there is no issue, but in Dolphin specifically, any rumble remains constant until I go into DS4Windows settings and turn on and off the "Test Heavy/Light settings". I also noticed that in Okami HD, sometimes rumble would keep going constantly until I did something that activated rumble again.

@Ryochan7
Copy link
Owner

One force feedback related problem has been solved. Trying to diagnose this one would require debugging the driver. I have not gotten around to trying that. Also, I don't know if there was something in the code for ScpVBus that might have caused a 0 feedback state to be transmitted that was not performed by the application interfacing with the Xbox 360 controller.

@Ryochan7
Copy link
Owner

Ryochan7 commented Mar 29, 2019

Getting a little closer. So far, it has been confirmed that ViGEmBus does receive the 0 feedback state from ParallellN64. However, it fails to transmit the state to the ViGEmClient library with the error STATUS_NO_MORE_ENTRIES.

@Ryochan7
Copy link
Owner

Update before I hit the hay. I have made a small change to the ViGEmBus driver to address the timing issue present with the normal event flow. A simple compromise to check for altered rumble data before attempting to forward a request was made and that was enough to get rid of the problem.

Even though ParallellN64 does end up reporting a 0 feedback state at startup, it does some odds things beforehand. A better test case was rolling into a fence to see how that affected rumble.

@mika-n
Copy link
Collaborator

mika-n commented Mar 29, 2019

Does this need some fixes in ViGEm signed driver side (meaning we have to wait until a new signed driver version is released) or can it be workarounded in client side (maybe a timer to "force" 0 state)? I have seen similar "constant rumbling" in ETS2 simulator also. When a truck drives over kerbs and and the truck is steered back to a lane, sometimes DS4 controller seems to get stuck in rumbling state. I had to disable "suspension force feedback" in ETS2 settings.

@Ryochan7
Copy link
Owner

This problem is due to the way the driver relays rumble data. Unlike ScpVBus which store the rumble state that the client could retrieve later, the ViGEmClient sends a notify request to the bus.

@Ryochan7
Copy link
Owner

Ryochan7 commented Mar 29, 2019

Phone decided I was done. Anyway, the client waits for the next rumble state update and then processes the rumble data. The issue is that a game can send rumble data before the client sends the next notify request. The client will continue to use old rumble data and end up waiting for the next rumble state update.

The only workaround would be to rely on the DS4 hardware timeout.

@Ryochan7
Copy link
Owner

I took a look at the current upstream ViGEmBus code and it looks like this issue would still exist.

@mika-n
Copy link
Collaborator

mika-n commented Mar 30, 2019

Okey. This sounds like a nasty bug and difficult to track down. Timer type of "workaround" to force a zero rumble state in a client side as a backup plan may be good enough solution for now until the fix you prosed is included in ViGem driver and the new driver is signed.

Ryochan7 added a commit that referenced this issue Apr 4, 2019
@Ryochan7
Copy link
Owner

Ryochan7 commented Apr 4, 2019

I am just going to disable force feedback support for now. I want to try to get an update out soon so x86 builds will be usable again.

@siderophobic
Copy link

Just want to add that this bug also happens in Sekiro: Shadows Die Twice. Mainly when fighting multiple enemies and forces a lot of rumble, it will then get stuck and you need to disconnect/connect the port to make the controller work again. Setting rumble to 0% in the profile will fix it.

@epigramx
Copy link

epigramx commented Apr 7, 2019

I had solved a similar issue like that (for wiimotehook) for when an application (cemu) was never sending a stop command occasionally. I just put a maximum rumbling time; it's not like many games want to rumble for seconds at max intensity.

@Ryochan7
Copy link
Owner

Ryochan7 commented Apr 8, 2019

Based on past reports, one game that seems more lax on sending long pulsing rumble events is GTA V. People had brought up the old hardware limit (5 sec.) being a problem with that game.

@mika-n
Copy link
Collaborator

mika-n commented Apr 8, 2019

This is a nasty issue and it is difficult to please everyone. The pull request I did few days ago uses 2secs timeout (plus the pull includes an improvement to LoadProfile special action to fix the "one level deep only" issue).

If everyone needs to be happy then maybe profile specific config option to set the rumble watchdog timer (0secs = disabled watchdog timer, >0 secs max rumble time without updates from a game). The following pull request doesn't have that kind of config option but maybe the "Test rumble" part of the Options screen could have an edit field for that.
#645

Ideally the issue would be fixed in ViGemBus driver level but it may take time before an updated signed driver is available (or fix to that issue is commited in Vigembus code).

@Ryochan7
Copy link
Owner

Version 1.7.4 is now out and it should resolve the stuck rumble issue. I will keep this issue open for further discussion.

https://github.com/Ryochan7/DS4Windows/releases/download/v1.7.4/DS4Windows_1.7.4_x64.zip

@FoetusSheldon
Copy link

FoetusSheldon commented Apr 19, 2019

Is this intended as a temporary fix? It's definitely better, but it has the effect of rumble lasting up to 2 seconds when it should be around 0.5 of a second etc. Personally I decided it was best to downgrade to 1.6.14 for the time being to fix this.

EDIT: some more information: I tested the latest version in Retroarch (the new Mupen64Plus-Next core, in OoT with rumble pak on, rolling into a wall) and found there that rumble lasted longer than it should have. I don't know whether this has been fixed for other problematic scenarios though.

@Ryusennin
Copy link

Ryusennin commented Apr 19, 2019

I confirm the new rumble timeout period seems to be enforced in the few games I tested. In The Division 1 & 2 for example, the vibration of every shot lasts for about two seconds. It's not the case with version 1.7.2.

In the DS4W settings however, the rumble test/stop option works as intended.

@Ryochan7
Copy link
Owner

So the fallback timer is still being hit? I will test this again.

@Ryochan7
Copy link
Owner

Crap. I didn't carry one change over for the ViGEmClient. In effect, only the first notify message in the queue is being used. I have been hopping around too much. I will give this another test and report back.

@Ryochan7
Copy link
Owner

I screwed up. Version 1.7.5 will just be a ViGEmClient library update.

@Ryochan7
Copy link
Owner

Version 1.7.5 is out.

https://github.com/Ryochan7/DS4Windows/releases/download/v1.7.5/DS4Windows_1.7.5_x64.zip

@FoetusSheldon
Copy link

Everything seems to be working great now from what I can tell.

@siderophobic
Copy link

Looks working on my end. (Phoenix Wright: Ace Attorney Trilogy)

@Ryochan7
Copy link
Owner

It looks like InputMapper 1.7 has probably suffered from this same problem for at least several months if not since inception. I don't know if IM 1.7 had force feedback support in the early beta builds.

https://beta.inputmapper.com/forum/inputmapper-1-7/incorrect-force-feedback/

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants