summaryrefslogtreecommitdiff
path: root/Source/3rdParty/SDL2/src/haptic/linux/SDL_syshaptic.c
diff options
context:
space:
mode:
Diffstat (limited to 'Source/3rdParty/SDL2/src/haptic/linux/SDL_syshaptic.c')
-rw-r--r--Source/3rdParty/SDL2/src/haptic/linux/SDL_syshaptic.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/Source/3rdParty/SDL2/src/haptic/linux/SDL_syshaptic.c b/Source/3rdParty/SDL2/src/haptic/linux/SDL_syshaptic.c
index 9c11a2f..4e4f8a5 100644
--- a/Source/3rdParty/SDL2/src/haptic/linux/SDL_syshaptic.c
+++ b/Source/3rdParty/SDL2/src/haptic/linux/SDL_syshaptic.c
@@ -181,6 +181,9 @@ SDL_SYS_HapticInit(void)
SDL_UDEV_Quit();
return SDL_SetError("Could not setup haptic <-> udev callback");
}
+
+ /* Force a scan to build the initial device list */
+ SDL_UDEV_Scan();
#endif /* SDL_USE_LIBUDEV */
return numhaptics;
@@ -798,7 +801,8 @@ SDL_SYS_ToFFEffect(struct ff_effect *dest, SDL_HapticEffect * src)
else if (periodic->type == SDL_HAPTIC_SAWTOOTHDOWN)
dest->u.periodic.waveform = FF_SAW_DOWN;
dest->u.periodic.period = CLAMP(periodic->period);
- dest->u.periodic.magnitude = periodic->magnitude;
+ /* Linux expects 0-65535, so multiply by 2 */
+ dest->u.periodic.magnitude = CLAMP(periodic->magnitude) * 2;
dest->u.periodic.offset = periodic->offset;
/* Linux phase is defined in interval "[0x0000, 0x10000[", corresponds with "[0deg, 360deg[" phase shift. */
dest->u.periodic.phase = ((Uint32)periodic->phase * 0x10000U) / 36000;
@@ -905,9 +909,9 @@ SDL_SYS_ToFFEffect(struct ff_effect *dest, SDL_HapticEffect * src)
dest->trigger.button = 0;
dest->trigger.interval = 0;
- /* Rumble */
- dest->u.rumble.strong_magnitude = leftright->large_magnitude;
- dest->u.rumble.weak_magnitude = leftright->small_magnitude;
+ /* Rumble (Linux expects 0-65535, so multiply by 2) */
+ dest->u.rumble.strong_magnitude = CLAMP(leftright->large_magnitude) * 2;
+ dest->u.rumble.weak_magnitude = CLAMP(leftright->small_magnitude) * 2;
break;