The online racing simulator
Controller axis input resolution
I'm starting a new thread for a suggestion from rane_nbg in another thread:

Quote from rane_nbg :- full 16bit resolution (65536 steps) support for all analog axes of game controllers (if they report it by HID)

I've had a look in the code and although I have not yet tested on a wheel, I do believe the LFS code sets the input resolution for analogue axes unnecessarily to -1000 to +1000. I think it should be possible to allow the full resolution allowed by the controller.

While it may seem a simple matter to 'fix' this, it is currently complicated by one of the user options. That is, the user's ability to set the 'theoretical' range (in the Range column in "Axes / FF" tab).

Most people probably don't touch those values, but it is possible to use them to change the sensitivity of an axis and/or the range over which the output value moves from -1 to 1 (or 0 to 1). For example someone might change where the clutch bites, or something else, I don't know what.

Now the question I want to ask. As the current values there (-1000 / 1000) would be meaningless if I allow the full range of resolution that the controller allows, what sort of value would actually make most sense and achieve the required result?

Two initial possibilities come to mind:

1) A minimum and maximum, similar to the current system, but more like a percentage of the range.
I find it a bit confusing to think about this option, the current system is already bad enough.

2) Something like a sensitivity and a central point.
So default values would be:
- Sensitivity - default 100% (adjustable from 50% to 200%) - note that less than 100% removes range
- Centre position - default 50% (meaning, the reported centre is half way through the controller output). Adjustable from 0% to 100%.

It seems to me that (2) above may workable but I thought I should ask in case someone has a better idea.

EDIT: Also (1) may be workable, described a couple of posts down.
Well as a DIY guy the current option works pretty good for me.
I mean I have 0 commercial input on my system.
I have mainly two ways to deal with my axes.

Try to set my limits within windows using stuff like dxtweak2, then I might use lfs axis limit to fine tweak in case of drift of whatever (imagine a min brake on 5%, a max gas of 97% whatever). When I use only a small range it is best to have a okeish behavior outside LFS.
Or put them directly in LFS.
I do like the idea to have full range shown, but I don´t know how to do it clean.

Currently I run a homemade direct drive wheel. Not much to do here it works fine directly. After 20 years I still don´t understand well the wheel turn compensation option, I don´t know it does not talk to me.

Gas pedal 5V from BMW my 0 - 100% are set in windows but it could work directly in LFS. Gives no issue.

Brake pedal, also from real car, wilwood stuff with sensor in milivolts plus preamp, this things is sensible to temperature, to bubbles in the system, well once I even adjusted during a race.

Clutch, currently unserviceable. But load cell in millivolts prone to drift and to pick up noise...

Handbrake hydraulic, can be set directly in LFS I don´t need precision and take margin for good on off effect...

Once I get home in can show my values but some are kind of wild.
Thanks for the feedback.

I've continued thinking about it, and think I start to understand how a variation on the current system - option (1) above - might work.

This in conjunction with another post I've made today on a bug report that is not really a bug.
https://www.lfs.net/forum/post/2085863#post2085863

The point in the other thread is that the axes other than steering already operate over a limited amount of the controller axis output, in a way that cannot be controlled by the user.

Brake, throttle, handbrake : 0 to 1 over 5% to 95% of controller value.
Clutch: 0 to 1 over 5% to 65% of controller value.

So what I'm thinking now is that the confusing "-1000 to +1000" range might be converted to a simple percentage, and the default values could cover the other non-adjustable values described in the other thread (that would be removed).

So instead of -1000 to 1000 in the range section, the defaults would be:

Brake / throttle / handbrake : default min 5% / max 95%
Clutch : default min 5% / max 65%
Steering : default min -100% / max 100%

These defaults would replicate how LFS already works. As far as I can understand, these min and max values do not need to go outside 0% and 100% except for the steering which should be allowed outside this range (allowed range -200% to 200%).

