]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
Automatic retries if the mote doesn't send back a proper ack. This helps work around...
authorrincon <rincon>
Fri, 18 May 2007 18:53:24 +0000 (18:53 +0000)
committerrincon <rincon>
Fri, 18 May 2007 18:53:24 +0000 (18:53 +0000)
support/sdk/java/net/tinyos/packet/Packetizer.java
support/sdk/java/tinyos.jar

index eec1498abe586c3c194794a5f83cfef791cbba84..0c5d48794870d6c54fe5149fa84434d623f14755 100644 (file)
@@ -31,6 +31,7 @@
 package net.tinyos.packet;
 
 import net.tinyos.util.*;
+
 import java.io.*;
 import java.util.*;
 import java.nio.*;
@@ -115,7 +116,7 @@ public class Packetizer extends AbstractSource implements Runnable {
 
   synchronized public void open(Messenger messages) throws IOException {
     super.open(messages);
-    if(!reader.isAlive()) {
+    if (!reader.isAlive()) {
       reader.start();
     }
   }
@@ -181,16 +182,17 @@ public class Packetizer extends AbstractSource implements Runnable {
 
   // Write an ack-ed packet
   protected boolean writeSourcePacket(byte[] packet) throws IOException {
-    writeFramedPacket(P_PACKET_ACK, ++seqNo, packet, packet.length);
+    for (int retries = 0; retries < 25; retries++) {
+      writeFramedPacket(P_PACKET_ACK, ++seqNo, packet, packet.length);
+
+      long deadline = System.currentTimeMillis() + ACK_TIMEOUT;
 
-    long deadline = System.currentTimeMillis() + ACK_TIMEOUT;
-    for (;;) {
       byte[] ack = readProtocolPacket(P_ACK, deadline);
       if (ack == null) {
         if (DEBUG) {
           message(name + ": ACK timed out");
         }
-        return false;
+        continue;
       }
       if (ack[0] == (byte) seqNo) {
         if (DEBUG) {
@@ -200,6 +202,7 @@ public class Packetizer extends AbstractSource implements Runnable {
       }
     }
 
+    return false;
   }
 
   static private byte ackPacket[] = new byte[0];
index cd6ec2e9bb944daf54fcb7d69f3fe0f8d2119772..b1a4b485a497148a2885800e6c7c8c887184a4f2 100644 (file)
Binary files a/support/sdk/java/tinyos.jar and b/support/sdk/java/tinyos.jar differ