[I know this thread is old, but I spent a couple hours figuring this out the other day, so I thought I'd document it for posterity.]
[This is all for Linux only]
The simplest thing to do is to just eliminate all flat spots, deadband, gain and offset being applied by the old joystick API layer (which is what heli-x appears to use by default — it's reading /dev/input/js
N instead of /dev/input/event
NN). You do that with a command like this for a 6-channel joystick at /dev/input/js0:
Code: Select all
jscal -s 6,0,0,0,0,0,0,0,0,0,0,0,0 /dev/input/js0
The initial '6' is the number of channels, and then there are two zeros per channel after that.
That will eliminate all deadband, fuzz, gain, and offset. Heli-x will see the raw values exactly as reported by the low-level driver. As long as the raw values are even remotely stable and linear, that's what you want. The heli-x calibration and rate/expo settings can then be applied to get whatever response you want.
If, OTOH, heli-x starts using the modern "event" API (by reading /dev/input/event
NN), the deadband, gain, etc. is configured by the evdev-joystick command. In that case, disabling deadband and fuzz is done like this:
Code: Select all
evdev-joystick --e /dev/input/event12 --d 0 --f 0
I think I needlessly discarded a cheap USB controller a few years ago because I never figured out the source of the deadband when trying to use it. If I had figured out that jscal command back then, it probably would have been OK (though not nearly as nice as the Futaba Interlink Elite I've got now).