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 - HapticOpenFromJoystick() problems in 2.0.4
Summary: HapticOpenFromJoystick() problems in 2.0.4
Status: RESOLVED FIXED
Alias: None
Product: SDL
Classification: Unclassified
Component: haptic (show other bugs)
Version: HG 2.1
Hardware: x86_64 Windows 7
: P2 normal
Assignee: Ryan C. Gordon
QA Contact: Sam Lantinga
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-06-16 04:07 UTC by Joe Thompson
Modified: 2016-10-04 18:42 UTC (History)
3 users (show)

See Also:


Attachments
Proposed patch for 3021 (1.32 KB, patch)
2016-05-28 14:59 UTC, Joe Thompson
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
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