src/haptic/linux/SDL_syshaptic.c
branchgsoc2008_force_feedback
changeset 2482 b51ad78812d5
parent 2481 5d0ea4576f20
child 2483 9d52368ebcf5
equal deleted inserted replaced
2481:5d0ea4576f20 2482:b51ad78812d5
    92    EV_TEST(FF_PERIODIC,   SDL_HAPTIC_PERIODIC);
    92    EV_TEST(FF_PERIODIC,   SDL_HAPTIC_PERIODIC);
    93    EV_TEST(FF_RAMP,       SDL_HAPTIC_RAMP);
    93    EV_TEST(FF_RAMP,       SDL_HAPTIC_RAMP);
    94    EV_TEST(FF_SPRING,     SDL_HAPTIC_SPRING);
    94    EV_TEST(FF_SPRING,     SDL_HAPTIC_SPRING);
    95    EV_TEST(FF_FRICTION,   SDL_HAPTIC_FRICTION);
    95    EV_TEST(FF_FRICTION,   SDL_HAPTIC_FRICTION);
    96    EV_TEST(FF_DAMPER,     SDL_HAPTIC_DAMPER);
    96    EV_TEST(FF_DAMPER,     SDL_HAPTIC_DAMPER);
    97    EV_TEST(FF_RUMBLE,     SDL_HAPTIC_RUMBLE);
       
    98    EV_TEST(FF_INERTIA,    SDL_HAPTIC_INERTIA);
    97    EV_TEST(FF_INERTIA,    SDL_HAPTIC_INERTIA);
    99    EV_TEST(FF_GAIN,       SDL_HAPTIC_GAIN);
    98    EV_TEST(FF_GAIN,       SDL_HAPTIC_GAIN);
   100    EV_TEST(FF_AUTOCENTER, SDL_HAPTIC_AUTOCENTER);
    99    EV_TEST(FF_AUTOCENTER, SDL_HAPTIC_AUTOCENTER);
   101 
   100 
   102    return ret;
   101    return ret;
   277  * Values above 32767 (for unsigned) are unspecified so we must clamp.
   276  * Values above 32767 (for unsigned) are unspecified so we must clamp.
   278  */
   277  */
   279 static int
   278 static int
   280 SDL_SYS_ToFFEffect( struct ff_effect * dest, SDL_HapticEffect * src )
   279 SDL_SYS_ToFFEffect( struct ff_effect * dest, SDL_HapticEffect * src )
   281 {
   280 {
       
   281    int i;
   282    SDL_HapticConstant *constant;
   282    SDL_HapticConstant *constant;
   283    SDL_HapticPeriodic *periodic;
   283    SDL_HapticPeriodic *periodic;
       
   284    SDL_HapticCondition *condition;
       
   285    SDL_HapticRamp *ramp;
   284 
   286 
   285    /* Clear up */
   287    /* Clear up */
   286    SDL_memset(dest, 0, sizeof(struct ff_effect));
   288    SDL_memset(dest, 0, sizeof(struct ff_effect));
   287 
   289 
   288    switch (src->type) {
   290    switch (src->type) {
   360          dest->u.periodic.envelope.fade_length = CLAMP(periodic->fade_length);
   362          dest->u.periodic.envelope.fade_length = CLAMP(periodic->fade_length);
   361          dest->u.periodic.envelope.fade_level = CLAMP(periodic->fade_level);
   363          dest->u.periodic.envelope.fade_level = CLAMP(periodic->fade_level);
   362 
   364 
   363          break;
   365          break;
   364 
   366 
       
   367       case SDL_HAPTIC_SPRING:
       
   368       case SDL_HAPTIC_DAMPER:
       
   369       case SDL_HAPTIC_INERTIA:
       
   370       case SDL_HAPTIC_FRICTION:
       
   371          condition = &src->condition;
       
   372 
       
   373          /* Header */
       
   374          if (dest->type == SDL_HAPTIC_SPRING)
       
   375             dest->type = FF_SPRING;
       
   376          else if (dest->type == SDL_HAPTIC_DAMPER)
       
   377             dest->type = FF_DAMPER;
       
   378          else if (dest->type == SDL_HAPTIC_INERTIA)
       
   379             dest->type = FF_INERTIA;
       
   380          else if (dest->type == SDL_HAPTIC_FRICTION)
       
   381             dest->type = FF_FRICTION;
       
   382          dest->direction = CLAMP(condition->direction);
       
   383 
       
   384          /* Replay */
       
   385          dest->replay.length = CLAMP(condition->length);
       
   386          dest->replay.delay = CLAMP(condition->delay);
       
   387 
       
   388          /* Trigger */
       
   389          dest->trigger.button = CLAMP(condition->button);
       
   390          dest->trigger.interval = CLAMP(condition->interval);
       
   391 
       
   392          /* Condition - TODO handle axes */
       
   393          dest->u.condition[0].right_saturation = CLAMP(condition->right_sat);
       
   394          dest->u.condition[0].left_saturation = CLAMP(condition->left_sat);
       
   395          dest->u.condition[0].right_coeff = condition->right_coeff;
       
   396          dest->u.condition[0].left_coeff = condition->left_coeff;
       
   397          dest->u.condition[0].deadband = CLAMP(condition->deadband);
       
   398          dest->u.condition[0].center = condition->center;
       
   399 
       
   400          break;
       
   401 
       
   402       case SDL_HAPTIC_RAMP:
       
   403          ramp = &src->ramp;
       
   404 
       
   405          /* Header */
       
   406          dest->type = FF_RAMP;
       
   407          dest->direction = CLAMP(ramp->direction);
       
   408 
       
   409          /* Replay */
       
   410          dest->replay.length = CLAMP(ramp->length);
       
   411          dest->replay.delay = CLAMP(ramp->delay);
       
   412 
       
   413          /* Trigger */
       
   414          dest->trigger.button = CLAMP(ramp->button);
       
   415          dest->trigger.interval = CLAMP(ramp->interval);
       
   416 
       
   417          /* Ramp */
       
   418          dest->u.ramp.start_level = ramp->start;
       
   419          dest->u.ramp.end_level = ramp->end;
       
   420 
       
   421          /* Envelope */
       
   422          dest->u.ramp.envelope.attack_length = CLAMP(ramp->attack_length);
       
   423          dest->u.ramp.envelope.attack_level = CLAMP(ramp->attack_level);
       
   424          dest->u.ramp.envelope.fade_length = CLAMP(ramp->fade_length);
       
   425          dest->u.ramp.envelope.fade_level = CLAMP(ramp->fade_level);
       
   426 
       
   427          break;
       
   428 
       
   429 
   365       default:
   430       default:
   366          SDL_SetError("Unknown haptic effect type.");
   431          SDL_SetError("Unknown haptic effect type.");
   367          return -1;
   432          return -1;
   368    }
   433    }
   369 
   434