From: johann d. <jd...@us...> - 2001-10-07 19:25:45
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input In directory usw-pr-cvs1:/tmp/cvs-serv30438 Modified Files: Tag: iforce-split iforce-ff.c Log Message: iforce_upload_* now return the correct value. Index: iforce-ff.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/Attic/iforce-ff.c,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- iforce-ff.c 2001/10/07 17:06:49 1.1.2.1 +++ iforce-ff.c 2001/10/07 19:25:43 1.1.2.2 @@ -41,6 +41,8 @@ { unsigned char data[3]; + printk(KERN_DEBUG "iforce: in make_magnitude_modifier\n"); + if (!no_alloc) { down(&iforce->mem_mutex); if (allocate_resource(&(iforce->device_memory), mod_chunk, 2, @@ -350,25 +352,27 @@ struct iforce_core_effect* core_effect = iforce->core_effects + core_id; struct resource* mod1_chunk = &(iforce->core_effects[core_id].mod1_chunk); struct resource* mod2_chunk = &(iforce->core_effects[core_id].mod2_chunk); - int err = 1; + int param1_err = 1; + int param2_err = 1; + int core_err = 0; if (!is_update || need_period_modifier(iforce, effect)) { - err = make_period_modifier(iforce, mod1_chunk, + param1_err = make_period_modifier(iforce, mod1_chunk, is_update, effect->u.periodic.magnitude, effect->u.periodic.offset, effect->u.periodic.period, effect->u.periodic.phase); - if (err) return err; + if (param1_err) return param1_err; set_bit(FF_MOD1_IS_USED, core_effect->flags); } if (!is_update || need_shape_modifier(iforce, effect)) { - err = make_shape_modifier(iforce, mod2_chunk, + param2_err = make_shape_modifier(iforce, mod2_chunk, is_update, effect->u.periodic.shape.attack_length, effect->u.periodic.shape.attack_level, effect->u.periodic.shape.fade_length, effect->u.periodic.shape.fade_level); - if (err) return err; + if (param2_err) return param2_err; set_bit(FF_MOD2_IS_USED, core_effect->flags); } @@ -382,7 +386,7 @@ } if (!is_update || need_core(iforce, effect)) { - err = make_core(iforce, effect->id, + core_err = make_core(iforce, effect->id, mod1_chunk->start, mod2_chunk->start, wave_code, @@ -397,7 +401,13 @@ printk(KERN_DEBUG "iforce.c: no effect packet was needed\n"); } - return err; + /* If one of the parameter creation failed, we already returned an + * error code. + * If the core creation failed, we return its error code. + * Else: if one parameter at least was created, we return 0 + * else we return 1; + */ + return core_err < 0 ? core_err : (param1_err && param2_err); } /* @@ -413,31 +423,33 @@ struct iforce_core_effect* core_effect = iforce->core_effects + core_id; struct resource* mod1_chunk = &(iforce->core_effects[core_id].mod1_chunk); struct resource* mod2_chunk = &(iforce->core_effects[core_id].mod2_chunk); - int ret = 1; + int param1_err = 1; + int param2_err = 1; + int core_err = 0; printk(KERN_DEBUG "iforce.c: make constant effect\n"); if (!is_update || need_magnitude_modifier(iforce, effect)) { - ret = make_magnitude_modifier(iforce, mod1_chunk, + param1_err = make_magnitude_modifier(iforce, mod1_chunk, is_update, effect->u.constant.level); - if (ret) return ret; + if (param1_err) return param1_err; set_bit(FF_MOD1_IS_USED, core_effect->flags); } if (!is_update || need_shape_modifier(iforce, effect)) { - ret = make_shape_modifier(iforce, mod2_chunk, + param2_err = make_shape_modifier(iforce, mod2_chunk, is_update, effect->u.constant.shape.attack_length, effect->u.constant.shape.attack_level, effect->u.constant.shape.fade_length, effect->u.constant.shape.fade_level); - if (ret) return ret; + if (param2_err) return param2_err; set_bit(FF_MOD2_IS_USED, core_effect->flags); } if (!is_update || need_core(iforce, effect)) { - ret = make_core(iforce, effect->id, + core_err = make_core(iforce, effect->id, mod1_chunk->start, mod2_chunk->start, 0x00, @@ -452,7 +464,13 @@ printk(KERN_DEBUG "iforce.c: no effect packet was needed\n"); } - return ret; + /* If one of the parameter creation failed, we already returned an + * error code. + * If the core creation failed, we return its error code. + * Else: if one parameter at least was created, we return 0 + * else we return 1; + */ + return core_err < 0 ? core_err : (param1_err && param2_err); } /* @@ -465,7 +483,8 @@ struct resource* mod_chunk = &(core_effect->mod1_chunk); u8 type, axes; u16 mod1, mod2, direction; - int err = 1; + int param_err = 1; + int core_err = 0; printk(KERN_DEBUG "iforce.c: make interactive effect\n"); @@ -476,7 +495,7 @@ } if (!is_update || need_interactive_modifier(iforce, effect)) { - err = make_interactive_modifier(iforce, mod_chunk, + param_err = make_interactive_modifier(iforce, mod_chunk, is_update, effect->u.interactive.right_saturation, effect->u.interactive.left_saturation, @@ -484,7 +503,7 @@ effect->u.interactive.left_coeff, effect->u.interactive.deadband, effect->u.interactive.center); - if (err) return err; + if (param_err) return param_err; set_bit(FF_MOD1_IS_USED, core_effect->flags); } @@ -526,7 +545,7 @@ } if (!is_update || need_core(iforce, effect)) { - err = make_core(iforce, effect->id, + core_err = make_core(iforce, effect->id, mod1, mod2, type, axes, effect->replay.length, effect->replay.delay, @@ -534,5 +553,11 @@ direction); } - return err; + /* If the parameter creation failed, we already returned an + * error code. + * If the core creation failed, we return its error code. + * Else: if a parameter was created, we return 0 + * else we return 1; + */ + return core_err < 0 ? core_err : param_err; } |