kozec / sc-controller

User-mode driver and GTK3 based GUI for Steam Controller
GNU General Public License v2.0
1.54k stars 131 forks source link

Motion often stops working when using Cemu Linux port #699

Open toboggan7 opened 2 years ago

toboggan7 commented 2 years ago

Often, when using the DSUController input method with Cemu along with the Cemuhook motion provider in sc-controller with a Steam Controller, motion seems to cut out completely.

Input still seems to be sent, although frozen, as drift is noticeable when using a bow or rune in Breath of the Wild after motion stops working.

Other providers, such as MotionSource on Android, seem to work fine with no interruptions. Would a fix for this be possible?

alexmaras commented 1 year ago

I've figured out why this is happening. The steam controller is idling when no input occurs, and stops sending the gyro events. Cemu will then consider the client dead because it's not sending any new inputs through.

You can keep it working by having fairly consistent input happening. If you put the controller down for a cutscene it'll not be working when you pick it up again.

I'm working on a fix for this, where the cemuhook server will constantly send UDP packets (even if the current input value hasn't changed) until the client times out, which is the behavior specified in the protocol spec.