Wine Joysticks, seeking a plan

Vincent Povirk madewokherd at gmail.com
Thu Apr 16 11:08:33 CDT 2015


In addition to dinput, winmm, and xinput, joysticks can be accessed
through user32 via the raw input API, and listed via WMI. There's code
floating around that uses xinput in conjunction with both of those
things.

Xinput combined with WMI:
https://msdn.microsoft.com/en-us/library/ee417014%28v=vs.85%29.aspx
XInput combined with raw input:
http://snes-sdk.googlecode.com/svn/trunk/bsnes/src/ruby/input/rawinput.cpp

Note that in both of these cases it's expected that the device list
returned by dinput is consistent with that returned by WMI and raw
input, which is another reason it's important to have a common
implementation.

I guess having a duplicate input device probably isn't too bad, but I
vaguely remember hearing about games that ignore all joystick input if
they don't think there's an xinput device available, based on those
other API's.

Also, it seems according to MSDN any XInput device should have "IG_"
in its name, so any common implementation will have to know whether
the device is XInput or not, and probably will have to do the required
remapping to the standard xinput layout (which sort of makes more
sense than doing it in xinput anyway, as I've noticed games using
joysticks through dinput that are hard-coded to expect the xinput
layout). So, it seems to me we'd want some sort of "remapping driver"
to create an xinput device which is what we actually use for some
joysticks. Note that SDL3 has taken the approach of maintaining a
hard-coded list of known joysticks with an xinput-like layout (see
http://hg.libsdl.org/SDL/file/127fb2272098/src/joystick/SDL_gamecontrollerdb.h),
which is simpler and maybe better than providing a general-purpose
remapping system for users.



More information about the wine-devel mailing list