I think this is quite obscure and my explanation might be insufficient and confusing. But anyway that's where I am so far. When looking in the code there could be further complications that make me backtrack and change my mind, but that is the nature of game development.
First of all, thank you very much Scawen for considering my suggestion, and also big thanks for asking us for our thoughts about it.

As someone who developed an FFB wheel firmware and also my own GUI, where I had to deal with exactly these questions how to make it transparent for the user and how to make it simple and intuitive to use.

It seems that working in % of axis range is best for setting calibration ranges. So instead of having +-1000 I would go with +-100%, with a step of 1% adjustment, which should be ok.

About axis sensitivity (non-linearity), I would leave this out and simply keep a linear axis between the user-defined min and max limits in %. If you really want you can add a 3rd point - center, but not really necessary at all. Can be done with a 3rd party software like DxTweak.

In principle, whether you choose +-1, +-100% or +-1000 I don't mind, as long as in this range there are as many steps as controller reports by HID.

It would be good to see somewhere the raw axis value as reported by DirectInput. It should fit into graphics in FF/axes, I got used to it and it is simple and effective, so I don't think any changes are needed there. So instead of showing a momentary value of the axis between -1000 to 1000, I would put there a raw HID value for that axis, like 0-65535, or 0-4095, 0-1023, 0-255. With this, a user can directly see the resolution of his controller for each axis and at the same time an axis value.
Quote from Scawen :I'm starting a new thread for a suggestion from rane_nbg in another...

from my subjective POV the current system suits me fairly well to add deadzones at the end of the travel to compensate for my pedals' misbehaving potentiometers
Test Patch E9 includes input range improvements:

The full resolution reported by the controller is now supported
- previously drivers were instructed to report -1000 to 1000
- controllers we tested report values 0 to 65535
- so steering wheel moves in smaller steps

The range adjusters in controller options now use percentage values
- the range defaults replicate previously default in-game behaviour
- previously brake/throttle/handbrake/clutch axes had a dead zone
- the dead zones were not adjustable by the user but now are
- the axes visible in game now match the options screen

Download: https://www.lfs.net/forum/thread/106967
Any chance we could get defineable deadzones around the (input) center of the axes too? (mostly needed for steering and "look around" - usually X, Y, RX, RY axes).
Would really help gamepad users, since the sticks very often have at least a slight inaccuracy around the center.

Related thread in "Improvement Suggestions"

EDIT: being more precise.
I always imagined that type of central deadzone could be set in the controller's software, though I don't think I've ever tried. It seems like a memory from the distant past. Is that not the case, or at least not convenient?

EDIT: Maybe that's only in the Logitech software, but not e.g. Microsoft? Just speculating.
https://www.lfs.net/forum/post/1721869#post1721869
Quote from Scawen :I always imagined that type of central deadzone could be set in the controller's...

No, not for Windows (using XBox Controller)

There seems to be be an app for XBox console users that works for some specific gamepads only.
And Steam seems to have the possiblity to define/adjust controller dead zones.

For standard windows usage, there is a third party software "XInputPlus" which can help but is from unknown source.
I rather have the built-in possibility within LFS, like many other simulators and games (not only racing and flight simulators, but also many casual games designed to be played with gamepads).

Thanks for consideration.

EDIT: Mentioning casual games that also very often have an option for a center dead zone.
Before it was possible to adjust deadzone with logitech gaming software (lgs) for each axis, but not anymore. Newer wheels or gamepads no longer have such otions, as everything is dumbed down to the max, leaving little to no adjustments what so ever.

What I see useful that it could be implemented in LFS - to remove the deadzone by software. How it should work, a deadzone setting in % would enable the user to compensate for axis deadzone around center. Many gamepads have this deadzone added in firmware due to sticks not returning perfectly to the center every time.

If it's something Scawen would consider, I can give more exact details about such a feature.

FGED GREDG RDFGDR GSFDG