diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2017-07-23 19:32:42 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2017-07-23 19:32:42 -0400 |
commit | a619aacfc6ea73fb76f58be173bc0e15e847fd5c (patch) | |
tree | 0285a64e3cafe4ef24b03ed44ec92de78c96741e | |
parent | d469db84ee2035c3f5d10d3072cdbddcbc94cbe9 (diff) | |
download | kutter-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.c | 8 |
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; |