aboutsummaryrefslogtreecommitdiff
path: root/hid-tmt300rs.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2020-07-11 09:32:41 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2020-07-11 09:32:41 +0300
commit5d36ec5af3db0402a5c8e46d3f489c9e328f421c (patch)
treef019f8d301a6de9d8ba09f16618f2017be888db2 /hid-tmt300rs.c
parent675cad6d635be00c166b5ce23a79e32edd694bc8 (diff)
downloadhid-tmff2-5d36ec5af3db0402a5c8e46d3f489c9e328f421c.tar.gz
hid-tmff2-5d36ec5af3db0402a5c8e46d3f489c9e328f421c.zip
fixed duration issue
Diffstat (limited to 'hid-tmt300rs.c')
-rw-r--r--hid-tmt300rs.c46
1 files changed, 37 insertions, 9 deletions
diff --git a/hid-tmt300rs.c b/hid-tmt300rs.c
index 39747cd..5415fa6 100644
--- a/hid-tmt300rs.c
+++ b/hid-tmt300rs.c
@@ -136,7 +136,11 @@ static int t300rs_upload_constant(struct t300rs_device_entry *t300rs, struct t30
}
level = (constant.level * fixp_sin16(effect.direction * 360 / 0x10000)) / 0x7fff;
- duration = effect.replay.length;
+ if(effect.replay.length == 0){
+ duration = 0xffff;
+ } else {
+ duration = effect.replay.length;
+ }
le_level = cpu_to_le16(level);
le_offset = cpu_to_le16(effect.replay.delay);
@@ -181,13 +185,19 @@ static int t300rs_upload_ramp(struct t300rs_device_entry *t300rs, struct t300rs_
struct ff_effect effect = state->effect;
struct ff_ramp_effect ramp = state->effect.u.ramp;
int ret, trans;
- u16 difference, le_difference, top, bottom, le_duration, le_offset;
+ u16 difference, le_difference, top, bottom, duration, le_duration, le_offset;
s16 level, le_level;
if(test_bit(FF_EFFECT_PLAYING, &state->flags)){
t300rs_stop_effect(t300rs, state);
}
+ if(effect.replay.length == 0){
+ duration = 0xffff;
+ } else {
+ duration = effect.replay.length;
+ }
+
top = ramp.end_level > ramp.start_level ? ramp.end_level : ramp.start_level;
bottom = ramp.end_level > ramp.start_level ? ramp.start_level : ramp.end_level;
@@ -197,7 +207,7 @@ static int t300rs_upload_ramp(struct t300rs_device_entry *t300rs, struct t300rs_
le_difference = cpu_to_le16(difference);
le_level = cpu_to_le16(level);
- le_duration = cpu_to_le16(effect.replay.length);
+ le_duration = cpu_to_le16(duration);
le_offset = cpu_to_le16(effect.replay.delay);
send_buffer[0] = 0x60;
@@ -249,13 +259,19 @@ static int t300rs_upload_spring(struct t300rs_device_entry *t300rs, struct t300r
/* we only care about the first axis */
struct ff_condition_effect spring = state->effect.u.condition[0];
int ret, trans;
- u16 le_right_coeff, le_left_coeff, le_deadband_right, le_deadband_left,
+ u16 duration, le_right_coeff, le_left_coeff, le_deadband_right, le_deadband_left,
le_duration, le_offset;
if(test_bit(FF_EFFECT_PLAYING, &state->flags)){
t300rs_stop_effect(t300rs, state);
}
+ if(effect.replay.length == 0){
+ duration = 0xffff;
+ } else {
+ duration = effect.replay.length;
+ }
+
send_buffer[0] = 0x60;
send_buffer[2] = effect.id + 1;
send_buffer[3] = 0x64;
@@ -266,7 +282,7 @@ static int t300rs_upload_spring(struct t300rs_device_entry *t300rs, struct t300r
le_deadband_right = cpu_to_le16(0xfffe - spring.deadband - spring.center);
le_deadband_left = cpu_to_le16(0xfffe - spring.deadband + spring.center);
- le_duration = cpu_to_le16(effect.replay.length);
+ le_duration = cpu_to_le16(duration);
le_offset = cpu_to_le16(effect.replay.delay);
send_buffer[4] = le_right_coeff & 0xff;
@@ -312,13 +328,19 @@ static int t300rs_upload_damper(struct t300rs_device_entry *t300rs, struct t300r
/* we only care about the first axis */
struct ff_condition_effect spring = state->effect.u.condition[0];
int ret, trans;
- u16 le_right_coeff, le_left_coeff, le_deadband_right, le_deadband_left,
+ u16 duration, le_right_coeff, le_left_coeff, le_deadband_right, le_deadband_left,
le_duration, le_offset;
if(test_bit(FF_EFFECT_PLAYING, &state->flags)){
t300rs_stop_effect(t300rs, state);
}
+ if(effect.replay.length == 0){
+ duration = 0xffff;
+ } else {
+ duration = effect.replay.length;
+ }
+
send_buffer[0] = 0x60;
send_buffer[2] = effect.id + 1;
send_buffer[3] = 0x64;
@@ -329,7 +351,7 @@ static int t300rs_upload_damper(struct t300rs_device_entry *t300rs, struct t300r
le_deadband_right = cpu_to_le16(0xfffe - spring.deadband - spring.center);
le_deadband_left = cpu_to_le16(0xfffe - spring.deadband + spring.center);
- le_duration = cpu_to_le16(effect.replay.length);
+ le_duration = cpu_to_le16(duration);
le_offset = cpu_to_le16(effect.replay.delay);
send_buffer[4] = le_right_coeff & 0xff;
@@ -374,13 +396,19 @@ static int t300rs_upload_periodic(struct t300rs_device_entry *t300rs, struct t30
struct ff_effect effect = state->effect;
struct ff_periodic_effect periodic = state->effect.u.periodic;
int ret, trans;
- u16 magnitude, le_magnitude, le_phase, le_period, le_offset, le_duration;
+ u16 duration, magnitude, le_magnitude, le_phase, le_period, le_offset, le_duration;
s16 le_periodic_offset;
if(test_bit(FF_EFFECT_PLAYING, &state->flags)){
t300rs_stop_effect(t300rs, state);
}
+ if(effect.replay.length == 0){
+ duration = 0xffff;
+ } else {
+ duration = effect.replay.length;
+ }
+
magnitude = (periodic.magnitude * fixp_sin16(effect.direction * 360 / 0x10000)) / 0x7fff;
le_magnitude = cpu_to_le16(magnitude);
@@ -388,7 +416,7 @@ static int t300rs_upload_periodic(struct t300rs_device_entry *t300rs, struct t30
le_periodic_offset = cpu_to_le16(periodic.offset);
le_period = cpu_to_le16(periodic.period);
le_offset = cpu_to_le16(effect.replay.delay);
- le_duration = cpu_to_le16(effect.replay.length);
+ le_duration = cpu_to_le16(duration);
send_buffer[0] = 0x60;
send_buffer[2] = effect.id + 1;