http://bugs.winehq.org/show_bug.cgi?id=22059
Summary: when /dev/input/event* device is accessible, wine fails to consider calibration and correction factors of the linux joydev driver Product: Wine Version: 1.1.40 Platform: x86 OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: directx-dinput AssignedTo: wine-bugs@winehq.org ReportedBy: corvus-wine@cybertrench.com
Created an attachment (id=26862) --> (http://bugs.winehq.org/attachment.cgi?id=26862) joydev log with event file accessible
Linux provides the possibility to correct joystick raw values automatically when accessing /dev/input/js* devices, both autodetected/scaled and "hand-calibrated" with tools like "jscal"
if wine uses /dev/input/js* for joystick access, it also takes the correction factors into account, so a joystick that has been calibrated under linux, will be calibrated correctly under wine.
However if the /dev/input/event* file corresponding to the joystick device is accessible (at least for reading) wine seems to bypass the joydev driver and accesses the device on a lower (event) level, thus unaware of the calibration data and correction factors - whether manually set and autodetected!
As a result programs run under wine that use a joystick but offer no inbuilt calibration option (which is most, since under native win32 joysticks are calibrated system wide in the input device area of the control center) will behave strangely as joysticks are potentially off-centered - mis-scaled - axis flipped - or even unable to cross the zero position at all. Depending on the actual joystick hardware and the required corrections.
the attached log1.txt shows the output of a joystick using program (il2fb flightsim) started with dinput WINEDEBIUG output grep'd for "joydev" when the event device is accessible (and the joystick is unusable due to miscalibration
WINEDEBUG=+dinput wine il2fb.exe 2>&1 |grep joydev
log2.txt shows the same output with /dev/input/event5 (the joystick event device) chmodded to 000
in this case the axis and buttons are mapped completely different, but centered and scaled correctly (given that the jopystick had been calibrated under linux using jscal)
for obvious reasons this bug is only visible if the axis values reported by the event device, especially min and max: ...
cur=97, min=0, max=255, fuzz=0, flat=15
...
are not equal to the actually reachable minimum and maximum values. newer joysticks often autoscale in hard/firmware and actually reach those min/max values with little need for calibration, while some, especially older models, are in dire need of correction values since the actual range (as in this case) is more like 30 to 120
http://bugs.winehq.org/show_bug.cgi?id=22059
--- Comment #1 from Corvus Corax corvus-wine@cybertrench.com 2010-03-17 18:24:25 --- Created an attachment (id=26864) --> (http://bugs.winehq.org/attachment.cgi?id=26864) same with input/event device file inaccessible
http://bugs.winehq.org/show_bug.cgi?id=22059
--- Comment #2 from Corvus Corax corvus-wine@cybertrench.com 2010-03-17 18:38:11 --- As it seems, dinput directly uses the event interface to access the joystick if available.
That would mean it'd need to handle correction of raw data itself instead of the linux joydev driver.
Would it be possible to ask the linux joydev driver for its correction parameters and apply them as default calibration once wine is started?
Possibly stored and overridable in the registry (together with the axis mapping)
http://bugs.winehq.org/show_bug.cgi?id=22059
Vitaliy Margolen vitaliy@kievinfo.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution| |WONTFIX Alias|joycal_event_issue |
--- Comment #3 from Vitaliy Margolen vitaliy@kievinfo.com 2010-03-18 08:59:16 --- /dev/js* and /dev/input/event* are two totally separate interfaces (joydev and evdev). Later is not affected by any calibrations you perform on former.
There is nothing can be done about it. Use calibration within windows' games.
http://bugs.winehq.org/show_bug.cgi?id=22059
Vitaliy Margolen vitaliy@kievinfo.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #4 from Vitaliy Margolen vitaliy@kievinfo.com 2010-03-18 08:59:35 --- Closing.
http://bugs.winehq.org/show_bug.cgi?id=22059
deepholecaver@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |deepholecaver@gmail.com
--- Comment #5 from deepholecaver@gmail.com 2011-04-10 11:18:42 CDT --- Calibrate joysticks in Windows games? Seriously, what kind of a solution is that?
It's not a solution, that's what.
Games generally don't do calibration because in Windows, as in linux, it is the responsibility of the OS to do so. IL-2 certainly doesn't provide this functionality which is currently what has me just a little pissed off right now.
evdev is a low level interface meant for use by Xorg, not a full featured joystick driver. It does not provide the normal joystick functionality expected of an OS, It just passes events!
So if the wine developers insist on using evdev instead of joydev, where are users supposed to find the necessary functionality to calibrate joysticks? We have nowhere to go. It is asinine that the developers should force this loss of functionality on us when there is a perfectly good solution already implemented in joydev.
If you all are so hot on migrating away from joydev, you should really consider replacing the important functionality it provides. I am seriously disappointed in the wine team's judgment on this issue. You took something that worked just fine and broke it in the name of progress.