diff -uNrp rev3/include/SDL_haptic.h rev4/include/SDL_haptic.h --- rev3/include/SDL_haptic.h 2014-08-14 16:23:36.000000000 +0200 +++ rev4/include/SDL_haptic.h 2014-08-14 21:17:23.000000000 +0200 @@ -604,11 +604,11 @@ typedef struct SDL_HapticCondition Uint16 interval; /**< How soon it can be triggered again after button. */ /* Condition */ - Uint16 right_sat[3]; /**< Level when joystick is to the positive side. */ - Uint16 left_sat[3]; /**< Level when joystick is to the negative side. */ + Uint16 right_sat[3]; /**< Level when joystick is to the positive side; max 0xFFFF. */ + Uint16 left_sat[3]; /**< Level when joystick is to the negative side; max 0xFFFF. */ Sint16 right_coeff[3]; /**< How fast to increase the force towards the positive side. */ Sint16 left_coeff[3]; /**< How fast to increase the force towards the negative side. */ - Uint16 deadband[3]; /**< Size of the dead zone. */ + Uint16 deadband[3]; /**< Size of the dead zone; max 0xFFFF: whole axis-range when 0-centered. */ Sint16 center[3]; /**< Position of the dead zone. */ } SDL_HapticCondition; diff -uNrp rev3/src/haptic/darwin/SDL_syshaptic.c rev4/src/haptic/darwin/SDL_syshaptic.c --- rev3/src/haptic/darwin/SDL_syshaptic.c 2014-08-14 10:45:54.000000000 +0200 +++ rev4/src/haptic/darwin/SDL_syshaptic.c 2014-08-14 21:18:41.000000000 +0200 @@ -924,10 +924,10 @@ SDL_SYS_ToFFEFFECT(SDL_Haptic * haptic, condition[i].lNegativeCoefficient = CONVERT(hap_condition->left_coeff[i]); condition[i].dwPositiveSaturation = - CCONVERT(hap_condition->right_sat[i]); + CCONVERT(hap_condition->right_sat[i] / 2); condition[i].dwNegativeSaturation = - CCONVERT(hap_condition->left_sat[i]); - condition[i].lDeadBand = CCONVERT(hap_condition->deadband[i]); + CCONVERT(hap_condition->left_sat[i] / 2); + condition[i].lDeadBand = CCONVERT(hap_condition->deadband[i] / 2); } dest->cbTypeSpecificParams = sizeof(FFCONDITION) * dest->cAxes; dest->lpvTypeSpecificParams = condition; diff -uNrp rev3/src/haptic/linux/SDL_syshaptic.c rev4/src/haptic/linux/SDL_syshaptic.c --- rev3/src/haptic/linux/SDL_syshaptic.c 2014-08-14 16:48:00.000000000 +0200 +++ rev4/src/haptic/linux/SDL_syshaptic.c 2014-08-14 21:11:32.000000000 +0200 @@ -847,20 +847,18 @@ SDL_SYS_ToFFEffect(struct ff_effect *des /* Condition */ /* X axis */ - dest->u.condition[0].right_saturation = - CLAMP(condition->right_sat[0]); - dest->u.condition[0].left_saturation = CLAMP(condition->left_sat[0]); + dest->u.condition[0].right_saturation = condition->right_sat[0]; + dest->u.condition[0].left_saturation = condition->left_sat[0]; dest->u.condition[0].right_coeff = condition->right_coeff[0]; dest->u.condition[0].left_coeff = condition->left_coeff[0]; - dest->u.condition[0].deadband = CLAMP(condition->deadband[0]); + dest->u.condition[0].deadband = condition->deadband[0]; dest->u.condition[0].center = condition->center[0]; /* Y axis */ - dest->u.condition[1].right_saturation = - CLAMP(condition->right_sat[1]); - dest->u.condition[1].left_saturation = CLAMP(condition->left_sat[1]); + dest->u.condition[1].right_saturation = condition->right_sat[1]; + dest->u.condition[1].left_saturation = condition->left_sat[1]; dest->u.condition[1].right_coeff = condition->right_coeff[1]; dest->u.condition[1].left_coeff = condition->left_coeff[1]; - dest->u.condition[1].deadband = CLAMP(condition->deadband[1]); + dest->u.condition[1].deadband = condition->deadband[1]; dest->u.condition[1].center = condition->center[1]; /* diff -uNrp rev3/src/haptic/windows/SDL_dinputhaptic.c rev4/src/haptic/windows/SDL_dinputhaptic.c --- rev3/src/haptic/windows/SDL_dinputhaptic.c 2014-08-14 10:45:54.000000000 +0200 +++ rev4/src/haptic/windows/SDL_dinputhaptic.c 2014-08-14 21:18:15.000000000 +0200 @@ -763,10 +763,10 @@ SDL_SYS_ToDIEFFECT(SDL_Haptic * haptic, condition[i].lNegativeCoefficient = CONVERT(hap_condition->left_coeff[i]); condition[i].dwPositiveSaturation = - CONVERT(hap_condition->right_sat[i]); + CONVERT(hap_condition->right_sat[i] / 2); condition[i].dwNegativeSaturation = - CONVERT(hap_condition->left_sat[i]); - condition[i].lDeadBand = CONVERT(hap_condition->deadband[i]); + CONVERT(hap_condition->left_sat[i] / 2); + condition[i].lDeadBand = CONVERT(hap_condition->deadband[i] / 2); } dest->cbTypeSpecificParams = sizeof(DICONDITION) * dest->cAxes; dest->lpvTypeSpecificParams = condition; diff -uNrp rev3/test/testhaptic.c rev4/test/testhaptic.c --- rev3/test/testhaptic.c 2014-08-14 16:54:10.000000000 +0200 +++ rev4/test/testhaptic.c 2014-08-14 21:22:44.000000000 +0200 @@ -172,8 +172,8 @@ main(int argc, char **argv) efx[nefx].type = SDL_HAPTIC_SPRING; efx[nefx].condition.length = 5000; for (i = 0; i < SDL_HapticNumAxes(haptic); i++) { - efx[nefx].condition.right_sat[i] = 0x7FFF; - efx[nefx].condition.left_sat[i] = 0x7FFF; + efx[nefx].condition.right_sat[i] = 0xFFFF; + efx[nefx].condition.left_sat[i] = 0xFFFF; efx[nefx].condition.right_coeff[i] = 0x2000; efx[nefx].condition.left_coeff[i] = 0x2000; efx[nefx].condition.center[i] = 0x1000; /* Displace the center for it to move. */ @@ -191,10 +191,11 @@ main(int argc, char **argv) efx[nefx].type = SDL_HAPTIC_INERTIA; efx[nefx].condition.length = 5000; for (i = 0; i < SDL_HapticNumAxes(haptic); i++) { - efx[nefx].condition.right_sat[i] = 0x7FFF; - efx[nefx].condition.left_sat[i] = 0x7FFF; + efx[nefx].condition.right_sat[i] = 0xFFFF; + efx[nefx].condition.left_sat[i] = 0xFFFF; efx[nefx].condition.right_coeff[i] = 0x2000; efx[nefx].condition.left_coeff[i] = 0x2000; + efx[nefx].condition.deadband[i] = 0x1000; /* 1/16th of axis-range around the center is 'dead'. */ } id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); if (id[nefx] < 0) {