master/master.c
changeset 397 c5d2fb08e43f
parent 396 189909f92019
child 398 ff37601361a8
--- a/master/master.c	Mon Oct 16 08:03:28 2006 +0000
+++ b/master/master.c	Mon Oct 16 09:07:49 2006 +0000
@@ -356,6 +356,7 @@
 
             datagram->state = EC_DATAGRAM_SENT;
             datagram->cycles_sent = cycles_start;
+            datagram->check_once_more = 1;
             datagram->index = master->datagram_index++;
 
             if (unlikely(master->debug_level > 1))
@@ -1313,7 +1314,7 @@
     ec_device_call_isr(master->device);
 
     cycles_received = get_cycles();
-    cycles_timeout = EC_IO_TIMEOUT * cpu_khz / 1000;
+    cycles_timeout = EC_IO_TIMEOUT /* us */ * cpu_khz / 1000;
 
     // dequeue all datagrams that timed out
     list_for_each_entry_safe(datagram, next, &master->datagram_queue, queue) {
@@ -1321,6 +1322,11 @@
             case EC_DATAGRAM_SENT:
             case EC_DATAGRAM_QUEUED:
                 if (cycles_received - datagram->cycles_sent > cycles_timeout) {
+                    if (datagram->state == EC_DATAGRAM_SENT
+                        && datagram->check_once_more) {
+                        datagram->check_once_more = 0;
+                        break;
+                    }
                     list_del_init(&datagram->queue);
                     datagram->state = EC_DATAGRAM_TIMED_OUT;
                     master->stats.timeouts++;