We are currently migrating Bugzilla to GitHub issues.
Any changes made to the bug tracker now will be lost, so please do not post new bugs or make changes to them.
When we're done, all bug URLs will redirect to their equivalent location on the new bug tracker.

Bug 3021

Summary: HapticOpenFromJoystick() problems in 2.0.4
Product: SDL Reporter: Joe Thompson <mini_joe>
Component: hapticAssignee: Ryan C. Gordon <icculus>
Status: RESOLVED FIXED QA Contact: Sam Lantinga <slouken>
Severity: normal    
Priority: P2 CC: icculus, mat.lau, mini_joe
Version: HG 2.1   
Hardware: x86_64   
OS: Windows 7   
Attachments: Proposed patch for 3021

Description Joe Thompson 2015-06-16 04:07:37 UTC
With Direct Input device (MOMO Steering Wheel w/FF)
with SDL 2.0.3,
SDL_HapticOpenFromJoystick() would fail. (Can't set exclusive mode)
Now with 2.0.4 rc1,
SDL_HapticOpenFromJoystick() succeeds but the the returned SDL_Haptic* cannot be used. Calls to SDL_HapticNewEffect() fail with "Haptic error Unable to create effect"

If SDL_HapticOpen() is used instead of HapticOpenFromJoystick(), the device is usable. Calls to HapticNewEffect() succeed with the exact same parameters as the previous failing call.
Comment 1 Ryan C. Gordon 2015-06-16 05:04:10 UTC
Assigning Edgar's bugs to me.

--ryan.
Comment 2 Joe Thompson 2016-05-28 14:59:42 UTC
Created attachment 2470 [details]
Proposed patch for 3021
Comment 3 Joe Thompson 2016-05-28 15:15:05 UTC
I have attached a proposed patch for this issue. 

When using SDL_HapticOpenFromJoystick(), the original code did not (re)enumerate the axes. This returned a new haptic device with 0 axes. Later, when a new effect is created, SDL_SYS_SetDirection() would set the flags to include DIEFF_SPHERICAL, regardless of what the caller actually set. (see Line 566 in SDL_dinputhaptic.c). This would cause the SDL_HapticNewEffect() to fail (or interpret the coordinates incorreclty.) 

The patch moves the call to IDirectInputDevice8_EnumObjects() outside of the if() block so that the axes are (re)enumerated for the new haptic device.

Note: For steering wheels it is common for the joystick to have multiple axes (ie steering, throttle, brake), but the haptic portion of the joystick usually only applies to steering.

Joe
Comment 4 Joe Thompson 2016-07-30 21:21:15 UTC
I edited the title of this bug to reflect the fact that the issue is not isolated to the Release Candidate.
Cheers,
Joe
Comment 5 Mathieu Laurendeau 2016-08-10 06:50:39 UTC
I ran into the same issue with a Logitech Driving Force GT wheel.
The proposed patch fixes it.
Comment 6 Sam Lantinga 2016-10-04 18:42:20 UTC
Fixed, thanks!
https://hg.libsdl.org/SDL/rev/ac6a748250f4