ndeadly / MissionControl

Use controllers from other consoles natively on your Nintendo Switch via Bluetooth. No dongles or other external hardware neccessary.
GNU General Public License v2.0
2.6k stars 141 forks source link

Wii U Pro Controller right stick modifies values on left stick #335

Open Regendx opened 3 years ago

Regendx commented 3 years ago

Hello, I've been trying to figure out this problem the whole day, for some reason my left stick is drifting really badly when connected through the latest Mission Control I have HOS 12.0.2 and AMS 0.19.5 I'm 90% sure that something is going on with the app because the controller works perfectly on Wii U a playing Breath of The Wild while playing on switch Link moves by himself (Also tested the controller playing on wii through Nintendont), I've deleted every other app that could give problems due to some weird bluetooth interaction, I tried calibrating multiple times, the right stick moving the left stick (Video attached) is also notable playing botw on switch, I can confirm that the drifting was present on mission control 5.0 but im not sure RS moving LS was

sorry for the low quality and noisy video, you should mute it , and thanks in advance

https://user-images.githubusercontent.com/72174921/130316310-ced8cfa8-1792-4046-8673-f416f7201f94.mp4

ndeadly commented 3 years ago

There is nothing in the stick processing code for Wii U controllers that has changed between 0.5.0 and 0.5.1. The "drift" (it's really just an off-center neutral value for the stick) has always been present, and is due to the fact that each individual stick has a unique range and neutral value and doesn't use the full range of bits allocated to it. It has been more pronounced since I improved analog stick accuracy for all controllers in 0.5.0 (I think it was previously obscured by a lower scaling factor and inner deadzones). Switch controllers have the same issue, the difference is that they store factory calibration data that the console uses to normalise the stick data. Older Nintendo controllers don't store any calibration data and must be calibrated manually. This was the motivation behind the virtual SPI flash feature introduced in the latest update.

Upon checking, I was able to observe a very slight effect of the right stick on the left on one of my controllers. However, it's barely noticeable compared to what your video shows, seems to diminish over time, and doesn't occur with my other controller at all. This leads me to believe it's not a problem with the code, but possibly some kind of physical effect with the controller hardware. I would expect a problem with the handling code (eg misaligned offset for the stick data) to show much more consistent results.

In any case, I wouldn't trust the analog stick data from any older Nintendo controllers anymore without first completing the calibration. Report back to me on what you observe after calibration.

Regendx commented 3 years ago

After calibration of both sticks, LS has almost the same level of drift only reducing it a little bit, RS has almost no drift but its not neutral, RS still affects LS even when LS is detected as neutral (The higher the drift, the higher the influence RS has on LS)

Sorry for the mixed up letters

ndeadly commented 3 years ago

This is a very strange issue. After calibration , the sticks on both of my controllers are perfectly centered etc. Anything else I should know about? Is this an authentic Nintendo controller? Are the analog sticks worn out to a degree that might make their neutral values more off-center than usual?

Could you run this app (ignore the name, it works for WiiU controllers too) and make another video showing you pushing the sticks to the min/max position along each axis, and moving the right stick about in the same way you demonstrated the effect on the left stick above. I'm curious about the raw data your controller is sending. If moving the right stick exhibits any noticeable effect on the raw left stick data then it's almost certainly a controller issue.

giannidallatorre commented 3 years ago

The "drift" (it's really just an off-center neutral value for the stick) has always been present, and is due to the fact that each individual stick has a unique range and neutral value and doesn't use the full range of bits allocated to it. It has been more pronounced since I improved analog stick accuracy for all controllers in 0.5.0 (I think it was previously obscured by a lower scaling factor and inner deadzones).

Sorry for the intrusion, I noticed a slightly drift with my Wii U controllers while I am still with 0.5.0. Is there a setting to increase the off-center neutral value range?

ndeadly commented 3 years ago

@giannidallatorre you mean an inner deadzone? No not currently. You can still do the stick calibration on 0.5.0 and it will most likely solve the issue, it just doesn't get saved so you'll need to do it every time you connect the controller. However, I don't see why you have any reason to not update to 0.5.1. I released it to solve this issue for you ;)

giannidallatorre commented 3 years ago

@giannidallatorre you mean an inner deadzone? No not currently. You can still do the stick calibration on 0.5.0 and it will most likely solve the issue, it just doesn't get saved so you'll need to do it every time you connect the controller. However, I don't see why you have any reason to not update to 0.5.1. I released it to solve this issue for you ;)

For the installation I am using the HB app store, where it is still linked the 0.5.0 version and I haven't read the all changelog of 0.5.1 (only the actual changelog paragraph 😅) so I had not realized that is already fixed. Will update directly from GitHub. Thanks for the answer and for your great work!