aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2017-07-23 19:32:42 -0400
committerKevin O'Connor <kevin@koconnor.net>2017-07-23 19:32:42 -0400
commita619aacfc6ea73fb76f58be173bc0e15e847fd5c (patch)
tree0285a64e3cafe4ef24b03ed44ec92de78c96741e
parentd469db84ee2035c3f5d10d3072cdbddcbc94cbe9 (diff)
downloadkutter-a619aacfc6ea73fb76f58be173bc0e15e847fd5c.tar.gz
kutter-a619aacfc6ea73fb76f58be173bc0e15e847fd5c.tar.xz
kutter-a619aacfc6ea73fb76f58be173bc0e15e847fd5c.zip
serialqueue: Further retransmit timing fixes
The first message always has a sync byte with it, so its size should be one larger. Also, the idle_time should always be the minimum time that the message could be received, so it should always be reset to eventtime on a retransmit. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--klippy/serialqueue.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/klippy/serialqueue.c b/klippy/serialqueue.c
index 6271911b..0c4a1ad6 100644
--- a/klippy/serialqueue.c
+++ b/klippy/serialqueue.c
@@ -573,7 +573,7 @@ retransmit_event(struct serialqueue *sq, double eventtime)
memcpy(&buf[buflen], qm->msg, qm->len);
buflen += qm->len;
if (!first_buflen)
- first_buflen = qm->len;
+ first_buflen = qm->len + 1;
}
ret = write(sq->serial_fd, buf, buflen);
if (ret < 0)
@@ -596,10 +596,8 @@ retransmit_event(struct serialqueue *sq, double eventtime)
}
sq->retransmit_seq = sq->send_seq - 1;
sq->rtt_sample_seq = 0;
- if (eventtime > sq->idle_time)
- sq->idle_time = eventtime;
- double waketime = sq->idle_time + first_buflen * sq->baud_adjust + sq->rto;
- sq->idle_time += buflen * sq->baud_adjust;
+ sq->idle_time = eventtime + buflen * sq->baud_adjust;
+ double waketime = eventtime + first_buflen * sq->baud_adjust + sq->rto;
pthread_mutex_unlock(&sq->lock);
return waketime;