Switch console unable to calibrate sticks
Of my three Steam controllers, only one has a left stick that works properly with the Switch firmware. One stick is miscalibrated to point slightly downwards when in resting position, and the other momentarily jitters upwards when held downwards. I have not noticed these issues while playing Steam games. The calibration menu in the Switch settings could solve my problems, but it opens a dialogue:
Stick calibration is not currently supported for this device. Calibration may be possible after a system update.
Of my three Steam controllers, only one has a left stick that works properly with the Switch firmware. One stick is miscalibrated to point slightly downwards when in resting position, and the other momentarily jitters upwards when held downwards.
For specificity, are you comparing the left analog sticks of all 3 steam controllers? Furthermore, the OpenSourceSteamController firmware isn't applying any smoothing or deadzones on the left analog stick; its just mapping the raw ADC values (ranging 0-1024) to a range of 0-128 for each of the left analog stick's X & Y axis (if I read the source code correctly).
I have not noticed these issues while playing Steam games.
Are you using the same firmware on the steam controller to play PC games and Switch games? I never thought of using to like that. If so, Valve might be applying a deadzone by default in Steam's Switch controller support, but that still wouldn't compensate for the one stick that "momentarily jitters upwards when held downwards." I'm under the impression that the Switch Pro controller is recognized as a DirectInput-based gamepad (not Xinput like the xbox controllers). Assuming this is still true with the OpenSteamController firmware, can run the cmd joy.cpl (Windows only) and open the gamepad's properties to confirm if the left stick is still behaving like it does on the Switch? If you're on Linux, there's a plenty of programs that can display gamepads' output.
Stick calibration is not currently supported for this device. Calibration may be possible after a system update.
I'm not familiar with the Switch, but I'm guessing there's serial communication from the switch to the steam controller that isn't getting handled by the steam controller. Under that assumption, capturing the bus traffic may be necessary to make the OpenSourceSteamController firmware comply with the Switch's calibration settings. Since you're using custom firmware on the Steam Controller, it is safe to assume that a "system update" to the Switch is not going to help.
For specificity, are you comparing the left analog sticks of all 3 steam controllers?
Yes.
run the cmd joy.cpl (Windows only) and open the gamepad's properties to confirm if the left stick is still behaving like it does on the Switch?
Yes, this shows the controller still behaving the same way plugged into a PC.
Are you using the same firmware on the steam controller to play PC games and Switch games? I never thought of using to like that. If so, Valve might be applying a deadzone by default
No, I use the stock Steam controller firmware to play Steam games, but you are right that Valve applying a deadzone is likely the reason I haven't noticed these issues before.
but that still wouldn't compensate for the one stick that "momentarily jitters upwards when held downwards."
It jitters all the way up to the edge, in a way that probably would be caught by an outer deadzone.
I'm guessing there's serial communication from the switch to the steam controller that isn't getting handled by the steam controller. Under that assumption, capturing the bus traffic may be necessary to make the OpenSourceSteamController firmware comply with the Switch's calibration settings.
I agree. Alternatively, a simpler solution may be to implement a deadzone in the firmware. Perhaps doing both of these is ideal. Edit: Making the firmware comply with the Switch's calibration settings should also make it compatible with the Switch's button remapping, which would be a great feature.
All of my questions in the last post were leaning toward "it's a hardware problem", and
It jitters all the way up to the edge, in a way that probably would be caught by an outer deadzone.
makes me think there's a bad connection inside the joystick (symptomatic of a momentary short circuit). I don't know if you tried this, but my first attack would be to spray air from a can at the innards, then (if that fails) look at replacement analog joystick(s) - I've read that actually replacing it on the steam controller is harder than it sounds - because these things are usually the first component to fail on gamepads [wink to my old PS3 controllers that I fixed with a tiny roll of scotch tape to secure its shoddily-designed connections].
While I'm more interested in making the firmware compatible with the Switch's calibration settings (sounds like a great challenge), I can try to point you in good direction for building you custom deadzone solution. Although, I don't want to steal credit from @greggersaurus as he may have a better idea about getting either of those things done.
All of my questions in the last post were leaning toward "it's a hardware problem"
I was sure of it, it's just a question of software that remedies hardware problems.
my first attack would be to spray air from a can at the innards, then (if that fails) look at replacement analog joystick(s)
Thanks, I'll try that.
I can try to point you in good direction for building you custom deadzone solution.
I'd love to contribute but would need to do a bit more research about how gamepad software is implemented, so your advice would be extremely helpful.
I'm more interested in making the firmware compatible with the Switch's calibration settings (sounds like a great challenge)
It does! Good luck if you try it, it would be very cool to see this working.
I've just found that this is a duplicate of #4, which was meant to be fixed in ca3a510 using a deadzone just like we suggested. I'll try increasing the size of this deadzone to see if it solves the problem for my controller.
Edit: Increasing the deadzone from 128 to 256 partially solved the problem. The stick is now centred while in resting position, whereas before it was behaving like the video in #4. However, it still cannot reach the edge of the ring. I think this could be fixed by adding an outer ring deadzone.