I’ve tested the a Logitech F310 gamepad, which has a dip switch for selecting “DirectInput” mode or “Xinput” mode. I’ve tested both modes with the 3.1 and these are the result:
XInput mode
Almost all the buttons and axis are wrongly mapped, plus there are a few axis which aren’t even detected.
Joystick[0]:Gamepad F310 (Controller)
buttons:10
JoystickButton[name=Pulsante 0, parent=Gamepad F310 (Controller), id=0, logicalId=0]
JoystickButton[name=Pulsante 1, parent=Gamepad F310 (Controller), id=1, logicalId=1]
JoystickButton[name=Pulsante 2, parent=Gamepad F310 (Controller), id=2, logicalId=2]
JoystickButton[name=Pulsante 3, parent=Gamepad F310 (Controller), id=3, logicalId=3]
JoystickButton[name=Pulsante 4, parent=Gamepad F310 (Controller), id=4, logicalId=4]
JoystickButton[name=Pulsante 5, parent=Gamepad F310 (Controller), id=5, logicalId=5]
JoystickButton[name=Pulsante 6, parent=Gamepad F310 (Controller), id=6, logicalId=6]
JoystickButton[name=Pulsante 7, parent=Gamepad F310 (Controller), id=7, logicalId=7]
JoystickButton[name=Pulsante 8, parent=Gamepad F310 (Controller), id=8, logicalId=8]
JoystickButton[name=Pulsante 9, parent=Gamepad F310 (Controller), id=9, logicalId=9]
axes:8
JoystickAxis[name=Asse Y, parent=Gamepad F310 (Controller), id=0, logicalId=y, isAnalog=true, isRelative=false, deadZone=0.0]
JoystickAxis[name=Asse X, parent=Gamepad F310 (Controller), id=1, logicalId=x, isAnalog=true, isRelative=false, deadZone=0.0]
JoystickAxis[name=Rotazione Y, parent=Gamepad F310 (Controller), id=2, logicalId=ry, isAnalog=true, isRelative=false, deadZone=0.0]
JoystickAxis[name=Rotazione X, parent=Gamepad F310 (Controller), id=3, logicalId=rx, isAnalog=true, isRelative=false, deadZone=0.0]
JoystickAxis[name=Asse Z, parent=Gamepad F310 (Controller), id=4, logicalId=z, isAnalog=true, isRelative=false, deadZone=0.0]
JoystickAxis[name=Hat Switch, parent=Gamepad F310 (Controller), id=5, logicalId=pov, isAnalog=false, isRelative=false, deadZone=0.0]
JoystickAxis[name=pov_x, parent=Gamepad F310 (Controller), id=6, logicalId=pov_x, isAnalog=false, isRelative=false, deadZone=0.0]
JoystickAxis[name=pov_y, parent=Gamepad F310 (Controller), id=7, logicalId=pov_y, isAnalog=false, isRelative=false, deadZone=0.0]
DirectInput mode
Almost all mapping are correct. Front triggers are detected as buttons but that’s probably because I didn’t install the drivers.
Joystick[0]:Logitech Dual Action
buttons:12
JoystickButton[name=Pulsante 0, parent=Logitech Dual Action, id=0, logicalId=0]
JoystickButton[name=Pulsante 1, parent=Logitech Dual Action, id=1, logicalId=1]
JoystickButton[name=Pulsante 2, parent=Logitech Dual Action, id=2, logicalId=2]
JoystickButton[name=Pulsante 3, parent=Logitech Dual Action, id=3, logicalId=3]
JoystickButton[name=Pulsante 4, parent=Logitech Dual Action, id=4, logicalId=4]
JoystickButton[name=Pulsante 5, parent=Logitech Dual Action, id=5, logicalId=5]
JoystickButton[name=Pulsante 6, parent=Logitech Dual Action, id=6, logicalId=6]
JoystickButton[name=Pulsante 7, parent=Logitech Dual Action, id=7, logicalId=7]
JoystickButton[name=Pulsante 8, parent=Logitech Dual Action, id=8, logicalId=8]
JoystickButton[name=Pulsante 9, parent=Logitech Dual Action, id=9, logicalId=9]
JoystickButton[name=Pulsante 10, parent=Logitech Dual Action, id=10, logicalId=10]
JoystickButton[name=Pulsante 11, parent=Logitech Dual Action, id=11, logicalId=11]
axes:7
JoystickAxis[name=Rotazione Z, parent=Logitech Dual Action, id=0, logicalId=rz, isAnalog=true, isRelative=false, deadZone=0.0]
JoystickAxis[name=Asse Z, parent=Logitech Dual Action, id=1, logicalId=z, isAnalog=true, isRelative=false, deadZone=0.0]
JoystickAxis[name=Asse Y, parent=Logitech Dual Action, id=2, logicalId=y, isAnalog=true, isRelative=false, deadZone=0.0]
JoystickAxis[name=Asse X, parent=Logitech Dual Action, id=3, logicalId=x, isAnalog=true, isRelative=false, deadZone=0.0]
JoystickAxis[name=Hat Switch, parent=Logitech Dual Action, id=4, logicalId=pov, isAnalog=false, isRelative=false, deadZone=0.0]
JoystickAxis[name=pov_x, parent=Logitech Dual Action, id=5, logicalId=pov_x, isAnalog=false, isRelative=false, deadZone=0.0]
JoystickAxis[name=pov_y, parent=Logitech Dual Action, id=6, logicalId=pov_y, isAnalog=false, isRelative=false, deadZone=0.0]
With that said, my question is: is there a way to detect if the connected device is working with DirectInput rather than Xinput?